diff options
Diffstat (limited to 'plugins/Clist_modern')
-rw-r--r-- | plugins/Clist_modern/res/resource.rc | 44 | ||||
-rw-r--r-- | plugins/Clist_modern/src/modern_clc.cpp | 8 | ||||
-rw-r--r-- | plugins/Clist_modern/src/modern_clist.h | 42 | ||||
-rw-r--r-- | plugins/Clist_modern/src/modern_clui.cpp | 11 | ||||
-rw-r--r-- | plugins/Clist_modern/src/modern_global_structure.h | 22 | ||||
-rw-r--r-- | plugins/Clist_modern/src/modern_viewmodebar.cpp | 403 | ||||
-rw-r--r-- | plugins/Clist_modern/src/resource.h | 6 |
7 files changed, 298 insertions, 238 deletions
diff --git a/plugins/Clist_modern/res/resource.rc b/plugins/Clist_modern/res/resource.rc index 397b1f2593..fca73ca0c9 100644 --- a/plugins/Clist_modern/res/resource.rc +++ b/plugins/Clist_modern/res/resource.rc @@ -167,33 +167,35 @@ STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD EXSTYLE WS_EX_CONTROLPARENT
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
- GROUPBOX "Available view modes",IDC_STATIC,7,2,158,85
- LISTBOX IDC_VIEWMODES,10,12,123,71,LBS_SORT | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP,WS_EX_CLIENTEDGE
+ GROUPBOX "Available view modes",IDC_STATIC,7,2,158,52
GROUPBOX "Include protocols",IDC_STATIC,169,2,130,85
- CONTROL "",IDC_PROTOCOLS,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_AUTOARRANGE | LVS_NOCOLUMNHEADER | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,175,10,121,72
- CONTROL "",IDC_ADDVIEWMODE,"MButtonClass",WS_TABSTOP,140,22,18,16
- CONTROL "",IDC_RENAMEVIEWMODE,"MButtonClass",WS_TABSTOP,140,42,18,16
- CONTROL "",IDC_DELETEVIEWMODE,"MButtonClass",WS_TABSTOP,140,62,18,16
- GROUPBOX "Include groups",IDC_STATIC,6,87,159,89,0,WS_EX_TRANSPARENT
- CONTROL "",IDC_GROUPS,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_AUTOARRANGE | LVS_NOCOLUMNHEADER | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,10,98,122,57
- CONTROL "Show contacts in groups",IDC_USEGROUPS,"Button",BS_AUTO3STATE | WS_TABSTOP,10,160,122,11
- GROUPBOX "Include status modes",IDC_STATIC,171,87,130,89,0,WS_EX_TRANSPARENT
- CONTROL "",IDC_STATUSMODES,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_AUTOARRANGE | LVS_NOCOLUMNHEADER | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,173,98,121,73
- LTEXT "Protocol",IDC_STATIC,31,187,49,12
- COMBOBOX IDC_PROTOGROUPOP,85,185,37,56,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
- CTEXT "Group",IDC_STATIC,129,187,44,12
- COMBOBOX IDC_GROUPSTATUSOP,177,185,37,56,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
- RTEXT "Status mode",IDC_STATIC,221,187,54,12
+ CONTROL "",IDC_PROTOCOLS,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_AUTOARRANGE | LVS_NOCOLUMNHEADER | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,176,12,117,70
+ CONTROL "",IDC_ADDVIEWMODE,"MButtonClass",WS_TABSTOP,43,32,18,16
+ CONTROL "",IDC_RENAMEVIEWMODE,"MButtonClass",WS_TABSTOP,73,32,18,16
+ CONTROL "",IDC_DELETEVIEWMODE,"MButtonClass",WS_TABSTOP,102,32,18,16
+ GROUPBOX "Include groups",IDC_STATIC,6,54,159,121,0,WS_EX_TRANSPARENT
+ CONTROL "",IDC_GROUPS,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_AUTOARRANGE | LVS_NOCOLUMNHEADER | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,12,66,146,57
+ CONTROL "Show contacts in groups",IDC_USEGROUPS,"Button",BS_AUTO3STATE | WS_TABSTOP,15,130,143,11
+ CONTROL "Hide empty groups",IDC_HIDEEMPTYGROUPS,"Button",BS_AUTO3STATE | WS_TABSTOP,24,144,132,11
+ CONTROL "Show groups folded",IDC_FOLD_GROUPS,"Button",BS_AUTO3STATE | WS_TABSTOP,24,158,132,11
+ GROUPBOX "Include status modes",IDC_STATIC,169,87,130,89,0,WS_EX_TRANSPARENT
+ CONTROL "",IDC_STATUSMODES,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_AUTOARRANGE | LVS_NOCOLUMNHEADER | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,176,98,117,73
+ LTEXT "Protocol",IDC_STATIC,31,189,49,9
+ COMBOBOX IDC_PROTOGROUPOP,85,187,37,56,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
+ CTEXT "Group",IDC_STATIC,129,189,44,9
+ COMBOBOX IDC_GROUPSTATUSOP,177,187,37,56,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
+ RTEXT "Status mode",IDC_STATIC,221,189,54,9
CONTROL "Automatically clear this view mode after",IDC_AUTOCLEAR,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,225,172,11
- EDITTEXT IDC_AUTOCLEARVAL,222,224,29,12,ES_AUTOHSCROLL
- CONTROL "",IDC_AUTOCLEARSPIN,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,246,224,8,13
- LTEXT "seconds",IDC_STATIC,262,225,28,12
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,227,172,11
+ EDITTEXT IDC_AUTOCLEARVAL,222,226,29,12,ES_AUTOHSCROLL
+ CONTROL "",IDC_AUTOCLEARSPIN,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,248,225,8,13
+ LTEXT "seconds",IDC_STATIC,262,227,28,11
GROUPBOX "View mode options",IDC_STATIC,8,176,293,68
CONTROL "Last message",IDC_LASTMSG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,208,86,11
COMBOBOX IDC_LASTMESSAGEOP,106,208,81,56,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
- EDITTEXT IDC_LASTMSGVALUE,193,208,31,13,ES_AUTOHSCROLL
+ EDITTEXT IDC_LASTMSGVALUE,193,208,31,12,ES_AUTOHSCROLL
COMBOBOX IDC_LASTMESSAGEUNIT,229,208,68,56,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
+ COMBOBOX IDC_VIEWMODES,15,14,144,30,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
END
IDD_OPT_VIEWMODES2 DIALOGEX 0, 0, 309, 244
diff --git a/plugins/Clist_modern/src/modern_clc.cpp b/plugins/Clist_modern/src/modern_clc.cpp index d89b70b541..2749972689 100644 --- a/plugins/Clist_modern/src/modern_clc.cpp +++ b/plugins/Clist_modern/src/modern_clc.cpp @@ -1643,10 +1643,12 @@ HRESULT ClcLoadModule() int ClcUnloadModule()
{
- if (g_CluiData.bOldUseGroups != (uint8_t)-1)
+ if (g_CluiData.bOldUseGroups != -1)
Clist::UseGroups = g_CluiData.bOldUseGroups;
- if (g_CluiData.boldHideOffline != (uint8_t)-1)
- Clist::HideOffline = g_CluiData.boldHideOffline;
+ if (g_CluiData.bOldHideOffline != -1)
+ Clist::HideOffline = g_CluiData.bOldHideOffline;
+ if (g_CluiData.bOldHideEmptyGroups != -1)
+ Clist::HideEmptyGroups = g_CluiData.bOldHideEmptyGroups;
return 0;
}
diff --git a/plugins/Clist_modern/src/modern_clist.h b/plugins/Clist_modern/src/modern_clist.h index 79d9ca48cf..c04ab2562b 100644 --- a/plugins/Clist_modern/src/modern_clist.h +++ b/plugins/Clist_modern/src/modern_clist.h @@ -101,24 +101,30 @@ struct ClcCacheEntry : public ClcCacheEntryBase ///////////////////////////////////////////////////////////////////////////////
-#define CLVM_FILTER_PROTOS 1
-#define CLVM_FILTER_GROUPS 2
-#define CLVM_FILTER_STATUS 4
-#define CLVM_FILTER_VARIABLES 8
-#define CLVM_STICKY_CONTACTS 16
-#define CLVM_FILTER_STICKYSTATUS 32
-#define CLVM_FILTER_LASTMSG 64
-#define CLVM_FILTER_LASTMSG_OLDERTHAN 128
-#define CLVM_FILTER_LASTMSG_NEWERTHAN 256
-
-#define CLVM_PROTOGROUP_OP 1
-#define CLVM_GROUPSTATUS_OP 2
-#define CLVM_AUTOCLEAR 4
-#define CLVM_INCLUDED_UNGROUPED 8
-#define CLVM_USELASTMSG 16
-
-#define CLVM_USEGROUPS 32
-#define CLVM_DONOTUSEGROUPS 64
+#define CLVM_FILTER_PROTOS 0x0001
+#define CLVM_FILTER_GROUPS 0x0002
+#define CLVM_FILTER_STATUS 0x0004
+#define CLVM_FILTER_VARIABLES 0x0008
+#define CLVM_STICKY_CONTACTS 0x0010
+#define CLVM_FILTER_STICKYSTATUS 0x0020
+#define CLVM_FILTER_LASTMSG 0x0040
+#define CLVM_FILTER_LASTMSG_OLDERTHAN 0x0080
+#define CLVM_FILTER_LASTMSG_NEWERTHAN 0x0100
+
+#define CLVM_PROTOGROUP_OP 0x0001
+#define CLVM_GROUPSTATUS_OP 0x0002
+#define CLVM_AUTOCLEAR 0x0004
+#define CLVM_INCLUDED_UNGROUPED 0x0008
+#define CLVM_USELASTMSG 0x0010
+
+#define CLVM_USEGROUPS 0x0020
+#define CLVM_DONOTUSEGROUPS 0x0040
+
+#define CLVM_FOLDGROUPS 0x0080
+#define CLVM_UNFOLDGROUPS 0x0100
+
+#define CLVM_HIDEEMPTYGROUPS 0x0200
+#define CLVM_SHOWEMPTYGROUPS 0x0400
//changes the 'use groups' flag and call CLUI v0.8.0.16+
//wParam=newValue
diff --git a/plugins/Clist_modern/src/modern_clui.cpp b/plugins/Clist_modern/src/modern_clui.cpp index 0b801cc16b..d61609f4c5 100644 --- a/plugins/Clist_modern/src/modern_clui.cpp +++ b/plugins/Clist_modern/src/modern_clui.cpp @@ -72,7 +72,9 @@ RECT g_rcEdgeSizingRect = { 0 }; static uint8_t bAlphaEnd;
static int bOldHideOffline;
+static int bOldHideEmptyGroups;
static int bOldUseGroups;
+static int bOldFoldGroups;
static uint16_t wBehindEdgeShowDelay,
wBehindEdgeHideDelay,
@@ -301,11 +303,17 @@ CLUI::CLUI() : LoadCLUIFramesModule();
- g_CluiData.boldHideOffline = -1;
+ g_CluiData.bOldHideEmptyGroups = -1;
+ bOldHideEmptyGroups = Clist::HideEmptyGroups;
+
+ g_CluiData.bOldHideOffline = -1;
bOldHideOffline = Clist::HideOffline;
g_CluiData.bOldUseGroups = -1;
bOldUseGroups = Clist::UseGroups;
+
+ g_CluiData.bOldFoldGroups = -1;
+ bOldFoldGroups = -1;
}
CLUI::~CLUI()
@@ -441,6 +449,7 @@ HRESULT CLUI::CreateCLC() if (g_CluiData.current_viewmode[0] == '\0') {
g_clistApi.pfnSetHideOffline((bOldHideOffline == -1) ? false : bOldHideOffline);
CallService(MS_CLIST_SETUSEGROUPS, (bOldUseGroups == -1) ? false : bOldUseGroups, 0);
+ SendMessage(g_clistApi.hwndContactTree, CLM_SETHIDEEMPTYGROUPS, (bOldHideEmptyGroups == -1) ? false : bOldHideEmptyGroups, 0);
}
nLastRequiredHeight = 0;
mutex_bDisableAutoUpdate = 0;
diff --git a/plugins/Clist_modern/src/modern_global_structure.h b/plugins/Clist_modern/src/modern_global_structure.h index 6012cb61fe..689d06b7de 100644 --- a/plugins/Clist_modern/src/modern_global_structure.h +++ b/plugins/Clist_modern/src/modern_global_structure.h @@ -11,9 +11,9 @@ struct CLUIDATA // NotifyArea menu
HMENU hMenuNotify;
- uint16_t wNextMenuID;
+ uint16_t wNextMenuID;
int iIconNotify;
- uint32_t dwFlags;
+ uint32_t dwFlags;
int hIconNotify;
MCONTACT hUpdateContact;
@@ -21,15 +21,17 @@ struct CLUIDATA wchar_t groupFilter[2048];
char protoFilter[2048];
char varFilter[2048];
- uint32_t lastMsgFilter;
+ uint32_t lastMsgFilter;
char current_viewmode[256], old_viewmode[256];
- uint8_t boldHideOffline;
- uint8_t bOldUseGroups;
- uint32_t statusMaskFilter;
- uint32_t stickyMaskFilter;
- uint32_t filterFlags;
- uint32_t bFilterEffective;
- uint32_t t_now;
+ int bOldHideOffline;
+ int bOldHideEmptyGroups;
+ int bOldUseGroups;
+ int bOldFoldGroups;
+ uint32_t statusMaskFilter;
+ uint32_t stickyMaskFilter;
+ uint32_t filterFlags;
+ uint32_t bFilterEffective;
+ uint32_t t_now;
// Modern Global Variables
int fDocked;
diff --git a/plugins/Clist_modern/src/modern_viewmodebar.cpp b/plugins/Clist_modern/src/modern_viewmodebar.cpp index c80af4e9f8..8fe23159dc 100644 --- a/plugins/Clist_modern/src/modern_viewmodebar.cpp +++ b/plugins/Clist_modern/src/modern_viewmodebar.cpp @@ -117,8 +117,7 @@ void DeleteViewMode(char *szName) }
for (auto &hContact : Contacts())
- if (db_get_dw(hContact, CLVM_MODULE, szName, -1) != -1)
- db_set_dw(hContact, CLVM_MODULE, szName, 0);
+ db_unset(hContact, CLVM_MODULE, szName);
}
/////////////////////////////////////////////////////////////////////////////////////////
@@ -188,37 +187,60 @@ public: ////////////////////////////////////////////////////////////////////////////////////////
+static int __cdecl FillModes(const char *szsetting, void *param)
+{
+ if (uint8_t(szsetting[0]) == 246)
+ return 1;
+ if (szsetting[0] == 13)
+ return 1;
+
+ ptrW temp(mir_utf8decodeW(szsetting));
+ if (temp != nullptr) {
+ auto *modes = (CCtrlCombo *)param;
+ modes->AddString(temp);
+ }
+ return 1;
+}
+
class CViewModeSetupDlg1 : public CViewModePage
{
int m_iCurrItem = -1;
- CCtrlCheck chkLastMsg;
- CCtrlCombo cmbProtoGroup, cmbGroupStatus, cmbLastMsgOp, cmbcmbLastMsgUnit;
+ CCtrlCheck chkLastMsg, chkUseGroups;
+ CCtrlCombo cmbModes, cmbProtoGroup, cmbGroupStatus, cmbLastMsgOp, cmbcmbLastMsgUnit;
CCtrlMButton btnAdd, btnRename, btnDelete;
- CCtrlListBox modes;
CCtrlListView protocols, groups, statuses;
- static int __cdecl FillModes(const char *szsetting, void *param)
+public:
+ CViewModeSetupDlg1(CViewModeSetupDlg *_1) :
+ CViewModePage(IDD_OPT_VIEWMODES1, _1),
+ groups(this, IDC_GROUPS),
+ statuses(this, IDC_STATUSMODES),
+ protocols(this, IDC_PROTOCOLS),
+ btnAdd(this, IDC_ADDVIEWMODE, SKINICON_OTHER_ADDCONTACT, LPGEN("Add view mode")),
+ btnRename(this, IDC_RENAMEVIEWMODE, SKINICON_OTHER_RENAME, LPGEN("Rename view mode")),
+ btnDelete(this, IDC_DELETEVIEWMODE, SKINICON_OTHER_DELETE, LPGEN("Remove view mode")),
+ cmbModes(this, IDC_VIEWMODES),
+ chkLastMsg(this, IDC_LASTMSG),
+ chkUseGroups(this, IDC_USEGROUPS),
+ cmbProtoGroup(this, IDC_PROTOGROUPOP),
+ cmbGroupStatus(this, IDC_GROUPSTATUSOP),
+ cmbLastMsgOp(this, IDC_LASTMESSAGEOP),
+ cmbcmbLastMsgUnit(this, IDC_LASTMESSAGEUNIT)
{
- if (uint8_t(szsetting[0]) == 246)
- return 1;
- if (szsetting[0] == 13)
- return 1;
-
- ptrW temp(mir_utf8decodeW(szsetting));
- if (temp != nullptr) {
- CCtrlListBox *modes = (CCtrlListBox *)param;
- modes->AddString(temp);
- }
- return 1;
- }
+ btnAdd.OnClick = Callback(this, &CViewModeSetupDlg1::onClick_Add);
+ btnRename.OnClick = Callback(this, &CViewModeSetupDlg1::onClick_Rename);
+ btnDelete.OnClick = Callback(this, &CViewModeSetupDlg1::onClick_Delete);
- ////////////////////////////////////////////////////////////////////////////////////////
- // fills dialog with data
+ chkLastMsg.OnChange = Callback(this, &CViewModeSetupDlg1::onChange_LastMsg);
+ chkUseGroups.OnChange = Callback(this, &CViewModeSetupDlg1::onChange_UseGroups);
+
+ cmbModes.OnSelChanged = Callback(this, &CViewModeSetupDlg1::onSelChanged_Mode);
+ }
- void FillDialog()
+ bool OnInitDialog() override
{
- db_enum_settings(0, FillModes, CLVM_MODULE, &modes);
+ db_enum_settings(0, FillModes, CLVM_MODULE, &cmbModes);
// fill protocols...
protocols.SetExtendedListViewStyle(LVS_EX_CHECKBOXES);
@@ -280,7 +302,7 @@ class CViewModeSetupDlg1 : public CViewModePage cmbProtoGroup.AddString(TranslateT("And"));
cmbProtoGroup.AddString(TranslateT("Or"));
-
+
cmbGroupStatus.AddString(TranslateT("And"));
cmbGroupStatus.AddString(TranslateT("Or"));
@@ -294,11 +316,128 @@ class CViewModeSetupDlg1 : public CViewModePage cmbcmbLastMsgUnit.SetCurSel(0);
SetDlgItemInt(m_hwnd, IDC_LASTMSGVALUE, 0, 0);
+
+ int index = 0;
+
+ if (g_CluiData.current_viewmode[0] != '\0') {
+ wchar_t *temp = mir_utf8decodeW(g_CluiData.current_viewmode);
+ if (temp) {
+ index = cmbModes.FindString(temp);
+ mir_free(temp);
+ }
+ if (index == -1)
+ index = 0;
+ }
+
+ if (cmbModes.SetCurSel(0) != LB_ERR) {
+ m_iCurrItem = index;
+ pOwner->UpdateFilters();
+ }
+ else m_iCurrItem = -1;
+
+ SendDlgItemMessage(m_hwnd, IDC_AUTOCLEARSPIN, UDM_SETRANGE, 0, MAKELONG(1000, 0));
+ return true;
+ }
+
+ void onChange_LastMsg(CCtrlCheck *)
+ {
+ bool bUseLastMsg = chkLastMsg.GetState();
+ cmbLastMsgOp.Enable(bUseLastMsg);
+ cmbcmbLastMsgUnit.Enable(bUseLastMsg);
+ EnableWindow(GetDlgItem(m_hwnd, IDC_LASTMSGVALUE), bUseLastMsg);
+ }
+
+ void onChange_UseGroups(CCtrlCheck *)
+ {
+ bool bEnabled = chkUseGroups.IsChecked();
+ EnableWindow(GetDlgItem(m_hwnd, IDC_FOLD_GROUPS), bEnabled);
+ EnableWindow(GetDlgItem(m_hwnd, IDC_HIDEEMPTYGROUPS), bEnabled);
+ }
+
+ void onClick_Add(CCtrlButton *)
+ {
+ ENTER_STRING es = {};
+ es.caption = LPGENW("Enter view mode name");
+ if (!EnterString(&es))
+ return;
+
+ T2Utf szUTF8Buf(es.ptszResult);
+
+ if (db_get_dw(0, CLVM_MODULE, szUTF8Buf, -1) != -1)
+ MessageBox(nullptr, TranslateT("A view mode with this name does already exist"), TranslateT("Duplicate name"), MB_OK);
+ else {
+ int iNewItem = cmbModes.AddString(es.ptszResult);
+ if (iNewItem != LB_ERR) {
+ cmbModes.SetCurSel(iNewItem);
+ SaveViewMode(szUTF8Buf, L"", "", 0, -1, 0, 0, 0);
+ m_iCurrItem = iNewItem;
+ cmbProtoGroup.SetCurSel(0);
+ cmbGroupStatus.SetCurSel(0);
+ }
+ }
+
+ pOwner->UpdateFilters();
+ }
+
+ void onClick_Rename(CCtrlButton *)
+ {
+ ENTER_STRING es = {};
+ es.caption = LPGENW("Enter new view mode name");
+ if (!EnterString(&es))
+ return;
+
+ int idx = cmbModes.GetCurSel();
+ ptrW szTempBuf(cmbModes.GetItemText(idx));
+ if (!mir_wstrlen(szTempBuf))
+ return;
+
+ DeleteViewMode(T2Utf(szTempBuf));
+ cmbModes.DeleteString(idx);
+ cmbModes.InsertString(es.ptszResult, idx);
+ cmbModes.SetCurSel(idx);
+ SaveState();
+ }
+
+ void onClick_Delete(CCtrlButton *)
+ {
+ if (IDYES != MessageBox(nullptr, TranslateT("Really delete this view mode? This cannot be undone"), TranslateT("Delete a view mode"), MB_YESNO | MB_ICONQUESTION))
+ return;
+
+ int idx = cmbModes.GetCurSel();
+ ptrW szTempBuf(cmbModes.GetItemText(idx));
+ if (!mir_wstrlen(szTempBuf))
+ return;
+
+ DeleteViewMode(T2Utf(szTempBuf));
+
+ cmbModes.DeleteString(idx);
+ if (cmbModes.SetCurSel(0) != LB_ERR) {
+ m_iCurrItem = 0;
+ pOwner->UpdateFilters();
+ }
+ else m_iCurrItem = -1;
+ }
+
+ void onSelChanged_Mode(CCtrlCombo *)
+ {
+ SaveState();
+ m_iCurrItem = cmbModes.GetCurSel();
+ pOwner->UpdateFilters();
}
////////////////////////////////////////////////////////////////////////////////////////
// saves the state of the filter definitions for the current item
+ uint32_t SaveTriState(int iCtrlId, uint32_t ifChecked, uint32_t ifUnchecked)
+ {
+ switch (IsDlgButtonChecked(m_hwnd, iCtrlId)) {
+ case BST_CHECKED: return ifChecked;
+ case BST_UNCHECKED: return ifUnchecked;
+ default:
+ return 0;
+ }
+ }
+
void SaveState() override
{
if (m_iCurrItem == -1) {
@@ -306,7 +445,7 @@ class CViewModeSetupDlg1 : public CViewModePage return;
}
- ptrW szTempModeName(modes.GetItemText(m_iCurrItem));
+ ptrW szTempModeName(cmbModes.GetItemText(m_iCurrItem));
if (!szTempModeName) {
pOwner->szModeName.Empty();
return;
@@ -353,8 +492,9 @@ class CViewModeSetupDlg1 : public CViewModePage (cmbGroupStatus.GetCurSel() == 1 ? CLVM_GROUPSTATUS_OP : 0) |
(IsDlgButtonChecked(m_hwnd, IDC_AUTOCLEAR) ? CLVM_AUTOCLEAR : 0) |
(chkLastMsg.GetState() ? CLVM_USELASTMSG : 0) |
- (IsDlgButtonChecked(m_hwnd, IDC_USEGROUPS) == BST_CHECKED ? CLVM_USEGROUPS : 0) |
- (IsDlgButtonChecked(m_hwnd, IDC_USEGROUPS) == BST_UNCHECKED ? CLVM_DONOTUSEGROUPS : 0));
+ SaveTriState(IDC_USEGROUPS, CLVM_USEGROUPS, CLVM_DONOTUSEGROUPS) |
+ SaveTriState(IDC_HIDEEMPTYGROUPS, CLVM_HIDEEMPTYGROUPS, CLVM_SHOWEMPTYGROUPS) |
+ SaveTriState(IDC_FOLD_GROUPS, CLVM_FOLDGROUPS, CLVM_UNFOLDGROUPS));
pOwner->options = SendDlgItemMessage(m_hwnd, IDC_AUTOCLEARSPIN, UDM_GETPOS, 0, 0);
@@ -366,7 +506,13 @@ class CViewModeSetupDlg1 : public CViewModePage ////////////////////////////////////////////////////////////////////////////////////////
// updates the filter list boxes with the data taken from the filtering string
- void UpdateFilters()
+ void UpdateTriState(int iCtrlId, uint32_t ifChecked, uint32_t ifUnchecked)
+ {
+ int iStatus = ifChecked ? BST_CHECKED : (ifUnchecked ? BST_UNCHECKED : BST_INDETERMINATE);
+ CheckDlgButton(m_hwnd, iCtrlId, iStatus);
+ }
+
+ void UpdateFilters() override
{
char szSetting[128];
uint32_t dwFlags;
@@ -375,7 +521,7 @@ class CViewModeSetupDlg1 : public CViewModePage if (m_iCurrItem == LB_ERR)
return;
- ptrW szTempBuf(modes.GetItemText(m_iCurrItem));
+ ptrW szTempBuf(cmbModes.GetItemText(m_iCurrItem));
T2Utf szBuf(szTempBuf);
pOwner->szModeName = szBuf.get();
{
@@ -451,12 +597,12 @@ class CViewModeSetupDlg1 : public CViewModePage cmbGroupStatus.SetCurSel(dwFlags & CLVM_GROUPSTATUS_OP ? 1 : 0);
CheckDlgButton(m_hwnd, IDC_AUTOCLEAR, dwFlags & CLVM_AUTOCLEAR ? BST_CHECKED : BST_UNCHECKED);
- int useLastMsg = dwFlags & CLVM_USELASTMSG;
- int useGroupsState = (dwFlags & CLVM_USEGROUPS) ? BST_CHECKED : (dwFlags & CLVM_DONOTUSEGROUPS) ? BST_UNCHECKED : BST_INDETERMINATE;
+ UpdateTriState(IDC_USEGROUPS, dwFlags & CLVM_USEGROUPS, dwFlags & CLVM_DONOTUSEGROUPS);
+ UpdateTriState(IDC_FOLD_GROUPS, dwFlags & CLVM_FOLDGROUPS, dwFlags & CLVM_UNFOLDGROUPS);
+ UpdateTriState(IDC_HIDEEMPTYGROUPS, dwFlags & CLVM_HIDEEMPTYGROUPS, dwFlags & CLVM_SHOWEMPTYGROUPS);
+ int useLastMsg = dwFlags & CLVM_USELASTMSG;
chkLastMsg.SetState(useLastMsg);
- CheckDlgButton(m_hwnd, IDC_USEGROUPS, useGroupsState ? BST_CHECKED : BST_UNCHECKED);
-
cmbLastMsgOp.Enable(useLastMsg);
cmbcmbLastMsgUnit.Enable(useLastMsg);
EnableWindow(GetDlgItem(m_hwnd, IDC_LASTMSGVALUE), useLastMsg);
@@ -468,137 +614,6 @@ class CViewModeSetupDlg1 : public CViewModePage cmbLastMsgOp.SetCurSel(LOBYTE(HIWORD(lmdat)));
cmbcmbLastMsgUnit.SetCurSel(HIBYTE(HIWORD(lmdat)));
}
-
-public:
- CViewModeSetupDlg1(CViewModeSetupDlg *_1) :
- CViewModePage(IDD_OPT_VIEWMODES1, _1),
- modes(this, IDC_VIEWMODES),
- groups(this, IDC_GROUPS),
- statuses(this, IDC_STATUSMODES),
- protocols(this, IDC_PROTOCOLS),
- btnAdd(this, IDC_ADDVIEWMODE, SKINICON_OTHER_ADDCONTACT, LPGEN("Add view mode")),
- btnRename(this, IDC_RENAMEVIEWMODE, SKINICON_OTHER_RENAME, LPGEN("Rename view mode")),
- btnDelete(this, IDC_DELETEVIEWMODE, SKINICON_OTHER_DELETE, LPGEN("Remove view mode")),
- chkLastMsg(this, IDC_LASTMSG),
- cmbProtoGroup(this, IDC_PROTOGROUPOP),
- cmbGroupStatus(this, IDC_GROUPSTATUSOP),
- cmbLastMsgOp(this, IDC_LASTMESSAGEOP),
- cmbcmbLastMsgUnit(this, IDC_LASTMESSAGEUNIT)
- {
- btnAdd.OnClick = Callback(this, &CViewModeSetupDlg1::onClick_Add);
- btnRename.OnClick = Callback(this, &CViewModeSetupDlg1::onClick_Rename);
- btnDelete.OnClick = Callback(this, &CViewModeSetupDlg1::onClick_Delete);
-
- chkLastMsg.OnChange = Callback(this, &CViewModeSetupDlg1::onChange_LastMsg);
-
- modes.OnSelChange = Callback(this, &CViewModeSetupDlg1::onSelChange_List);
- }
-
- bool OnInitDialog() override
- {
- FillDialog();
-
- int index = 0;
-
- if (g_CluiData.current_viewmode[0] != '\0') {
- wchar_t *temp = mir_utf8decodeW(g_CluiData.current_viewmode);
- if (temp) {
- index = modes.FindString(temp);
- mir_free(temp);
- }
- if (index == -1)
- index = 0;
- }
-
- if (modes.SetCurSel(0) != LB_ERR) {
- m_iCurrItem = index;
- pOwner->UpdateFilters();
- }
- else m_iCurrItem = -1;
-
- SendDlgItemMessage(m_hwnd, IDC_AUTOCLEARSPIN, UDM_SETRANGE, 0, MAKELONG(1000, 0));
- return true;
- }
-
- void onChange_LastMsg(CCtrlCheck *)
- {
- bool bUseLastMsg = chkLastMsg.GetState();
- cmbLastMsgOp.Enable(bUseLastMsg);
- cmbcmbLastMsgUnit.Enable(bUseLastMsg);
- EnableWindow(GetDlgItem(m_hwnd, IDC_LASTMSGVALUE), bUseLastMsg);
- pOwner->btnApply.Enable();
- }
-
- void onClick_Add(CCtrlButton *)
- {
- ENTER_STRING es = {};
- es.caption = LPGENW("Enter view mode name");
- if (!EnterString(&es))
- return;
-
- T2Utf szUTF8Buf(es.ptszResult);
-
- if (db_get_dw(0, CLVM_MODULE, szUTF8Buf, -1) != -1)
- MessageBox(nullptr, TranslateT("A view mode with this name does already exist"), TranslateT("Duplicate name"), MB_OK);
- else {
- int iNewItem = modes.AddString(es.ptszResult);
- if (iNewItem != LB_ERR) {
- modes.SetCurSel(iNewItem);
- SaveViewMode(szUTF8Buf, L"", "", 0, -1, 0, 0, 0);
- m_iCurrItem = iNewItem;
- cmbProtoGroup.SetCurSel(0);
- cmbGroupStatus.SetCurSel(0);
- }
- }
-
- pOwner->UpdateFilters();
- }
-
- void onClick_Rename(CCtrlButton *)
- {
- ENTER_STRING es = {};
- es.caption = LPGENW("Enter new view mode name");
- if (!EnterString(&es))
- return;
-
- int idx = modes.GetCurSel();
- ptrW szTempBuf(modes.GetItemText(idx));
- if (!mir_wstrlen(szTempBuf))
- return;
-
- DeleteViewMode(T2Utf(szTempBuf));
- modes.DeleteString(idx);
- modes.InsertString(es.ptszResult, idx);
- modes.SetCurSel(idx);
- SaveState();
- }
-
- void onClick_Delete(CCtrlButton *)
- {
- if (IDYES != MessageBox(nullptr, TranslateT("Really delete this view mode? This cannot be undone"), TranslateT("Delete a view mode"), MB_YESNO | MB_ICONQUESTION))
- return;
-
- int idx = modes.GetCurSel();
- ptrW szTempBuf(modes.GetItemText(idx));
- if (!mir_wstrlen(szTempBuf))
- return;
-
- DeleteViewMode(T2Utf(szTempBuf));
-
- modes.DeleteString(idx);
- if (modes.SetCurSel(0) != LB_ERR) {
- m_iCurrItem = 0;
- pOwner->UpdateFilters();
- }
- else m_iCurrItem = -1;
- }
-
- void onSelChange_List(CCtrlListBox*)
- {
- SaveState();
- m_iCurrItem = modes.GetCurSel();
- pOwner->UpdateFilters();
- }
};
////////////////////////////////////////////////////////////////////////////////////////
@@ -1248,18 +1263,24 @@ void ApplyViewMode(const char *szName) mir_snprintf(szSetting, "%c_LastMode", 246);
db_unset(0, CLVM_MODULE, szSetting);
- if (g_CluiData.bOldUseGroups != (uint8_t)-1)
+ if (g_CluiData.bOldUseGroups != -1)
CallService(MS_CLIST_SETUSEGROUPS, (WPARAM)g_CluiData.bOldUseGroups, 0);
Clist_Broadcast(CLM_AUTOREBUILD, 0, 0);
KillTimer(g_hwndViewModeFrame, TIMERID_VIEWMODEEXPIRE);
- if (g_CluiData.boldHideOffline != (uint8_t)-1)
- g_clistApi.pfnSetHideOffline(g_CluiData.boldHideOffline);
- if (g_CluiData.bOldUseGroups != (uint8_t)-1)
- CallService(MS_CLIST_SETUSEGROUPS, (WPARAM)g_CluiData.bOldUseGroups, 0);
- g_CluiData.boldHideOffline = (uint8_t)-1;
- g_CluiData.bOldUseGroups = (uint8_t)-1;
+ if (g_CluiData.bOldHideOffline != -1)
+ g_clistApi.pfnSetHideOffline(g_CluiData.bOldHideOffline);
+ if (g_CluiData.bOldHideEmptyGroups != -1)
+ SendMessage(g_clistApi.hwndContactTree, CLM_SETHIDEEMPTYGROUPS, g_CluiData.bOldHideEmptyGroups, 0);
+ if (g_CluiData.bOldFoldGroups != -1)
+ SendMessage(g_clistApi.hwndContactTree, CLM_EXPAND, 0, g_CluiData.bOldFoldGroups ? CLE_COLLAPSE : CLE_EXPAND);
+
+ g_CluiData.bOldUseGroups = -1;
+ g_CluiData.bOldHideOffline = -1;
+ g_CluiData.bOldHideEmptyGroups = -1;
+ g_CluiData.bOldFoldGroups = -1;
+
g_CluiData.current_viewmode[0] = 0;
g_CluiData.old_viewmode[0] = 0;
@@ -1335,33 +1356,49 @@ void ApplyViewMode(const char *szName) g_CluiData.bFilterEffective |= CLVM_STICKY_CONTACTS;
if (g_CluiData.bFilterEffective & CLVM_FILTER_STATUS) {
- if (g_CluiData.boldHideOffline == (uint8_t)-1)
- g_CluiData.boldHideOffline = Clist::HideOffline;
+ if (g_CluiData.bOldHideOffline == -1)
+ g_CluiData.bOldHideOffline = Clist::HideOffline;
g_clistApi.pfnSetHideOffline(false);
}
- else if (g_CluiData.boldHideOffline != (uint8_t)-1) {
- g_clistApi.pfnSetHideOffline(g_CluiData.boldHideOffline);
- g_CluiData.boldHideOffline = -1;
+ else if (g_CluiData.bOldHideOffline != -1) {
+ g_clistApi.pfnSetHideOffline(g_CluiData.bOldHideOffline);
+ g_CluiData.bOldHideOffline = -1;
}
- int bUseGroups = -1;
- if (g_CluiData.filterFlags & CLVM_USEGROUPS)
- bUseGroups = 1;
- else if (g_CluiData.filterFlags & CLVM_DONOTUSEGROUPS)
- bUseGroups = 0;
-
+ int bUseGroups = (g_CluiData.filterFlags & CLVM_USEGROUPS) ? 1 : ((g_CluiData.filterFlags & CLVM_DONOTUSEGROUPS) ? 0 : -1);
if (bUseGroups != -1) {
- if (g_CluiData.bOldUseGroups == (uint8_t)-1)
+ if (g_CluiData.bOldUseGroups == -1)
g_CluiData.bOldUseGroups = Clist::UseGroups;
CallService(MS_CLIST_SETUSEGROUPS, bUseGroups, 0);
}
- else if (g_CluiData.bOldUseGroups != (uint8_t)-1) {
+ else if (g_CluiData.bOldUseGroups != -1) {
CallService(MS_CLIST_SETUSEGROUPS, g_CluiData.bOldUseGroups, 0);
g_CluiData.bOldUseGroups = -1;
}
+ int bOldHideEmptyGroups = (g_CluiData.filterFlags & CLVM_HIDEEMPTYGROUPS) ? 1 : ((g_CluiData.filterFlags & CLVM_SHOWEMPTYGROUPS) ? 0 : -1);
+ if (bOldHideEmptyGroups != -1) {
+ if (g_CluiData.bOldHideEmptyGroups == -1)
+ g_CluiData.bOldHideEmptyGroups = Clist::HideEmptyGroups;
+
+ SendMessage(g_clistApi.hwndContactTree, CLM_SETHIDEEMPTYGROUPS, bOldHideEmptyGroups, 0);
+ }
+ else if (g_CluiData.bOldHideEmptyGroups != -1) {
+ SendMessage(g_clistApi.hwndContactTree, CLM_SETHIDEEMPTYGROUPS, g_CluiData.bOldHideEmptyGroups, 0);
+ g_CluiData.bOldHideEmptyGroups = -1;
+ }
+
+ int bOldFoldGroups = (g_CluiData.filterFlags & CLVM_FOLDGROUPS) ? 1 : ((g_CluiData.filterFlags & CLVM_UNFOLDGROUPS) ? 0 : -1);
+ if (bOldFoldGroups != -1) {
+ SendMessage(g_clistApi.hwndContactTree, CLM_EXPAND, 0, bOldFoldGroups ? CLE_COLLAPSE : CLE_EXPAND);
+ }
+ else if (g_CluiData.bOldFoldGroups != -1) {
+ SendMessage(g_clistApi.hwndContactTree, CLM_EXPAND, 0, g_CluiData.bOldFoldGroups ? CLE_COLLAPSE : CLE_EXPAND);
+ g_CluiData.bOldFoldGroups = -1;
+ }
+
SetWindowText(hwndSelector, ptrW(mir_utf8decodeW((szName[0] == 13) ? szName + 1 : szName)));
}
diff --git a/plugins/Clist_modern/src/resource.h b/plugins/Clist_modern/src/resource.h index 079c8703d8..bd22bd519d 100644 --- a/plugins/Clist_modern/src/resource.h +++ b/plugins/Clist_modern/src/resource.h @@ -1,6 +1,6 @@ //{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
-// Used by w:\miranda-ng\plugins\Clist_modern\res\resource.rc
+// Used by W:\miranda-ng\plugins\Clist_modern\res\resource.rc
//
#define IDC_ALWAYS_VISIBLEICON 0
#define IDC_APPLY 3
@@ -422,6 +422,8 @@ #define IDC_SELECTMODE 19126
#define IDC_CONFIGUREMODES 19127
#define IDC_USEGROUPS 19128
+#define IDC_HIDEEMPTYGROUPS 19129
+#define IDC_FOLD_GROUPS 19130
#define POPUP_NEWSUBGROUP 40004
#define POPUP_GROUPSHOWOFFLINE 40019
#define IDC_FRAME_META 40054
@@ -443,7 +445,7 @@ #ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 512
#define _APS_NEXT_COMMAND_VALUE 40022
-#define _APS_NEXT_CONTROL_VALUE 2025
+#define _APS_NEXT_CONTROL_VALUE 2026
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif
|