summaryrefslogtreecommitdiff
path: root/src/mir_core
diff options
context:
space:
mode:
authorGeorge Hazan <ghazan@miranda.im>2020-10-24 16:55:39 +0300
committerGeorge Hazan <ghazan@miranda.im>2020-10-24 16:55:46 +0300
commite733ae39773abeb2c9bce9cb3e25812564506e6b (patch)
tree1b66d1d3f68b21ab7331bdac0112cf1d3fa85958 /src/mir_core
parent3506ad40b99f33066288494bd49768cdebf9d78c (diff)
CCtrlTreeOpts class moved to mir_core, to be reused later
Diffstat (limited to 'src/mir_core')
-rw-r--r--src/mir_core/mir_core.vcxproj1
-rw-r--r--src/mir_core/mir_core.vcxproj.filters3
-rw-r--r--src/mir_core/src/CCtrlTreeOpts.cpp169
-rw-r--r--src/mir_core/src/mir_core.def9
-rw-r--r--src/mir_core/src/mir_core64.def9
5 files changed, 191 insertions, 0 deletions
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/src/mir_core/src/CCtrlTreeOpts.cpp b/src/mir_core/src/CCtrlTreeOpts.cpp
new file mode 100644
index 0000000000..c8b4548c69
--- /dev/null
+++ b/src/mir_core/src/CCtrlTreeOpts.cpp
@@ -0,0 +1,169 @@
+/*
+
+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