diff options
author | George Hazan <ghazan@miranda.im> | 2022-02-10 22:33:57 +0300 |
---|---|---|
committer | George Hazan <ghazan@miranda.im> | 2022-02-10 22:33:57 +0300 |
commit | 68827c97e131401e97ff772167acf9ab80fe8ef4 (patch) | |
tree | 70ba7134a15620e6e606ba5df6dad2b9a1922574 /src/mir_core | |
parent | d40f9d4394e74404024fd8d5a393dce697384935 (diff) |
two extensions for CCtrlTreeOpts for memory variables
Diffstat (limited to 'src/mir_core')
-rw-r--r-- | src/mir_core/src/Windows/CCtrlTreeOpts.cpp | 53 | ||||
-rw-r--r-- | src/mir_core/src/mir_core.def | 1 | ||||
-rw-r--r-- | src/mir_core/src/mir_core64.def | 1 |
3 files changed, 52 insertions, 3 deletions
diff --git a/src/mir_core/src/Windows/CCtrlTreeOpts.cpp b/src/mir_core/src/Windows/CCtrlTreeOpts.cpp index f5fe27a854..13a6b79bd3 100644 --- a/src/mir_core/src/Windows/CCtrlTreeOpts.cpp +++ b/src/mir_core/src/Windows/CCtrlTreeOpts.cpp @@ -36,7 +36,24 @@ CCtrlTreeOpts::~CCtrlTreeOpts() void CCtrlTreeOpts::AddOption(const wchar_t *pwszSection, const wchar_t *pwszName, CMOption<bool> &option) { - m_options.insert(new COptionsItem(pwszSection, pwszName, option), m_options.getCount()); + auto *p = new COptionsItem(pwszSection, pwszName, COptionsItem::CMOPTION); + p->m_option = &option; + m_options.insert(p, m_options.getCount()); +} + +void CCtrlTreeOpts::AddOption(const wchar_t *pwszSection, const wchar_t *pwszName, bool &option) +{ + auto *p = new COptionsItem(pwszSection, pwszName, COptionsItem::BOOL); + p->m_pBool = &option; + m_options.insert(p, m_options.getCount()); +} + +void CCtrlTreeOpts::AddOption(const wchar_t *pwszSection, const wchar_t *pwszName, uint32_t &option, uint32_t mask) +{ + auto *p = new COptionsItem(pwszSection, pwszName, COptionsItem::MASK); + p->m_pDword = &option; + p->m_mask = mask; + m_options.insert(p, m_options.getCount()); } BOOL CCtrlTreeOpts::OnNotify(int idCtrl, NMHDR *pnmh) @@ -104,6 +121,21 @@ void CCtrlTreeOpts::OnInit() hSection = InsertItem(&tvis); } + bool bValue; + switch (it->m_type) { + case COptionsItem::CMOPTION: + bValue = *it->m_option; + break; + case COptionsItem::BOOL: + bValue = *it->m_pBool; + break; + case COptionsItem::MASK: + bValue = (*it->m_pDword & it->m_mask) != 0; + break; + default: + continue; + } + TVINSERTSTRUCT tvis = {}; tvis.hParent = hSection; tvis.hInsertAfter = TVI_LAST; @@ -111,7 +143,7 @@ void CCtrlTreeOpts::OnInit() tvis.item.pszText = (LPWSTR)it->m_pwszName; tvis.item.state = tvis.item.stateMask = TVIS_EXPANDED; tvis.item.lParam = m_options.indexOf(&it); - tvis.item.iImage = tvis.item.iSelectedImage = (*it->m_option) ? IMG_CHECK : IMG_NOCHECK; + tvis.item.iImage = tvis.item.iSelectedImage = (bValue) ? IMG_CHECK : IMG_NOCHECK; it->m_hItem = InsertItem(&tvis); } @@ -134,7 +166,22 @@ bool CCtrlTreeOpts::OnApply() for (auto &it : m_options) { TVITEMEX tvi; GetItem(it->m_hItem, &tvi); - *it->m_option = (tvi.iImage == IMG_CHECK) ? 1 : 0; + + bool bValue = (tvi.iImage == IMG_CHECK); + switch (it->m_type) { + case COptionsItem::CMOPTION: + *it->m_option = bValue; + break; + case COptionsItem::BOOL: + *it->m_pBool = bValue; + break; + case COptionsItem::MASK: + if (bValue) + *it->m_pDword |= it->m_mask; + else + *it->m_pDword &= ~it->m_mask; + break; + } } return true; } diff --git a/src/mir_core/src/mir_core.def b/src/mir_core/src/mir_core.def index 70f0dcd951..bcfad9a713 100644 --- a/src/mir_core/src/mir_core.def +++ b/src/mir_core/src/mir_core.def @@ -1513,3 +1513,4 @@ TimeZone_GetSystemTime @1692 ?QueryAttribute@XMLElement@tinyxml2@@QBE?AW4XMLError@2@PBDPAPBD@Z @1735 NONAME
db_copy_module @1736
?db_is_module_empty@@YG_NIPBD@Z @1737 NONAME
+?AddOption@CCtrlTreeOpts@@QAEXPB_W0AA_N@Z @1738 NONAME
diff --git a/src/mir_core/src/mir_core64.def b/src/mir_core/src/mir_core64.def index 0fd20a620b..030e27b5c1 100644 --- a/src/mir_core/src/mir_core64.def +++ b/src/mir_core/src/mir_core64.def @@ -1513,3 +1513,4 @@ TimeZone_GetSystemTime @1692 ?QueryAttribute@XMLElement@tinyxml2@@QEBA?AW4XMLError@2@PEBDPEAPEBD@Z @1735 NONAME
db_copy_module @1736
?db_is_module_empty@@YA_NIPEBD@Z @1737 NONAME
+?AddOption@CCtrlTreeOpts@@QEAAXPEB_W0AEA_N@Z @1738 NONAME
|