From d32ceca89165c3f537c5b32c38c153d26cd4aed7 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Sun, 24 Jan 2021 18:07:04 +0300 Subject: more effective way to use OnChange callbacks automatically --- plugins/Scriver/res/resource.rc | 4 ++-- plugins/Scriver/src/msgoptions.cpp | 12 ++++++++++++ src/core/stdmsg/res/resource.rc | 4 ++-- src/core/stdmsg/src/msgoptions.cpp | 18 ++++++++++++++++-- src/mir_core/src/CCtrlCheck.cpp | 1 - src/mir_core/src/CDlgBase.cpp | 3 +++ 6 files changed, 35 insertions(+), 7 deletions(-) diff --git a/plugins/Scriver/res/resource.rc b/plugins/Scriver/res/resource.rc index 30b372f02c..51cf4dac29 100644 --- a/plugins/Scriver/res/resource.rc +++ b/plugins/Scriver/res/resource.rc @@ -35,9 +35,9 @@ BEGIN "Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,12,155,10 CONTROL "Tree1",IDC_POPLIST,"SysTreeView32",TVS_DISABLEDRAGDROP | TVS_NOTOOLTIPS | TVS_NONEVENHEIGHT | WS_BORDER | WS_HSCROLL | WS_TABSTOP,163,12,98,44 CONTROL "and stay minimized",IDC_STAYMINIMIZED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,20,23,141,10 - CONTROL "Cascade new windows",IDC_CASCADE,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,6,58,293,10 + CONTROL "Cascade new windows",IDC_CASCADE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,58,293,10 CONTROL "Save size and location for each contact",IDC_SAVEPERCONTACT, - "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,6,69,293,10 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,69,293,10 CONTROL "Minimize on send",IDC_AUTOMIN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,80,293,10 CONTROL "Hide windows on close",IDC_HIDECONTAINERS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,91,293,10 CONTROL "Remember unsent messages",IDC_SAVEDRAFTS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,103,293,10 diff --git a/plugins/Scriver/src/msgoptions.cpp b/plugins/Scriver/src/msgoptions.cpp index 01a240729e..b095ef49ee 100644 --- a/plugins/Scriver/src/msgoptions.cpp +++ b/plugins/Scriver/src/msgoptions.cpp @@ -271,7 +271,9 @@ public: CreateLink(chkStayMinimized, g_plugin.bStayMinimized); CreateLink(chkSavePerContact, g_plugin.bSavePerContact); + chkCascade.OnChange = Callback(this, &CMainOptionsDlg::onChange_Cascade); chkAutoPopup.OnChange = Callback(this, &CMainOptionsDlg::onChange_AutoPopup); + chkSavePerContact.OnChange = Callback(this, &CMainOptionsDlg::onChange_SavePerContact); } bool OnInitDialog() override @@ -301,6 +303,16 @@ public: m_tree.Enable(bChecked); EnableWindow(GetDlgItem(m_hwnd, IDC_STAYMINIMIZED), bChecked); } + + void onChange_Cascade(CCtrlCheck *pCheck) + { + chkSavePerContact.SetState(!pCheck->GetState()); + } + + void onChange_SavePerContact(CCtrlCheck *pCheck) + { + chkCascade.SetState(!pCheck->GetState()); + } }; ///////////////////////////////////////////////////////////////////////////////////////// diff --git a/src/core/stdmsg/res/resource.rc b/src/core/stdmsg/res/resource.rc index 97a45e8480..d7cc7e427b 100644 --- a/src/core/stdmsg/res/resource.rc +++ b/src/core/stdmsg/res/resource.rc @@ -43,8 +43,8 @@ BEGIN CONTROL "Use the contact's status icon as the window icon",IDC_STATUSWIN, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,75,290,10 CONTROL "Save the window size and location individually for each contact",IDC_SAVEPERCONTACT, - "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,8,88,289,10 - CONTROL "Cascade new windows",IDC_CASCADE,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,8,100,289,10 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,88,289,10 + CONTROL "Cascade new windows",IDC_CASCADE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,100,289,10 CONTROL "Support Ctrl+Up/Down in message area to show previously sent messages",IDC_CTRLSUPPORT, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,112,289,10 CONTROL "Delete temporary contacts when closing message window",IDC_DELTEMP, diff --git a/src/core/stdmsg/src/msgoptions.cpp b/src/core/stdmsg/src/msgoptions.cpp index d5d27dea9d..49aeb6873b 100644 --- a/src/core/stdmsg/src/msgoptions.cpp +++ b/src/core/stdmsg/src/msgoptions.cpp @@ -211,8 +211,10 @@ public: tree.SetFlags(MTREE_CHECKBOX); chkAvatar.OnChange = Callback(this, &COptionMainDlg::onChange_Avatar); + chkAutoMin.OnChange = Callback(this, &COptionMainDlg::onChange_AutoMin); chkAutoClose.OnChange = Callback(this, &COptionMainDlg::onChange_AutoClose); chkLimitAvatar.OnChange = Callback(this, &COptionMainDlg::onChange_LimitAvatar); + chkSavePerContact.OnChange = Callback(this, &COptionMainDlg::onChange_SavePerContact); CreateLink(edtNFlash, g_dat.nFlashMax); CreateLink(edtAvatarH, g_dat.iAvatarHeight); @@ -261,9 +263,21 @@ public: return true; } - void onChange_AutoClose(CCtrlCheck *pCheck) + void onChange_AutoMin(CCtrlCheck*) { - chkCtrlSupport.Enable(!pCheck->GetState()); + chkAutoClose.SetState(false); + chkCtrlSupport.Enable(!chkAutoClose.GetState()); + } + + void onChange_AutoClose(CCtrlCheck*) + { + chkAutoMin.SetState(false); + chkCtrlSupport.Enable(!chkAutoClose.GetState()); + } + + void onChange_SavePerContact(CCtrlCheck*) + { + chkCascade.Enable(!chkSavePerContact.GetState()); } void onChange_Avatar(CCtrlCheck*) diff --git a/src/mir_core/src/CCtrlCheck.cpp b/src/mir_core/src/CCtrlCheck.cpp index 7d26af32fd..a20a1a9275 100644 --- a/src/mir_core/src/CCtrlCheck.cpp +++ b/src/mir_core/src/CCtrlCheck.cpp @@ -58,7 +58,6 @@ int CCtrlCheck::GetState() void CCtrlCheck::SetState(int state) { ::SendMessage(m_hwnd, BM_SETCHECK, state, 0); - OnChange(this); } bool CCtrlCheck::IsChecked() diff --git a/src/mir_core/src/CDlgBase.cpp b/src/mir_core/src/CDlgBase.cpp index 7c079cc258..dcfe15b292 100644 --- a/src/mir_core/src/CDlgBase.cpp +++ b/src/mir_core/src/CDlgBase.cpp @@ -218,6 +218,9 @@ INT_PTR CDlgBase::DlgProc(UINT msg, WPARAM wParam, LPARAM lParam) if (!OnInitDialog()) return FALSE; + for (auto &it : m_controls) + it->OnChange(it); + m_bInitialized = true; return TRUE; -- cgit v1.2.3