From d1cdf52cb78309f294e84bc1bbc12457b24cb573 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Mon, 30 Mar 2020 19:09:34 +0300 Subject: another common option removed from dialogs --- src/core/stdclist/res/resource.rc | 42 +++---- src/core/stdclist/src/clistopts.cpp | 233 ++++++++++++++++-------------------- src/core/stdclist/src/resource.h | 1 - src/mir_app/res/resource.rc | 10 +- src/mir_app/src/clc.h | 5 + src/mir_app/src/clistevents.cpp | 2 +- src/mir_app/src/clistopts.cpp | 7 +- src/mir_app/src/resource.h | 1 + 8 files changed, 138 insertions(+), 163 deletions(-) (limited to 'src') diff --git a/src/core/stdclist/res/resource.rc b/src/core/stdclist/res/resource.rc index c20cb6bfb6..e2db018eeb 100644 --- a/src/core/stdclist/res/resource.rc +++ b/src/core/stdclist/res/resource.rc @@ -9,7 +9,6 @@ // #include #include -#include ///////////////////////////////////////////////////////////////////////////// #undef APSTUDIO_READONLY_SYMBOLS @@ -46,29 +45,27 @@ STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD EXSTYLE WS_EX_CONTROLPARENT FONT 8, "MS Shell Dlg", 0, 0, 0x1 BEGIN - CONTROL "Sort contacts by name",IDC_SORTBYNAME,"Button",BS_AUTORADIOBUTTON | WS_GROUP,153,14,144,10 - CONTROL "Sort contacts by status",IDC_SORTBYSTATUS,"Button",BS_AUTORADIOBUTTON,153,26,149,10 - CONTROL "Sort contacts by protocol",IDC_SORTBYPROTO,"Button",BS_AUTORADIOBUTTON,153,38,151,10 - CONTROL "Single click interface",IDC_ONECLK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,152,68,150,10 - CONTROL "Always show status in tooltip",IDC_ALWAYSSTATUS,"Button",BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE | WS_TABSTOP,152,81,151,11 - CONTROL "Disable icon blinking",IDC_DISABLEBLINK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,152,95,86,9 - EDITTEXT IDC_BLINKTIME,153,109,35,12,ES_NUMBER - LTEXT "ms delay",IDC_STMSDELAY,192,110,113,8 - CONTROL "Show",IDC_DONTCYCLE,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,143,97,10 - COMBOBOX IDC_PRIMARYSTATUS,107,142,78,70,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "Sort contacts by name",IDC_SORTBYNAME,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,14,287,10 + CONTROL "Sort contacts by status",IDC_SORTBYSTATUS,"Button",BS_AUTORADIOBUTTON,10,26,287,10 + CONTROL "Sort contacts by protocol",IDC_SORTBYPROTO,"Button",BS_AUTORADIOBUTTON,10,38,287,10 + CONTROL "Single click interface",IDC_ONECLK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,68,298,10 + CONTROL "Always show status in tooltip",IDC_ALWAYSSTATUS,"Button",BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE | WS_TABSTOP,10,81,151,11 + CONTROL "Disable icon blinking",IDC_DISABLEBLINK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,95,86,9 + EDITTEXT IDC_BLINKTIME,12,108,35,12,ES_NUMBER + CONTROL "Spin5",IDC_BLINKSPIN,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS | UDS_HOTTRACK,39,107,11,14 + LTEXT "ms delay",IDC_STMSDELAY,52,111,113,8 + CONTROL "Show",IDC_DONTCYCLE,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,143,90,10 + COMBOBOX IDC_PRIMARYSTATUS,104,142,78,70,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP LTEXT "icon when statuses differ",IDC_STATIC,189,144,116,8,NOT WS_GROUP - CONTROL "Cycle icons every",IDC_CYCLE,"Button",BS_AUTORADIOBUTTON,10,160,97,10 - EDITTEXT IDC_CYCLETIME,107,159,30,12,ES_RIGHT | ES_NUMBER + CONTROL "Cycle icons every",IDC_CYCLE,"Button",BS_AUTORADIOBUTTON,10,160,89,10 + EDITTEXT IDC_CYCLETIME,103,159,30,12,ES_RIGHT | ES_NUMBER CONTROL "Spin1",IDC_CYCLETIMESPIN,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS | UDS_HOTTRACK,127,158,10,14 - LTEXT "seconds, when statuses differ",IDC_STATIC,140,161,165,8,NOT WS_GROUP - CONTROL "Show multiple icons",IDC_MULTITRAY,"Button",BS_AUTORADIOBUTTON,10,177,98,10 + LTEXT "seconds, when statuses differ",IDC_STATIC,141,161,165,8,NOT WS_GROUP + CONTROL "Show multiple icons",IDC_MULTITRAY,"Button",BS_AUTORADIOBUTTON,10,177,91,10 CONTROL "Only when statuses differ",IDC_ALWAYSMULTI,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,108,177,198,10 - GROUPBOX "Contact list",IDC_STCLISTGROUP,2,2,135,126 - GROUPBOX "System tray icon",IDC_STATIC,143,57,169,70 + GROUPBOX "System tray icon",IDC_STATIC,2,57,310,70 GROUPBOX "System tray icon when using multiple protocols",IDC_STATIC,2,131,310,66 - GROUPBOX "Contact list sorting",IDC_STATIC,143,2,169,54,WS_GROUP - CONTROL "Spin5",IDC_BLINKSPIN,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_NOTHOUSANDS | UDS_HOTTRACK,173,97,11,21 - CONTROL "Disable icon blinking",IDC_ICONBLINK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,15,97,10 + GROUPBOX "Contact list sorting",IDC_STATIC,2,2,310,54,WS_GROUP END IDD_OPT_CLUI DIALOGEX 0, 0, 313, 245 @@ -230,8 +227,8 @@ BEGIN BEGIN LEFTMARGIN, 2 RIGHTMARGIN, 312 - VERTGUIDE, 10 - VERTGUIDE, 107 + VERTGUIDE, 2 + VERTGUIDE, 308 TOPMARGIN, 2 BOTTOMMARGIN, 202 HORZGUIDE, 179 @@ -319,7 +316,6 @@ END BEGIN "#include \r\n" "#include \r\n" - "#include \r\n" "\0" END diff --git a/src/core/stdclist/src/clistopts.cpp b/src/core/stdclist/src/clistopts.cpp index 12b21edb8a..f0cd516923 100644 --- a/src/core/stdclist/src/clistopts.cpp +++ b/src/core/stdclist/src/clistopts.cpp @@ -24,139 +24,109 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "stdafx.h" -static INT_PTR CALLBACK DlgProcGenOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) +class ClistOptsDlg : public CDlgBase { - switch (msg) { - case WM_INITDIALOG: - TranslateDialogDefault(hwndDlg); - SetWindowLongPtr(hwndDlg, GWLP_USERDATA, (LONG_PTR)HookEventMessage(ME_DB_CONTACT_SETTINGCHANGED, hwndDlg, WM_USER + 1)); - CheckDlgButton(hwndDlg, IDC_SORTBYNAME, !g_plugin.getByte("SortByStatus", SETTING_SORTBYSTATUS_DEFAULT) - && !g_plugin.getByte("SortByProto", SETTING_SORTBYPROTO_DEFAULT) ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(hwndDlg, IDC_SORTBYSTATUS, - g_plugin.getByte("SortByStatus", SETTING_SORTBYSTATUS_DEFAULT) ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(hwndDlg, IDC_SORTBYPROTO, - g_plugin.getByte("SortByProto", SETTING_SORTBYPROTO_DEFAULT) ? BST_CHECKED : BST_UNCHECKED); - - CheckDlgButton(hwndDlg, IDC_ONECLK, - g_plugin.getByte("Tray1Click", SETTING_TRAY1CLICK_DEFAULT) ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(hwndDlg, IDC_ALWAYSSTATUS, - g_plugin.getByte("AlwaysStatus", SETTING_ALWAYSSTATUS_DEFAULT) ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(hwndDlg, IDC_ALWAYSMULTI, - !g_plugin.getByte("AlwaysMulti", SETTING_ALWAYSMULTI_DEFAULT) ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(hwndDlg, IDC_DONTCYCLE, - g_plugin.getByte("TrayIcon", SETTING_TRAYICON_DEFAULT) == SETTING_TRAYICON_SINGLE ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(hwndDlg, IDC_CYCLE, - g_plugin.getByte("TrayIcon", SETTING_TRAYICON_DEFAULT) == SETTING_TRAYICON_CYCLE ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(hwndDlg, IDC_MULTITRAY, - g_plugin.getByte("TrayIcon", SETTING_TRAYICON_DEFAULT) == SETTING_TRAYICON_MULTI ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(hwndDlg, IDC_DISABLEBLINK, - g_plugin.getByte("DisableTrayFlash", 0) == 1 ? BST_CHECKED : BST_UNCHECKED); - EnableWindow(GetDlgItem(hwndDlg, IDC_BLINKTIME), BST_UNCHECKED == IsDlgButtonChecked(hwndDlg, IDC_DISABLEBLINK)); - EnableWindow(GetDlgItem(hwndDlg, IDC_BLINKSPIN), BST_UNCHECKED == IsDlgButtonChecked(hwndDlg, IDC_DISABLEBLINK)); - EnableWindow(GetDlgItem(hwndDlg, IDC_STMSDELAY), BST_UNCHECKED == IsDlgButtonChecked(hwndDlg, IDC_DISABLEBLINK)); - CheckDlgButton(hwndDlg, IDC_ICONBLINK, g_plugin.getByte("NoIconBlink", 0) == 1 ? BST_CHECKED : BST_UNCHECKED); - if (IsDlgButtonChecked(hwndDlg, IDC_DONTCYCLE)) { - EnableWindow(GetDlgItem(hwndDlg, IDC_CYCLETIMESPIN), FALSE); - EnableWindow(GetDlgItem(hwndDlg, IDC_CYCLETIME), FALSE); - EnableWindow(GetDlgItem(hwndDlg, IDC_ALWAYSMULTI), FALSE); - } - if (IsDlgButtonChecked(hwndDlg, IDC_CYCLE)) { - EnableWindow(GetDlgItem(hwndDlg, IDC_PRIMARYSTATUS), FALSE); - EnableWindow(GetDlgItem(hwndDlg, IDC_ALWAYSMULTI), FALSE); - } - if (IsDlgButtonChecked(hwndDlg, IDC_MULTITRAY)) { - EnableWindow(GetDlgItem(hwndDlg, IDC_CYCLETIMESPIN), FALSE); - EnableWindow(GetDlgItem(hwndDlg, IDC_CYCLETIME), FALSE); - EnableWindow(GetDlgItem(hwndDlg, IDC_PRIMARYSTATUS), FALSE); - } - SendDlgItemMessage(hwndDlg, IDC_CYCLETIMESPIN, UDM_SETRANGE, 0, MAKELONG(120, 1)); - SendDlgItemMessage(hwndDlg, IDC_CYCLETIMESPIN, UDM_SETPOS, 0, MAKELONG(g_plugin.getWord("CycleTime", SETTING_CYCLETIME_DEFAULT), 0)); - { - ptrA szPrimaryStatus(g_plugin.getStringA("PrimaryStatus")); - - int item = SendDlgItemMessage(hwndDlg, IDC_PRIMARYSTATUS, CB_ADDSTRING, 0, (LPARAM)TranslateT("Global")); - SendDlgItemMessage(hwndDlg, IDC_PRIMARYSTATUS, CB_SETITEMDATA, item, (LPARAM)0); - - for (auto &pa : Accounts()) { - if (!pa->IsEnabled() || CallProtoService(pa->szModuleName, PS_GETCAPS, PFLAGNUM_2, 0) == 0) - continue; - - item = SendDlgItemMessage(hwndDlg, IDC_PRIMARYSTATUS, CB_ADDSTRING, 0, (LPARAM)pa->tszAccountName); - SendDlgItemMessage(hwndDlg, IDC_PRIMARYSTATUS, CB_SETITEMDATA, item, (LPARAM)pa); - if (!mir_strcmp(szPrimaryStatus, pa->szModuleName)) - SendDlgItemMessage(hwndDlg, IDC_PRIMARYSTATUS, CB_SETCURSEL, item, 0); - } - } - if (CB_ERR == SendDlgItemMessage(hwndDlg, IDC_PRIMARYSTATUS, CB_GETCURSEL, 0, 0)) - SendDlgItemMessage(hwndDlg, IDC_PRIMARYSTATUS, CB_SETCURSEL, 0, 0); - SendDlgItemMessage(hwndDlg, IDC_BLINKSPIN, UDM_SETBUDDY, (WPARAM)GetDlgItem(hwndDlg, IDC_BLINKTIME), 0); // set buddy - SendDlgItemMessage(hwndDlg, IDC_BLINKSPIN, UDM_SETRANGE, 0, MAKELONG(0x3FFF, 250)); - SendDlgItemMessage(hwndDlg, IDC_BLINKSPIN, UDM_SETPOS, 0, MAKELONG(g_plugin.getWord("IconFlashTime", 550), 0)); - return TRUE; - - case WM_COMMAND: - if (LOWORD(wParam) == IDC_DONTCYCLE || LOWORD(wParam) == IDC_CYCLE || LOWORD(wParam) == IDC_MULTITRAY) { - EnableWindow(GetDlgItem(hwndDlg, IDC_PRIMARYSTATUS), IsDlgButtonChecked(hwndDlg, IDC_DONTCYCLE)); - EnableWindow(GetDlgItem(hwndDlg, IDC_CYCLETIME), IsDlgButtonChecked(hwndDlg, IDC_CYCLE)); - EnableWindow(GetDlgItem(hwndDlg, IDC_CYCLETIMESPIN), IsDlgButtonChecked(hwndDlg, IDC_CYCLE)); - EnableWindow(GetDlgItem(hwndDlg, IDC_ALWAYSMULTI), IsDlgButtonChecked(hwndDlg, IDC_MULTITRAY)); - } - if (LOWORD(wParam) == IDC_DISABLEBLINK) { - EnableWindow(GetDlgItem(hwndDlg, IDC_BLINKTIME), BST_UNCHECKED == IsDlgButtonChecked(hwndDlg, IDC_DISABLEBLINK)); - EnableWindow(GetDlgItem(hwndDlg, IDC_BLINKSPIN), BST_UNCHECKED == IsDlgButtonChecked(hwndDlg, IDC_DISABLEBLINK)); - EnableWindow(GetDlgItem(hwndDlg, IDC_STMSDELAY), BST_UNCHECKED == IsDlgButtonChecked(hwndDlg, IDC_DISABLEBLINK)); - } - if (LOWORD(wParam) == IDC_CYCLETIME && HIWORD(wParam) != EN_CHANGE) - break; - if (LOWORD(wParam) == IDC_PRIMARYSTATUS && HIWORD(wParam) != CBN_SELCHANGE) - break; - if (LOWORD(wParam) == IDC_CYCLETIME && (HIWORD(wParam) != EN_CHANGE || (HWND)lParam != GetFocus())) - return 0; - if (LOWORD(wParam) == IDC_BLINKTIME && HIWORD(wParam) != EN_CHANGE || (HWND)lParam != GetFocus()) - return 0; // dont make apply enabled during buddy set crap - SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); - break; - - case WM_NOTIFY: - switch (((LPNMHDR)lParam)->idFrom) { - case 0: - switch (((LPNMHDR)lParam)->code) { - case PSN_APPLY: - g_bSortByStatus = IsDlgButtonChecked(hwndDlg, IDC_SORTBYSTATUS); - g_bSortByProto = IsDlgButtonChecked(hwndDlg, IDC_SORTBYPROTO); - - g_plugin.setByte("SortByStatus", (BYTE)g_bSortByStatus); - g_plugin.setByte("SortByProto", (BYTE)g_bSortByProto); - g_plugin.setByte("Tray1Click", (BYTE)IsDlgButtonChecked(hwndDlg, IDC_ONECLK)); - g_plugin.setByte("AlwaysStatus", (BYTE)IsDlgButtonChecked(hwndDlg, IDC_ALWAYSSTATUS)); - g_plugin.setByte("AlwaysMulti", (BYTE)!IsDlgButtonChecked(hwndDlg, IDC_ALWAYSMULTI)); - g_plugin.setByte("TrayIcon", - (BYTE)(IsDlgButtonChecked(hwndDlg, IDC_DONTCYCLE) ? SETTING_TRAYICON_SINGLE - : (IsDlgButtonChecked(hwndDlg, IDC_CYCLE) ? SETTING_TRAYICON_CYCLE : SETTING_TRAYICON_MULTI))); - g_plugin.setWord("CycleTime", (WORD)SendDlgItemMessage(hwndDlg, IDC_CYCLETIMESPIN, UDM_GETPOS, 0, 0)); - g_plugin.setWord("IconFlashTime", (WORD)SendDlgItemMessage(hwndDlg, IDC_BLINKSPIN, UDM_GETPOS, 0, 0)); - g_plugin.setByte("DisableTrayFlash", (BYTE)IsDlgButtonChecked(hwndDlg, IDC_DISABLEBLINK)); - g_plugin.setByte("NoIconBlink", (BYTE)IsDlgButtonChecked(hwndDlg, IDC_ICONBLINK)); - { - int cur = SendDlgItemMessage(hwndDlg, IDC_PRIMARYSTATUS, CB_GETCURSEL, 0, 0); - PROTOACCOUNT *pa = (PROTOACCOUNT*)SendDlgItemMessage(hwndDlg, IDC_PRIMARYSTATUS, CB_GETITEMDATA, cur, 0); - if (pa == nullptr) - g_plugin.delSetting("PrimaryStatus"); - else - g_plugin.setString("PrimaryStatus", pa->szModuleName); - } - - Clist_TrayIconIconsChanged(); - Clist_LoadContactTree(); /* this won't do job properly since it only really works when changes happen */ - g_clistApi.pfnInvalidateDisplayNameCacheEntry(INVALID_CONTACT_ID); /* force reshuffle */ - return TRUE; - } - break; + CCtrlSpin cycleTime, blink; + CCtrlCombo status; + CCtrlCheck sortByName, sortByStatus, sortByProto; + CCtrlCheck chkDisableBlink, chkCycle, chkDontCycle, chkMulti; + +public: + ClistOptsDlg() : + CDlgBase(g_plugin, IDD_OPT_CLIST), + chkCycle(this, IDC_CYCLE), + chkMulti(this, IDC_MULTITRAY), + chkDontCycle(this, IDC_DONTCYCLE), + blink(this, IDC_BLINKSPIN, 0x3FFF, 250), + cycleTime(this, IDC_CYCLETIMESPIN, 120, 1), + status(this, IDC_PRIMARYSTATUS), + sortByName(this, IDC_SORTBYNAME), + sortByProto(this, IDC_SORTBYPROTO), + sortByStatus(this, IDC_SORTBYSTATUS), + chkDisableBlink(this, IDC_DISABLEBLINK) + { + chkDisableBlink.OnChange = Callback(this, &ClistOptsDlg::onChange_DisableBlink); + chkCycle.OnChange = chkDontCycle.OnChange = chkMulti.OnChange = Callback(this, &ClistOptsDlg::onChange_Tray); + } + + bool OnInitDialog() override + { + sortByName.SetState(!g_plugin.getByte("SortByStatus", SETTING_SORTBYSTATUS_DEFAULT) && !g_plugin.getByte("SortByProto", SETTING_SORTBYPROTO_DEFAULT)); + sortByProto.SetState(g_plugin.getByte("SortByProto", SETTING_SORTBYPROTO_DEFAULT)); + sortByStatus.SetState(g_plugin.getByte("SortByStatus", SETTING_SORTBYSTATUS_DEFAULT)); + + CheckDlgButton(m_hwnd, IDC_ONECLK, g_plugin.getByte("Tray1Click", SETTING_TRAY1CLICK_DEFAULT)); + CheckDlgButton(m_hwnd, IDC_ALWAYSSTATUS, g_plugin.getByte("AlwaysStatus", SETTING_ALWAYSSTATUS_DEFAULT)); + CheckDlgButton(m_hwnd, IDC_ALWAYSMULTI, !g_plugin.getByte("AlwaysMulti", SETTING_ALWAYSMULTI_DEFAULT)); + + int iTrayIcon = g_plugin.getByte("TrayIcon", SETTING_TRAYICON_DEFAULT); + chkCycle.SetState(iTrayIcon == SETTING_TRAYICON_CYCLE); + chkMulti.SetState(iTrayIcon == SETTING_TRAYICON_MULTI); + chkDontCycle.SetState(iTrayIcon == SETTING_TRAYICON_SINGLE); + onChange_Tray(0); + + chkDisableBlink.SetState(g_plugin.getBool("DisableTrayFlash", false)); + onChange_DisableBlink(0); + + blink.SetPosition(g_plugin.getWord("IconFlashTime", 550)); + cycleTime.SetPosition(g_plugin.getWord("CycleTime", SETTING_CYCLETIME_DEFAULT)); + + ptrA szPrimaryStatus(g_plugin.getStringA("PrimaryStatus")); + + status.AddString(TranslateT("Global")); + status.SetCurSel(0); + + for (auto &pa : Accounts()) { + if (!pa->IsEnabled() || CallProtoService(pa->szModuleName, PS_GETCAPS, PFLAGNUM_2, 0) == 0) + continue; + + int item = status.AddString(pa->tszAccountName, (LPARAM)pa); + if (!mir_strcmp(szPrimaryStatus, pa->szModuleName)) + status.SetCurSel(item); } - break; + return true; } - return FALSE; -} + + bool OnApply() override + { + g_plugin.setByte("SortByStatus", g_bSortByStatus = sortByStatus.GetState()); + g_plugin.setByte("SortByProto", g_bSortByProto = sortByProto.GetState()); + g_plugin.setByte("Tray1Click", IsDlgButtonChecked(m_hwnd, IDC_ONECLK)); + g_plugin.setByte("AlwaysStatus", IsDlgButtonChecked(m_hwnd, IDC_ALWAYSSTATUS)); + g_plugin.setByte("AlwaysMulti", !IsDlgButtonChecked(m_hwnd, IDC_ALWAYSMULTI)); + g_plugin.setByte("TrayIcon", (chkDontCycle.GetState() ? SETTING_TRAYICON_SINGLE : (chkCycle.GetState() ? SETTING_TRAYICON_CYCLE : SETTING_TRAYICON_MULTI))); + g_plugin.setWord("CycleTime", cycleTime.GetPosition()); + g_plugin.setWord("IconFlashTime", blink.GetPosition()); + g_plugin.setByte("DisableTrayFlash", IsDlgButtonChecked(m_hwnd, IDC_DISABLEBLINK)); + + PROTOACCOUNT *pa = (PROTOACCOUNT *)status.GetItemData(status.GetCurSel()); + if (pa == nullptr) + g_plugin.delSetting("PrimaryStatus"); + else + g_plugin.setString("PrimaryStatus", pa->szModuleName); + + Clist_TrayIconIconsChanged(); + Clist_LoadContactTree(); + g_clistApi.pfnInvalidateDisplayNameCacheEntry(INVALID_CONTACT_ID); + return true; + } + + void onChange_Tray(CCtrlCheck *) + { + EnableWindow(GetDlgItem(m_hwnd, IDC_PRIMARYSTATUS), chkDontCycle.GetState()); + EnableWindow(GetDlgItem(m_hwnd, IDC_CYCLETIME), chkCycle.GetState()); + EnableWindow(GetDlgItem(m_hwnd, IDC_CYCLETIMESPIN), chkCycle.GetState()); + EnableWindow(GetDlgItem(m_hwnd, IDC_ALWAYSMULTI), chkMulti.GetState()); + } + + void onChange_DisableBlink(CCtrlCheck *) + { + bool bEnable = !chkDisableBlink.GetState(); + EnableWindow(GetDlgItem(m_hwnd, IDC_BLINKTIME), bEnable); + EnableWindow(GetDlgItem(m_hwnd, IDC_BLINKSPIN), bEnable); + EnableWindow(GetDlgItem(m_hwnd, IDC_STMSDELAY), bEnable); + } +}; /****************************************************************************************/ @@ -164,9 +134,8 @@ int CListOptInit(WPARAM wParam, LPARAM) { OPTIONSDIALOGPAGE odp = {}; odp.position = -1000000000; - odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_CLIST); odp.szTitle.a = LPGEN("Contact list"); - odp.pfnDlgProc = DlgProcGenOpts; + odp.pDialog = new ClistOptsDlg(); odp.flags = ODPF_BOLDGROUPS; g_plugin.addOptions(wParam, &odp); return 0; diff --git a/src/core/stdclist/src/resource.h b/src/core/stdclist/src/resource.h index 92d8716ed6..d25ecb5890 100644 --- a/src/core/stdclist/src/resource.h +++ b/src/core/stdclist/src/resource.h @@ -123,7 +123,6 @@ #define IDC_ONDESKTOP 1657 #define IDC_DISABLEDOCKING 1658 #define IDC_WINCOLOUR 1659 -#define IDC_ICONBLINK 1660 #define IDC_STMSDELAY 1661 // Next default values for new objects diff --git a/src/mir_app/res/resource.rc b/src/mir_app/res/resource.rc index c3890aec81..ef3b779726 100644 --- a/src/mir_app/res/resource.rc +++ b/src/mir_app/res/resource.rc @@ -783,8 +783,10 @@ BEGIN CONTROL "Hide empty groups",IDC_HIDEEMPTYGROUPS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,29,124,10 CONTROL "Enable groups",IDC_USEGROUPS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,41,124,10 CONTROL "Ask before deleting contacts",IDC_CONFIRMDELETE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,53,124,10 - GROUPBOX "Contact list",IDC_STATIC,6,5,289,77 - CONTROL "Remove temporary contacts on exit",IDC_REMOVETEMP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,65,276,10 + GROUPBOX "Contact list",IDC_STATIC,6,5,289,90 + CONTROL "Remove temporary contacts on exit",IDC_REMOVETEMP, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,65,276,10 + CONTROL "Disable icon blinking",IDC_DISABLEICONBLINK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,78,276,10 END IDD_EMPTY DIALOGEX 0, 0, 212, 131 @@ -793,6 +795,7 @@ CAPTION "Hidden window" BEGIN END + ///////////////////////////////////////////////////////////////////////////// // // DESIGNINFO @@ -1101,8 +1104,7 @@ END 1 TEXTINCLUDE BEGIN - "#include ""../src/resource.h""\r\n" - "\0" + "..\\src\\resource.h\0" END 2 TEXTINCLUDE diff --git a/src/mir_app/src/clc.h b/src/mir_app/src/clc.h index fc7805ab4a..7e5bbbb19a 100644 --- a/src/mir_app/src/clc.h +++ b/src/mir_app/src/clc.h @@ -93,6 +93,11 @@ int GetDropTargetInformation(HWND hwnd, ClcData *dat, POINT pt); /* clcopts.c */ int ClcOptInit(WPARAM, LPARAM); +namespace Clist +{ + extern CMOption RemoveTempContacts, DisableIconBlink; +}; + /* clistmenus.c */ void RebuildMenuOrder(void); diff --git a/src/mir_app/src/clistevents.cpp b/src/mir_app/src/clistevents.cpp index 2455170a4c..19ede131ce 100644 --- a/src/mir_app/src/clistevents.cpp +++ b/src/mir_app/src/clistevents.cpp @@ -350,7 +350,7 @@ int InitCListEvents(void) g_clistApi.events = &g_cliEvents; disableTrayFlash = db_get_b(0, "CList", "DisableTrayFlash", 0); - disableIconFlash = db_get_b(0, "CList", "NoIconBlink", 0); + disableIconFlash = Clist::DisableIconBlink; HookEvent(ME_DB_CONTACT_SETTINGCHANGED, CListEventSettingsChanged); return 0; diff --git a/src/mir_app/src/clistopts.cpp b/src/mir_app/src/clistopts.cpp index ed7bf9baad..5678fd1da6 100644 --- a/src/mir_app/src/clistopts.cpp +++ b/src/mir_app/src/clistopts.cpp @@ -31,11 +31,12 @@ CMOption Clist::UseGroups(MODULENAME, "UseGroups", true); CMOption Clist::HideOffline(MODULENAME, "HideOffline", false); CMOption Clist::ConfirmDelete(MODULENAME, "ConfirmDelete", true); CMOption Clist::HideEmptyGroups(MODULENAME, "HideEmptyGroups", false); +CMOption Clist::DisableIconBlink(MODULENAME, "NoIconBlink", false); CMOption Clist::RemoveTempContacts(MODULENAME, "RemoveTempContacts", true); class ClistCommonOptsDlg : public CDlgBase { - CCtrlCheck chkUseGroups, chkHideOffline, chkConfirmDelete, chkHideEmptyGroups, chkRemoveTempContacts; + CCtrlCheck chkUseGroups, chkHideOffline, chkConfirmDelete, chkHideEmptyGroups, chkRemoveTempContacts, chkDisableIconBlink; public: ClistCommonOptsDlg() : @@ -44,12 +45,14 @@ public: chkHideOffline(this, IDC_HIDEOFFLINE), chkConfirmDelete(this, IDC_CONFIRMDELETE), chkHideEmptyGroups(this, IDC_HIDEEMPTYGROUPS), - chkRemoveTempContacts(this, IDC_REMOVETEMP) + chkDisableIconBlink(this, IDC_DISABLEICONBLINK), + chkRemoveTempContacts(this, IDC_REMOVETEMP) { CreateLink(chkUseGroups, Clist::UseGroups); CreateLink(chkHideOffline, Clist::HideOffline); CreateLink(chkConfirmDelete, Clist::ConfirmDelete); CreateLink(chkHideEmptyGroups, Clist::HideEmptyGroups); + CreateLink(chkDisableIconBlink, Clist::DisableIconBlink); CreateLink(chkRemoveTempContacts, Clist::RemoveTempContacts); } diff --git a/src/mir_app/src/resource.h b/src/mir_app/src/resource.h index 781b5bb44a..98992615d5 100644 --- a/src/mir_app/src/resource.h +++ b/src/mir_app/src/resource.h @@ -220,6 +220,7 @@ #define IDC_URL 1041 #define IDC_FONTGROUP 1042 #define IDC_TXT_SIMPLE 1043 +#define IDC_DISABLEICONBLINK 1044 #define IDC_BTN_RESET 1045 #define IDC_REASON 1046 #define IDC_BTN_UNDO 1047 -- cgit v1.2.3