From 7bc07a1bb6dc73029e98ce1c3e9c907ba09f7843 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Tue, 15 Nov 2022 17:07:08 +0300 Subject: fixes #3240 (StdClist: get rid of inverted logic) --- src/core/stdclist/res/resource.rc | 59 ++++++++++++++++--------------------- src/core/stdclist/src/clistopts.cpp | 38 +++++++----------------- src/core/stdclist/src/contact.cpp | 6 ++-- src/core/stdclist/src/init.cpp | 7 ++++- src/core/stdclist/src/resource.h | 7 +---- src/core/stdclist/src/stdafx.h | 2 +- src/mir_app/res/resource.rc | 15 ++++++---- src/mir_app/res/version.rc | 1 + src/mir_app/src/clc.h | 4 ++- src/mir_app/src/clistevents.cpp | 30 ++++++++++++------- src/mir_app/src/clistopts.cpp | 29 +++++++++++++----- src/mir_app/src/clisttray.cpp | 34 ++++++++++----------- src/mir_app/src/copyright.h | 2 ++ src/mir_app/src/resource.h | 7 +++-- src/mir_app/src/stdafx.h | 1 + 15 files changed, 126 insertions(+), 116 deletions(-) create mode 100644 src/mir_app/src/copyright.h (limited to 'src') diff --git a/src/core/stdclist/res/resource.rc b/src/core/stdclist/res/resource.rc index 45f06891dc..22ccc72edc 100644 --- a/src/core/stdclist/res/resource.rc +++ b/src/core/stdclist/res/resource.rc @@ -45,27 +45,22 @@ STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD EXSTYLE WS_EX_CONTROLPARENT FONT 8, "MS Shell Dlg", 0, 0, 0x1 BEGIN + GROUPBOX "Contact list sorting",IDC_STATIC,2,2,310,68,WS_GROUP 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 "Disable icon blinking",IDC_DISABLEBLINK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,86,86,9 - EDITTEXT IDC_BLINKTIME,12,99,35,12,ES_NUMBER - CONTROL "Spin5",IDC_BLINKSPIN,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS | UDS_HOTTRACK,43,99,11,14 - LTEXT "ms delay",IDC_STMSDELAY,52,102,113,8 - CONTROL "Show",IDC_DONTCYCLE,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,133,90,10 - COMBOBOX IDC_PRIMARYSTATUS,104,132,78,70,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "icon when statuses differ",IDC_STATIC,189,134,116,8,NOT WS_GROUP - CONTROL "Cycle icons every",IDC_CYCLE,"Button",BS_AUTORADIOBUTTON,10,150,89,10 - EDITTEXT IDC_CYCLETIME,103,149,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,133,10,14 - LTEXT "seconds, when statuses differ",IDC_STATIC,141,151,165,8,NOT WS_GROUP - CONTROL "Show multiple icons",IDC_MULTITRAY,"Button",BS_AUTORADIOBUTTON,10,167,91,10 - CONTROL "Only when statuses differ",IDC_ALWAYSMULTI,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,108,167,198,10 - GROUPBOX "System tray icon",IDC_STATIC,2,72,310,47 - GROUPBOX "System tray icon when using multiple protocols",IDC_STATIC,2,121,310,61 - GROUPBOX "Contact list sorting",IDC_STATIC,2,2,310,68,WS_GROUP - CONTROL "Don't move offline user to bottom",IDC_NOOFFLINEMOVE, + CONTROL "Move offline users to bottom",IDC_MOVE_OFFLINE_BOTTOM, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,53,287,10 + CONTROL "Show",IDC_DONTCYCLE,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,83,90,10 + COMBOBOX IDC_PRIMARYSTATUS,104,82,78,70,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "icon when statuses differ",IDC_STATIC,189,84,116,8,NOT WS_GROUP + CONTROL "Cycle icons every",IDC_CYCLE,"Button",BS_AUTORADIOBUTTON,10,100,89,10 + EDITTEXT IDC_CYCLETIME,103,99,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,98,11,14 + LTEXT "seconds, when statuses differ",IDC_STATIC,141,101,165,8,NOT WS_GROUP + CONTROL "Show multiple icons",IDC_MULTITRAY,"Button",BS_AUTORADIOBUTTON,10,117,91,10 + CONTROL "Only when statuses differ",IDC_ALWAYSMULTI,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,108,117,198,10 + GROUPBOX "System tray icon when using multiple protocols",IDC_STATIC,2,71,310,61 END IDD_OPT_CLUI DIALOGEX 0, 0, 313, 233 @@ -129,7 +124,7 @@ BEGIN "Button",BS_AUTOCHECKBOX | WS_TABSTOP,9,59,179,10 CONTROL "Make selection highlight translucent",IDC_NOTNOTRANSLUCENTSEL, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,9,71,179,10 - CONTROL "Dim idle contacts",IDC_IDLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,9,83,155,10 + CONTROL "Dim idle contacts",IDC_IDLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,9,83,153,10 GROUPBOX "Groups",IDC_STATIC,2,99,148,117 CONTROL "Draw a line alongside group names",IDC_LINEWITHGROUPS, "Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,9,109,131,16 @@ -142,26 +137,26 @@ BEGIN "Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,9,181,131,16 LTEXT "Indent groups by:",IDC_STATIC,9,201,67,8 EDITTEXT IDC_GROUPINDENT,78,199,31,12,ES_RIGHT | ES_NUMBER - CONTROL "Spin1",IDC_GROUPINDENTSPIN,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS | UDS_HOTTRACK,103,204,10,14 + CONTROL "Spin1",IDC_GROUPINDENTSPIN,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS | UDS_HOTTRACK,103,198,10,14 LTEXT "pixels",IDC_STATIC,112,201,36,8 GROUPBOX "Visual",IDC_STATIC,156,99,156,131 - CONTROL "Scroll list smoothly",IDC_NOTNOSMOOTHSCROLLING,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,164,110,139,10 + CONTROL "Scroll list smoothly",IDC_NOTNOSMOOTHSCROLLING,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,162,110,139,10 LTEXT "Time:",IDC_STATIC11,174,122,42,8 EDITTEXT IDC_SMOOTHTIME,216,120,31,12,ES_RIGHT | ES_NUMBER - CONTROL "Spin1",IDC_SMOOTHTIMESPIN,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS | UDS_HOTTRACK,240,126,10,14 + CONTROL "Spin1",IDC_SMOOTHTIMESPIN,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS | UDS_HOTTRACK,240,119,10,14 LTEXT "milliseconds",IDC_STATIC12,250,122,56,8,SS_CENTERIMAGE - CONTROL "Hide vertical scroll bar",IDC_NOSCROLLBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,164,135,140,10 - LTEXT "Left margin:",IDC_STATIC,164,148,51,8 + CONTROL "Hide vertical scroll bar",IDC_NOSCROLLBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,162,135,140,10 + LTEXT "Left margin:",IDC_STATIC,162,148,51,8 EDITTEXT IDC_LEFTMARGIN,215,146,31,12,ES_RIGHT | ES_NUMBER - CONTROL "Spin1",IDC_LEFTMARGINSPIN,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS | UDS_HOTTRACK,240,152,10,14 + CONTROL "Spin1",IDC_LEFTMARGINSPIN,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS | UDS_HOTTRACK,240,145,10,14 LTEXT "pixels",IDC_STATIC,250,148,54,8 - LTEXT "Row height:",IDC_STATIC,164,163,51,8 + LTEXT "Row height:",IDC_STATIC,162,163,51,8 EDITTEXT IDC_ROWHEIGHT,215,161,31,12,ES_RIGHT | ES_NUMBER - CONTROL "Spin1",IDC_ROWHEIGHTSPIN,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS | UDS_HOTTRACK,240,167,10,14 + CONTROL "Spin1",IDC_ROWHEIGHTSPIN,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS | UDS_HOTTRACK,240,161,10,14 LTEXT "pixels",IDC_STATIC,250,163,54,8 - CONTROL "Gamma correction",IDC_GAMMACORRECT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,164,174,140,10 - CONTROL "Gray out entire list when:",IDC_GREYOUT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,164,185,139,10 - CONTROL "Tree1",IDC_GREYOUTOPTS,"SysTreeView32",TVS_DISABLEDRAGDROP | TVS_NOTOOLTIPS | WS_BORDER | WS_HSCROLL | WS_TABSTOP,164,195,141,32 + CONTROL "Gamma correction",IDC_GAMMACORRECT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,162,174,140,10 + CONTROL "Gray out entire list when:",IDC_GREYOUT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,162,185,139,10 + CONTROL "Tree1",IDC_GREYOUTOPTS,"SysTreeView32",TVS_DISABLEDRAGDROP | TVS_NOTOOLTIPS | WS_BORDER | WS_HSCROLL | WS_TABSTOP,162,195,141,32 END IDD_OPT_CLCBKG DIALOGEX 0, 0, 235, 154 @@ -257,13 +252,9 @@ BEGIN LEFTMARGIN, 2 RIGHTMARGIN, 312 VERTGUIDE, 9 - VERTGUIDE, 164 - VERTGUIDE, 216 + VERTGUIDE, 162 TOPMARGIN, 2 BOTTOMMARGIN, 232 - HORZGUIDE, 145 - HORZGUIDE, 163 - HORZGUIDE, 222 END IDD_OPT_CLCBKG, DIALOG diff --git a/src/core/stdclist/src/clistopts.cpp b/src/core/stdclist/src/clistopts.cpp index 7a269a8a8b..29683b6506 100644 --- a/src/core/stdclist/src/clistopts.cpp +++ b/src/core/stdclist/src/clistopts.cpp @@ -26,10 +26,10 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. class ClistOptsDlg : public CDlgBase { - CCtrlSpin cycleTime, blink; + CCtrlSpin cycleTime; CCtrlCombo status; CCtrlCheck sortByName, sortByStatus, sortByProto, chkOfflineBottom; - CCtrlCheck chkDisableBlink, chkCycle, chkDontCycle, chkMulti; + CCtrlCheck chkCycle, chkDontCycle, chkMulti; public: ClistOptsDlg() : @@ -37,16 +37,13 @@ public: 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), - chkOfflineBottom(this, IDC_NOOFFLINEMOVE) + chkOfflineBottom(this, IDC_MOVE_OFFLINE_BOTTOM) { - chkDisableBlink.OnChange = Callback(this, &ClistOptsDlg::onChange_DisableBlink); chkCycle.OnChange = chkDontCycle.OnChange = chkMulti.OnChange = Callback(this, &ClistOptsDlg::onChange_Tray); } @@ -64,9 +61,6 @@ public: chkMulti.SetState(iTrayIcon == SETTING_TRAYICON_MULTI); chkDontCycle.SetState(iTrayIcon == SETTING_TRAYICON_SINGLE); - chkDisableBlink.SetState(g_plugin.getBool("DisableTrayFlash", false)); - - blink.SetPosition(g_plugin.getWord("IconFlashTime", 550)); cycleTime.SetPosition(g_plugin.getWord("CycleTime", SETTING_CYCLETIME_DEFAULT)); ptrA szPrimaryStatus(g_plugin.getStringA("PrimaryStatus")); @@ -87,14 +81,12 @@ public: bool OnApply() override { - g_plugin.setByte("SortByStatus", g_bSortByStatus = sortByStatus.GetState()); - g_plugin.setByte("SortByProto", g_bSortByProto = sortByProto.GetState()); - g_plugin.setByte("NoOfflineBottom", g_bNoOfflineBottom = chkOfflineBottom.GetState()); + g_plugin.setByte("SortByStatus", g_bSortByStatus = sortByStatus.IsChecked()); + g_plugin.setByte("SortByProto", g_bSortByProto = sortByProto.IsChecked()); + g_plugin.setByte("OfflineBottom", g_bOfflineToBottom = chkOfflineBottom.IsChecked()); 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.setByte("TrayIcon", (chkDontCycle.IsChecked() ? SETTING_TRAYICON_SINGLE : (chkCycle.IsChecked() ? 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.GetCurData(); if (pa == nullptr) @@ -110,18 +102,10 @@ public: 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); + EnableWindow(GetDlgItem(m_hwnd, IDC_PRIMARYSTATUS), chkDontCycle.IsChecked()); + EnableWindow(GetDlgItem(m_hwnd, IDC_CYCLETIME), chkCycle.IsChecked()); + EnableWindow(GetDlgItem(m_hwnd, IDC_CYCLETIMESPIN), chkCycle.IsChecked()); + EnableWindow(GetDlgItem(m_hwnd, IDC_ALWAYSMULTI), chkMulti.IsChecked()); } }; diff --git a/src/core/stdclist/src/contact.cpp b/src/core/stdclist/src/contact.cpp index c72da2c0fd..daba1cdc61 100644 --- a/src/core/stdclist/src/contact.cpp +++ b/src/core/stdclist/src/contact.cpp @@ -24,7 +24,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "stdafx.h" -bool g_bSortByStatus, g_bSortByProto, g_bNoOfflineBottom; +bool g_bSortByStatus, g_bSortByProto, g_bOfflineToBottom; const struct { @@ -80,8 +80,8 @@ int CompareContacts(const ClcContact* c1, const ClcContact* c2) return ordera - orderb; } else { - //one is offline: offline goes below online - if (!g_bNoOfflineBottom) + // one is offline: offline goes below online + if (g_bOfflineToBottom) if ((statusa == ID_STATUS_OFFLINE) != (statusb == ID_STATUS_OFFLINE)) return 2 * (statusa == ID_STATUS_OFFLINE) - 1; } diff --git a/src/core/stdclist/src/init.cpp b/src/core/stdclist/src/init.cpp index 46745f0361..3ca412c5f7 100644 --- a/src/core/stdclist/src/init.cpp +++ b/src/core/stdclist/src/init.cpp @@ -107,9 +107,14 @@ static INT_PTR GetStatusMode(WPARAM, LPARAM) int CMPlugin::Load() { + if (g_plugin.getBool("NoOfflineBottom")) { + g_plugin.setByte("OfflineBottom", false); + g_plugin.delSetting("NoOfflineBottom"); + } + g_bSortByStatus = g_plugin.getBool("SortByStatus", SETTING_SORTBYSTATUS_DEFAULT); g_bSortByProto = g_plugin.getBool("SortByProto", SETTING_SORTBYPROTO_DEFAULT); - g_bNoOfflineBottom = g_plugin.getBool("NoOfflineBottom"); + g_bOfflineToBottom = g_plugin.getBool("OfflineBottom", true); Clist_GetInterface(); coreCli = g_clistApi; diff --git a/src/core/stdclist/src/resource.h b/src/core/stdclist/src/resource.h index 6f22f577d9..6e4960668e 100644 --- a/src/core/stdclist/src/resource.h +++ b/src/core/stdclist/src/resource.h @@ -109,9 +109,6 @@ #define IDC_TOPLINE 1535 #define IDC_HOTKEYURLSTR 1567 #define IDC_BRINGTOFRONT 1579 -#define IDC_BLINKTIME 1607 -#define IDC_BLINKSPIN 1608 -#define IDC_DISABLEBLINK 1609 #define IDC_IDLE 1610 #define IDC_SBPANELBEVEL 1611 #define IDC_DROPSHADOW 1612 @@ -120,9 +117,7 @@ #define IDC_ONDESKTOP 1657 #define IDC_DISABLEDOCKING 1658 #define IDC_WINCOLOUR 1659 -#define IDC_STMSDELAY 1661 -#define IDC_CHECK1 1662 -#define IDC_NOOFFLINEMOVE 1662 +#define IDC_MOVE_OFFLINE_BOTTOM 1662 // Next default values for new objects // diff --git a/src/core/stdclist/src/stdafx.h b/src/core/stdclist/src/stdafx.h index 03c9854f24..d50af5e471 100644 --- a/src/core/stdclist/src/stdafx.h +++ b/src/core/stdclist/src/stdafx.h @@ -64,6 +64,6 @@ struct CMPlugin : public PLUGIN // shared vars extern CLIST_INTERFACE coreCli; -extern bool g_bSortByStatus, g_bSortByProto, g_bNoOfflineBottom; +extern bool g_bSortByStatus, g_bSortByProto, g_bOfflineToBottom; void LoadClcOptions(HWND hwnd, struct ClcData *dat, BOOL bFirst); diff --git a/src/mir_app/res/resource.rc b/src/mir_app/res/resource.rc index 099e9a58ed..d1db48df72 100644 --- a/src/mir_app/res/resource.rc +++ b/src/mir_app/res/resource.rc @@ -797,12 +797,16 @@ BEGIN CONTROL "Remove temporary contacts on exit",IDC_REMOVETEMP, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,65,166,10 CONTROL "Enable icon blinking",IDC_ENABLE_ICON_BLINK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,77,166,10 - CONTROL "Search works as filter",IDC_FILTER_SEARCH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,89,166,10 + CONTROL "Search works as filter",IDC_FILTER_SEARCH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,89,166,10 CTEXT "'Hide offline' means to hide:",IDC_STATIC,183,14,105,8 CONTROL "",IDC_HIDEOFFLINEOPTS,"SysTreeView32",TVS_DISABLEDRAGDROP | TVS_NOTOOLTIPS | TVS_NONEVENHEIGHT | WS_BORDER | WS_HSCROLL | WS_TABSTOP,183,24,105,104 - GROUPBOX "Tray",IDC_STATIC,6,135,289,39 - CONTROL "Single click interface",IDC_ONECLK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,145,276,10 - CONTROL "Always show status in tooltip",IDC_ALWAYSSTATUS,"Button",BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE | WS_TABSTOP,14,159,276,11 + GROUPBOX "Tray",IDC_STATIC,6,135,289,77 + CONTROL "Enable icon blinking",IDC_ENABLE_TRAY_BLINK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,148,276,10 + EDITTEXT IDC_BLINKTIME,29,160,35,12,ES_NUMBER + CONTROL "",IDC_BLINKSPIN,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS | UDS_HOTTRACK,54,162,11,14 + LTEXT "ms delay",IDC_STATIC,69,162,113,8 + CONTROL "Single click interface",IDC_ONECLK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,176,276,10 + CONTROL "Always show status in tooltip",IDC_ALWAYSSTATUS,"Button",BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE | WS_TABSTOP,13,190,276,11 END IDD_OPT_CHAT_EVENTS DIALOGEX 0, 0, 306, 201 @@ -981,6 +985,7 @@ BEGIN LTEXT "(Setting timeout to 0 means default setting and -1 means indefinite time)",IDC_STATIC,33,151,207,17 END + ///////////////////////////////////////////////////////////////////////////// // // DESIGNINFO @@ -1214,7 +1219,7 @@ BEGIN IDD_OPT_CLIST, DIALOG BEGIN - BOTTOMMARGIN, 165 + BOTTOMMARGIN, 212 END IDD_OPT_CHAT_EVENTS, DIALOG diff --git a/src/mir_app/res/version.rc b/src/mir_app/res/version.rc index f697a9c6a7..5fd3761a4e 100644 --- a/src/mir_app/res/version.rc +++ b/src/mir_app/res/version.rc @@ -6,6 +6,7 @@ #include #include "../include/m_version.h" +#include "../src/copyright.h" #include "../src/resource.h" ///////////////////////////////////////////////////////////////////////////// diff --git a/src/mir_app/src/clc.h b/src/mir_app/src/clc.h index 139ccaceee..d57ec3b1ab 100644 --- a/src/mir_app/src/clc.h +++ b/src/mir_app/src/clc.h @@ -24,6 +24,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #pragma once +#define MODULENAME "CList" + struct ClcContact : public ClcContactBase { }; @@ -95,7 +97,7 @@ int ClcOptInit(WPARAM, LPARAM); namespace Clist { - extern CMOption RemoveTempContacts, DisableIconBlink; + extern CMOption RemoveTempContacts, EnableIconBlink, EnableTrayFlash; }; /* clistmenus.c */ diff --git a/src/mir_app/src/clistevents.cpp b/src/mir_app/src/clistevents.cpp index 66699bbb9f..0533b5b1c7 100644 --- a/src/mir_app/src/clistevents.cpp +++ b/src/mir_app/src/clistevents.cpp @@ -49,8 +49,8 @@ static OBJLIST arImlIcons(10, CompareImlIcons); static UINT_PTR flashTimerId; static int iconsOn; -static int disableTrayFlash; -static int disableIconFlash; +static bool g_bEnableTrayFlash; +static bool g_bEnableIconFlash; static volatile long iEventOrder = 0; ///////////////////////////////////////////////////////////////////////////////////////// @@ -89,7 +89,7 @@ int fnGetImlIconIndex(HICON hIcon) static void ShowOneEventInTray(const CListEvent &ev) { - TrayIconUpdateWithImageList((iconsOn || disableTrayFlash) ? ev.imlIconIndex : 0, ev.szTooltip.w, GetEventProtocol(ev)); + TrayIconUpdateWithImageList((iconsOn || !g_bEnableTrayFlash) ? ev.imlIconIndex : 0, ev.szTooltip.w, GetEventProtocol(ev)); } static void ShowEventsInTray() @@ -138,7 +138,7 @@ static VOID CALLBACK IconFlashTimer(HWND, UINT, UINT_PTR idEvent, DWORD) if (g_cliEvents[j].hContact == e.hContact) break; if (j >= i) - Clist_ChangeContactIcon(e.hContact, iconsOn || disableIconFlash ? e.imlIconIndex : 0); + Clist_ChangeContactIcon(e.hContact, iconsOn || !g_bEnableTrayFlash ? e.imlIconIndex : 0); // decrease eflashes in any case - no need to collect all events if (e.flags & CLEF_ONLYAFEW) @@ -335,10 +335,10 @@ static int CListEventSettingsChanged(WPARAM hContact, LPARAM lParam) { DBCONTACTWRITESETTING *cws = (DBCONTACTWRITESETTING*)lParam; if (hContact == 0 && cws && cws->szModule && cws->szSetting && strcmp(cws->szModule, "CList") == 0) { - if (strcmp(cws->szSetting, "DisableTrayFlash") == 0) - disableTrayFlash = (int)cws->value.bVal; - else if (strcmp(cws->szSetting, "NoIconBlink") == 0) - disableIconFlash = (int)cws->value.bVal; + if (strcmp(cws->szSetting, "EnableTrayFlash") == 0) + g_bEnableTrayFlash = (int)cws->value.bVal; + else if (strcmp(cws->szSetting, "EnableIconBlink") == 0) + g_bEnableIconFlash = (int)cws->value.bVal; } return 0; } @@ -349,8 +349,18 @@ int InitCListEvents(void) { g_clistApi.events = &g_cliEvents; - disableTrayFlash = db_get_b(0, "CList", "DisableTrayFlash", 0); - disableIconFlash = Clist::DisableIconBlink; + if (db_get_b(0, MODULENAME, "DisableTrayFlash")) { + Clist::EnableTrayFlash = false; + db_unset(0, MODULENAME, "DisableTrayFlash"); + } + + if (db_get_b(0, MODULENAME, "DisableIconBlink")) { + Clist::EnableIconBlink = false; + db_unset(0, MODULENAME, "DisableIconBlink"); + } + + g_bEnableTrayFlash = Clist::EnableTrayFlash; + g_bEnableIconFlash = Clist::EnableIconBlink; 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 ad34053cb2..169ee85b6b 100644 --- a/src/mir_app/src/clistopts.cpp +++ b/src/mir_app/src/clistopts.cpp @@ -25,13 +25,12 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "stdafx.h" #include "clc.h" -#define MODULENAME "CList" - CMOption Clist::UseGroups(MODULENAME, "UseGroups", true); CMOption Clist::HideOffline(MODULENAME, "HideOffline", false); CMOption Clist::ConfirmDelete(MODULENAME, "ConfirmDelete", true); +CMOption Clist::EnableIconBlink(MODULENAME, "EnableIconBlink", true); +CMOption Clist::EnableTrayFlash(MODULENAME, "EnableTrayFlash", true); CMOption Clist::HideEmptyGroups(MODULENAME, "HideEmptyGroups", false); -CMOption Clist::DisableIconBlink(MODULENAME, "NoIconBlink", false); CMOption Clist::RemoveTempContacts(MODULENAME, "RemoveTempContacts", true); CMOption Clist::Tray1Click(MODULENAME, "Tray1Click", IsWinVer7Plus()); @@ -61,13 +60,15 @@ static const offlineValues[] = class ClistCommonOptsDlg : public CDlgBase { + CCtrlSpin blink; CCtrlCheck chkUseGroups, chkHideOffline, chkConfirmDelete, chkHideEmptyGroups, chkRemoveTempContacts, chkEnableIconBlink, chkFilterSearch; - CCtrlCheck chkAlwaysStatus, chkOneClick; + CCtrlCheck chkAlwaysStatus, chkOneClick, chkEnableTrayBlink; CCtrlTreeView hideStatuses; public: ClistCommonOptsDlg() : CDlgBase(g_plugin, IDD_OPT_CLIST), + blink(this, IDC_BLINKSPIN, 0x3FFF, 250), hideStatuses(this, IDC_HIDEOFFLINEOPTS), chkOneClick(this, IDC_ONECLK), chkUseGroups(this, IDC_USEGROUPS), @@ -77,8 +78,11 @@ public: chkConfirmDelete(this, IDC_CONFIRMDELETE), chkHideEmptyGroups(this, IDC_HIDEEMPTYGROUPS), chkEnableIconBlink(this, IDC_ENABLE_ICON_BLINK), + chkEnableTrayBlink(this, IDC_ENABLE_TRAY_BLINK), chkRemoveTempContacts(this, IDC_REMOVETEMP) { + chkEnableTrayBlink.OnChange = Callback(this, &ClistCommonOptsDlg::onChange_TrayBlink); + CreateLink(chkOneClick, Clist::Tray1Click); CreateLink(chkUseGroups, Clist::UseGroups); CreateLink(chkHideOffline, Clist::HideOffline); @@ -86,16 +90,18 @@ public: CreateLink(chkAlwaysStatus, Clist::TrayAlwaysStatus); CreateLink(chkConfirmDelete, Clist::ConfirmDelete); CreateLink(chkHideEmptyGroups, Clist::HideEmptyGroups); + CreateLink(chkEnableIconBlink, Clist::EnableIconBlink); + CreateLink(chkEnableTrayBlink, Clist::EnableTrayFlash); CreateLink(chkRemoveTempContacts, Clist::RemoveTempContacts); } bool OnInitDialog() override { + blink.SetPosition(db_get_w(0, MODULENAME, "IconFlashTime", 550)); + SetWindowLongPtr(hideStatuses.GetHwnd(), GWL_STYLE, GetWindowLongPtr(hideStatuses.GetHwnd(), GWL_STYLE) | TVS_NOHSCROLL | TVS_CHECKBOXES); - chkEnableIconBlink.SetState(!Clist::DisableIconBlink); - int style = Clist::OfflineModes; TVINSERTSTRUCT tvis; @@ -114,6 +120,8 @@ public: bool OnApply() override { + db_set_w(0, MODULENAME, "IconFlashTime", blink.GetPosition()); + uint32_t flags = 0; TVITEMEX tvi; @@ -127,13 +135,18 @@ public: } Clist::OfflineModes = flags; - Clist::DisableIconBlink = !chkEnableIconBlink.IsChecked(); - Clist_ClcOptionsChanged(); Clist_LoadContactTree(); Clist_InitAutoRebuild(g_clistApi.hwndContactTree); return true; } + + void onChange_TrayBlink(CCtrlCheck*) + { + bool bEnabled = chkEnableTrayBlink.IsChecked(); + EnableWindow(GetDlgItem(m_hwnd, IDC_BLINKTIME), bEnabled); + EnableWindow(GetDlgItem(m_hwnd, IDC_BLINKSPIN), bEnabled); + } }; int ClcOptInit(WPARAM wParam, LPARAM) diff --git a/src/mir_app/src/clisttray.cpp b/src/mir_app/src/clisttray.cpp index 213b3cdc89..9d4137748b 100644 --- a/src/mir_app/src/clisttray.cpp +++ b/src/mir_app/src/clisttray.cpp @@ -232,11 +232,11 @@ int fnTrayIconInit(HWND hwnd) if (netProtoCount) { g_clistApi.trayIcon = (trayIconInfo_t*)mir_calloc(sizeof(trayIconInfo_t) * g_arAccounts.getCount()); - int trayIconSetting = db_get_b(0, "CList", "TrayIcon", SETTING_TRAYICON_DEFAULT); + int trayIconSetting = db_get_b(0, MODULENAME, "TrayIcon", SETTING_TRAYICON_DEFAULT); if (trayIconSetting == SETTING_TRAYICON_SINGLE) { DBVARIANT dbv = { DBVT_DELETED }; char *szProto; - if (!db_get_s(0, "CList", "PrimaryStatus", &dbv) && (averageMode < 0 || db_get_b(0, "CList", "AlwaysPrimary", 0))) + if (!db_get_s(0, MODULENAME, "PrimaryStatus", &dbv) && (averageMode < 0 || db_get_b(0, MODULENAME, "AlwaysPrimary", 0))) szProto = dbv.pszVal; else szProto = nullptr; @@ -244,7 +244,7 @@ int fnTrayIconInit(HWND hwnd) Clist_TrayIconAdd(hwnd, nullptr, szProto, szProto ? Proto_GetStatus(szProto) : CallService(MS_CLIST_GETSTATUSMODE, 0, 0)); db_free(&dbv); } - else if (trayIconSetting == SETTING_TRAYICON_MULTI && (averageMode < 0 || db_get_b(0, "CList", "AlwaysMulti", SETTING_ALWAYSMULTI_DEFAULT))) { + else if (trayIconSetting == SETTING_TRAYICON_MULTI && (averageMode < 0 || db_get_b(0, MODULENAME, "AlwaysMulti", SETTING_ALWAYSMULTI_DEFAULT))) { g_clistApi.trayIconCount = netProtoCount; for (int i = 0; i < g_arAccounts.getCount(); i++) { int j = Clist_GetAccountIndex(i); @@ -365,9 +365,9 @@ int TrayIconUpdate(HICON hNewIcon, const wchar_t *szNewTip, const char *szPrefer SetTaskBarIcon(nullptr, nullptr); g_clistApi.trayIcon[i].isBase = isBase; - if (db_get_b(0, "CList", "TrayIcon", SETTING_TRAYICON_DEFAULT) == SETTING_TRAYICON_MULTI) { - uint32_t time1 = db_get_w(0, "CList", "CycleTime", SETTING_CYCLETIME_DEFAULT) * 200; - uint32_t time2 = db_get_w(0, "CList", "IconFlashTime", 550) + 1000; + if (db_get_b(0, MODULENAME, "TrayIcon", SETTING_TRAYICON_DEFAULT) == SETTING_TRAYICON_MULTI) { + uint32_t time1 = db_get_w(0, MODULENAME, "CycleTime", SETTING_CYCLETIME_DEFAULT) * 200; + uint32_t time2 = db_get_w(0, MODULENAME, "IconFlashTime", 550) + 1000; uint32_t time = max(max(uint32_t(2000), time1), time2); if (RefreshTimerId) KillTimer(nullptr, RefreshTimerId); @@ -405,8 +405,8 @@ MIR_APP_DLL(int) Clist_TrayIconSetBaseInfo(HICON hIcon, const char *szPreferredP } if ((Clist_GetProtocolVisibility(szPreferredProto)) && (Proto_GetAverageStatus(nullptr) == -1) && - (db_get_b(0, "CList", "TrayIcon", SETTING_TRAYICON_DEFAULT) == SETTING_TRAYICON_MULTI) && - !(db_get_b(0, "CList", "AlwaysMulti", SETTING_ALWAYSMULTI_DEFAULT))) + (db_get_b(0, MODULENAME, "TrayIcon", SETTING_TRAYICON_DEFAULT) == SETTING_TRAYICON_MULTI) && + !(db_get_b(0, MODULENAME, "AlwaysMulti", SETTING_ALWAYSMULTI_DEFAULT))) goto LBL_Error; } @@ -454,7 +454,7 @@ static VOID CALLBACK TrayCycleTimerProc(HWND, UINT, UINT_PTR, DWORD) MIR_APP_DLL(void) Clist_TraySetTimer() { - CycleTimerId = SetTimer(nullptr, CycleTimerId, db_get_w(0, "CList", "CycleTime", SETTING_CYCLETIME_DEFAULT) * 1000, TrayCycleTimerProc); + CycleTimerId = SetTimer(nullptr, CycleTimerId, db_get_w(0, MODULENAME, "CycleTime", SETTING_CYCLETIME_DEFAULT) * 1000, TrayCycleTimerProc); } ///////////////////////////////////////////////////////////////////////////////////////// @@ -488,13 +488,13 @@ int fnTrayCalcChanged(const char *szChangedProto, int averageMode, int netProtoC if (netProtoCount == 0) return Clist_TrayIconSetBaseInfo(ImageList_GetIcon(hCListImages, g_clistApi.pfnIconFromStatusMode(nullptr, averageMode, 0), ILD_NORMAL), nullptr); - int trayIconSetting = db_get_b(0, "CList", "TrayIcon", SETTING_TRAYICON_DEFAULT); + int trayIconSetting = db_get_b(0, MODULENAME, "TrayIcon", SETTING_TRAYICON_DEFAULT); if (averageMode > 0) { if (trayIconSetting != SETTING_TRAYICON_MULTI) return Clist_TrayIconSetBaseInfo(g_clistApi.pfnGetIconFromStatusMode(0, nullptr, averageMode), nullptr); - if (db_get_b(0, "CList", "AlwaysMulti", SETTING_ALWAYSMULTI_DEFAULT)) + if (db_get_b(0, MODULENAME, "AlwaysMulti", SETTING_ALWAYSMULTI_DEFAULT)) return Clist_TrayIconSetBaseInfo(g_clistApi.pfnGetIconFromStatusMode(0, szChangedProto, Proto_GetStatus(szChangedProto)), (char*)szChangedProto); if (g_clistApi.trayIcon == nullptr || g_clistApi.trayIcon[0].szProto == nullptr) @@ -512,7 +512,7 @@ int fnTrayCalcChanged(const char *szChangedProto, int averageMode, int netProtoC case SETTING_TRAYICON_MULTI: if (!g_clistApi.trayIcon) Clist_TrayIconRemove(nullptr, nullptr); - else if ((g_clistApi.trayIconCount > 1 || netProtoCount == 1) || db_get_b(0, "CList", "AlwaysMulti", SETTING_ALWAYSMULTI_DEFAULT)) + else if ((g_clistApi.trayIconCount > 1 || netProtoCount == 1) || db_get_b(0, MODULENAME, "AlwaysMulti", SETTING_ALWAYSMULTI_DEFAULT)) return Clist_TrayIconSetBaseInfo(g_clistApi.pfnGetIconFromStatusMode(0, szChangedProto, Proto_GetStatus(szChangedProto)), (char*)szChangedProto); else { Clist_TrayIconDestroy(g_clistApi.hwndContactList); @@ -521,7 +521,7 @@ int fnTrayCalcChanged(const char *szChangedProto, int averageMode, int netProtoC break; case SETTING_TRAYICON_SINGLE: - ptrA szProto(db_get_sa(0, "CList", "PrimaryStatus")); + ptrA szProto(db_get_sa(0, MODULENAME, "PrimaryStatus")); return Clist_TrayIconSetBaseInfo(g_clistApi.pfnGetIconFromStatusMode(0, szProto, szProto ? Proto_GetStatus(szProto) : CallService(MS_CLIST_GETSTATUSMODE, 0, 0)), szProto); } } @@ -582,10 +582,10 @@ int fnTrayIconPauseAutoHide(WPARAM, LPARAM) initcheck 0; mir_cslock lck(trayLockCS); - if (db_get_b(0, "CList", "AutoHide", SETTING_AUTOHIDE_DEFAULT)) { + if (db_get_b(0, MODULENAME, "AutoHide", SETTING_AUTOHIDE_DEFAULT)) { if (GetActiveWindow() != g_clistApi.hwndContactList) { KillTimer(nullptr, autoHideTimerId); - autoHideTimerId = SetTimer(nullptr, 0, 1000 * db_get_w(0, "CList", "HideTime", SETTING_HIDETIME_DEFAULT), TrayIconAutoHideTimer); + autoHideTimerId = SetTimer(nullptr, 0, 1000 * db_get_w(0, MODULENAME, "HideTime", SETTING_HIDETIME_DEFAULT), TrayIconAutoHideTimer); } } return 0; @@ -656,9 +656,9 @@ INT_PTR fnTrayIconProcessMessage(WPARAM wParam, LPARAM lParam) break; case WM_ACTIVATE: - if (db_get_b(0, "CList", "AutoHide", SETTING_AUTOHIDE_DEFAULT)) { + if (db_get_b(0, MODULENAME, "AutoHide", SETTING_AUTOHIDE_DEFAULT)) { if (LOWORD(msg->wParam) == WA_INACTIVE) - autoHideTimerId = SetTimer(nullptr, 0, 1000 * db_get_w(0, "CList", "HideTime", SETTING_HIDETIME_DEFAULT), TrayIconAutoHideTimer); + autoHideTimerId = SetTimer(nullptr, 0, 1000 * db_get_w(0, MODULENAME, "HideTime", SETTING_HIDETIME_DEFAULT), TrayIconAutoHideTimer); else KillTimer(nullptr, autoHideTimerId); } diff --git a/src/mir_app/src/copyright.h b/src/mir_app/src/copyright.h new file mode 100644 index 0000000000..29b0f97206 --- /dev/null +++ b/src/mir_app/src/copyright.h @@ -0,0 +1,2 @@ + +#define LEGAL_COPYRIGHT "Copyright © 2000-11 Miranda IM, 2012-22 Miranda NG team. This software is released under the terms of the GNU General Public License.\0" diff --git a/src/mir_app/src/resource.h b/src/mir_app/src/resource.h index f181ae7729..b6005fac19 100644 --- a/src/mir_app/src/resource.h +++ b/src/mir_app/src/resource.h @@ -1,6 +1,6 @@ //{{NO_DEPENDENCIES}} // Microsoft Visual C++ generated include file. -// Used by w:\miranda-ng\src\mir_app\res\resource.rc +// Used by W:\miranda-ng\src\mir_app\res\resource.rc // #define IDC_AUTHICON 1 #define IDC_NOTOALL 3 @@ -322,6 +322,9 @@ #define IDC_SELECTCRYPT_COMBO 1110 #define IDC_CRYPTOPROVIDER_DESCR 1111 #define IDC_NUMBER 1113 +#define IDC_BLINKTIME 1114 +#define IDC_BLINKSPIN 1115 +#define IDC_ENABLE_TRAY_BLINK 1116 #define IDC_FINDWHAT 1131 #define IDC_FIND 1132 #define IDC_FILE 1133 @@ -698,8 +701,6 @@ #define IDI_POPUP 40088 #define IDI_NOPOPUP 40089 -#define LEGAL_COPYRIGHT "Copyright © 2000-11 Miranda IM, 2012-22 Miranda NG team. This software is released under the terms of the GNU General Public License.\0" - // Next default values for new objects // #ifdef APSTUDIO_INVOKED diff --git a/src/mir_app/src/stdafx.h b/src/mir_app/src/stdafx.h index 9e8bb456c8..e40748c95a 100644 --- a/src/mir_app/src/stdafx.h +++ b/src/mir_app/src/stdafx.h @@ -104,6 +104,7 @@ typedef struct SslHandle *HSSL; typedef struct GlobalLogSettingsBase GlobalLogSettings; #include +#include "copyright.h" #include "resource.h" struct CMPlugin : public PLUGIN -- cgit v1.2.3