summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'plugins')
-rw-r--r--plugins/Clist_modern/res/resource.rc115
-rw-r--r--plugins/Clist_modern/src/modern_commonprototypes.h2
-rw-r--r--plugins/Clist_modern/src/modern_statusbar.cpp2
-rw-r--r--plugins/Clist_modern/src/modern_viewmodebar.cpp626
-rw-r--r--plugins/Clist_modern/src/resource.h4
5 files changed, 407 insertions, 342 deletions
diff --git a/plugins/Clist_modern/res/resource.rc b/plugins/Clist_modern/res/resource.rc
index f38d9bae80..397b1f2593 100644
--- a/plugins/Clist_modern/res/resource.rc
+++ b/plugins/Clist_modern/res/resource.rc
@@ -157,42 +157,54 @@ STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_CAPTION | WS_SYS
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
CONTROL "",IDC_TAB,"SysTabControl32",0x0,4,4,301,264
- LTEXT "",IDC_STATIC7,6,22,297,244
- GROUPBOX "Available view modes",IDC_STATIC1,9,20,158,85
- LISTBOX IDC_VIEWMODES,12,30,123,71,LBS_SORT | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP,WS_EX_CLIENTEDGE
- GROUPBOX "Include protocols",IDC_STATIC2,171,20,130,85
- CONTROL "",IDC_PROTOCOLS,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_AUTOARRANGE | LVS_NOCOLUMNHEADER | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,175,30,121,72
- CONTROL "",IDC_ADDVIEWMODE,"MButtonClass",WS_TABSTOP,142,40,18,16
- CONTROL "",IDC_RENAMEVIEWMODE,"MButtonClass",WS_TABSTOP,142,60,18,16
- CONTROL "",IDC_DELETEVIEWMODE,"MButtonClass",WS_TABSTOP,142,80,18,16
- GROUPBOX "Include groups",IDC_STATIC3,8,105,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,12,116,122,57
- CONTROL "Show contacts in groups",IDC_USEGROUPS,"Button",BS_AUTO3STATE | WS_TABSTOP,12,178,122,11
- GROUPBOX "Include status modes",IDC_STATIC4,171,105,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,175,116,121,73
PUSHBUTTON "OK",IDOK,106,275,62,16
PUSHBUTTON "Cancel",IDCANCEL,172,275,62,16
PUSHBUTTON "Apply",IDC_APPLY,242,275,62,16
- CONTROL "",IDC_CLIST,"CListControl",0x3da,12,31,286,199,WS_EX_CLIENTEDGE
- GROUPBOX "Sticky contacts",IDC_STATIC9,8,20,293,215
- PUSHBUTTON "Clear all",IDC_CLEARALL,13,241,92,14
- LTEXT "Using the contact list on the left side, you can select contacts which will be ""sticky"" for this view mode. These contacts will ignore the standard filter rules and only use the status mode filter below.",IDC_STATIC10,174,50,124,72,NOT WS_VISIBLE
- LTEXT "Protocol",IDC_STATIC12,31,206,49,12
- COMBOBOX IDC_PROTOGROUPOP,85,204,37,56,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
- CTEXT "Group",IDC_STATIC13,129,206,44,12
- COMBOBOX IDC_GROUPSTATUSOP,177,204,37,56,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
- RTEXT "Status mode",IDC_STATIC14,221,206,54,12
+END
+
+IDD_OPT_VIEWMODES1 DIALOGEX 0, 0, 309, 249
+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 "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 "Automatically clear this view mode after",IDC_AUTOCLEAR,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,244,172,11
- EDITTEXT IDC_AUTOCLEARVAL,222,243,29,12,ES_AUTOHSCROLL
- CONTROL "",IDC_AUTOCLEARSPIN,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,245,243,8,13
- LTEXT "seconds",IDC_STATIC15,262,244,28,12
- GROUPBOX "View mode options",IDC_STATIC16,8,195,293,68
- LTEXT "Editing view mode",IDC_CURVIEWMODE2,119,245,178,14,NOT WS_VISIBLE
- CONTROL "Last message",IDC_LASTMSG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,227,86,11
- COMBOBOX IDC_LASTMESSAGEOP,106,227,81,56,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
- EDITTEXT IDC_LASTMSGVALUE,193,227,31,13,ES_AUTOHSCROLL
- COMBOBOX IDC_LASTMESSAGEUNIT,229,227,68,56,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
+ "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
+ 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
+ COMBOBOX IDC_LASTMESSAGEUNIT,229,208,68,56,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
+END
+
+IDD_OPT_VIEWMODES2 DIALOGEX 0, 0, 309, 244
+STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
+EXSTYLE WS_EX_CONTROLPARENT
+FONT 8, "MS Shell Dlg", 0, 0, 0x1
+BEGIN
+ GROUPBOX "Sticky contacts",IDC_STATIC,7,3,293,215
+ CONTROL "",IDC_CLIST,"CListControl",0x3da,11,14,286,199,WS_EX_CLIENTEDGE
+ PUSHBUTTON "Clear all",IDC_CLEARALL,12,224,92,14
+ LTEXT "",IDC_CURVIEWMODE2,118,227,178,9
END
IDD_OPT_SBAR DIALOGEX 0, 0, 308, 231
@@ -228,8 +240,10 @@ BEGIN
LTEXT "[Ctrl]+[Left Click] to filter only protocol. Click on empty space to show all.",IDC_STATIC,17,216,277,8,WS_DISABLED
CONTROL "Set options per account",IDC_STATUSBAR_PER_PROTO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,160,12,134,10
COMBOBOX IDC_STATUSBAR_PROTO_LIST,160,23,134,30,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
- CONTROL "Enable custom account settings",IDC_SBAR_USE_ACCOUNT_SETTINGS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,160,38,124,8
- CONTROL "Hide account completely",IDC_SBAR_HIDE_ACCOUNT_COMPLETELY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,160,48,134,8
+ CONTROL "Enable custom account settings",IDC_SBAR_USE_ACCOUNT_SETTINGS,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,160,38,124,8
+ CONTROL "Hide account completely",IDC_SBAR_HIDE_ACCOUNT_COMPLETELY,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,160,48,134,8
CONTROL "Show account names",IDC_SHOWPROTO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,160,58,134,8
CONTROL "Show status name",IDC_SHOWSTATUS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,160,68,124,8
CONTROL "Show xStatus name",IDC_SHOWXSTATUSNAME,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,160,78,124,8
@@ -258,8 +272,7 @@ EXSTYLE WS_EX_CONTROLPARENT
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
GROUPBOX "Contact list sorting",IDC_STATIC,2,8,294,84,WS_GROUP
- CONTROL "Move offline users to bottom",IDC_OFFLINEMOVE,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,77,281,10
+ CONTROL "Move offline users to bottom",IDC_OFFLINEMOVE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,77,281,10
LTEXT "1st:",IDC_STATIC,15,19,14,8
LTEXT "2nd:",IDC_STATIC,15,35,14,8
LTEXT "3rd:",IDC_STATIC,15,49,14,8
@@ -649,6 +662,7 @@ BEGIN
RTEXT "(Variables will be replaced)",IDC_VARIABLES_L,141,136,108,8
END
+
/////////////////////////////////////////////////////////////////////////////
//
// TGA
@@ -702,6 +716,35 @@ BEGIN
0
END
+IDD_OPT_VIEWMODES1 AFX_DIALOG_LAYOUT
+BEGIN
+ 0
+END
+
+IDD_OPT_VIEWMODES2 AFX_DIALOG_LAYOUT
+BEGIN
+ 0
+END
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// DESIGNINFO
+//
+
+#ifdef APSTUDIO_INVOKED
+GUIDELINES DESIGNINFO
+BEGIN
+ IDD_OPT_VIEWMODES1, DIALOG
+ BEGIN
+ END
+
+ IDD_OPT_VIEWMODES2, DIALOG
+ BEGIN
+ END
+END
+#endif // APSTUDIO_INVOKED
+
#endif // Russian (Russia) resources
/////////////////////////////////////////////////////////////////////////////
diff --git a/plugins/Clist_modern/src/modern_commonprototypes.h b/plugins/Clist_modern/src/modern_commonprototypes.h
index e68e64ef81..f195c29ad7 100644
--- a/plugins/Clist_modern/src/modern_commonprototypes.h
+++ b/plugins/Clist_modern/src/modern_commonprototypes.h
@@ -190,7 +190,7 @@ void UnLoadContactListModule(); /
void UpdateAllAvatars(ClcData *dat); //cache_func.c
void ApplyViewMode(const char *Name);
-void SaveViewMode(const char *name, const wchar_t *szGroupFilter, const char *szProtoFilter, uint32_t statusMask, uint32_t stickyStatusMask, unsigned int options, unsigned int stickies, unsigned int operators, unsigned int lmdat);
+void SaveViewMode(const char *name, const wchar_t *szGroupFilter, const char *szProtoFilter, uint32_t statusMask, uint32_t stickyStatusMask, unsigned int options, unsigned int operators, unsigned int lmdat);
// cluiframes.c
int ExtraImage_ExtraIDToColumnNum(int extra);
diff --git a/plugins/Clist_modern/src/modern_statusbar.cpp b/plugins/Clist_modern/src/modern_statusbar.cpp
index 87f004fe4d..a837731805 100644
--- a/plugins/Clist_modern/src/modern_statusbar.cpp
+++ b/plugins/Clist_modern/src/modern_statusbar.cpp
@@ -810,7 +810,7 @@ LRESULT CALLBACK ModernStatusProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lPa
}
}
- SaveViewMode(szFilterName, L"", g_CluiData.protoFilter, 0, -1, 0, 0, 0, 0);
+ SaveViewMode(szFilterName, L"", g_CluiData.protoFilter, 0, -1, 0, 0, 0);
ApplyViewMode(szFilterName);
}
Clist_Broadcast(CLM_AUTOREBUILD, 0, 0);
diff --git a/plugins/Clist_modern/src/modern_viewmodebar.cpp b/plugins/Clist_modern/src/modern_viewmodebar.cpp
index 6e687e9407..7b9920dc1f 100644
--- a/plugins/Clist_modern/src/modern_viewmodebar.cpp
+++ b/plugins/Clist_modern/src/modern_viewmodebar.cpp
@@ -39,21 +39,8 @@ HMENU hViewModeMenu = nullptr;
static HWND hwndSelector = nullptr;
static HIMAGELIST himlViewModes = nullptr;
-static HANDLE hInfoItem = nullptr;
static int nullImage;
static uint32_t stickyStatusMask = 0;
-static char g_szModename[2048];
-
-static UINT _page1Controls[] =
-{
- IDC_STATIC1, IDC_STATIC2, IDC_STATIC3, IDC_STATIC4,
- IDC_STATIC8, IDC_ADDVIEWMODE, IDC_RENAMEVIEWMODE, IDC_DELETEVIEWMODE, IDC_GROUPS, IDC_PROTOCOLS,
- IDC_VIEWMODES, IDC_STATUSMODES, IDC_STATIC12, IDC_STATIC13, IDC_STATIC14, IDC_PROTOGROUPOP, IDC_GROUPSTATUSOP,
- IDC_AUTOCLEAR, IDC_AUTOCLEARVAL, IDC_AUTOCLEARSPIN, IDC_STATIC15, IDC_STATIC16,
- IDC_LASTMESSAGEOP, IDC_LASTMESSAGEUNIT, IDC_LASTMSG, IDC_LASTMSGVALUE, IDC_USEGROUPS
-};
-
-static UINT _page2Controls[] = { IDC_CLIST, IDC_STATIC9, IDC_STATIC8, IDC_CLEARALL, IDC_CURVIEWMODE2 };
static UINT _buttons[] = { IDC_RESETMODES, IDC_SELECTMODE, IDC_CONFIGUREMODES };
@@ -87,7 +74,7 @@ static int DeleteAutoModesCallback(char *szsetting)
}
void SaveViewMode(const char *name, const wchar_t *szGroupFilter, const char *szProtoFilter, uint32_t dwStatusMask, uint32_t dwStickyStatusMask,
- unsigned int options, unsigned int stickies, unsigned int operators, unsigned int lmdat)
+ unsigned int options, unsigned int operators, unsigned int lmdat)
{
CLVM_EnumModes(DeleteAutoModesCallback);
@@ -105,7 +92,7 @@ void SaveViewMode(const char *name, const wchar_t *szGroupFilter, const char *sz
mir_snprintf(szSetting, "%c%s_LM", 246, name);
db_set_dw(0, CLVM_MODULE, szSetting, lmdat);
- db_set_dw(0, CLVM_MODULE, name, MAKELONG((unsigned short)operators, (unsigned short)stickies));
+ db_set_dw(0, CLVM_MODULE, name, MAKELONG((unsigned short)operators, 0));
}
/////////////////////////////////////////////////////////////////////////////////////////
@@ -146,14 +133,77 @@ void DeleteViewMode(char *szName)
class CViewModeSetupDlg : public CDlgBase
{
+ CCtrlPages m_tab;
+ LIST<class CViewModePage> m_pages;
+
+public:
+ CCtrlButton btnApply;
+
+ CMStringW newGroupFilter;
+ CMStringA newProtoFilter, szModeName;
+ uint32_t statusMask, operators, lmdat, options, dwGlobalMask;
+
+ CViewModeSetupDlg();
+
+ bool OnInitDialog() override
+ {
+ btnApply.Disable();
+
+ g_ViewModeOptDlg = m_hwnd;
+ xpt_EnableThemeDialogTexture(m_hwnd, ETDT_ENABLETAB);
+
+ ShowWindow(m_hwnd, SW_SHOWNORMAL);
+ SetWindowText(m_hwnd, TranslateT("Configure view modes"));
+ return true;
+ }
+
+ bool OnApply() override;
+
+ void OnDestroy() override
+ {
+ g_ViewModeOptDlg = nullptr;
+ }
+
+ void UpdateFilters();
+
+ void onClick_Apply(CCtrlButton *)
+ {
+ OnApply();
+ btnApply.Disable();
+ }
+};
+
+class CViewModePage : public CDlgBase
+{
+protected:
+ CViewModeSetupDlg *pOwner;
+
+public:
+ CViewModePage(int iDlgId, CViewModeSetupDlg *_1) :
+ CDlgBase(g_plugin, iDlgId),
+ pOwner(_1)
+ {}
+
+ virtual void SaveState() = 0;
+ virtual void UpdateFilters() = 0;
+
+ void OnChange() override
+ {
+ pOwner->btnApply.Enable();
+ }
+};
+
+////////////////////////////////////////////////////////////////////////////////////////
+
+class CViewModeSetupDlg1 : public CViewModePage
+{
int m_iCurrItem = -1;
CCtrlCheck chkLastMsg;
- CCtrlButton btnClearAll, btnApply;
+ CCtrlCombo cmbProtoGroup, cmbGroupStatus, cmbLastMsgOp, cmbcmbLastMsgUnit;
CCtrlMButton btnAdd, btnRename, btnDelete;
CCtrlListBox modes;
CCtrlListView protocols, groups, statuses;
- CCtrlClc clist;
static int __cdecl FillModes(const char *szsetting, void *param)
{
@@ -170,16 +220,6 @@ class CViewModeSetupDlg : public CDlgBase
return 1;
}
- uint32_t GetMaskForItem(HANDLE hItem)
- {
- uint32_t dwMask = 0;
-
- for (int i = 0; i <= ID_STATUS_MAX - ID_STATUS_OFFLINE; i++)
- dwMask |= (clist.GetExtraImage(hItem, i) == nullImage ? 0 : 1 << i);
-
- return dwMask;
- }
-
////////////////////////////////////////////////////////////////////////////////////////
// fills dialog with data
@@ -245,34 +285,41 @@ class CViewModeSetupDlg : public CDlgBase
statuses.SetColumnWidth(0, LVSCW_AUTOSIZE);
statuses.Arrange(LVA_ALIGNLEFT | LVA_ALIGNTOP);
- SendDlgItemMessage(m_hwnd, IDC_PROTOGROUPOP, CB_INSERTSTRING, -1, (LPARAM)TranslateT("And"));
- SendDlgItemMessage(m_hwnd, IDC_PROTOGROUPOP, CB_INSERTSTRING, -1, (LPARAM)TranslateT("Or"));
- SendDlgItemMessage(m_hwnd, IDC_GROUPSTATUSOP, CB_INSERTSTRING, -1, (LPARAM)TranslateT("And"));
- SendDlgItemMessage(m_hwnd, IDC_GROUPSTATUSOP, CB_INSERTSTRING, -1, (LPARAM)TranslateT("Or"));
+ cmbProtoGroup.AddString(TranslateT("And"));
+ cmbProtoGroup.AddString(TranslateT("Or"));
+
+ cmbGroupStatus.AddString(TranslateT("And"));
+ cmbGroupStatus.AddString(TranslateT("Or"));
- SendDlgItemMessage(m_hwnd, IDC_LASTMESSAGEOP, CB_INSERTSTRING, -1, (LPARAM)TranslateT("Older than"));
- SendDlgItemMessage(m_hwnd, IDC_LASTMESSAGEOP, CB_INSERTSTRING, -1, (LPARAM)TranslateT("Newer than"));
+ cmbLastMsgOp.AddString(TranslateT("Older than"));
+ cmbLastMsgOp.AddString(TranslateT("Newer than"));
+ cmbLastMsgOp.SetCurSel(0);
+
+ cmbcmbLastMsgUnit.AddString(TranslateT("Minutes"));
+ cmbcmbLastMsgUnit.AddString(TranslateT("Hours"));
+ cmbcmbLastMsgUnit.AddString(TranslateT("Days"));
+ cmbcmbLastMsgUnit.SetCurSel(0);
- SendDlgItemMessage(m_hwnd, IDC_LASTMESSAGEUNIT, CB_INSERTSTRING, -1, (LPARAM)TranslateT("Minutes"));
- SendDlgItemMessage(m_hwnd, IDC_LASTMESSAGEUNIT, CB_INSERTSTRING, -1, (LPARAM)TranslateT("Hours"));
- SendDlgItemMessage(m_hwnd, IDC_LASTMESSAGEUNIT, CB_INSERTSTRING, -1, (LPARAM)TranslateT("Days"));
- SendDlgItemMessage(m_hwnd, IDC_LASTMESSAGEOP, CB_SETCURSEL, 0, 0);
- SendDlgItemMessage(m_hwnd, IDC_LASTMESSAGEUNIT, CB_SETCURSEL, 0, 0);
SetDlgItemInt(m_hwnd, IDC_LASTMSGVALUE, 0, 0);
}
////////////////////////////////////////////////////////////////////////////////////////
// saves the state of the filter definitions for the current item
- void SaveState()
+ void SaveState() override
{
- wchar_t newGroupFilter[2048] = L"|";
- char newProtoFilter[2048] = "|";
- uint32_t statusMask = 0;
- uint32_t operators = 0;
+ if (m_iCurrItem == -1) {
+ pOwner->szModeName.Empty();
+ return;
+ }
- if (m_iCurrItem == -1)
+ ptrW szTempModeName(modes.GetItemText(m_iCurrItem));
+ if (!szTempModeName) {
+ pOwner->szModeName.Empty();
return;
+ }
+
+ pOwner->szModeName = T2Utf(szTempModeName).get();
for (int i = 0; i < protocols.GetItemCount(); i++) {
if (protocols.GetCheckState(i)) {
@@ -281,14 +328,14 @@ class CViewModeSetupDlg : public CDlgBase
item.iItem = i;
protocols.GetItem(&item);
- mir_strncat(newProtoFilter, (char *)item.lParam, _countof(newProtoFilter) - mir_strlen(newProtoFilter));
- mir_strncat(newProtoFilter, "|", _countof(newProtoFilter) - mir_strlen(newProtoFilter));
- newProtoFilter[2047] = 0;
+ pOwner->newProtoFilter.Append((char *)item.lParam);
+ pOwner->newProtoFilter.Append("|");
}
}
- operators |= groups.GetCheckState(0) ? CLVM_INCLUDED_UNGROUPED : 0;
+ pOwner->operators = groups.GetCheckState(0) ? CLVM_INCLUDED_UNGROUPED : 0;
+ pOwner->newGroupFilter = L"|";
for (int i = 0; i < groups.GetItemCount(); i++) {
if (groups.GetCheckState(i)) {
wchar_t szTemp[256];
@@ -298,160 +345,29 @@ class CViewModeSetupDlg : public CDlgBase
item.cchTextMax = _countof(szTemp);
item.iItem = i;
groups.GetItem(&item);
- mir_wstrncat(newGroupFilter, szTemp, _countof(newGroupFilter) - mir_wstrlen(newGroupFilter));
- mir_wstrncat(newGroupFilter, L"|", _countof(newGroupFilter) - mir_wstrlen(newGroupFilter));
- newGroupFilter[2047] = 0;
+ pOwner->newGroupFilter.Append(szTemp);
+ pOwner->newGroupFilter.Append(L"|");
}
}
+ pOwner->statusMask = 0;
for (int i = ID_STATUS_OFFLINE; i <= ID_STATUS_MAX; i++)
if (statuses.GetCheckState(i - ID_STATUS_OFFLINE))
- statusMask |= (1 << (i - ID_STATUS_OFFLINE));
-
- unsigned int stickies = 0;
- ptrW szTempModeName(modes.GetItemText(m_iCurrItem));
- if (szTempModeName) {
- T2Utf szModeName(szTempModeName);
-
- uint32_t dwGlobalMask = GetMaskForItem(hInfoItem);
- for (auto &hContact : Contacts()) {
- HANDLE hItem = clist.FindContact(hContact);
- if (hItem == nullptr)
- continue;
-
- if (clist.GetCheck(hItem)) {
- uint32_t dwLocalMask = GetMaskForItem(hItem);
- db_set_dw(hContact, CLVM_MODULE, szModeName, MAKELONG(1, (unsigned short)dwLocalMask));
- stickies++;
- }
- else {
- if (db_get_dw(hContact, CLVM_MODULE, szModeName, 0))
- db_set_dw(hContact, CLVM_MODULE, szModeName, 0);
- }
- }
-
- operators |= ((SendDlgItemMessage(m_hwnd, IDC_PROTOGROUPOP, CB_GETCURSEL, 0, 0) == 1 ? CLVM_PROTOGROUP_OP : 0) |
- (SendDlgItemMessage(m_hwnd, IDC_GROUPSTATUSOP, CB_GETCURSEL, 0, 0) == 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));
-
- uint32_t options = SendDlgItemMessage(m_hwnd, IDC_AUTOCLEARSPIN, UDM_GETPOS, 0, 0);
-
- BOOL translated;
- uint32_t lmdat = MAKELONG(GetDlgItemInt(m_hwnd, IDC_LASTMSGVALUE, &translated, FALSE),
- MAKEWORD(SendDlgItemMessage(m_hwnd, IDC_LASTMESSAGEOP, CB_GETCURSEL, 0, 0),
- SendDlgItemMessage(m_hwnd, IDC_LASTMESSAGEUNIT, CB_GETCURSEL, 0, 0)));
-
- SaveViewMode(szModeName, newGroupFilter, newProtoFilter, statusMask, dwGlobalMask, options,
- stickies, operators, lmdat);
- }
- btnApply.Disable();
- }
-
- ////////////////////////////////////////////////////////////////////////////////////////
-
- void SetAllChildIcons(HANDLE hFirstItem, int iColumn, int iImage)
- {
- int typeOfFirst = clist.GetItemType(hFirstItem);
-
- // check groups
- HANDLE hItem = (typeOfFirst == CLCIT_GROUP) ? hFirstItem : clist.GetNextItem(hFirstItem, CLGN_NEXTGROUP);
- while (hItem) {
- HANDLE hChildItem = clist.GetNextItem(hItem, CLGN_CHILD);
- if (hChildItem)
- SetAllChildIcons(hChildItem, iColumn, iImage);
- hItem = clist.GetNextItem(hItem, CLGN_NEXTGROUP);
- }
+ pOwner->statusMask |= (1 << (i - ID_STATUS_OFFLINE));
- // check contacts
- if (typeOfFirst == CLCIT_CONTACT)
- hItem = hFirstItem;
- else
- hItem = clist.GetNextItem(hFirstItem, CLGN_NEXTCONTACT);
+ pOwner->operators |= (
+ (cmbProtoGroup.GetCurSel() == 1 ? CLVM_PROTOGROUP_OP : 0) |
+ (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));
- while (hItem) {
- int iOldIcon = clist.GetExtraImage(hItem, iColumn);
- if (iOldIcon != EMPTY_EXTRA_ICON && iOldIcon != iImage)
- clist.SetExtraImage(hItem, iColumn, iImage);
- hItem = clist.GetNextItem(hItem, CLGN_NEXTCONTACT);
- }
- }
+ pOwner->options = SendDlgItemMessage(m_hwnd, IDC_AUTOCLEARSPIN, UDM_GETPOS, 0, 0);
- void SetIconsForColumn(HANDLE hItem, HANDLE hItemAll, int iColumn, int iImage)
- {
- int itemType = clist.GetItemType(hItem);
- if (itemType == CLCIT_CONTACT) {
- int oldiImage = clist.GetExtraImage(hItem, iColumn);
- if (oldiImage != EMPTY_EXTRA_ICON && oldiImage != iImage)
- clist.SetExtraImage(hItem, iColumn, iImage);
- }
- else if (itemType == CLCIT_INFO) {
- int oldiImage = clist.GetExtraImage(hItem, iColumn);
- if (oldiImage != EMPTY_EXTRA_ICON && oldiImage != iImage)
- clist.SetExtraImage(hItem, iColumn, iImage);
- if (hItem == hItemAll)
- SetAllChildIcons(hItem, iColumn, iImage);
- else
- clist.SetExtraImage(hItem, iColumn, iImage);
- }
- else if (itemType == CLCIT_GROUP) {
- int oldiImage = clist.GetExtraImage(hItem, iColumn);
- if (oldiImage != EMPTY_EXTRA_ICON && oldiImage != iImage)
- clist.SetExtraImage(hItem, iColumn, iImage);
-
- hItem = clist.GetNextItem(hItem, CLGN_CHILD);
- if (hItem)
- SetAllChildIcons(hItem, iColumn, iImage);
- }
- }
-
- ////////////////////////////////////////////////////////////////////////////////////////
-
- void ShowPage(int page)
- {
- int pageChange = 0;
-
- if (page == 0 && IsWindowVisible(GetDlgItem(m_hwnd, _page2Controls[0])))
- pageChange = 1;
-
- if (page == 1 && IsWindowVisible(GetDlgItem(m_hwnd, _page1Controls[0])))
- pageChange = 1;
-
- if (pageChange)
- SetDraw(false);
-
- switch (page) {
- case 0:
- for (auto &ctrlId : _page1Controls)
- ::ShowWindow(GetDlgItem(m_hwnd, ctrlId), SW_SHOW);
-
- for (auto &ctrlId : _page2Controls)
- ::ShowWindow(GetDlgItem(m_hwnd, ctrlId), SW_HIDE);
- break;
-
- case 1:
- for (auto &ctrlId : _page1Controls)
- ::ShowWindow(GetDlgItem(m_hwnd, ctrlId), SW_HIDE);
-
- for (auto &ctrlId : _page2Controls)
- ::ShowWindow(GetDlgItem(m_hwnd, ctrlId), SW_SHOW);
- break;
- }
-
- if (pageChange) {
- SetDraw(true);
- ::RedrawWindow(m_hwnd, nullptr, nullptr, RDW_ERASE | RDW_INVALIDATE);
- }
- }
-
- ////////////////////////////////////////////////////////////////////////////////////////
-
- void UpdateClistItem(HANDLE hItem, uint32_t mask)
- {
- for (int i = ID_STATUS_OFFLINE; i <= ID_STATUS_MAX; i++)
- clist.SetExtraImage(hItem, i - ID_STATUS_OFFLINE, (1 << (i - ID_STATUS_OFFLINE)) & mask ? i - ID_STATUS_OFFLINE : nullImage);
+ BOOL translated;
+ pOwner->lmdat = MAKELONG(GetDlgItemInt(m_hwnd, IDC_LASTMSGVALUE, &translated, FALSE),
+ MAKEWORD(cmbLastMsgOp.GetCurSel(), cmbcmbLastMsgUnit.GetCurSel()));
}
////////////////////////////////////////////////////////////////////////////////////////
@@ -468,12 +384,13 @@ class CViewModeSetupDlg : public CDlgBase
ptrW szTempBuf(modes.GetItemText(m_iCurrItem));
T2Utf szBuf(szTempBuf);
- mir_strncpy(g_szModename, szBuf, _countof(g_szModename));
+ pOwner->szModeName = szBuf.get();
{
wchar_t szTemp[100];
mir_snwprintf(szTemp, TranslateT("Configuring view mode: %s"), szTempBuf);
SetDlgItemText(m_hwnd, IDC_CURVIEWMODE2, szTemp);
}
+
mir_snprintf(szSetting, "%c%s_PF", 246, szBuf.get());
ptrA szPF(db_get_sa(0, CLVM_MODULE, szSetting));
if (szPF == nullptr)
@@ -538,10 +455,9 @@ class CViewModeSetupDlg : public CDlgBase
statuses.SetCheckState(i - ID_STATUS_OFFLINE, FALSE);
}
- SendDlgItemMessage(m_hwnd, IDC_PROTOGROUPOP, CB_SETCURSEL, dwFlags & CLVM_PROTOGROUP_OP ? 1 : 0, 0);
- SendDlgItemMessage(m_hwnd, IDC_GROUPSTATUSOP, CB_SETCURSEL, dwFlags & CLVM_GROUPSTATUS_OP ? 1 : 0, 0);
+ cmbProtoGroup.SetCurSel(dwFlags & CLVM_PROTOGROUP_OP ? 1 : 0);
+ cmbGroupStatus.SetCurSel(dwFlags & CLVM_GROUPSTATUS_OP ? 1 : 0);
CheckDlgButton(m_hwnd, IDC_AUTOCLEAR, dwFlags & CLVM_AUTOCLEAR ? BST_CHECKED : BST_UNCHECKED);
- onListRebuilt_Clist(0);
int useLastMsg = dwFlags & CLVM_USELASTMSG;
int useGroupsState = (dwFlags & CLVM_USEGROUPS) ? BST_CHECKED : (dwFlags & CLVM_DONOTUSEGROUPS) ? BST_UNCHECKED : BST_INDETERMINATE;
@@ -549,26 +465,21 @@ class CViewModeSetupDlg : public CDlgBase
chkLastMsg.SetState(useLastMsg);
CheckDlgButton(m_hwnd, IDC_USEGROUPS, useGroupsState ? BST_CHECKED : BST_UNCHECKED);
- EnableWindow(GetDlgItem(m_hwnd, IDC_LASTMESSAGEOP), useLastMsg);
+ cmbLastMsgOp.Enable(useLastMsg);
+ cmbcmbLastMsgUnit.Enable(useLastMsg);
EnableWindow(GetDlgItem(m_hwnd, IDC_LASTMSGVALUE), useLastMsg);
- EnableWindow(GetDlgItem(m_hwnd, IDC_LASTMESSAGEUNIT), useLastMsg);
mir_snprintf(szSetting, "%c%s_LM", 246, szBuf.get());
uint32_t lmdat = db_get_dw(0, CLVM_MODULE, szSetting, 0);
SetDlgItemInt(m_hwnd, IDC_LASTMSGVALUE, LOWORD(lmdat), FALSE);
- uint8_t bTmp = LOBYTE(HIWORD(lmdat));
- SendDlgItemMessage(m_hwnd, IDC_LASTMESSAGEOP, CB_SETCURSEL, bTmp, 0);
- bTmp = HIBYTE(HIWORD(lmdat));
- SendDlgItemMessage(m_hwnd, IDC_LASTMESSAGEUNIT, CB_SETCURSEL, bTmp, 0);
-
- ShowPage(0);
+ cmbLastMsgOp.SetCurSel(LOBYTE(HIWORD(lmdat)));
+ cmbcmbLastMsgUnit.SetCurSel(HIBYTE(HIWORD(lmdat)));
}
public:
- CViewModeSetupDlg() :
- CDlgBase(g_plugin, IDD_OPT_VIEWMODES),
- clist(this, IDC_CLIST),
+ CViewModeSetupDlg1(CViewModeSetupDlg *_1) :
+ CViewModePage(IDD_OPT_VIEWMODES1, _1),
modes(this, IDC_VIEWMODES),
groups(this, IDC_GROUPS),
statuses(this, IDC_STATUSMODES),
@@ -576,27 +487,23 @@ public:
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")),
- btnApply(this, IDC_APPLY),
- btnClearAll(this, IDC_CLEARALL),
- chkLastMsg(this, IDC_LASTMSG)
+ chkLastMsg(this, IDC_LASTMSG),
+ cmbProtoGroup(this, IDC_PROTOGROUPOP),
+ cmbGroupStatus(this, IDC_GROUPSTATUSOP),
+ cmbLastMsgOp(this, IDC_LASTMESSAGEOP),
+ cmbcmbLastMsgUnit(this, IDC_LASTMESSAGEUNIT)
{
- btnAdd.OnClick = Callback(this, &CViewModeSetupDlg::onClick_Add);
- btnApply.OnClick = Callback(this, &CViewModeSetupDlg::onClick_Apply);
- btnRename.OnClick = Callback(this, &CViewModeSetupDlg::onClick_Rename);
- btnDelete.OnClick = Callback(this, &CViewModeSetupDlg::onClick_Delete);
- btnClearAll.OnClick = Callback(this, &CViewModeSetupDlg::onClick_ClearAll);
-
- chkLastMsg.OnChange = Callback(this, &CViewModeSetupDlg::onChange_LastMsg);
+ btnAdd.OnClick = Callback(this, &CViewModeSetupDlg1::onClick_Add);
+ btnRename.OnClick = Callback(this, &CViewModeSetupDlg1::onClick_Rename);
+ btnDelete.OnClick = Callback(this, &CViewModeSetupDlg1::onClick_Delete);
- modes.OnSelChange = Callback(this, &CViewModeSetupDlg::onSelChange_List);
+ chkLastMsg.OnChange = Callback(this, &CViewModeSetupDlg1::onChange_LastMsg);
- clist.OnListRebuilt = Callback(this, &CViewModeSetupDlg::onListRebuilt_Clist);
+ modes.OnSelChange = Callback(this, &CViewModeSetupDlg1::onSelChange_List);
}
bool OnInitDialog() override
{
- g_ViewModeOptDlg = m_hwnd;
- xpt_EnableThemeDialogTexture(m_hwnd, ETDT_ENABLETAB);
himlViewModes = ImageList_Create(16, 16, ILC_MASK | ILC_COLOR32, 12, 0);
for (int i = ID_STATUS_OFFLINE; i <= ID_STATUS_MAX; i++) {
@@ -609,32 +516,8 @@ public:
nullImage = ImageList_AddIcon(himlViewModes, hIcon);
DestroyIcon(hIcon);
- RECT rcClient;
- GetClientRect(m_hwnd, &rcClient);
-
- TCITEM tci;
- tci.mask = TCIF_PARAM | TCIF_TEXT;
- tci.lParam = 0;
- tci.pszText = TranslateT("Sticky contacts");
- SendDlgItemMessage(m_hwnd, IDC_TAB, TCM_INSERTITEM, 0, (LPARAM)&tci);
-
- tci.pszText = TranslateT("Filtering");
- SendDlgItemMessage(m_hwnd, IDC_TAB, TCM_INSERTITEM, 0, (LPARAM)&tci);
-
- TabCtrl_SetCurSel(GetDlgItem(m_hwnd, IDC_TAB), 0);
-
FillDialog();
- SetWindowLong(clist.GetHwnd(), GWL_STYLE, GetWindowLong(clist.GetHwnd(), GWL_STYLE) & ~CLS_SHOWHIDDEN);
- clist.SetExtraImageList(himlViewModes);
- clist.SetExtraColumns(ID_STATUS_MAX - ID_STATUS_OFFLINE);
- clist.SetHideEmptyGroups(true);
-
- CLCINFOITEM cii = { sizeof(cii) };
- cii.hParentGroup = nullptr;
- cii.pszText = TranslateT("*** All contacts ***");
- hInfoItem = clist.AddInfoItem(&cii);
-
int index = 0;
if (g_CluiData.current_viewmode[0] != '\0') {
@@ -649,29 +532,11 @@ public:
if (modes.SetCurSel(0) != LB_ERR) {
m_iCurrItem = index;
- UpdateFilters();
+ pOwner->UpdateFilters();
}
else m_iCurrItem = -1;
- for (auto &ctrlId : _page2Controls)
- ShowWindow(GetDlgItem(m_hwnd, ctrlId), SW_HIDE);
- ShowWindow(m_hwnd, SW_SHOWNORMAL);
- btnApply.Disable();
SendDlgItemMessage(m_hwnd, IDC_AUTOCLEARSPIN, UDM_SETRANGE, 0, MAKELONG(1000, 0));
- SetWindowText(m_hwnd, TranslateT("Configure view modes"));
- return true;
- }
-
- void OnChange() override
- {
- btnApply.Enable();
- }
-
- bool OnApply() override
- {
- SaveState();
- if (g_CluiData.bFilterEffective)
- ApplyViewMode(g_CluiData.current_viewmode);
return true;
}
@@ -679,16 +544,15 @@ public:
{
ImageList_RemoveAll(himlViewModes);
ImageList_Destroy(himlViewModes);
- g_ViewModeOptDlg = nullptr;
}
void onChange_LastMsg(CCtrlCheck *)
{
bool bUseLastMsg = chkLastMsg.GetState();
- EnableWindow(GetDlgItem(m_hwnd, IDC_LASTMESSAGEOP), bUseLastMsg);
- EnableWindow(GetDlgItem(m_hwnd, IDC_LASTMESSAGEUNIT), bUseLastMsg);
+ cmbLastMsgOp.Enable(bUseLastMsg);
+ cmbcmbLastMsgUnit.Enable(bUseLastMsg);
EnableWindow(GetDlgItem(m_hwnd, IDC_LASTMSGVALUE), bUseLastMsg);
- btnApply.Enable();
+ pOwner->btnApply.Enable();
}
void onClick_Add(CCtrlButton *)
@@ -706,16 +570,14 @@ public:
int iNewItem = modes.AddString(es.ptszResult);
if (iNewItem != LB_ERR) {
modes.SetCurSel(iNewItem);
- SaveViewMode(szUTF8Buf, L"", "", 0, -1, 0, 0, 0, 0);
+ SaveViewMode(szUTF8Buf, L"", "", 0, -1, 0, 0, 0);
m_iCurrItem = iNewItem;
- onListRebuilt_Clist(0);
- SendDlgItemMessage(m_hwnd, IDC_PROTOGROUPOP, CB_SETCURSEL, 0, 0);
- SendDlgItemMessage(m_hwnd, IDC_GROUPSTATUSOP, CB_SETCURSEL, 0, 0);
+ cmbProtoGroup.SetCurSel(0);
+ cmbGroupStatus.SetCurSel(0);
}
}
- UpdateFilters();
- ShowPage(0);
+ pOwner->UpdateFilters();
}
void onClick_Rename(CCtrlButton *)
@@ -752,30 +614,163 @@ public:
modes.DeleteString(idx);
if (modes.SetCurSel(0) != LB_ERR) {
m_iCurrItem = 0;
- UpdateFilters();
+ pOwner->UpdateFilters();
}
else m_iCurrItem = -1;
}
- void onClick_Apply(CCtrlButton *)
+ void onSelChange_List(CCtrlListBox*)
{
- OnApply();
+ SaveState();
+ m_iCurrItem = modes.GetCurSel();
+ pOwner->UpdateFilters();
}
+};
- void onClick_ClearAll(CCtrlButton*)
+////////////////////////////////////////////////////////////////////////////////////////
+
+class CViewModeSetupDlg2 : public CViewModePage
+{
+ CCtrlClc clist;
+ CCtrlButton btnClearAll;
+
+ HANDLE hInfoItem = nullptr;
+
+ uint32_t GetMaskForItem(HANDLE hItem)
{
- for (auto &hContact : Contacts()) {
- HANDLE hItem = clist.FindContact(hContact);
+ uint32_t dwMask = 0;
+
+ for (int i = 0; i <= ID_STATUS_MAX - ID_STATUS_OFFLINE; i++)
+ dwMask |= (clist.GetExtraImage(hItem, i) == nullImage ? 0 : 1 << i);
+
+ return dwMask;
+ }
+
+ void SetAllChildIcons(HANDLE hFirstItem, int iColumn, int iImage)
+ {
+ int typeOfFirst = clist.GetItemType(hFirstItem);
+
+ // check groups
+ HANDLE hItem = (typeOfFirst == CLCIT_GROUP) ? hFirstItem : clist.GetNextItem(hFirstItem, CLGN_NEXTGROUP);
+ while (hItem) {
+ HANDLE hChildItem = clist.GetNextItem(hItem, CLGN_CHILD);
+ if (hChildItem)
+ SetAllChildIcons(hChildItem, iColumn, iImage);
+ hItem = clist.GetNextItem(hItem, CLGN_NEXTGROUP);
+ }
+
+ // check contacts
+ if (typeOfFirst == CLCIT_CONTACT)
+ hItem = hFirstItem;
+ else
+ hItem = clist.GetNextItem(hFirstItem, CLGN_NEXTCONTACT);
+
+ while (hItem) {
+ int iOldIcon = clist.GetExtraImage(hItem, iColumn);
+ if (iOldIcon != EMPTY_EXTRA_ICON && iOldIcon != iImage)
+ clist.SetExtraImage(hItem, iColumn, iImage);
+ hItem = clist.GetNextItem(hItem, CLGN_NEXTCONTACT);
+ }
+ }
+
+ void SetIconsForColumn(HANDLE hItem, HANDLE hItemAll, int iColumn, int iImage)
+ {
+ int itemType = clist.GetItemType(hItem);
+ if (itemType == CLCIT_CONTACT) {
+ int oldiImage = clist.GetExtraImage(hItem, iColumn);
+ if (oldiImage != EMPTY_EXTRA_ICON && oldiImage != iImage)
+ clist.SetExtraImage(hItem, iColumn, iImage);
+ }
+ else if (itemType == CLCIT_INFO) {
+ int oldiImage = clist.GetExtraImage(hItem, iColumn);
+ if (oldiImage != EMPTY_EXTRA_ICON && oldiImage != iImage)
+ clist.SetExtraImage(hItem, iColumn, iImage);
+ if (hItem == hItemAll)
+ SetAllChildIcons(hItem, iColumn, iImage);
+ else
+ clist.SetExtraImage(hItem, iColumn, iImage);
+ }
+ else if (itemType == CLCIT_GROUP) {
+ int oldiImage = clist.GetExtraImage(hItem, iColumn);
+ if (oldiImage != EMPTY_EXTRA_ICON && oldiImage != iImage)
+ clist.SetExtraImage(hItem, iColumn, iImage);
+
+ hItem = clist.GetNextItem(hItem, CLGN_CHILD);
if (hItem)
- clist.SetCheck(hItem, 0);
+ SetAllChildIcons(hItem, iColumn, iImage);
}
}
- void onSelChange_List(CCtrlListBox*)
+ ////////////////////////////////////////////////////////////////////////////////////////
+
+ void UpdateClistItem(HANDLE hItem, uint32_t mask)
{
- SaveState();
- m_iCurrItem = modes.GetCurSel();
+ for (int i = ID_STATUS_OFFLINE; i <= ID_STATUS_MAX; i++)
+ clist.SetExtraImage(hItem, i - ID_STATUS_OFFLINE, (1 << (i - ID_STATUS_OFFLINE)) & mask ? i - ID_STATUS_OFFLINE : nullImage);
+ }
+
+public:
+ CViewModeSetupDlg2(CViewModeSetupDlg *_1) :
+ CViewModePage(IDD_OPT_VIEWMODES2, _1),
+ clist(this, IDC_CLIST),
+ btnClearAll(this, IDC_CLEARALL)
+ {
+ btnClearAll.OnClick = Callback(this, &CViewModeSetupDlg2::onClick_ClearAll);
+
+ clist.OnListRebuilt = Callback(this, &CViewModeSetupDlg2::onListRebuilt_Clist);
+ }
+
+ bool OnInitDialog() override
+ {
+ SetWindowLong(clist.GetHwnd(), GWL_STYLE, GetWindowLong(clist.GetHwnd(), GWL_STYLE) & ~CLS_SHOWHIDDEN);
+ clist.SetExtraImageList(himlViewModes);
+ clist.SetExtraColumns(ID_STATUS_MAX - ID_STATUS_OFFLINE);
+ clist.SetHideEmptyGroups(true);
+
+ CLCINFOITEM cii = { sizeof(cii) };
+ cii.hParentGroup = nullptr;
+ cii.pszText = TranslateT("*** All contacts ***");
+ hInfoItem = clist.AddInfoItem(&cii);
+
UpdateFilters();
+ return true;
+ }
+
+ void SaveState() override
+ {
+ pOwner->dwGlobalMask = GetMaskForItem(hInfoItem);
+
+ for (auto &hContact : Contacts()) {
+ HANDLE hItem = clist.FindContact(hContact);
+ if (hItem == nullptr)
+ continue;
+
+ if (clist.GetCheck(hItem)) {
+ uint32_t dwLocalMask = GetMaskForItem(hItem);
+ db_set_dw(hContact, CLVM_MODULE, pOwner->szModeName, MAKELONG(1, (unsigned short)dwLocalMask));
+ }
+ else {
+ if (db_get_dw(hContact, CLVM_MODULE, pOwner->szModeName, 0))
+ db_set_dw(hContact, CLVM_MODULE, pOwner->szModeName, 0);
+ }
+ }
+ }
+
+ void UpdateFilters() override
+ {
+ onListRebuilt_Clist(0);
+
+ CMStringW wszHelp(FORMAT, L"%s: %s", TranslateT("Editing view mode"), Utf2T(pOwner->szModeName).get());
+ SetDlgItemTextW(m_hwnd, IDC_CURVIEWMODE2, wszHelp);
+ }
+
+ void onClick_ClearAll(CCtrlButton *)
+ {
+ for (auto &hContact : Contacts()) {
+ HANDLE hItem = clist.FindContact(hContact);
+ if (hItem)
+ clist.SetCheck(hItem, 0);
+ }
}
void onListRebuilt_Clist(CCtrlClc::TEventInfo *)
@@ -783,9 +778,9 @@ public:
for (auto &hContact : Contacts()) {
HANDLE hItem = clist.FindContact(hContact);
if (hItem)
- clist.SetCheck(hItem, db_get_dw(hContact, CLVM_MODULE, g_szModename, 0));
+ clist.SetCheck(hItem, db_get_dw(hContact, CLVM_MODULE, pOwner->szModeName, 0));
- uint32_t localMask = HIWORD(db_get_dw(hContact, CLVM_MODULE, g_szModename, 0));
+ uint32_t localMask = HIWORD(db_get_dw(hContact, CLVM_MODULE, pOwner->szModeName, 0));
UpdateClistItem(hItem, (localMask == 0 || localMask == stickyStatusMask) ? stickyStatusMask : localMask);
}
@@ -822,24 +817,49 @@ public:
iImage = nullImage;
SetIconsForColumn(hItem, hInfoItem, nm->iColumn, iImage);
}
+};
- INT_PTR DlgProc(UINT msg, WPARAM wParam, LPARAM lParam) override
- {
- if (msg == WM_NOTIFY) {
- LPNMHDR hdr = (LPNMHDR)lParam;
- if (hdr->code == TCN_SELCHANGE && hdr->idFrom == IDC_TAB) {
- int id = TabCtrl_GetCurSel(GetDlgItem(m_hwnd, IDC_TAB));
- if (id == 0)
- ShowPage(0);
- else
- ShowPage(1);
- return 0;
- }
- }
+/////////////////////////////////////////////////////////////////////////////////////////
- return CDlgBase::DlgProc(msg, wParam, lParam);
+CViewModeSetupDlg::CViewModeSetupDlg() :
+ CDlgBase(g_plugin, IDD_OPT_VIEWMODES),
+ m_tab(this, IDC_TAB),
+ m_pages(2),
+ btnApply(this, IDC_APPLY)
+{
+ m_pages.insert(new CViewModeSetupDlg1(this));
+ m_pages.insert(new CViewModeSetupDlg2(this));
+
+ m_tab.SetPageOwner();
+ m_tab.AddPage(LPGENW("Filtering"), nullptr, m_pages[0]);
+ m_tab.AddPage(LPGENW("New profile"), nullptr, m_pages[1]);
+
+ btnApply.OnClick = Callback(this, &CViewModeSetupDlg::onClick_Apply);
+}
+
+bool CViewModeSetupDlg::OnApply()
+{
+ newGroupFilter.Empty();
+ newProtoFilter.Empty();
+ statusMask = dwGlobalMask = options = operators = lmdat = 0;
+
+ for (auto &it : m_pages)
+ it->SaveState();
+
+ if (!szModeName.IsEmpty()) {
+ SaveViewMode(szModeName, newGroupFilter, newProtoFilter, statusMask, dwGlobalMask, options, operators, lmdat);
+
+ if (g_CluiData.bFilterEffective)
+ ApplyViewMode(g_CluiData.current_viewmode);
}
-};
+ return true;
+}
+
+void CViewModeSetupDlg::UpdateFilters()
+{
+ for (auto &it : m_pages)
+ it->UpdateFilters();
+}
/////////////////////////////////////////////////////////////////////////////////////////
diff --git a/plugins/Clist_modern/src/resource.h b/plugins/Clist_modern/src/resource.h
index bf15e68168..079c8703d8 100644
--- a/plugins/Clist_modern/src/resource.h
+++ b/plugins/Clist_modern/src/resource.h
@@ -8,6 +8,9 @@
#define IDI_MIRANDA 102
#define IDD_OPT_ROWTMPL 103
#define IDI_SMS 104
+#define IDD_OPT_VIEWMODES 105
+#define IDD_OPT_VIEWMODES1 106
+#define IDD_OPT_VIEWMODES2 107
#define IDD_OPT_CLIST 126
#define IDD_OPT_SOUND 134
#define IDD_OPT_HOTKEYS 134
@@ -392,7 +395,6 @@
#define IDC_RIGHTMARGINSPIN 11803
#define IDC_TOPMARGINSPIN 11804
#define IDC_BOTTOMMARGINSPIN 11805
-#define IDD_OPT_VIEWMODES 19100
#define IDC_VIEWMODES 19102
#define IDC_PROTOCOLS 19103
#define IDC_ADDVIEWMODE 19104