diff options
author | George Hazan <ghazan@miranda.im> | 2020-10-24 16:55:39 +0300 |
---|---|---|
committer | George Hazan <ghazan@miranda.im> | 2020-10-24 16:55:46 +0300 |
commit | e733ae39773abeb2c9bce9cb3e25812564506e6b (patch) | |
tree | 1b66d1d3f68b21ab7331bdac0112cf1d3fa85958 /src/mir_core | |
parent | 3506ad40b99f33066288494bd49768cdebf9d78c (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.vcxproj | 1 | ||||
-rw-r--r-- | src/mir_core/mir_core.vcxproj.filters | 3 | ||||
-rw-r--r-- | src/mir_core/src/CCtrlTreeOpts.cpp | 169 | ||||
-rw-r--r-- | src/mir_core/src/mir_core.def | 9 | ||||
-rw-r--r-- | src/mir_core/src/mir_core64.def | 9 |
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
|