diff options
-rw-r--r-- | include/m_gui.h | 40 | ||||
-rw-r--r-- | libs/win32/mir_core.lib | bin | 468024 -> 470808 bytes | |||
-rw-r--r-- | libs/win64/mir_core.lib | bin | 472972 -> 475820 bytes | |||
-rwxr-xr-x | protocols/JabberG/jabber.vcxproj | 2 | ||||
-rwxr-xr-x | protocols/JabberG/jabber.vcxproj.filters | 6 | ||||
-rwxr-xr-x | protocols/JabberG/src/jabber_opt.cpp | 1 | ||||
-rw-r--r-- | protocols/JabberG/src/jabber_opttree.h | 69 | ||||
-rw-r--r-- | src/mir_core/mir_core.vcxproj | 1 | ||||
-rw-r--r-- | src/mir_core/mir_core.vcxproj.filters | 3 | ||||
-rw-r--r-- | src/mir_core/src/CCtrlTreeOpts.cpp (renamed from protocols/JabberG/src/jabber_opttree.cpp) | 369 | ||||
-rw-r--r-- | src/mir_core/src/mir_core.def | 9 | ||||
-rw-r--r-- | src/mir_core/src/mir_core64.def | 9 |
12 files changed, 231 insertions, 278 deletions
diff --git a/include/m_gui.h b/include/m_gui.h index d278f6b319..92a9033169 100644 --- a/include/m_gui.h +++ b/include/m_gui.h @@ -1260,6 +1260,46 @@ protected: };
/////////////////////////////////////////////////////////////////////////////////////////
+// CCtrlTreeOpts - array of options with sections
+
+class MIR_CORE_EXPORT CCtrlTreeOpts : public CCtrlTreeView
+{
+ typedef CCtrlTreeView CSuper;
+
+public:
+ CCtrlTreeOpts(CDlgBase *dlg, int ctrlId);
+ ~CCtrlTreeOpts();
+
+ void AddOption(const wchar_t *pwszSection, const wchar_t *pwszName, CMOption<bool> &option);
+
+ BOOL OnNotify(int idCtrl, NMHDR *pnmh) override;
+ void OnDestroy() override;
+ void OnInit() override;
+ bool OnApply() override;
+
+protected:
+ struct COptionsItem
+ {
+ const wchar_t *m_pwszSection, *m_pwszName;
+
+ CMOption<bool> *m_option;
+
+ HTREEITEM m_hItem = nullptr;
+
+ COptionsItem(const wchar_t *pwszSection, const wchar_t *pwszName, CMOption<bool> &option) :
+ m_pwszSection(pwszSection),
+ m_pwszName(pwszName),
+ m_option(&option)
+ {
+ }
+ };
+
+ OBJLIST<COptionsItem> m_options;
+
+ void ProcessItemClick(HTREEITEM hti);
+};
+
+/////////////////////////////////////////////////////////////////////////////////////////
// CCtrlPages
#define PSN_INFOCHANGED 1
diff --git a/libs/win32/mir_core.lib b/libs/win32/mir_core.lib Binary files differindex 6b94777513..bd1e19544e 100644 --- a/libs/win32/mir_core.lib +++ b/libs/win32/mir_core.lib diff --git a/libs/win64/mir_core.lib b/libs/win64/mir_core.lib Binary files differindex b4048c214b..0b79e84f9e 100644 --- a/libs/win64/mir_core.lib +++ b/libs/win64/mir_core.lib diff --git a/protocols/JabberG/jabber.vcxproj b/protocols/JabberG/jabber.vcxproj index d129d6928a..7dc563d45a 100755 --- a/protocols/JabberG/jabber.vcxproj +++ b/protocols/JabberG/jabber.vcxproj @@ -60,7 +60,6 @@ <ClCompile Include="src\jabber_notes.cpp" />
<ClCompile Include="src\jabber_omemo.cpp" />
<ClCompile Include="src\jabber_opt.cpp" />
- <ClCompile Include="src\jabber_opttree.cpp" />
<ClCompile Include="src\jabber_password.cpp" />
<ClCompile Include="src\jabber_presence_manager.cpp" />
<ClCompile Include="src\jabber_privacy.cpp" />
@@ -94,7 +93,6 @@ <ClInclude Include="src\jabber_message_manager.h" />
<ClInclude Include="src\jabber_notes.h" />
<ClInclude Include="src\jabber_omemo.h" />
- <ClInclude Include="src\jabber_opttree.h" />
<ClInclude Include="src\jabber_presence_manager.h" />
<ClInclude Include="src\jabber_privacy.h" />
<ClInclude Include="src\jabber_proto.h" />
diff --git a/protocols/JabberG/jabber.vcxproj.filters b/protocols/JabberG/jabber.vcxproj.filters index 01919b4315..b7205778b0 100755 --- a/protocols/JabberG/jabber.vcxproj.filters +++ b/protocols/JabberG/jabber.vcxproj.filters @@ -101,9 +101,6 @@ <ClCompile Include="src\jabber_opt.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="src\jabber_opttree.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
<ClCompile Include="src\jabber_password.cpp">
<Filter>Source Files</Filter>
</ClCompile>
@@ -202,9 +199,6 @@ <ClInclude Include="src\jabber_omemo.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="src\jabber_opttree.h">
- <Filter>Header Files</Filter>
- </ClInclude>
<ClInclude Include="src\jabber_presence_manager.h">
<Filter>Header Files</Filter>
</ClInclude>
diff --git a/protocols/JabberG/src/jabber_opt.cpp b/protocols/JabberG/src/jabber_opt.cpp index 3045c470b2..ea16e42f93 100755 --- a/protocols/JabberG/src/jabber_opt.cpp +++ b/protocols/JabberG/src/jabber_opt.cpp @@ -26,7 +26,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "stdafx.h"
#include "jabber_list.h"
#include "jabber_caps.h"
-#include "jabber_opttree.h"
static BOOL(WINAPI *pfnEnableThemeDialogTexture)(HANDLE, DWORD) = nullptr;
diff --git a/protocols/JabberG/src/jabber_opttree.h b/protocols/JabberG/src/jabber_opttree.h deleted file mode 100644 index e2b53015c8..0000000000 --- a/protocols/JabberG/src/jabber_opttree.h +++ /dev/null @@ -1,69 +0,0 @@ -/*
-
-Jabber Protocol Plugin for Miranda NG
-
-Copyright (c) 2002-04 Santithorn Bunchua
-Copyright (c) 2005-12 George Hazan
-Copyright (c) 2007 Maxim Mluhov
-Copyright (c) 2007 Victor Pavlychko
-Copyright (C) 2012-20 Miranda NG team
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-*/
-
-#ifndef __jabber_opttree_h__
-#define __jabber_opttree_h__
-
-#define OPTTREE_CHECK 0
-
-class CCtrlTreeOpts : public CCtrlTreeView
-{
- typedef CCtrlTreeView CSuper;
-
-public:
- CCtrlTreeOpts(CDlgBase* dlg, int ctrlId);
- ~CCtrlTreeOpts();
-
- void AddOption(const wchar_t *pwszSection, const wchar_t *pwszName, CMOption<bool> &option);
-
- BOOL OnNotify(int idCtrl, NMHDR *pnmh) override;
- void OnDestroy() override;
- void OnInit() override;
- bool OnApply() override;
-
-protected:
- struct COptionsItem
- {
- const wchar_t *m_pwszSection, *m_pwszName;
- int m_groupId = OPTTREE_CHECK;
-
- CMOption<bool> *m_option;
-
- HTREEITEM m_hItem = nullptr;
-
- COptionsItem(const wchar_t *pwszSection, const wchar_t *pwszName, CMOption<bool> &option) :
- m_pwszSection(pwszSection),
- m_pwszName(pwszName),
- m_option(&option)
- {}
- };
-
- OBJLIST<COptionsItem> m_options;
-
- void ProcessItemClick(HTREEITEM hti);
-};
-
-#endif // __opttree_h__
diff --git a/src/mir_core/mir_core.vcxproj b/src/mir_core/mir_core.vcxproj index cc9b147d49..642c3291d8 100644 --- a/src/mir_core/mir_core.vcxproj +++ b/src/mir_core/mir_core.vcxproj @@ -58,6 +58,7 @@ <ClCompile Include="src\CCtrlPages.cpp" />
<ClCompile Include="src\CCtrlRichEdit.cpp" />
<ClCompile Include="src\CCtrlSpin.cpp" />
+ <ClCompile Include="src\CCtrlTreeOpts.cpp" />
<ClCompile Include="src\CCtrlTreeView.cpp" />
<ClCompile Include="src\CDbLink.cpp" />
<ClCompile Include="src\CDlgBase.cpp" />
diff --git a/src/mir_core/mir_core.vcxproj.filters b/src/mir_core/mir_core.vcxproj.filters index a1fa8e2ec1..4a66ccbaa5 100644 --- a/src/mir_core/mir_core.vcxproj.filters +++ b/src/mir_core/mir_core.vcxproj.filters @@ -167,6 +167,9 @@ <ClCompile Include="src\winver.cpp">
<Filter>Source Files</Filter>
</ClCompile>
+ <ClCompile Include="src\CCtrlTreeOpts.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="src\miranda.h">
diff --git a/protocols/JabberG/src/jabber_opttree.cpp b/src/mir_core/src/CCtrlTreeOpts.cpp index 2a909a1bd8..c8b4548c69 100644 --- a/protocols/JabberG/src/jabber_opttree.cpp +++ b/src/mir_core/src/CCtrlTreeOpts.cpp @@ -1,200 +1,169 @@ -/*
-
-Jabber Protocol Plugin for Miranda NG
-
-Copyright (c) 2002-04 Santithorn Bunchua
-Copyright (c) 2005-12 George Hazan
-Copyright (c) 2007 Maxim Mluhov
-Copyright (c) 2007 Victor Pavlychko
-Copyright (C) 2012-20 Miranda NG team
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-*/
-
-#include "stdafx.h"
-#include "jabber_opttree.h"
-
-enum { IMG_GROUP, IMG_CHECK, IMG_NOCHECK, IMG_RCHECK, IMG_NORCHECK, IMG_GRPOPEN, IMG_GRPCLOSED };
-
-CCtrlTreeOpts::CCtrlTreeOpts(CDlgBase* dlg, int ctrlId):
- CCtrlTreeView(dlg, ctrlId),
- m_options(5)
-{
-}
-
-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());
-}
-
-BOOL CCtrlTreeOpts::OnNotify(int idCtrl, NMHDR *pnmh)
-{
- switch (pnmh->code) {
- case TVN_KEYDOWN:
- {
- LPNMTVKEYDOWN lpnmtvkd = (LPNMTVKEYDOWN)pnmh;
- HTREEITEM hti;
- if ((lpnmtvkd->wVKey == VK_SPACE) && (hti = GetSelection()))
- ProcessItemClick(hti);
- }
- break;
-
- case NM_CLICK:
- {
- TVHITTESTINFO hti;
- hti.pt.x = (short)LOWORD(GetMessagePos());
- hti.pt.y = (short)HIWORD(GetMessagePos());
- ScreenToClient(pnmh->hwndFrom, &hti.pt);
- if (HitTest(&hti))
- if (hti.flags & TVHT_ONITEMICON)
- ProcessItemClick(hti.hItem);
- }
- break;
-
- case TVN_ITEMEXPANDED:
- {
- LPNMTREEVIEW lpnmtv = (LPNMTREEVIEW)pnmh;
- TVITEM tvi;
- tvi.mask = TVIF_HANDLE | TVIF_IMAGE | TVIF_SELECTEDIMAGE;
- tvi.hItem = lpnmtv->itemNew.hItem;
- tvi.iImage = tvi.iSelectedImage =
- (lpnmtv->itemNew.state & TVIS_EXPANDED) ? IMG_GRPOPEN : IMG_GRPCLOSED;
- SendMessage(pnmh->hwndFrom, TVM_SETITEM, 0, (LPARAM)&tvi);
- }
- break;
- }
-
- return CCtrlTreeView::OnNotify(idCtrl, pnmh);
-}
-
-void CCtrlTreeOpts::OnInit()
-{
- CCtrlTreeView::OnInit();
-
- SelectItem(nullptr);
- DeleteAllItems();
-
- HIMAGELIST hImgLst = ImageList_Create(GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), ILC_COLOR | ILC_COLOR32 | ILC_MASK, 5, 1);
- ImageList_AddSkinIcon(hImgLst, SKINICON_OTHER_MIRANDA);
- ImageList_AddSkinIcon(hImgLst, SKINICON_OTHER_TICK); // check on
- ImageList_AddSkinIcon(hImgLst, SKINICON_OTHER_NOTICK); // check off
- ImageList_AddSkinIcon(hImgLst, SKINICON_OTHER_TICK); // radio on
- ImageList_AddSkinIcon(hImgLst, SKINICON_OTHER_NOTICK); // radio on
- ImageList_AddSkinIcon(hImgLst, SKINICON_OTHER_GROUPOPEN);
- ImageList_AddSkinIcon(hImgLst, SKINICON_OTHER_GROUPSHUT);
- SetImageList(hImgLst, TVSIL_NORMAL);
-
- /* build options tree. based on code from IcoLib */
- for (auto &it : m_options) {
- if (it->m_pwszSection) {
- HTREEITEM hSection = FindNamedItem(nullptr, it->m_pwszSection);
- if (!hSection) {
- TVINSERTSTRUCT tvis = {};
- tvis.hParent = hSection;
- tvis.hInsertAfter = TVI_LAST;
- tvis.item.mask = TVIF_TEXT | TVIF_PARAM | TVIF_STATE | TVIF_IMAGE | TVIF_SELECTEDIMAGE;
- tvis.item.pszText = (LPWSTR)it->m_pwszSection;
- tvis.item.state = tvis.item.stateMask = TVIS_EXPANDED | TVIS_BOLD;
- tvis.item.iImage = tvis.item.iSelectedImage = IMG_GRPOPEN;
- hSection = InsertItem(&tvis);
- }
-
- TVINSERTSTRUCT tvis = {};
- tvis.hParent = hSection;
- tvis.hInsertAfter = TVI_LAST;
- tvis.item.mask = TVIF_TEXT | TVIF_PARAM | TVIF_STATE | TVIF_IMAGE | TVIF_SELECTEDIMAGE;
- tvis.item.pszText = (LPWSTR)it->m_pwszName;
- tvis.item.state = tvis.item.stateMask = TVIS_EXPANDED;
- tvis.item.lParam = m_options.indexOf(&it);
-
- BYTE val = *it->m_option;
- if (it->m_groupId == OPTTREE_CHECK)
- tvis.item.iImage = tvis.item.iSelectedImage = val ? IMG_CHECK : IMG_NOCHECK;
- else
- tvis.item.iImage = tvis.item.iSelectedImage = val ? IMG_RCHECK : IMG_NORCHECK;
-
- it->m_hItem = InsertItem(&tvis);
- }
- }
-
- TranslateTree();
- ShowWindow(m_hwnd, SW_SHOW);
- SelectItem(FindNamedItem(nullptr, nullptr));
-}
-
-void CCtrlTreeOpts::OnDestroy()
-{
- ImageList_Destroy(GetImageList(TVSIL_NORMAL));
-}
-
-bool CCtrlTreeOpts::OnApply()
-{
- CCtrlTreeView::OnApply();
-
- for (auto &it : m_options) {
- TVITEMEX tvi;
- GetItem(it->m_hItem, &tvi);
- *it->m_option = ((tvi.iImage == IMG_CHECK) || (tvi.iImage == IMG_RCHECK)) ? 1 : 0;
- }
- return true;
-}
-
-void CCtrlTreeOpts::ProcessItemClick(HTREEITEM hti)
-{
- TVITEMEX tvi;
- GetItem(hti, &tvi);
- switch (tvi.iImage) {
- case IMG_GRPOPEN:
- tvi.iImage = tvi.iSelectedImage = IMG_GRPCLOSED;
- Expand(tvi.hItem, TVE_COLLAPSE);
- break;
-
- case IMG_GRPCLOSED:
- tvi.iImage = tvi.iSelectedImage = IMG_GRPOPEN;
- Expand(tvi.hItem, TVE_EXPAND);
- break;
-
- case IMG_CHECK:
- tvi.iImage = tvi.iSelectedImage = IMG_NOCHECK;
- SendMessage(::GetParent(::GetParent(m_hwnd)), PSM_CHANGED, 0, 0);
- break;
-
- case IMG_NOCHECK:
- tvi.iImage = tvi.iSelectedImage = IMG_CHECK;
- SendMessage(::GetParent(::GetParent(m_hwnd)), PSM_CHANGED, 0, 0);
- break;
-
- case IMG_NORCHECK:
- for (auto &it : m_options) {
- if (it->m_groupId == m_options[tvi.lParam].m_groupId) {
- TVITEMEX tvi_tmp;
- tvi_tmp.mask = TVIF_HANDLE | TVIF_IMAGE | TVIF_SELECTEDIMAGE;
- tvi_tmp.hItem = it->m_hItem;
- tvi_tmp.iImage = tvi_tmp.iSelectedImage = IMG_NORCHECK;
- SetItem(&tvi_tmp);
- }
- }
- tvi.iImage = tvi.iSelectedImage = IMG_RCHECK;
- SendMessage(::GetParent(::GetParent(m_hwnd)), PSM_CHANGED, 0, 0);
- break;
- }
-
- SetItem(&tvi);
-}
+/* + +Object UI extensions +Copyright (c) 2008 Victor Pavlychko, George Hazan +Copyright (C) 2012-20 Miranda NG team + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +*/ + +#include "stdafx.h" + +enum { IMG_GROUP, IMG_CHECK, IMG_NOCHECK, IMG_GRPOPEN, IMG_GRPCLOSED }; + +CCtrlTreeOpts::CCtrlTreeOpts(CDlgBase* dlg, int ctrlId): + CCtrlTreeView(dlg, ctrlId), + m_options(5) +{ +} + +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()); +} + +BOOL CCtrlTreeOpts::OnNotify(int idCtrl, NMHDR *pnmh) +{ + switch (pnmh->code) { + case TVN_KEYDOWN: + { + LPNMTVKEYDOWN lpnmtvkd = (LPNMTVKEYDOWN)pnmh; + HTREEITEM hti; + if ((lpnmtvkd->wVKey == VK_SPACE) && (hti = GetSelection())) + ProcessItemClick(hti); + } + break; + + case NM_CLICK: + TVHITTESTINFO htti; + htti.pt.x = (short)LOWORD(GetMessagePos()); + htti.pt.y = (short)HIWORD(GetMessagePos()); + ScreenToClient(pnmh->hwndFrom, &htti.pt); + if (HitTest(&htti)) + if (htti.flags & TVHT_ONITEMICON) + ProcessItemClick(htti.hItem); + break; + + case TVN_ITEMEXPANDED: + LPNMTREEVIEW lpnmtv = (LPNMTREEVIEW)pnmh; + TVITEM tvi; + tvi.mask = TVIF_HANDLE | TVIF_IMAGE | TVIF_SELECTEDIMAGE; + tvi.hItem = lpnmtv->itemNew.hItem; + tvi.iImage = tvi.iSelectedImage = (lpnmtv->itemNew.state & TVIS_EXPANDED) ? IMG_GRPOPEN : IMG_GRPCLOSED; + SendMessage(pnmh->hwndFrom, TVM_SETITEM, 0, (LPARAM)&tvi); + break; + } + + return CSuper::OnNotify(idCtrl, pnmh); +} + +void CCtrlTreeOpts::OnInit() +{ + CSuper::OnInit(); + + SelectItem(nullptr); + DeleteAllItems(); + + HIMAGELIST hImgLst = ImageList_Create(GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), ILC_COLOR | ILC_COLOR32 | ILC_MASK, 5, 1); + ImageList_AddSkinIcon(hImgLst, SKINICON_OTHER_MIRANDA); + ImageList_AddSkinIcon(hImgLst, SKINICON_OTHER_TICK); + ImageList_AddSkinIcon(hImgLst, SKINICON_OTHER_NOTICK); + ImageList_AddSkinIcon(hImgLst, SKINICON_OTHER_GROUPOPEN); + ImageList_AddSkinIcon(hImgLst, SKINICON_OTHER_GROUPSHUT); + SetImageList(hImgLst, TVSIL_NORMAL); + + /* build options tree. based on code from IcoLib */ + for (auto &it : m_options) { + if (it->m_pwszSection) { + HTREEITEM hSection = FindNamedItem(nullptr, it->m_pwszSection); + if (!hSection) { + TVINSERTSTRUCT tvis = {}; + tvis.hParent = hSection; + tvis.hInsertAfter = TVI_LAST; + tvis.item.mask = TVIF_TEXT | TVIF_PARAM | TVIF_STATE | TVIF_IMAGE | TVIF_SELECTEDIMAGE; + tvis.item.pszText = (LPWSTR)it->m_pwszSection; + tvis.item.state = tvis.item.stateMask = TVIS_EXPANDED | TVIS_BOLD; + tvis.item.iImage = tvis.item.iSelectedImage = IMG_GRPOPEN; + hSection = InsertItem(&tvis); + } + + TVINSERTSTRUCT tvis = {}; + tvis.hParent = hSection; + tvis.hInsertAfter = TVI_LAST; + tvis.item.mask = TVIF_TEXT | TVIF_PARAM | TVIF_STATE | TVIF_IMAGE | TVIF_SELECTEDIMAGE; + 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; + + it->m_hItem = InsertItem(&tvis); + } + } + + TranslateTree(); + ShowWindow(m_hwnd, SW_SHOW); + SelectItem(FindNamedItem(nullptr, nullptr)); +} + +void CCtrlTreeOpts::OnDestroy() +{ + ImageList_Destroy(GetImageList(TVSIL_NORMAL)); +} + +bool CCtrlTreeOpts::OnApply() +{ + CSuper::OnApply(); + + for (auto &it : m_options) { + TVITEMEX tvi; + GetItem(it->m_hItem, &tvi); + *it->m_option = (tvi.iImage == IMG_CHECK) ? 1 : 0; + } + return true; +} + +void CCtrlTreeOpts::ProcessItemClick(HTREEITEM hti) +{ + TVITEMEX tvi; + GetItem(hti, &tvi); + switch (tvi.iImage) { + case IMG_GRPOPEN: + tvi.iImage = tvi.iSelectedImage = IMG_GRPCLOSED; + Expand(tvi.hItem, TVE_COLLAPSE); + break; + + case IMG_GRPCLOSED: + tvi.iImage = tvi.iSelectedImage = IMG_GRPOPEN; + Expand(tvi.hItem, TVE_EXPAND); + break; + + case IMG_CHECK: + tvi.iImage = tvi.iSelectedImage = IMG_NOCHECK; + NotifyChange(); + break; + + case IMG_NOCHECK: + tvi.iImage = tvi.iSelectedImage = IMG_CHECK; + NotifyChange(); + break; + } + + SetItem(&tvi); +} diff --git a/src/mir_core/src/mir_core.def b/src/mir_core/src/mir_core.def index d0e17162d9..fb23cba365 100644 --- a/src/mir_core/src/mir_core.def +++ b/src/mir_core/src/mir_core.def @@ -1472,3 +1472,12 @@ TimeZone_GetSystemTime @1692 ??4EventCursor@DB@@QAEAAV01@ABV01@@Z @1695 NONAME
?DeleteEvent@ECPTR@DB@@QAEXXZ @1696 NONAME
?FetchNext@ECPTR@DB@@QAEIXZ @1697 NONAME
+??0CCtrlTreeOpts@@QAE@PAVCDlgBase@@H@Z @1698 NONAME
+??1CCtrlTreeOpts@@UAE@XZ @1699 NONAME
+??_7CCtrlTreeOpts@@6B@ @1700 NONAME
+?AddOption@CCtrlTreeOpts@@QAEXPB_W0AAV?$CMOption@_N@@@Z @1701 NONAME
+?OnApply@CCtrlTreeOpts@@UAE_NXZ @1702 NONAME
+?OnDestroy@CCtrlTreeOpts@@UAEXXZ @1703 NONAME
+?OnInit@CCtrlTreeOpts@@UAEXXZ @1704 NONAME
+?OnNotify@CCtrlTreeOpts@@UAEHHPAUtagNMHDR@@@Z @1705 NONAME
+?ProcessItemClick@CCtrlTreeOpts@@IAEXPAU_TREEITEM@@@Z @1706 NONAME
diff --git a/src/mir_core/src/mir_core64.def b/src/mir_core/src/mir_core64.def index 797fb38dcd..a69cfbc500 100644 --- a/src/mir_core/src/mir_core64.def +++ b/src/mir_core/src/mir_core64.def @@ -1472,3 +1472,12 @@ TimeZone_GetSystemTime @1692 ??4EventCursor@DB@@QEAAAEAV01@AEBV01@@Z @1695 NONAME
?DeleteEvent@ECPTR@DB@@QEAAXXZ @1696 NONAME
?FetchNext@ECPTR@DB@@QEAAIXZ @1697 NONAME
+??0CCtrlTreeOpts@@QEAA@PEAVCDlgBase@@H@Z @1698 NONAME
+??1CCtrlTreeOpts@@UEAA@XZ @1699 NONAME
+??_7CCtrlTreeOpts@@6B@ @1700 NONAME
+?AddOption@CCtrlTreeOpts@@QEAAXPEB_W0AEAV?$CMOption@_N@@@Z @1701 NONAME
+?OnApply@CCtrlTreeOpts@@UEAA_NXZ @1702 NONAME
+?OnDestroy@CCtrlTreeOpts@@UEAAXXZ @1703 NONAME
+?OnInit@CCtrlTreeOpts@@UEAAXXZ @1704 NONAME
+?OnNotify@CCtrlTreeOpts@@UEAAHHPEAUtagNMHDR@@@Z @1705 NONAME
+?ProcessItemClick@CCtrlTreeOpts@@IEAAXPEAU_TREEITEM@@@Z @1706 NONAME
|