summaryrefslogtreecommitdiff
path: root/src/mir_core
diff options
context:
space:
mode:
authorGeorge Hazan <ghazan@miranda.im>2022-02-10 22:33:57 +0300
committerGeorge Hazan <ghazan@miranda.im>2022-02-10 22:33:57 +0300
commit68827c97e131401e97ff772167acf9ab80fe8ef4 (patch)
tree70ba7134a15620e6e606ba5df6dad2b9a1922574 /src/mir_core
parentd40f9d4394e74404024fd8d5a393dce697384935 (diff)
two extensions for CCtrlTreeOpts for memory variables
Diffstat (limited to 'src/mir_core')
-rw-r--r--src/mir_core/src/Windows/CCtrlTreeOpts.cpp53
-rw-r--r--src/mir_core/src/mir_core.def1
-rw-r--r--src/mir_core/src/mir_core64.def1
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