diff options
author | George Hazan <ghazan@miranda.im> | 2019-08-09 14:10:20 +0300 |
---|---|---|
committer | George Hazan <ghazan@miranda.im> | 2019-08-09 14:10:20 +0300 |
commit | edba1adf6418cc8d096acb56db05871762b0ff7d (patch) | |
tree | acc13f82771730b8cbe8659e088707a1b13ed2b0 | |
parent | 8d9e22cfcb01180289388f06142ffcab7f93d7d4 (diff) |
fixes #2023 (Cannot edit "Open new chat rooms in the default container" setting when using a screen reader on Windows)
-rw-r--r-- | plugins/TabSRMM/src/chat_options.cpp | 33 | ||||
-rw-r--r-- | plugins/TabSRMM/src/eventpopups.cpp | 40 | ||||
-rw-r--r-- | plugins/TabSRMM/src/globals.h | 1 | ||||
-rw-r--r-- | plugins/TabSRMM/src/msgoptions.cpp | 214 | ||||
-rw-r--r-- | plugins/TabSRMM/src/msgs.cpp | 7 | ||||
-rw-r--r-- | plugins/TabSRMM/src/msgs.h | 4 | ||||
-rw-r--r-- | plugins/TabSRMM/src/stdafx.h | 7 | ||||
-rw-r--r-- | src/mir_core/src/CCtrlTreeView.cpp | 14 |
8 files changed, 79 insertions, 241 deletions
diff --git a/plugins/TabSRMM/src/chat_options.cpp b/plugins/TabSRMM/src/chat_options.cpp index c15aca56c1..18d64e8661 100644 --- a/plugins/TabSRMM/src/chat_options.cpp +++ b/plugins/TabSRMM/src/chat_options.cpp @@ -539,11 +539,10 @@ class CChatSettingsDlg : public CChatBaseOptionDlg TVINSERTSTRUCT tvis;
tvis.hParent = nullptr;
tvis.hInsertAfter = TVI_LAST;
- tvis.item.mask = TVIF_TEXT | TVIF_STATE | TVIF_IMAGE | TVIF_SELECTEDIMAGE;
+ tvis.item.mask = TVIF_TEXT | TVIF_STATE;
tvis.item.pszText = TranslateW(pszDescr);
tvis.item.stateMask = TVIS_EXPANDED | TVIS_BOLD;
tvis.item.state = (bExpanded ? TVIS_EXPANDED : 0) | TVIS_BOLD;
- tvis.item.iImage = tvis.item.iSelectedImage = (bExpanded ? IMG_GRPOPEN : IMG_GRPCLOSED);
return treeCheck.InsertItem(&tvis);
}
@@ -557,27 +556,26 @@ class CChatSettingsDlg : public CChatBaseOptionDlg for (size_t i = 0; i < nValues; i++) {
tvis.hParent = hParent;
tvis.hInsertAfter = TVI_LAST;
- tvis.item.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE;
+ tvis.item.mask = TVIF_TEXT;
tvis.item.pszText = TranslateW(branch[i].szDescr);
+ branch[i].hItem = treeCheck.InsertItem(&tvis);
+
+ BOOL bCheck;
if (branch[i].iMode)
- tvis.item.iImage = tvis.item.iSelectedImage = ((((db_get_dw(0, CHAT_MODULE, branch[i].szDBName, defaultval) & branch[i].iMode) & branch[i].iMode) != 0) ? IMG_CHECK : IMG_NOCHECK);
+ bCheck = (db_get_dw(0, CHAT_MODULE, branch[i].szDBName, defaultval) & branch[i].iMode) != 0;
else
- tvis.item.iImage = tvis.item.iSelectedImage = ((db_get_dw(0, CHAT_MODULE, branch[i].szDBName, branch[i].bDefault) != 0) ? IMG_CHECK : IMG_NOCHECK);
- branch[i].hItem = treeCheck.InsertItem(&tvis);
+ bCheck = db_get_dw(0, CHAT_MODULE, branch[i].szDBName, branch[i].bDefault) != 0;
+ treeCheck.SetCheckState(branch[i].hItem, bCheck);
}
}
void SaveBranch(branch_t *branch, int nValues)
{
TVITEMEX tvi = { 0 };
- BYTE bChecked;
DWORD iState = 0;
for (int i = 0; i < nValues; i++) {
- tvi.mask = TVIF_HANDLE | TVIF_IMAGE;
- tvi.hItem = branch[i].hItem;
- treeCheck.GetItem(&tvi);
- bChecked = ((tvi.iImage == IMG_CHECK) ? 1 : 0);
+ BOOL bChecked = treeCheck.GetCheckState(branch[i].hItem);
if (branch[i].iMode) {
if (bChecked)
iState |= branch[i].iMode;
@@ -600,9 +598,6 @@ public: {
SetWindowLongPtr(treeCheck.GetHwnd(), GWL_STYLE, GetWindowLongPtr(treeCheck.GetHwnd(), GWL_STYLE) | (TVS_NOHSCROLL));
- // Replace image list
- treeCheck.SetImageList(CreateStateImageList(), TVSIL_NORMAL);
-
hListHeading1 = InsertBranch(TranslateT("Appearance and functionality of chat room windows"), TRUE);
hListHeading2 = InsertBranch(TranslateT("Appearance of the message log"), TRUE);
@@ -629,16 +624,6 @@ public: b = treeCheck.GetItemState(hListHeading2, TVIS_EXPANDED) & TVIS_EXPANDED ? 1 : 0;
db_set_b(0, CHAT_MODULE, "Branch2Exp", b);
-
- TreeViewDestroy(treeCheck.GetHwnd());
- }
-
- INT_PTR DlgProc(UINT msg, WPARAM wParam, LPARAM lParam) override
- {
- if (msg == WM_NOTIFY && ((LPNMHDR)lParam)->idFrom == IDC_CHECKBOXES)
- return TreeViewHandleClick(m_hwnd, ((LPNMHDR)lParam)->hwndFrom, wParam, lParam);
-
- return CDlgBase::DlgProc(msg, wParam, lParam);
}
};
diff --git a/plugins/TabSRMM/src/eventpopups.cpp b/plugins/TabSRMM/src/eventpopups.cpp index 0ce8f1b1c9..21556817ce 100644 --- a/plugins/TabSRMM/src/eventpopups.cpp +++ b/plugins/TabSRMM/src/eventpopups.cpp @@ -512,7 +512,6 @@ static INT_PTR CALLBACK DlgProcPopupOpts(HWND hWnd, UINT msg, WPARAM wParam, LPA return TRUE;
case WM_DESTROY:
- TreeViewDestroy(GetDlgItem(hWnd, IDC_LOGOPTIONS));
bWmNotify = TRUE;
break;
@@ -592,34 +591,27 @@ static INT_PTR CALLBACK DlgProcPopupOpts(HWND hWnd, UINT msg, WPARAM wParam, LPA break;
case WM_NOTIFY:
- switch (((LPNMHDR)lParam)->idFrom) {
- case IDC_EVENTOPTIONS:
- return TreeViewHandleClick(hWnd, ((LPNMHDR)lParam)->hwndFrom, wParam, lParam);
+ switch (((LPNMHDR)lParam)->code) {
+ case PSN_RESET:
+ NEN_ReadOptions(&nen_options);
break;
- default:
- switch (((LPNMHDR)lParam)->code) {
- case PSN_RESET:
- NEN_ReadOptions(&nen_options);
- break;
-
- case PSN_APPLY:
- // scan the tree view and obtain the options...
- TreeViewToDB(GetDlgItem(hWnd, IDC_EVENTOPTIONS), CTranslator::TREE_NEN, nullptr, nullptr);
+ case PSN_APPLY:
+ // scan the tree view and obtain the options...
+ TreeViewToDB(GetDlgItem(hWnd, IDC_EVENTOPTIONS), CTranslator::TREE_NEN, nullptr, nullptr);
- db_set_b(0, CHAT_MODULE, "PopupStyle", (BYTE)g_Settings.iPopupStyle);
- db_set_w(0, CHAT_MODULE, "PopupTimeout", g_Settings.iPopupTimeout);
+ db_set_b(0, CHAT_MODULE, "PopupStyle", (BYTE)g_Settings.iPopupStyle);
+ db_set_w(0, CHAT_MODULE, "PopupTimeout", g_Settings.iPopupTimeout);
- g_Settings.crPUBkgColour = SendDlgItemMessage(hWnd, IDC_COLBACK_MUC, CPM_GETCOLOUR, 0, 0);
- db_set_dw(0, CHAT_MODULE, "PopupColorBG", (DWORD)g_Settings.crPUBkgColour);
- g_Settings.crPUTextColour = SendDlgItemMessage(hWnd, IDC_COLTEXT_MUC, CPM_GETCOLOUR, 0, 0);
- db_set_dw(0, CHAT_MODULE, "PopupColorText", (DWORD)g_Settings.crPUTextColour);
+ g_Settings.crPUBkgColour = SendDlgItemMessage(hWnd, IDC_COLBACK_MUC, CPM_GETCOLOUR, 0, 0);
+ db_set_dw(0, CHAT_MODULE, "PopupColorBG", (DWORD)g_Settings.crPUBkgColour);
+ g_Settings.crPUTextColour = SendDlgItemMessage(hWnd, IDC_COLTEXT_MUC, CPM_GETCOLOUR, 0, 0);
+ db_set_dw(0, CHAT_MODULE, "PopupColorText", (DWORD)g_Settings.crPUTextColour);
- NEN_WriteOptions(&nen_options);
- CheckForRemoveMask();
- CreateSystrayIcon(nen_options.bTraySupport);
- SetEvent(g_hEvent); // wake up the thread which cares about the floater and tray
- }
+ NEN_WriteOptions(&nen_options);
+ CheckForRemoveMask();
+ CreateSystrayIcon(nen_options.bTraySupport);
+ SetEvent(g_hEvent); // wake up the thread which cares about the floater and tray
}
break;
}
diff --git a/plugins/TabSRMM/src/globals.h b/plugins/TabSRMM/src/globals.h index 78919e16cd..bb8f583bd9 100644 --- a/plugins/TabSRMM/src/globals.h +++ b/plugins/TabSRMM/src/globals.h @@ -72,7 +72,6 @@ public: HIMAGELIST g_hImageList;
HICON g_IconMsgEvent, g_IconTypingEvent, g_IconFileEvent, g_IconSend;
HICON g_IconMsgEventBig, g_IconTypingEventBig;
- HICON g_IconGroupOpen, g_IconGroupClose, g_IconChecked, g_IconUnchecked;
HMENU g_hMenuContext, g_hMenuContainer, g_hMenuTrayUnread;
HMENU g_hMenuFavorites, g_hMenuRecent, g_hMenuTrayContext;
HICON g_buttonBarIcons[NR_BUTTONBARICONS];
diff --git a/plugins/TabSRMM/src/msgoptions.cpp b/plugins/TabSRMM/src/msgoptions.cpp index 544dd338f3..c02c4dd279 100644 --- a/plugins/TabSRMM/src/msgoptions.cpp +++ b/plugins/TabSRMM/src/msgoptions.cpp @@ -31,16 +31,6 @@ #define DM_GETSTATUSMASK (WM_USER + 10)
-HIMAGELIST CreateStateImageList()
-{
- HIMAGELIST himlStates = ImageList_Create(16, 16, ILC_COLOR32 | ILC_MASK, 4, 0);
- ImageList_AddIcon(himlStates, PluginConfig.g_IconUnchecked); /* IMG_NOCHECK */
- ImageList_AddIcon(himlStates, PluginConfig.g_IconChecked); /* IMG_CHECK */
- ImageList_AddIcon(himlStates, PluginConfig.g_IconGroupOpen); /* IMG_GRPOPEN */
- ImageList_AddIcon(himlStates, PluginConfig.g_IconGroupClose); /* IMG_GRPCLOSED */
- return himlStates;
-}
-
void LoadLogfont(int section, int i, LOGFONTA * lf, COLORREF * colour, char *szModule)
{
LOGFONT lfResult;
@@ -71,179 +61,96 @@ void TreeViewInit(HWND hwndTree, UINT id, DWORD dwFlags, BOOL bFromMem) TOptionListGroup *lvGroups = CTranslator::getGroupTree(id);
TOptionListItem *lvItems = CTranslator::getTree(id);
- SetWindowLongPtr(hwndTree, GWL_STYLE, GetWindowLongPtr(hwndTree, GWL_STYLE) | (TVS_NOHSCROLL));
- /* Replace image list, destroy old. */
- ImageList_Destroy(TreeView_SetImageList(hwndTree, CreateStateImageList(), TVSIL_NORMAL));
+ SetWindowLongPtr(hwndTree, GWL_STYLE, GetWindowLongPtr(hwndTree, GWL_STYLE) | (TVS_HASBUTTONS | TVS_CHECKBOXES | TVS_NOHSCROLL));
// fill the list box, create groups first, then add items
for (int i = 0; lvGroups[i].szName != nullptr; i++) {
tvi.hParent = nullptr;
tvi.hInsertAfter = TVI_LAST;
- tvi.item.mask = TVIF_TEXT | TVIF_STATE | TVIF_IMAGE | TVIF_SELECTEDIMAGE;
+ tvi.item.mask = TVIF_TEXT | TVIF_STATE;
tvi.item.pszText = TranslateW(lvGroups[i].szName);
tvi.item.stateMask = TVIS_EXPANDED | TVIS_BOLD;
tvi.item.state = TVIS_EXPANDED | TVIS_BOLD;
- tvi.item.iImage = tvi.item.iSelectedImage = IMG_GRPOPEN;
- lvGroups[i].handle = (LRESULT)TreeView_InsertItem(hwndTree, &tvi);
+ lvGroups[i].handle = TreeView_InsertItem(hwndTree, &tvi);
+
+ TreeView_SetItemState(hwndTree, lvGroups[i].handle, 0, TVIS_STATEIMAGEMASK);
}
for (int i = 0; lvItems[i].szName != nullptr; i++) {
tvi.hParent = (HTREEITEM)lvGroups[lvItems[i].uGroup].handle;
tvi.hInsertAfter = TVI_LAST;
tvi.item.pszText = TranslateW(lvItems[i].szName);
- tvi.item.mask = TVIF_TEXT | TVIF_PARAM | TVIF_IMAGE | TVIF_SELECTEDIMAGE;
+ tvi.item.mask = TVIF_TEXT | TVIF_PARAM;
tvi.item.lParam = i;
+ lvItems[i].handle = TreeView_InsertItem(hwndTree, &tvi);
+
+ BOOL bCheck = FALSE;
if (bFromMem == FALSE) {
switch (lvItems[i].uType) {
case LOI_TYPE_FLAG:
- tvi.item.iImage = tvi.item.iSelectedImage = ((dwFlags & (UINT)lvItems[i].lParam) ? IMG_CHECK : IMG_NOCHECK);
+ bCheck = (dwFlags & (UINT)lvItems[i].lParam) != 0;
break;
case LOI_TYPE_SETTING:
- tvi.item.iImage = tvi.item.iSelectedImage = (M.GetByte((char *)lvItems[i].lParam, lvItems[i].id) ? IMG_CHECK : IMG_NOCHECK);
+ bCheck = M.GetByte((char *)lvItems[i].lParam, lvItems[i].id);
break;
}
}
else {
switch (lvItems[i].uType) {
case LOI_TYPE_FLAG:
- tvi.item.iImage = tvi.item.iSelectedImage = (((*((UINT*)lvItems[i].lParam)) & lvItems[i].id) ? IMG_CHECK : IMG_NOCHECK);
+ bCheck = ((*((UINT *)lvItems[i].lParam)) & lvItems[i].id) != 0;
break;
case LOI_TYPE_SETTING:
- tvi.item.iImage = tvi.item.iSelectedImage = ((*((BOOL*)lvItems[i].lParam)) ? IMG_CHECK : IMG_NOCHECK);
+ bCheck = *((BOOL *)lvItems[i].lParam);
break;
}
}
- lvItems[i].handle = (LRESULT)TreeView_InsertItem(hwndTree, &tvi);
+ TreeView_SetCheckState(hwndTree, lvItems[i].handle, bCheck);
}
-
-}
-
-void TreeViewDestroy(HWND hwndTree)
-{
- ImageList_Destroy(TreeView_GetImageList(hwndTree, TVSIL_NORMAL));
}
void TreeViewSetFromDB(HWND hwndTree, UINT id, DWORD dwFlags)
{
- TVITEM item = { 0 };
TOptionListItem *lvItems = CTranslator::getTree(id);
for (int i = 0; lvItems[i].szName != nullptr; i++) {
- item.mask = TVIF_HANDLE | TVIF_IMAGE;
- item.hItem = (HTREEITEM)lvItems[i].handle;
+ BOOL bCheck = FALSE;
if (lvItems[i].uType == LOI_TYPE_FLAG)
- item.iImage = item.iSelectedImage = ((dwFlags & (UINT)lvItems[i].lParam) ? IMG_CHECK : IMG_NOCHECK);
+ bCheck = (dwFlags & (UINT)lvItems[i].lParam) != 0;
else if (lvItems[i].uType == LOI_TYPE_SETTING)
- item.iImage = item.iSelectedImage = (M.GetByte((char *)lvItems[i].lParam, lvItems[i].id) ? IMG_CHECK : IMG_NOCHECK);
- TreeView_SetItem(hwndTree, &item);
+ bCheck = M.GetByte((char *)lvItems[i].lParam, lvItems[i].id);
+ TreeView_SetCheckState(hwndTree, lvItems[i].handle, bCheck);
}
}
void TreeViewToDB(HWND hwndTree, UINT id, char *DBPath, DWORD *dwFlags)
{
- TVITEM item = { 0 };
TOptionListItem *lvItems = CTranslator::getTree(id);
for (int i = 0; lvItems[i].szName != nullptr; i++) {
- item.mask = TVIF_HANDLE | TVIF_IMAGE;
- item.hItem = (HTREEITEM)lvItems[i].handle;
- TreeView_GetItem(hwndTree, &item);
+ UINT iState = TreeView_GetCheckState(hwndTree, lvItems[i].handle);
switch (lvItems[i].uType) {
case LOI_TYPE_FLAG:
if (dwFlags != nullptr)
- (*dwFlags) |= (item.iImage == IMG_CHECK) ? lvItems[i].lParam : 0;
+ (*dwFlags) |= (iState == 1) ? lvItems[i].lParam : 0;
if (DBPath == nullptr) {
UINT *tm = (UINT*)lvItems[i].lParam;
- (*tm) = (item.iImage == IMG_CHECK) ? ((*tm) | lvItems[i].id) : ((*tm) & ~lvItems[i].id);
+ (*tm) = (iState == 1) ? ((*tm) | lvItems[i].id) : ((*tm) & ~lvItems[i].id);
}
break;
case LOI_TYPE_SETTING:
if (DBPath != nullptr) {
- db_set_b(0, DBPath, (char *)lvItems[i].lParam, (BYTE)((item.iImage == IMG_CHECK) ? 1 : 0));
+ db_set_b(0, DBPath, (char *)lvItems[i].lParam, iState == 1);
}
else {
- (*((BOOL*)lvItems[i].lParam)) = ((item.iImage == IMG_CHECK) ? TRUE : FALSE);
+ (*((BOOL*)lvItems[i].lParam)) = iState == 1;
}
break;
}
}
}
-BOOL TreeViewHandleClick(HWND hwndDlg, HWND hwndTree, WPARAM, LPARAM lParam)
-{
- TVITEM item = { 0 };
- TVHITTESTINFO hti;
-
- switch (((LPNMHDR)lParam)->code) {
- case TVN_KEYDOWN:
- if (((LPNMTVKEYDOWN)lParam)->wVKey != VK_SPACE)
- return FALSE;
- hti.flags = TVHT_ONITEMSTATEICON;
- item.hItem = TreeView_GetSelection(((LPNMHDR)lParam)->hwndFrom);
- break;
- case NM_CLICK:
- hti.pt.x = (short)LOWORD(GetMessagePos());
- hti.pt.y = (short)HIWORD(GetMessagePos());
- ScreenToClient(((LPNMHDR)lParam)->hwndFrom, &hti.pt);
- if (TreeView_HitTest(((LPNMHDR)lParam)->hwndFrom, &hti) == nullptr)
- return FALSE;
- if ((hti.flags & TVHT_ONITEMICON) == 0)
- return FALSE;
- item.hItem = (HTREEITEM)hti.hItem;
- break;
-
- case TVN_ITEMEXPANDEDW:
- {
- LPNMTREEVIEWW lpnmtv = (LPNMTREEVIEWW)lParam;
-
- item.mask = TVIF_HANDLE | TVIF_IMAGE | TVIF_SELECTEDIMAGE;
- item.hItem = lpnmtv->itemNew.hItem;
- item.iImage = item.iSelectedImage =
- (lpnmtv->itemNew.state & TVIS_EXPANDED) ? IMG_GRPOPEN : IMG_GRPCLOSED;
- SendMessageW(((LPNMHDR)lParam)->hwndFrom, TVM_SETITEMW, 0, (LPARAM)&item);
- }
- return TRUE;
-
- default:
- return FALSE;
- }
-
- item.mask = TVIF_HANDLE | TVIF_IMAGE;
- item.stateMask = TVIS_BOLD;
- SendMessage(hwndTree, TVM_GETITEM, 0, (LPARAM)&item);
- item.mask |= TVIF_SELECTEDIMAGE;
- switch (item.iImage) {
- case IMG_NOCHECK:
- item.iImage = IMG_CHECK;
- break;
- case IMG_CHECK:
- item.iImage = IMG_NOCHECK;
- break;
- case IMG_GRPOPEN:
- item.mask |= TVIF_STATE;
- item.stateMask |= TVIS_EXPANDED;
- item.state = 0;
- item.iImage = IMG_GRPCLOSED;
- break;
- case IMG_GRPCLOSED:
- item.mask |= TVIF_STATE;
- item.stateMask |= TVIS_EXPANDED;
- item.state |= TVIS_EXPANDED;
- item.iImage = IMG_GRPOPEN;
- break;
- }
- item.iSelectedImage = item.iImage;
- SendMessage(hwndTree, TVM_SETITEM, 0, (LPARAM)&item);
- if (item.mask & TVIF_STATE) {
- RedrawWindow(hwndTree, nullptr, nullptr, RDW_INVALIDATE | RDW_NOFRAME | RDW_ERASENOW | RDW_ALLCHILDREN);
- InvalidateRect(hwndTree, nullptr, TRUE);
- }
- else SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
-
- return TRUE;
-}
-
/////////////////////////////////////////////////////////////////////////////////////////
// options dialog for setting up tab options
@@ -595,6 +502,7 @@ class COptMainDlg : public CDlgBase CCtrlSpin spnAvaSize;
CCtrlCheck chkAvaPreserve;
CCtrlButton btnReset;
+ CCtrlTreeView treeOpts;
CCtrlHyperlink urlHelp;
public:
@@ -602,6 +510,7 @@ public: CDlgBase(g_plugin, IDD_OPT_MSGDLG),
urlHelp(this, IDC_HELP_GENERAL, "https://wiki.miranda-ng.org/index.php?title=Plugin:TabSRMM/en/General_settings"),
btnReset(this, IDC_RESETWARNINGS),
+ treeOpts(this, IDC_WINDOWOPTIONS),
spnAvaSize(this, IDC_AVATARSPIN, 150),
chkAvaPreserve(this, IDC_PRESERVEAVATARSIZE)
{
@@ -610,7 +519,7 @@ public: bool OnInitDialog() override
{
- TreeViewInit(GetDlgItem(m_hwnd, IDC_WINDOWOPTIONS), CTranslator::TREE_MSG, 0, FALSE);
+ TreeViewInit(treeOpts.GetHwnd(), CTranslator::TREE_MSG, 0, FALSE);
chkAvaPreserve.SetState(M.GetByte("dontscaleavatars", 0));
@@ -624,30 +533,17 @@ public: db_set_b(0, SRMSGMOD_T, "dontscaleavatars", chkAvaPreserve.GetState());
// scan the tree view and obtain the options...
- TreeViewToDB(GetDlgItem(m_hwnd, IDC_WINDOWOPTIONS), CTranslator::TREE_MSG, SRMSGMOD_T, nullptr);
+ TreeViewToDB(treeOpts.GetHwnd(), CTranslator::TREE_MSG, SRMSGMOD_T, nullptr);
PluginConfig.reloadSettings();
Srmm_Broadcast(DM_OPTIONSAPPLIED, 1, 0);
return true;
}
- void OnDestroy() override
- {
- TreeViewDestroy(GetDlgItem(m_hwnd, IDC_WINDOWOPTIONS));
- }
-
void onClick_Reset(CCtrlButton*)
{
db_set_dw(0, SRMSGMOD_T, "cWarningsL", 0);
db_set_dw(0, SRMSGMOD_T, "cWarningsH", 0);
}
-
- INT_PTR DlgProc(UINT msg, WPARAM wParam, LPARAM lParam) override
- {
- if (msg == WM_NOTIFY && ((LPNMHDR)lParam)->idFrom == IDC_WINDOWOPTIONS)
- return TreeViewHandleClick(m_hwnd, ((LPNMHDR)lParam)->hwndFrom, wParam, lParam);
-
- return CDlgBase::DlgProc(msg, wParam, lParam);
- }
};
/////////////////////////////////////////////////////////////////////////////////////////
@@ -660,6 +556,7 @@ class COptLogDlg : public CDlgBase CCtrlCheck chkAlwaysTrim, chkLoadUnread, chkLoadCount, chkLoadTime;
CCtrlCombo cmbLogDisplay;
CCtrlButton btnModify, btnRtlModify;
+ CCtrlTreeView logOpts;
bool have_ieview, have_hpp;
@@ -672,7 +569,7 @@ class COptLogDlg : public CDlgBase {
LRESULT r = cmbLogDisplay.GetCurSel();
Utils::showDlgControl(m_hwnd, IDC_EXPLAINMSGLOGSETTINGS, r == 0 ? SW_HIDE : SW_SHOW);
- Utils::showDlgControl(m_hwnd, IDC_LOGOPTIONS, r == 0 ? SW_SHOW : SW_HIDE);
+ logOpts.Show(r == 0);
for (auto &it : __ctrls)
Utils::enableDlgControl(m_hwnd, it, r == 0);
@@ -681,6 +578,7 @@ class COptLogDlg : public CDlgBase public:
COptLogDlg() :
CDlgBase(g_plugin, IDD_OPT_MSGLOG),
+ logOpts(this, IDC_LOGOPTIONS),
btnModify(this, IDC_MODIFY),
btnRtlModify(this, IDC_RTLMODIFY),
spnTrim(this, IDC_TRIMSPIN, 1000, 5),
@@ -727,7 +625,7 @@ public: break;
}
- TreeViewInit(GetDlgItem(m_hwnd, IDC_LOGOPTIONS), CTranslator::TREE_LOG, dwFlags, FALSE);
+ TreeViewInit(logOpts.GetHwnd(), CTranslator::TREE_LOG, dwFlags, FALSE);
spnLeft.SetPosition(M.GetDword("IndentAmount", 20));
spnRight.SetPosition(M.GetDword("RightIndent", 20));
@@ -799,7 +697,7 @@ public: }
// scan the tree view and obtain the options...
- TreeViewToDB(GetDlgItem(m_hwnd, IDC_LOGOPTIONS), CTranslator::TREE_LOG, SRMSGMOD_T, &dwFlags);
+ TreeViewToDB(logOpts.GetHwnd(), CTranslator::TREE_LOG, SRMSGMOD_T, &dwFlags);
db_set_dw(0, SRMSGMOD_T, "mwflags", dwFlags);
if (chkAlwaysTrim.GetState())
db_set_dw(0, SRMSGMOD_T, "maxhist", spnTrim.GetPosition());
@@ -810,11 +708,6 @@ public: return true;
}
- void OnDestroy() override
- {
- TreeViewDestroy(GetDlgItem(m_hwnd, IDC_LOGOPTIONS));
- }
-
void onChange_Trim(CCtrlCheck*)
{
bool bEnabled = chkAlwaysTrim.GetState();
@@ -850,14 +743,6 @@ public: {
ShowHide();
}
-
- INT_PTR DlgProc(UINT msg, WPARAM wParam, LPARAM lParam) override
- {
- if (msg == WM_NOTIFY && ((LPNMHDR)lParam)->idFrom == IDC_LOGOPTIONS)
- return TreeViewHandleClick(m_hwnd, ((LPNMHDR)lParam)->hwndFrom, wParam, lParam);
-
- return CDlgBase::DlgProc(msg, wParam, lParam);
- }
};
/////////////////////////////////////////////////////////////////////////////////////////
@@ -1034,6 +919,7 @@ class COptTabbedDlg : public CDlgBase CCtrlCombo cmbEscMode;
CCtrlCheck chkLimit;
CCtrlButton btnSetup;
+ CCtrlTreeView tabOptions;
public:
COptTabbedDlg() :
@@ -1042,6 +928,7 @@ public: edtLimit(this, IDC_CUT_TITLEMAX),
spnLimit(this, IDC_CUT_TITLEMAXSPIN, 20, 5),
btnSetup(this, IDC_SETUPAUTOCREATEMODES),
+ tabOptions(this, IDC_TABMSGOPTIONS),
cmbEscMode(this, IDC_ESCMODE)
{
btnSetup.OnClick = Callback(this, &COptTabbedDlg::onClick_Setup);
@@ -1051,7 +938,7 @@ public: bool OnInitDialog() override
{
- TreeViewInit(GetDlgItem(m_hwnd, IDC_TABMSGOPTIONS), CTranslator::TREE_TAB, 0, FALSE);
+ TreeViewInit(tabOptions.GetHwnd(), CTranslator::TREE_TAB, 0, FALSE);
chkLimit.SetState(M.GetByte("cuttitle", 0));
spnLimit.SetPosition(db_get_w(0, SRMSGMOD_T, "cut_at", 15));
@@ -1071,18 +958,13 @@ public: db_set_b(0, SRMSGMOD_T, "cuttitle", chkLimit.GetState());
db_set_b(0, SRMSGMOD_T, "escmode", cmbEscMode.GetCurSel());
- TreeViewToDB(GetDlgItem(m_hwnd, IDC_TABMSGOPTIONS), CTranslator::TREE_TAB, SRMSGMOD_T, nullptr);
+ TreeViewToDB(tabOptions.GetHwnd(), CTranslator::TREE_TAB, SRMSGMOD_T, nullptr);
PluginConfig.reloadSettings();
Srmm_Broadcast(DM_OPTIONSAPPLIED, 0, 0);
return true;
}
- void OnDestroy() override
- {
- TreeViewDestroy(GetDlgItem(m_hwnd, IDC_TABMSGOPTIONS));
- }
-
void onClick_Setup(CCtrlButton*)
{
CreateDialogParam(g_plugin.getInst(), MAKEINTRESOURCE(IDD_CHOOSESTATUSMODES), m_hwnd, DlgProcSetupStatusModes, M.GetDword("autopopupmask", -1));
@@ -1100,9 +982,6 @@ public: if (msg == WM_COMMAND && wParam == DM_STATUSMASKSET)
db_set_dw(0, SRMSGMOD_T, "autopopupmask", (DWORD)lParam);
- if (msg == WM_NOTIFY && ((LPNMHDR)lParam)->idFrom == IDC_TABMSGOPTIONS)
- return TreeViewHandleClick(m_hwnd, ((LPNMHDR)lParam)->hwndFrom, wParam, lParam);
-
return CDlgBase::DlgProc(msg, wParam, lParam);
}
};
@@ -1205,6 +1084,7 @@ class COptAdvancedDlg : public CDlgBase {
CCtrlSpin spnTimeout, spnHistSize;
CCtrlButton btnRevert;
+ CCtrlTreeView plusOptions;
CCtrlHyperlink urlHelp;
public:
@@ -1213,14 +1093,15 @@ public: urlHelp(this, IDC_PLUS_HELP, "https://wiki.miranda-ng.org/index.php?title=Plugin:TabSRMM/en/Typing_notifications"),
btnRevert(this, IDC_PLUS_REVERT),
spnTimeout(this, IDC_TIMEOUTSPIN, 300, SRMSGSET_MSGTIMEOUT_MIN / 1000),
- spnHistSize(this, IDC_HISTORYSIZESPIN, 255, 15)
+ spnHistSize(this, IDC_HISTORYSIZESPIN, 255, 15),
+ plusOptions(this, IDC_PLUS_CHECKTREE)
{
btnRevert.OnClick = Callback(this, &COptAdvancedDlg::onClick_Revert);
}
bool OnInitDialog() override
{
- TreeViewInit(GetDlgItem(m_hwnd, IDC_PLUS_CHECKTREE), CTranslator::TREE_MODPLUS, 0, FALSE);
+ TreeViewInit(plusOptions.GetHwnd(), CTranslator::TREE_MODPLUS, 0, FALSE);
spnTimeout.SetPosition(PluginConfig.m_MsgTimeout / 1000);
spnHistSize.SetPosition(M.GetByte("historysize", 0));
@@ -1229,7 +1110,7 @@ public: bool OnApply() override
{
- TreeViewToDB(GetDlgItem(m_hwnd, IDC_PLUS_CHECKTREE), CTranslator::TREE_MODPLUS, SRMSGMOD_T, nullptr);
+ TreeViewToDB(plusOptions.GetHwnd(), CTranslator::TREE_MODPLUS, SRMSGMOD_T, nullptr);
int msgTimeout = 1000 * spnTimeout.GetPosition();
PluginConfig.m_MsgTimeout = msgTimeout >= SRMSGSET_MSGTIMEOUT_MIN ? msgTimeout : SRMSGSET_MSGTIMEOUT_MIN;
@@ -1240,19 +1121,6 @@ public: return true;
}
- void OnDestroy() override
- {
- TreeViewDestroy(GetDlgItem(m_hwnd, IDC_PLUS_CHECKTREE));
- }
-
- INT_PTR DlgProc(UINT msg, WPARAM wParam, LPARAM lParam) override
- {
- if (msg == WM_NOTIFY && ((LPNMHDR)lParam)->idFrom == IDC_PLUS_CHECKTREE)
- return TreeViewHandleClick(m_hwnd, ((LPNMHDR)lParam)->hwndFrom, wParam, lParam);
-
- return CDlgBase::DlgProc(msg, wParam, lParam);
- }
-
void onClick_Revert(CCtrlButton*)
{
TOptionListItem *lvItems = CTranslator::getTree(CTranslator::TREE_MODPLUS);
diff --git a/plugins/TabSRMM/src/msgs.cpp b/plugins/TabSRMM/src/msgs.cpp index 6690baac95..9066819205 100644 --- a/plugins/TabSRMM/src/msgs.cpp +++ b/plugins/TabSRMM/src/msgs.cpp @@ -910,12 +910,7 @@ static int TSAPI LoadFromIconLib() PluginConfig.g_buttonBarIconHandles[1] = Skin_GetIconHandle(SKINICON_OTHER_ADDCONTACT);
PluginConfig.g_buttonBarIconHandles[20] = Skin_GetIconHandle(SKINICON_OTHER_USERDETAILS);
- PluginConfig.g_buttonBarIcons[ICON_DEFAULT_TYPING] =
- PluginConfig.g_buttonBarIcons[12] = Skin_LoadIcon(SKINICON_OTHER_TYPING);
- PluginConfig.g_IconChecked = Skin_LoadIcon(SKINICON_OTHER_TICK);
- PluginConfig.g_IconUnchecked = Skin_LoadIcon(SKINICON_OTHER_NOTICK);
- PluginConfig.g_IconGroupOpen = Skin_LoadIcon(SKINICON_OTHER_GROUPOPEN);
- PluginConfig.g_IconGroupClose = Skin_LoadIcon(SKINICON_OTHER_GROUPSHUT);
+ PluginConfig.g_buttonBarIcons[ICON_DEFAULT_TYPING] = PluginConfig.g_buttonBarIcons[12] = Skin_LoadIcon(SKINICON_OTHER_TYPING);
PluginConfig.g_iconOverlayEnabled = IcoLib_GetIcon("tabSRMM_overlay_enabled");
PluginConfig.g_iconOverlayDisabled = IcoLib_GetIcon("tabSRMM_overlay_disabled");
diff --git a/plugins/TabSRMM/src/msgs.h b/plugins/TabSRMM/src/msgs.h index cd1c320ad7..bf248ba86d 100644 --- a/plugins/TabSRMM/src/msgs.h +++ b/plugins/TabSRMM/src/msgs.h @@ -943,13 +943,13 @@ struct TCpTable { struct TOptionListGroup
{
- LRESULT handle;
+ HTREEITEM handle;
wchar_t *szName;
};
struct TOptionListItem
{
- LRESULT handle;
+ HTREEITEM handle;
wchar_t *szName;
UINT id;
UINT uType;
diff --git a/plugins/TabSRMM/src/stdafx.h b/plugins/TabSRMM/src/stdafx.h index 7529b738d6..ed7d1590fd 100644 --- a/plugins/TabSRMM/src/stdafx.h +++ b/plugins/TabSRMM/src/stdafx.h @@ -241,16 +241,9 @@ INT_PTR SendMessageCommand(WPARAM, LPARAM); INT_PTR SendMessageCommand_W(WPARAM, LPARAM);
INT_PTR SetUserPrefs(WPARAM, LPARAM);
-#define IMG_NOCHECK 0
-#define IMG_CHECK 1
-#define IMG_GRPOPEN 2
-#define IMG_GRPCLOSED 3
-HIMAGELIST CreateStateImageList();
void TreeViewInit(HWND hwndTree, UINT id, DWORD dwFlags, BOOL bFromMem);
-void TreeViewDestroy(HWND hwndTree);
void TreeViewSetFromDB(HWND hwndTree, UINT id, DWORD dwFlags);
void TreeViewToDB(HWND hwndTree, UINT id, char *DBPath, DWORD *dwFlags);
-BOOL TreeViewHandleClick(HWND hwndDlg, HWND hwndTree, WPARAM wParam, LPARAM lParam);
INT_PTR CALLBACK DlgProcSetupStatusModes(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam);
diff --git a/src/mir_core/src/CCtrlTreeView.cpp b/src/mir_core/src/CCtrlTreeView.cpp index 8463f4d16e..34eb171da7 100644 --- a/src/mir_core/src/CCtrlTreeView.cpp +++ b/src/mir_core/src/CCtrlTreeView.cpp @@ -33,8 +33,8 @@ int ImageList_AddIcon_IconLibLoaded(HIMAGELIST hIml, int iconId) ///////////////////////////////////////////////////////////////////////////////////////// // CCtrlTreeView -CCtrlTreeView::CCtrlTreeView(CDlgBase *dlg, int ctrlId) - : CCtrlBase(dlg, ctrlId), +CCtrlTreeView::CCtrlTreeView(CDlgBase *dlg, int ctrlId) : + CCtrlBase(dlg, ctrlId), m_dwFlags(0), m_hDragItem(nullptr) {} @@ -58,8 +58,7 @@ void CCtrlTreeView::OnInit() { CSuper::OnInit(); - if (m_bDndEnabled) - Subclass(); + Subclass(); if (m_bCheckBox) { HIMAGELIST himlCheckBoxes = ::ImageList_Create(16, 16, ILC_COLOR32 | ILC_MASK, 2, 2); @@ -115,6 +114,13 @@ LRESULT CCtrlTreeView::CustomWndProc(UINT msg, WPARAM wParam, LPARAM lParam) TVHITTESTINFO hti; switch (msg) { + case WM_KEYDOWN: + if (wParam == VK_SPACE) { + if ((GetItemState(this->GetSelection(), TVIS_STATEIMAGEMASK) >> 12) == 0) + return TRUE; + } + break; + case WM_MOUSEMOVE: if (m_bDragging) { hti.pt.x = (short)LOWORD(lParam); |