summaryrefslogtreecommitdiff
path: root/plugins/Clist_modern
diff options
context:
space:
mode:
authorGeorge Hazan <ghazan@miranda.im>2020-08-05 22:24:11 +0300
committerGeorge Hazan <ghazan@miranda.im>2020-08-05 22:24:11 +0300
commit4a99d3eefa615153732e9ba503c712907e46fb7e (patch)
tree85448261ce5a00eb071182ed7b514f2892acebf0 /plugins/Clist_modern
parentfa02fba01b1a24fda16501c26f33b90710b4f9eb (diff)
fixes #2513 (Clist_Modern: Possibility of renaming View Mode(s))
Diffstat (limited to 'plugins/Clist_modern')
-rw-r--r--plugins/Clist_modern/res/resource.rc9
-rw-r--r--plugins/Clist_modern/src/modern_viewmodebar.cpp1236
-rw-r--r--plugins/Clist_modern/src/resource.h6
-rw-r--r--plugins/Clist_modern/src/version.h2
4 files changed, 624 insertions, 629 deletions
diff --git a/plugins/Clist_modern/res/resource.rc b/plugins/Clist_modern/res/resource.rc
index e0a3667736..eead268fb7 100644
--- a/plugins/Clist_modern/res/resource.rc
+++ b/plugins/Clist_modern/res/resource.rc
@@ -167,13 +167,12 @@ 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,55,LBS_SORT | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP,WS_EX_CLIENTEDGE
+ 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
- PUSHBUTTON "+",IDC_ADDVIEWMODE,142,39,18,16
- PUSHBUTTON "-",IDC_DELETEVIEWMODE,142,60,18,16
- LTEXT "New",IDC_STATIC5,15,91,38,11,0,WS_EX_TRANSPARENT
- EDITTEXT IDC_NEWVIEMODE,59,88,76,13,ES_AUTOHSCROLL
+ 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
diff --git a/plugins/Clist_modern/src/modern_viewmodebar.cpp b/plugins/Clist_modern/src/modern_viewmodebar.cpp
index 5f52895231..c6fb949c12 100644
--- a/plugins/Clist_modern/src/modern_viewmodebar.cpp
+++ b/plugins/Clist_modern/src/modern_viewmodebar.cpp
@@ -34,8 +34,7 @@ $Id: viewmodes.c 2998 2006-06-01 07:11:52Z nightwish2004 $
#define TIMERID_VIEWMODEEXPIRE 100
typedef int(__cdecl *pfnEnumCallback)(char *szName);
-static HWND clvmHwnd = nullptr;
-static int clvm_curItem = 0;
+HWND g_ViewModeOptDlg = nullptr;
HMENU hViewModeMenu = nullptr;
static HWND hwndSelector = nullptr;
@@ -45,30 +44,27 @@ static int nullImage;
static DWORD stickyStatusMask = 0;
static char g_szModename[2048];
-static int g_ViewModeOptDlg = FALSE;
-
static UINT _page1Controls[] =
{
- IDC_STATIC1, IDC_STATIC2, IDC_STATIC3, IDC_STATIC5, IDC_STATIC4,
- IDC_STATIC8, IDC_ADDVIEWMODE, IDC_DELETEVIEWMODE, IDC_NEWVIEMODE, IDC_GROUPS, IDC_PROTOCOLS,
+ 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, 0
+ IDC_LASTMESSAGEOP, IDC_LASTMESSAGEUNIT, IDC_LASTMSG, IDC_LASTMSGVALUE, IDC_USEGROUPS
};
-static UINT _page2Controls[] = { IDC_CLIST, IDC_STATIC9, IDC_STATIC8, IDC_CLEARALL, IDC_CURVIEWMODE2, 0 };
+static UINT _page2Controls[] = { IDC_CLIST, IDC_STATIC9, IDC_STATIC8, IDC_CLEARALL, IDC_CURVIEWMODE2 };
static UINT _buttons[] = { IDC_RESETMODES, IDC_SELECTMODE, IDC_CONFIGUREMODES };
static BOOL sttDrawViewModeBackground(HWND hwnd, HDC hdc, RECT *rect);
static void DeleteViewMode(char * szName);
-/*
- * enumerate all view modes, call the callback function with the mode name
- * useful for filling lists, menus and so on..
- */
+/////////////////////////////////////////////////////////////////////////////////////////
+// enumerate all view modes, call the callback function with the mode name
+// useful for filling lists, menus and so on..
-int CLVM_EnumProc(const char *szSetting, void *lParam)
+static int CLVM_EnumProc(const char *szSetting, void *lParam)
{
pfnEnumCallback EnumCallback = (pfnEnumCallback)lParam;
if (szSetting != nullptr)
@@ -81,334 +77,249 @@ void CLVM_EnumModes(pfnEnumCallback EnumCallback)
db_enum_settings(0, CLVM_EnumProc, CLVM_MODULE, EnumCallback);
}
-int FillModes(char *szsetting)
+/////////////////////////////////////////////////////////////////////////////////////////
+
+static int DeleteAutoModesCallback(char *szsetting)
{
- if (BYTE(szsetting[0]) == 246)
- return 1;
if (szsetting[0] == 13)
- return 1;
-
- ptrW temp(mir_utf8decodeW(szsetting));
- if (temp != nullptr)
- SendDlgItemMessage(clvmHwnd, IDC_VIEWMODES, LB_INSERTSTRING, -1, (LPARAM)temp.get());
+ DeleteViewMode(szsetting);
return 1;
}
-static void ShowPage(HWND hwnd, int page)
+void SaveViewMode(const char *name, const wchar_t *szGroupFilter, const char *szProtoFilter, DWORD dwStatusMask, DWORD dwStickyStatusMask,
+ unsigned int options, unsigned int stickies, unsigned int operators, unsigned int lmdat)
{
- int i = 0;
- int pageChange = 0;
-
- if (page == 0 && IsWindowVisible(GetDlgItem(hwnd, _page2Controls[0])))
- pageChange = 1;
-
- if (page == 1 && IsWindowVisible(GetDlgItem(hwnd, _page1Controls[0])))
- pageChange = 1;
+ CLVM_EnumModes(DeleteAutoModesCallback);
- if (pageChange)
- SendMessage(hwnd, WM_SETREDRAW, FALSE, 0);
+ char szSetting[512];
+ mir_snprintf(szSetting, "%c%s_PF", 246, name);
+ db_set_s(0, CLVM_MODULE, szSetting, szProtoFilter);
+ mir_snprintf(szSetting, "%c%s_GF", 246, name);
+ db_set_ws(0, CLVM_MODULE, szSetting, szGroupFilter);
+ mir_snprintf(szSetting, "%c%s_SM", 246, name);
+ db_set_dw(0, CLVM_MODULE, szSetting, dwStatusMask);
+ mir_snprintf(szSetting, "%c%s_SSM", 246, name);
+ db_set_dw(0, CLVM_MODULE, szSetting, dwStickyStatusMask);
+ mir_snprintf(szSetting, "%c%s_OPT", 246, name);
+ db_set_dw(0, CLVM_MODULE, szSetting, options);
+ mir_snprintf(szSetting, "%c%s_LM", 246, name);
+ db_set_dw(0, CLVM_MODULE, szSetting, lmdat);
- switch (page) {
- case 0:
- while (_page1Controls[i] != 0)
- ShowWindow(GetDlgItem(hwnd, _page1Controls[i++]), SW_SHOW);
- i = 0;
- while (_page2Controls[i] != 0)
- ShowWindow(GetDlgItem(hwnd, _page2Controls[i++]), SW_HIDE);
- break;
- case 1:
- while (_page1Controls[i] != 0)
- ShowWindow(GetDlgItem(hwnd, _page1Controls[i++]), SW_HIDE);
- i = 0;
- while (_page2Controls[i] != 0)
- ShowWindow(GetDlgItem(hwnd, _page2Controls[i++]), SW_SHOW);
- break;
- }
- if (pageChange) {
- SendMessage(hwnd, WM_SETREDRAW, TRUE, 0);
- RedrawWindow(hwnd, nullptr, nullptr, RDW_ERASE | RDW_INVALIDATE);
- }
+ db_set_dw(0, CLVM_MODULE, name, MAKELONG((unsigned short)operators, (unsigned short)stickies));
}
-static int UpdateClistItem(MCONTACT hContact, DWORD mask)
-{
- for (int i = ID_STATUS_OFFLINE; i <= ID_STATUS_MAX; i++)
- SendDlgItemMessage(clvmHwnd, IDC_CLIST, CLM_SETEXTRAIMAGE, hContact, MAKELONG(i - ID_STATUS_OFFLINE,
- (1 << (i - ID_STATUS_OFFLINE)) & mask ? i - ID_STATUS_OFFLINE : nullImage));
-
- return 0;
-}
+/////////////////////////////////////////////////////////////////////////////////////////
-static DWORD GetMaskForItem(HANDLE hItem)
+void DeleteViewMode(char *szName)
{
- DWORD dwMask = 0;
-
- for (int i = 0; i <= ID_STATUS_MAX - ID_STATUS_OFFLINE; i++)
- dwMask |= (SendDlgItemMessage(clvmHwnd, IDC_CLIST, CLM_GETEXTRAIMAGE, (WPARAM)hItem, i) == nullImage ? 0 : 1 << i);
-
- return dwMask;
-}
+ char szSetting[256];
-static void UpdateStickies()
-{
- for (auto &hContact : Contacts()) {
- MCONTACT hItem = (MCONTACT)SendDlgItemMessage(clvmHwnd, IDC_CLIST, CLM_FINDCONTACT, hContact, 0);
- if (hItem)
- SendDlgItemMessage(clvmHwnd, IDC_CLIST, CLM_SETCHECKMARK, (WPARAM)hItem, (BYTE)db_get_dw(hContact, CLVM_MODULE, g_szModename, 0) ? 1 : 0);
+ mir_snprintf(szSetting, "%c%s_PF", 246, szName);
+ db_unset(0, CLVM_MODULE, szSetting);
+ mir_snprintf(szSetting, "%c%s_GF", 246, szName);
+ db_unset(0, CLVM_MODULE, szSetting);
+ mir_snprintf(szSetting, "%c%s_SM", 246, szName);
+ db_unset(0, CLVM_MODULE, szSetting);
+ mir_snprintf(szSetting, "%c%s_VA", 246, szName);
+ db_unset(0, CLVM_MODULE, szSetting);
+ mir_snprintf(szSetting, "%c%s_SSM", 246, szName);
+ db_unset(0, CLVM_MODULE, szSetting);
+ mir_snprintf(szSetting, "%c%s_OPT", 246, szName);
+ db_unset(0, CLVM_MODULE, szSetting);
+ mir_snprintf(szSetting, "%c%s_LM", 246, szName);
+ db_unset(0, CLVM_MODULE, szSetting);
+ db_unset(0, CLVM_MODULE, szName);
- DWORD localMask = HIWORD(db_get_dw(hContact, CLVM_MODULE, g_szModename, 0));
- UpdateClistItem(hItem, (localMask == 0 || localMask == stickyStatusMask) ? stickyStatusMask : localMask);
+ if (!mir_strcmp(g_CluiData.current_viewmode, szName) && mir_strlen(szName) == mir_strlen(g_CluiData.current_viewmode)) {
+ g_CluiData.bFilterEffective = 0;
+ Clist_Broadcast(CLM_AUTOREBUILD, 0, 0);
+ SetWindowText(hwndSelector, TranslateT("All contacts"));
}
- for (int i = ID_STATUS_OFFLINE; i <= ID_STATUS_MAX; i++)
- SendDlgItemMessage(clvmHwnd, IDC_CLIST, CLM_SETEXTRAIMAGE, (WPARAM)hInfoItem, MAKELONG(i - ID_STATUS_OFFLINE, (1 << (i - ID_STATUS_OFFLINE)) & stickyStatusMask ? i - ID_STATUS_OFFLINE : MAX_STATUS_COUNT));
-
- HANDLE hItem = (HANDLE)SendDlgItemMessage(clvmHwnd, IDC_CLIST, CLM_GETNEXTITEM, CLGN_ROOT, 0);
- hItem = (HANDLE)SendDlgItemMessage(clvmHwnd, IDC_CLIST, CLM_GETNEXTITEM, CLGN_NEXTGROUP, (LPARAM)hItem);
- while (hItem) {
- for (int i = ID_STATUS_OFFLINE; i <= ID_STATUS_MAX; i++)
- SendDlgItemMessage(clvmHwnd, IDC_CLIST, CLM_SETEXTRAIMAGE, (WPARAM)hItem, MAKELONG(i - ID_STATUS_OFFLINE, nullImage));
- hItem = (HANDLE)SendDlgItemMessage(clvmHwnd, IDC_CLIST, CLM_GETNEXTITEM, CLGN_NEXTGROUP, (LPARAM)hItem);
- }
+ for (auto &hContact : Contacts())
+ if (db_get_dw(hContact, CLVM_MODULE, szName, -1) != -1)
+ db_set_dw(hContact, CLVM_MODULE, szName, 0);
}
-static int FillDialog(HWND hwnd)
+/////////////////////////////////////////////////////////////////////////////////////////
+// View modes setup dialog
+
+class CViewModeSetupDlg : public CDlgBase
{
- LVCOLUMN lvc = { 0 };
- HWND hwndList = GetDlgItem(hwnd, IDC_PROTOCOLS);
+ int m_iCurrItem = -1;
- CLVM_EnumModes(FillModes);
- ListView_SetExtendedListViewStyle(GetDlgItem(hwnd, IDC_PROTOCOLS), LVS_EX_CHECKBOXES);
- lvc.mask = LVCF_FMT;
- lvc.fmt = LVCFMT_IMAGE | LVCFMT_LEFT;
- ListView_InsertColumn(hwndList, 0, &lvc);
+ CCtrlCheck chkLastMsg;
+ CCtrlButton btnClearAll, btnApply;
+ CCtrlMButton btnAdd, btnRename, btnDelete;
+ CCtrlListBox modes;
+ CCtrlListView protocols, groups, statuses;
+ CCtrlClc clist;
- // fill protocols...
+ static int __cdecl FillModes(const char *szsetting, void *param)
{
- LVITEM item = { 0 };
- item.mask = LVIF_TEXT | LVIF_PARAM;
- item.iItem = 1000;
- for (auto &pa : Accounts()) {
- item.lParam = (LPARAM)pa->szModuleName;
- item.pszText = pa->tszAccountName;
- ListView_InsertItem(hwndList, &item);
+ if (BYTE(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;
}
- ListView_SetColumnWidth(hwndList, 0, LVSCW_AUTOSIZE);
- ListView_Arrange(hwndList, LVA_ALIGNLEFT | LVA_ALIGNTOP);
-
- // fill groups
+ DWORD GetMaskForItem(HANDLE hItem)
{
- hwndList = GetDlgItem(hwnd, IDC_GROUPS);
-
- ListView_SetExtendedListViewStyle(hwndList, LVS_EX_CHECKBOXES);
- lvc.mask = LVCF_FMT;
- lvc.fmt = LVCFMT_IMAGE | LVCFMT_LEFT;
- ListView_InsertColumn(hwndList, 0, &lvc);
+ DWORD dwMask = 0;
- LVITEM item = { 0 };
- item.mask = LVIF_TEXT;
- item.iItem = 1000;
+ for (int i = 0; i <= ID_STATUS_MAX - ID_STATUS_OFFLINE; i++)
+ dwMask |= (clist.GetExtraImage(hItem, i) == nullImage ? 0 : 1 << i);
- item.pszText = TranslateT("Ungrouped contacts");
- SendMessage(hwndList, LVM_INSERTITEM, 0, (LPARAM)&item);
-
- wchar_t *szGroup;
- for (int i = 1; (szGroup = Clist_GroupGetName(i, nullptr)) != nullptr; i++) {
- item.pszText = szGroup;
- SendMessage(hwndList, LVM_INSERTITEM, 0, (LPARAM)&item);
- }
- ListView_SetColumnWidth(hwndList, 0, LVSCW_AUTOSIZE);
- ListView_Arrange(hwndList, LVA_ALIGNLEFT | LVA_ALIGNTOP);
- }
- hwndList = GetDlgItem(hwnd, IDC_STATUSMODES);
- ListView_SetExtendedListViewStyle(hwndList, LVS_EX_CHECKBOXES);
- lvc.mask = LVCF_FMT;
- lvc.fmt = LVCFMT_IMAGE | LVCFMT_LEFT;
- ListView_InsertColumn(hwndList, 0, &lvc);
- for (int i = ID_STATUS_OFFLINE; i <= ID_STATUS_MAX; i++) {
- LVITEM item = { 0 };
- item.mask = LVIF_TEXT;
- item.pszText = Clist_GetStatusModeDescription(i, 0);
- item.iItem = i - ID_STATUS_OFFLINE;
- SendMessage(hwndList, LVM_INSERTITEM, 0, (LPARAM)&item);
+ return dwMask;
}
- ListView_SetColumnWidth(hwndList, 0, LVSCW_AUTOSIZE);
- ListView_Arrange(hwndList, LVA_ALIGNLEFT | LVA_ALIGNTOP);
-
- SendDlgItemMessage(hwnd, IDC_PROTOGROUPOP, CB_INSERTSTRING, -1, (LPARAM)TranslateT("And"));
- SendDlgItemMessage(hwnd, IDC_PROTOGROUPOP, CB_INSERTSTRING, -1, (LPARAM)TranslateT("Or"));
- SendDlgItemMessage(hwnd, IDC_GROUPSTATUSOP, CB_INSERTSTRING, -1, (LPARAM)TranslateT("And"));
- SendDlgItemMessage(hwnd, IDC_GROUPSTATUSOP, CB_INSERTSTRING, -1, (LPARAM)TranslateT("Or"));
-
- SendDlgItemMessage(hwnd, IDC_LASTMESSAGEOP, CB_INSERTSTRING, -1, (LPARAM)TranslateT("Older than"));
- SendDlgItemMessage(hwnd, IDC_LASTMESSAGEOP, CB_INSERTSTRING, -1, (LPARAM)TranslateT("Newer than"));
-
- SendDlgItemMessage(hwnd, IDC_LASTMESSAGEUNIT, CB_INSERTSTRING, -1, (LPARAM)TranslateT("Minutes"));
- SendDlgItemMessage(hwnd, IDC_LASTMESSAGEUNIT, CB_INSERTSTRING, -1, (LPARAM)TranslateT("Hours"));
- SendDlgItemMessage(hwnd, IDC_LASTMESSAGEUNIT, CB_INSERTSTRING, -1, (LPARAM)TranslateT("Days"));
- SendDlgItemMessage(hwnd, IDC_LASTMESSAGEOP, CB_SETCURSEL, 0, 0);
- SendDlgItemMessage(hwnd, IDC_LASTMESSAGEUNIT, CB_SETCURSEL, 0, 0);
- SetDlgItemInt(hwnd, IDC_LASTMSGVALUE, 0, 0);
- return 0;
-}
-static void SetAllChildIcons(HWND hwndList, HANDLE hFirstItem, int iColumn, int iImage)
-{
- int typeOfFirst = SendMessage(hwndList, CLM_GETITEMTYPE, (WPARAM)hFirstItem, 0);
-
- // check groups
- HANDLE hItem = (typeOfFirst == CLCIT_GROUP) ? hFirstItem : (HANDLE)SendMessage(hwndList, CLM_GETNEXTITEM, CLGN_NEXTGROUP, (LPARAM)hFirstItem);
- while (hItem) {
- HANDLE hChildItem = (HANDLE)SendMessage(hwndList, CLM_GETNEXTITEM, CLGN_CHILD, (LPARAM)hItem);
- if (hChildItem)
- SetAllChildIcons(hwndList, hChildItem, iColumn, iImage);
- hItem = (HANDLE)SendMessage(hwndList, CLM_GETNEXTITEM, CLGN_NEXTGROUP, (LPARAM)hItem);
- }
+ ////////////////////////////////////////////////////////////////////////////////////////
+ // fills dialog with data
- // check contacts
- if (typeOfFirst == CLCIT_CONTACT) hItem = hFirstItem;
- else hItem = (HANDLE)SendMessage(hwndList, CLM_GETNEXTITEM, CLGN_NEXTCONTACT, (LPARAM)hFirstItem);
- while (hItem) {
- int iOldIcon = SendMessage(hwndList, CLM_GETEXTRAIMAGE, (WPARAM)hItem, iColumn);
- if (iOldIcon != EMPTY_EXTRA_ICON && iOldIcon != iImage)
- SendMessage(hwndList, CLM_SETEXTRAIMAGE, (WPARAM)hItem, MAKELPARAM(iColumn, iImage));
- hItem = (HANDLE)SendMessage(hwndList, CLM_GETNEXTITEM, CLGN_NEXTCONTACT, (LPARAM)hItem);
- }
-}
+ void FillDialog()
+ {
+ db_enum_settings(0, FillModes, CLVM_MODULE, &modes);
-static void SetIconsForColumn(HWND hwndList, HANDLE hItem, HANDLE hItemAll, int iColumn, int iImage)
-{
- int itemType = SendMessage(hwndList, CLM_GETITEMTYPE, (WPARAM)hItem, 0);
- if (itemType == CLCIT_CONTACT) {
- int oldiImage = SendMessage(hwndList, CLM_GETEXTRAIMAGE, (WPARAM)hItem, iColumn);
- if (oldiImage != EMPTY_EXTRA_ICON && oldiImage != iImage)
- SendMessage(hwndList, CLM_SETEXTRAIMAGE, (WPARAM)hItem, MAKELPARAM(iColumn, iImage));
- }
- else if (itemType == CLCIT_INFO) {
- int oldiImage = SendMessage(hwndList, CLM_GETEXTRAIMAGE, (WPARAM)hItem, iColumn);
- if (oldiImage != EMPTY_EXTRA_ICON && oldiImage != iImage)
- SendMessage(hwndList, CLM_SETEXTRAIMAGE, (WPARAM)hItem, MAKELPARAM(iColumn, iImage));
- if (hItem == hItemAll)
- SetAllChildIcons(hwndList, hItem, iColumn, iImage);
- else
- SendMessage(hwndList, CLM_SETEXTRAIMAGE, (WPARAM)hItem, MAKELPARAM(iColumn, iImage)); //hItemUnknown
- }
- else if (itemType == CLCIT_GROUP) {
- int oldiImage = SendMessage(hwndList, CLM_GETEXTRAIMAGE, (WPARAM)hItem, iColumn);
- if (oldiImage != EMPTY_EXTRA_ICON && oldiImage != iImage)
- SendMessage(hwndList, CLM_SETEXTRAIMAGE, (WPARAM)hItem, MAKELPARAM(iColumn, iImage));
- hItem = (HANDLE)SendMessage(hwndList, CLM_GETNEXTITEM, CLGN_CHILD, (LPARAM)hItem);
- if (hItem)
- SetAllChildIcons(hwndList, hItem, iColumn, iImage);
- }
-}
+ // fill protocols...
+ protocols.SetExtendedListViewStyle(LVS_EX_CHECKBOXES);
-static int DeleteAutoModesCallback(char *szsetting)
-{
- if (szsetting[0] == 13)
- DeleteViewMode(szsetting);
- return 1;
-}
+ LVCOLUMN lvc = {};
+ lvc.mask = LVCF_FMT;
+ lvc.fmt = LVCFMT_IMAGE | LVCFMT_LEFT;
+ protocols.InsertColumn(0, &lvc);
+ {
+ LVITEM item = {};
+ item.mask = LVIF_TEXT | LVIF_PARAM;
+ item.iItem = 1000;
+ for (auto &pa : Accounts()) {
+ item.lParam = (LPARAM)pa->szModuleName;
+ item.pszText = pa->tszAccountName;
+ protocols.InsertItem(&item);
+ }
+ }
+ protocols.SetColumnWidth(0, LVSCW_AUTOSIZE);
+ protocols.Arrange(LVA_ALIGNLEFT | LVA_ALIGNTOP);
+ // fill groups
+ groups.SetExtendedListViewStyle(LVS_EX_CHECKBOXES);
+ lvc.mask = LVCF_FMT;
+ lvc.fmt = LVCFMT_IMAGE | LVCFMT_LEFT;
+ groups.InsertColumn(0, &lvc);
+ {
+ LVITEM item = {};
+ item.mask = LVIF_TEXT;
+ item.iItem = 1000;
+ item.pszText = TranslateT("Ungrouped contacts");
+ groups.InsertItem(&item);
+
+ wchar_t *szGroup;
+ for (int i = 1; (szGroup = Clist_GroupGetName(i, nullptr)) != nullptr; i++) {
+ item.pszText = szGroup;
+ groups.InsertItem(&item);
+ }
+ }
+ groups.SetColumnWidth(0, LVSCW_AUTOSIZE);
+ groups.Arrange(LVA_ALIGNLEFT | LVA_ALIGNTOP);
-void SaveViewMode(const char *name, const wchar_t *szGroupFilter, const char *szProtoFilter, DWORD dwStatusMask, DWORD dwStickyStatusMask,
- unsigned int options, unsigned int stickies, unsigned int operators, unsigned int lmdat)
-{
- CLVM_EnumModes(DeleteAutoModesCallback);
+ // fill statuses
+ statuses.SetExtendedListViewStyle(LVS_EX_CHECKBOXES);
- char szSetting[512];
- mir_snprintf(szSetting, "%c%s_PF", 246, name);
- db_set_s(0, CLVM_MODULE, szSetting, szProtoFilter);
- mir_snprintf(szSetting, "%c%s_GF", 246, name);
- db_set_ws(0, CLVM_MODULE, szSetting, szGroupFilter);
- mir_snprintf(szSetting, "%c%s_SM", 246, name);
- db_set_dw(0, CLVM_MODULE, szSetting, dwStatusMask);
- mir_snprintf(szSetting, "%c%s_SSM", 246, name);
- db_set_dw(0, CLVM_MODULE, szSetting, dwStickyStatusMask);
- mir_snprintf(szSetting, "%c%s_OPT", 246, name);
- db_set_dw(0, CLVM_MODULE, szSetting, options);
- mir_snprintf(szSetting, "%c%s_LM", 246, name);
- db_set_dw(0, CLVM_MODULE, szSetting, lmdat);
+ lvc.mask = LVCF_FMT;
+ lvc.fmt = LVCFMT_IMAGE | LVCFMT_LEFT;
+ statuses.InsertColumn(0, &lvc);
- db_set_dw(0, CLVM_MODULE, name, MAKELONG((unsigned short)operators, (unsigned short)stickies));
-}
+ for (int i = ID_STATUS_OFFLINE; i <= ID_STATUS_MAX; i++) {
+ LVITEM item = {};
+ item.mask = LVIF_TEXT;
+ item.pszText = Clist_GetStatusModeDescription(i, 0);
+ item.iItem = i - ID_STATUS_OFFLINE;
+ statuses.InsertItem(&item);
+ }
+ 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"));
+
+ SendDlgItemMessage(m_hwnd, IDC_LASTMESSAGEOP, CB_INSERTSTRING, -1, (LPARAM)TranslateT("Older than"));
+ SendDlgItemMessage(m_hwnd, IDC_LASTMESSAGEOP, CB_INSERTSTRING, -1, (LPARAM)TranslateT("Newer than"));
+
+ 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
- */
+ ////////////////////////////////////////////////////////////////////////////////////////
+ // saves the state of the filter definitions for the current item
-void SaveState()
-{
- wchar_t newGroupFilter[2048] = L"|";
- char newProtoFilter[2048] = "|";
- DWORD statusMask = 0;
- DWORD operators = 0;
+ void SaveState()
+ {
+ wchar_t newGroupFilter[2048] = L"|";
+ char newProtoFilter[2048] = "|";
+ DWORD statusMask = 0;
+ DWORD operators = 0;
- if (clvm_curItem == -1)
- return;
+ if (m_iCurrItem == -1)
+ return;
- {
- LVITEM item = { 0 };
- HWND hwndList = GetDlgItem(clvmHwnd, IDC_PROTOCOLS);
- for (int i = 0; i < ListView_GetItemCount(hwndList); i++) {
- if (ListView_GetCheckState(hwndList, i)) {
+ for (int i = 0; i < protocols.GetItemCount(); i++) {
+ if (protocols.GetCheckState(i)) {
+ LVITEM item = {};
item.mask = LVIF_PARAM;
item.iItem = i;
- ListView_GetItem(hwndList, &item);
+ protocols.GetItem(&item);
- mir_strncat(newProtoFilter, (char*)item.lParam, _countof(newProtoFilter) - mir_strlen(newProtoFilter));
+ mir_strncat(newProtoFilter, (char *)item.lParam, _countof(newProtoFilter) - mir_strlen(newProtoFilter));
mir_strncat(newProtoFilter, "|", _countof(newProtoFilter) - mir_strlen(newProtoFilter));
newProtoFilter[2047] = 0;
}
}
- }
- {
- LVITEM item = { 0 };
- wchar_t szTemp[256];
- HWND hwndList = GetDlgItem(clvmHwnd, IDC_GROUPS);
+ operators |= groups.GetCheckState(0) ? CLVM_INCLUDED_UNGROUPED : 0;
- operators |= ListView_GetCheckState(hwndList, 0) ? CLVM_INCLUDED_UNGROUPED : 0;
-
- for (int i = 0; i < ListView_GetItemCount(hwndList); i++) {
- if (ListView_GetCheckState(hwndList, i)) {
+ for (int i = 0; i < groups.GetItemCount(); i++) {
+ if (groups.GetCheckState(i)) {
+ wchar_t szTemp[256];
+ LVITEM item = {};
item.mask = LVIF_TEXT;
item.pszText = szTemp;
item.cchTextMax = _countof(szTemp);
item.iItem = i;
- SendMessage(hwndList, LVM_GETITEM, 0, (LPARAM)&item);
+ groups.GetItem(&item);
mir_wstrncat(newGroupFilter, szTemp, _countof(newGroupFilter) - mir_wstrlen(newGroupFilter));
mir_wstrncat(newGroupFilter, L"|", _countof(newGroupFilter) - mir_wstrlen(newGroupFilter));
newGroupFilter[2047] = 0;
}
}
- }
- {
- HWND hwndList = GetDlgItem(clvmHwnd, IDC_STATUSMODES);
+
for (int i = ID_STATUS_OFFLINE; i <= ID_STATUS_MAX; i++)
- if (ListView_GetCheckState(hwndList, i - ID_STATUS_OFFLINE))
+ if (statuses.GetCheckState(i - ID_STATUS_OFFLINE))
statusMask |= (1 << (i - ID_STATUS_OFFLINE));
- }
- int iLen = SendDlgItemMessage(clvmHwnd, IDC_VIEWMODES, LB_GETTEXTLEN, clvm_curItem, 0);
- if (iLen) {
unsigned int stickies = 0;
-
- wchar_t *szTempModeName = (wchar_t*)mir_alloc((iLen + 1) * sizeof(wchar_t));
+ ptrW szTempModeName(modes.GetItemText(m_iCurrItem));
if (szTempModeName) {
- SendDlgItemMessage(clvmHwnd, IDC_VIEWMODES, LB_GETTEXT, clvm_curItem, (LPARAM)szTempModeName);
-
T2Utf szModeName(szTempModeName);
DWORD dwGlobalMask = GetMaskForItem(hInfoItem);
for (auto &hContact : Contacts()) {
- HANDLE hItem = (HANDLE)SendDlgItemMessage(clvmHwnd, IDC_CLIST, CLM_FINDCONTACT, hContact, 0);
+ HANDLE hItem = clist.FindContact(hContact);
if (hItem == nullptr)
continue;
- if (SendDlgItemMessage(clvmHwnd, IDC_CLIST, CLM_GETCHECKMARK, (WPARAM)hItem, 0)) {
+ if (clist.GetCheck(hItem)) {
DWORD dwLocalMask = GetMaskForItem(hItem);
db_set_dw(hContact, CLVM_MODULE, szModeName, MAKELONG(1, (unsigned short)dwLocalMask));
stickies++;
@@ -419,431 +330,516 @@ void SaveState()
}
}
- operators |= ((SendDlgItemMessage(clvmHwnd, IDC_PROTOGROUPOP, CB_GETCURSEL, 0, 0) == 1 ? CLVM_PROTOGROUP_OP : 0) |
- (SendDlgItemMessage(clvmHwnd, IDC_GROUPSTATUSOP, CB_GETCURSEL, 0, 0) == 1 ? CLVM_GROUPSTATUS_OP : 0) |
- (IsDlgButtonChecked(clvmHwnd, IDC_AUTOCLEAR) ? CLVM_AUTOCLEAR : 0) |
- (IsDlgButtonChecked(clvmHwnd, IDC_LASTMSG) ? CLVM_USELASTMSG : 0) |
- (IsDlgButtonChecked(clvmHwnd, IDC_USEGROUPS) == BST_CHECKED ? CLVM_USEGROUPS : 0) |
- (IsDlgButtonChecked(clvmHwnd, IDC_USEGROUPS) == BST_UNCHECKED ? CLVM_DONOTUSEGROUPS : 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));
- DWORD options = SendDlgItemMessage(clvmHwnd, IDC_AUTOCLEARSPIN, UDM_GETPOS, 0, 0);
+ DWORD options = SendDlgItemMessage(m_hwnd, IDC_AUTOCLEARSPIN, UDM_GETPOS, 0, 0);
BOOL translated;
- DWORD lmdat = MAKELONG(GetDlgItemInt(clvmHwnd, IDC_LASTMSGVALUE, &translated, FALSE),
- MAKEWORD(SendDlgItemMessage(clvmHwnd, IDC_LASTMESSAGEOP, CB_GETCURSEL, 0, 0),
- SendDlgItemMessage(clvmHwnd, IDC_LASTMESSAGEUNIT, CB_GETCURSEL, 0, 0)));
+ DWORD 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);
-
- mir_free(szTempModeName);
- szTempModeName = nullptr;
}
+ btnApply.Disable();
}
- EnableWindow(GetDlgItem(clvmHwnd, IDC_APPLY), FALSE);
-}
-/*
- * updates the filter list boxes with the data taken from the filtering string
- */
+ ////////////////////////////////////////////////////////////////////////////////////////
-static void UpdateFilters()
-{
- char szSetting[128];
- DWORD dwFlags;
- DWORD opt;
-
- if (clvm_curItem == LB_ERR)
- return;
-
- int iLen = SendDlgItemMessageA(clvmHwnd, IDC_VIEWMODES, LB_GETTEXTLEN, clvm_curItem, 0);
- if (iLen == 0)
- return;
+ 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);
+ }
- wchar_t *szTempBuf = (wchar_t*)_alloca((iLen + 1) * sizeof(wchar_t));
- SendDlgItemMessage(clvmHwnd, IDC_VIEWMODES, LB_GETTEXT, clvm_curItem, (LPARAM)szTempBuf);
+ // check contacts
+ if (typeOfFirst == CLCIT_CONTACT)
+ hItem = hFirstItem;
+ else
+ hItem = clist.GetNextItem(hFirstItem, CLGN_NEXTCONTACT);
- T2Utf szBuf(szTempBuf);
- mir_strncpy(g_szModename, szBuf, _countof(g_szModename));
- {
- wchar_t szTemp[100];
- mir_snwprintf(szTemp, TranslateT("Configuring view mode: %s"), szTempBuf);
- SetDlgItemText(clvmHwnd, IDC_CURVIEWMODE2, szTemp);
+ 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);
+ }
}
- mir_snprintf(szSetting, "%c%s_PF", 246, szBuf.get());
- ptrA szPF(db_get_sa(0, CLVM_MODULE, szSetting));
- if (szPF == nullptr)
- return;
-
- mir_snprintf(szSetting, "%c%s_GF", 246, szBuf.get());
- ptrW szGF(db_get_wsa(0, CLVM_MODULE, szSetting));
- if (szGF == nullptr)
- return;
-
- mir_snprintf(szSetting, "%c%s_OPT", 246, szBuf.get());
- if ((opt = db_get_dw(0, CLVM_MODULE, szSetting, -1)) != -1)
- SendDlgItemMessage(clvmHwnd, IDC_AUTOCLEARSPIN, UDM_SETPOS, 0, MAKELONG(LOWORD(opt), 0));
-
- mir_snprintf(szSetting, "%c%s_SM", 246, szBuf.get());
- DWORD statusMask = db_get_dw(0, CLVM_MODULE, szSetting, 0);
- mir_snprintf(szSetting, "%c%s_SSM", 246, szBuf.get());
- stickyStatusMask = db_get_dw(0, CLVM_MODULE, szSetting, -1);
- dwFlags = db_get_dw(0, CLVM_MODULE, szBuf, 0);
+
+ void SetIconsForColumn(HANDLE hItem, HANDLE hItemAll, int iColumn, int iImage)
{
- char szMask[256];
- HWND hwndList = GetDlgItem(clvmHwnd, IDC_PROTOCOLS);
-
- LVITEM item = { 0 };
- item.mask = LVIF_PARAM;
-
- for (int i = 0; i < ListView_GetItemCount(hwndList); i++) {
- item.iItem = i;
- ListView_GetItem(hwndList, &item);
- mir_snprintf(szMask, "%s|", (char*)item.lParam);
- if (szPF && strstr(szPF, szMask))
- ListView_SetCheckState(hwndList, i, TRUE)
+ 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
- ListView_SetCheckState(hwndList, i, FALSE);
+ 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)
{
- wchar_t szTemp[256];
- wchar_t szMask[256];
- int i;
- HWND hwndList = GetDlgItem(clvmHwnd, IDC_GROUPS);
-
- LVITEM item = { 0 };
- item.mask = LVIF_TEXT;
- item.pszText = szTemp;
- item.cchTextMax = _countof(szTemp);
-
- ListView_SetCheckState(hwndList, 0, dwFlags & CLVM_INCLUDED_UNGROUPED ? TRUE : FALSE);
-
- for (i = 1; i < ListView_GetItemCount(hwndList); i++) {
- item.iItem = i;
- SendMessage(hwndList, LVM_GETITEM, 0, (LPARAM)&item);
- mir_snwprintf(szMask, L"%s|", szTemp);
- if (szGF && wcsstr(szGF, szMask))
- ListView_SetCheckState(hwndList, i, TRUE)
- else
- ListView_SetCheckState(hwndList, i, FALSE);
+ 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)
+ SendMessage(m_hwnd, WM_SETREDRAW, FALSE, 0);
+
+ 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) {
+ SendMessage(m_hwnd, WM_SETREDRAW, TRUE, 0);
+ RedrawWindow(m_hwnd, nullptr, nullptr, RDW_ERASE | RDW_INVALIDATE);
}
}
+
+ ////////////////////////////////////////////////////////////////////////////////////////
+
+ void UpdateClistItem(HANDLE hItem, DWORD mask)
{
- HWND hwndList = GetDlgItem(clvmHwnd, IDC_STATUSMODES);
+ 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);
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////////////
+ // updates the filter list boxes with the data taken from the filtering string
+
+ void UpdateFilters()
+ {
+ char szSetting[128];
+ DWORD dwFlags;
+ DWORD opt;
+
+ if (m_iCurrItem == LB_ERR)
+ return;
+
+ ptrW szTempBuf(modes.GetItemText(m_iCurrItem));
+ T2Utf szBuf(szTempBuf);
+ mir_strncpy(g_szModename, szBuf, _countof(g_szModename));
+ {
+ 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)
+ return;
+
+ mir_snprintf(szSetting, "%c%s_GF", 246, szBuf.get());
+ ptrW szGF(db_get_wsa(0, CLVM_MODULE, szSetting));
+ if (szGF == nullptr)
+ return;
+
+ mir_snprintf(szSetting, "%c%s_OPT", 246, szBuf.get());
+ if ((opt = db_get_dw(0, CLVM_MODULE, szSetting, -1)) != -1)
+ SendDlgItemMessage(m_hwnd, IDC_AUTOCLEARSPIN, UDM_SETPOS, 0, MAKELONG(LOWORD(opt), 0));
+
+ mir_snprintf(szSetting, "%c%s_SM", 246, szBuf.get());
+ DWORD statusMask = db_get_dw(0, CLVM_MODULE, szSetting, 0);
+ mir_snprintf(szSetting, "%c%s_SSM", 246, szBuf.get());
+ stickyStatusMask = db_get_dw(0, CLVM_MODULE, szSetting, -1);
+ dwFlags = db_get_dw(0, CLVM_MODULE, szBuf, 0);
+ {
+ char szMask[256];
+
+ LVITEM item = { 0 };
+ item.mask = LVIF_PARAM;
+
+ for (int i = 0; i < protocols.GetItemCount(); i++) {
+ item.iItem = i;
+ protocols.GetItem(&item);
+ mir_snprintf(szMask, "%s|", (char *)item.lParam);
+ if (szPF && strstr(szPF, szMask))
+ protocols.SetCheckState(i, TRUE);
+ else
+ protocols.SetCheckState(i, FALSE);
+ }
+ }
+ {
+ wchar_t szTemp[256];
+ wchar_t szMask[256];
+
+ LVITEM item = {};
+ item.mask = LVIF_TEXT;
+ item.pszText = szTemp;
+ item.cchTextMax = _countof(szTemp);
+
+ groups.SetCheckState(0, (dwFlags & CLVM_INCLUDED_UNGROUPED) ? TRUE : FALSE);
+
+ for (int i = 1; i < groups.GetItemCount(); i++) {
+ item.iItem = i;
+ groups.GetItem(&item);
+ mir_snwprintf(szMask, L"%s|", szTemp);
+ if (szGF && wcsstr(szGF, szMask))
+ groups.SetCheckState(i, TRUE);
+ else
+ groups.SetCheckState(i, FALSE);
+ }
+ }
for (int i = ID_STATUS_OFFLINE; i <= ID_STATUS_MAX; i++) {
if ((1 << (i - ID_STATUS_OFFLINE)) & statusMask)
- ListView_SetCheckState(hwndList, i - ID_STATUS_OFFLINE, TRUE)
+ statuses.SetCheckState(i - ID_STATUS_OFFLINE, TRUE);
else
- ListView_SetCheckState(hwndList, i - ID_STATUS_OFFLINE, FALSE);
+ statuses.SetCheckState(i - ID_STATUS_OFFLINE, FALSE);
}
- }
- SendDlgItemMessage(clvmHwnd, IDC_PROTOGROUPOP, CB_SETCURSEL, dwFlags & CLVM_PROTOGROUP_OP ? 1 : 0, 0);
- SendDlgItemMessage(clvmHwnd, IDC_GROUPSTATUSOP, CB_SETCURSEL, dwFlags & CLVM_GROUPSTATUS_OP ? 1 : 0, 0);
- CheckDlgButton(clvmHwnd, IDC_AUTOCLEAR, dwFlags & CLVM_AUTOCLEAR ? BST_CHECKED : BST_UNCHECKED);
- UpdateStickies();
- int useLastMsg = dwFlags & CLVM_USELASTMSG;
- int useGroupsState = (dwFlags & CLVM_USEGROUPS) ? BST_CHECKED : (dwFlags & CLVM_DONOTUSEGROUPS) ? BST_UNCHECKED : BST_INDETERMINATE;
+ 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);
+ CheckDlgButton(m_hwnd, IDC_AUTOCLEAR, dwFlags & CLVM_AUTOCLEAR ? BST_CHECKED : BST_UNCHECKED);
+ onListRebuilt_Clist(0);
- CheckDlgButton(clvmHwnd, IDC_LASTMSG, useLastMsg ? BST_CHECKED : BST_UNCHECKED);
- CheckDlgButton(clvmHwnd, IDC_USEGROUPS, useGroupsState ? BST_CHECKED : BST_UNCHECKED);
+ int useLastMsg = dwFlags & CLVM_USELASTMSG;
+ int useGroupsState = (dwFlags & CLVM_USEGROUPS) ? BST_CHECKED : (dwFlags & CLVM_DONOTUSEGROUPS) ? BST_UNCHECKED : BST_INDETERMINATE;
- EnableWindow(GetDlgItem(clvmHwnd, IDC_LASTMESSAGEOP), useLastMsg);
- EnableWindow(GetDlgItem(clvmHwnd, IDC_LASTMSGVALUE), useLastMsg);
- EnableWindow(GetDlgItem(clvmHwnd, IDC_LASTMESSAGEUNIT), useLastMsg);
+ chkLastMsg.SetState(useLastMsg);
+ CheckDlgButton(m_hwnd, IDC_USEGROUPS, useGroupsState ? BST_CHECKED : BST_UNCHECKED);
- mir_snprintf(szSetting, "%c%s_LM", 246, szBuf.get());
- DWORD lmdat = db_get_dw(0, CLVM_MODULE, szSetting, 0);
+ EnableWindow(GetDlgItem(m_hwnd, IDC_LASTMESSAGEOP), useLastMsg);
+ EnableWindow(GetDlgItem(m_hwnd, IDC_LASTMSGVALUE), useLastMsg);
+ EnableWindow(GetDlgItem(m_hwnd, IDC_LASTMESSAGEUNIT), useLastMsg);
- SetDlgItemInt(clvmHwnd, IDC_LASTMSGVALUE, LOWORD(lmdat), FALSE);
- BYTE bTmp = LOBYTE(HIWORD(lmdat));
- SendDlgItemMessage(clvmHwnd, IDC_LASTMESSAGEOP, CB_SETCURSEL, bTmp, 0);
- bTmp = HIBYTE(HIWORD(lmdat));
- SendDlgItemMessage(clvmHwnd, IDC_LASTMESSAGEUNIT, CB_SETCURSEL, bTmp, 0);
+ mir_snprintf(szSetting, "%c%s_LM", 246, szBuf.get());
+ DWORD lmdat = db_get_dw(0, CLVM_MODULE, szSetting, 0);
- ShowPage(clvmHwnd, 0);
-}
+ SetDlgItemInt(m_hwnd, IDC_LASTMSGVALUE, LOWORD(lmdat), FALSE);
+ BYTE 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);
-void DeleteViewMode(char *szName)
-{
- char szSetting[256];
+ ShowPage(0);
+ }
- mir_snprintf(szSetting, "%c%s_PF", 246, szName);
- db_unset(0, CLVM_MODULE, szSetting);
- mir_snprintf(szSetting, "%c%s_GF", 246, szName);
- db_unset(0, CLVM_MODULE, szSetting);
- mir_snprintf(szSetting, "%c%s_SM", 246, szName);
- db_unset(0, CLVM_MODULE, szSetting);
- mir_snprintf(szSetting, "%c%s_VA", 246, szName);
- db_unset(0, CLVM_MODULE, szSetting);
- mir_snprintf(szSetting, "%c%s_SSM", 246, szName);
- db_unset(0, CLVM_MODULE, szSetting);
- db_unset(0, CLVM_MODULE, szName);
+public:
+ CViewModeSetupDlg() :
+ CDlgBase(g_plugin, IDD_OPT_VIEWMODES),
+ clist(this, IDC_CLIST),
+ 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")),
+ btnApply(this, IDC_APPLY),
+ btnClearAll(this, IDC_CLEARALL),
+ chkLastMsg(this, IDC_LASTMSG)
+ {
+ 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);
- if (!mir_strcmp(g_CluiData.current_viewmode, szName) && mir_strlen(szName) == mir_strlen(g_CluiData.current_viewmode)) {
- g_CluiData.bFilterEffective = 0;
- Clist_Broadcast(CLM_AUTOREBUILD, 0, 0);
- SetWindowText(hwndSelector, TranslateT("All contacts"));
- }
+ chkLastMsg.OnChange = Callback(this, &CViewModeSetupDlg::onChange_LastMsg);
- for (auto &hContact : Contacts())
- if (db_get_dw(hContact, CLVM_MODULE, szName, -1) != -1)
- db_set_dw(hContact, CLVM_MODULE, szName, 0);
-}
+ modes.OnSelChange = Callback(this, &CViewModeSetupDlg::onSelChange_List);
-INT_PTR CALLBACK DlgProcViewModesSetup(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
-{
- clvmHwnd = hwndDlg;
+ clist.OnListRebuilt = Callback(this, &CViewModeSetupDlg::onListRebuilt_Clist);
+ }
- switch (msg) {
- case WM_INITDIALOG:
- xpt_EnableThemeDialogTexture(hwndDlg, ETDT_ENABLETAB);
+ bool OnInitDialog() override
+ {
+ g_ViewModeOptDlg = m_hwnd;
+ xpt_EnableThemeDialogTexture(m_hwnd, ETDT_ENABLETAB);
himlViewModes = ImageList_Create(16, 16, ILC_MASK | ILC_COLOR32, 12, 0);
- {
- int i;
- for (i = ID_STATUS_OFFLINE; i <= ID_STATUS_MAX; i++) {
- HICON hIcon = Skin_LoadProtoIcon(nullptr, i);
- ImageList_AddIcon(himlViewModes, hIcon);
- IcoLib_ReleaseIcon(hIcon);
- }
- HICON hIcon = (HICON)LoadImage(g_hMirApp, MAKEINTRESOURCE(IDI_SMALLDOT), IMAGE_ICON, 16, 16, 0);
- nullImage = ImageList_AddIcon(himlViewModes, hIcon);
- DestroyIcon(hIcon);
+ for (int i = ID_STATUS_OFFLINE; i <= ID_STATUS_MAX; i++) {
+ HICON hIcon = Skin_LoadProtoIcon(nullptr, i);
+ ImageList_AddIcon(himlViewModes, hIcon);
+ IcoLib_ReleaseIcon(hIcon);
+ }
- RECT rcClient;
- GetClientRect(hwndDlg, &rcClient);
+ HICON hIcon = (HICON)LoadImage(g_hMirApp, MAKEINTRESOURCE(IDI_SMALLDOT), IMAGE_ICON, 16, 16, 0);
+ nullImage = ImageList_AddIcon(himlViewModes, hIcon);
+ DestroyIcon(hIcon);
- TCITEM tci;
- tci.mask = TCIF_PARAM | TCIF_TEXT;
- tci.lParam = 0;
- tci.pszText = TranslateT("Sticky contacts");
- SendDlgItemMessage(hwndDlg, IDC_TAB, TCM_INSERTITEM, 0, (LPARAM)&tci);
+ RECT rcClient;
+ GetClientRect(m_hwnd, &rcClient);
- tci.pszText = TranslateT("Filtering");
- SendDlgItemMessage(hwndDlg, IDC_TAB, TCM_INSERTITEM, 0, (LPARAM)&tci);
+ 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);
- TabCtrl_SetCurSel(GetDlgItem(hwndDlg, IDC_TAB), 0);
+ tci.pszText = TranslateT("Filtering");
+ SendDlgItemMessage(m_hwnd, IDC_TAB, TCM_INSERTITEM, 0, (LPARAM)&tci);
- TranslateDialogDefault(hwndDlg);
- FillDialog(hwndDlg);
- EnableWindow(GetDlgItem(hwndDlg, IDC_ADDVIEWMODE), FALSE);
- {
- LONG_PTR style = GetWindowLongPtr(GetDlgItem(hwndDlg, IDC_CLIST), GWL_STYLE);
- style &= (~CLS_SHOWHIDDEN);
- SetWindowLongPtr(GetDlgItem(hwndDlg, IDC_CLIST), GWL_STYLE, style);
- }
+ TabCtrl_SetCurSel(GetDlgItem(m_hwnd, IDC_TAB), 0);
- SendDlgItemMessage(hwndDlg, IDC_CLIST, CLM_SETEXTRAIMAGELIST, 0, (LPARAM)himlViewModes);
- SendDlgItemMessage(hwndDlg, IDC_CLIST, CLM_SETEXTRACOLUMNS, ID_STATUS_MAX - ID_STATUS_OFFLINE, 0);
+ FillDialog();
- CLCINFOITEM cii = { sizeof(cii) };
- cii.hParentGroup = nullptr;
- cii.pszText = TranslateT("*** All contacts ***");
- hInfoItem = (HANDLE)SendDlgItemMessage(hwndDlg, IDC_CLIST, CLM_ADDINFOITEM, 0, (LPARAM)&cii);
- SendDlgItemMessage(hwndDlg, IDC_CLIST, CLM_SETHIDEEMPTYGROUPS, 1, 0);
+ 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);
- int index = 0;
+ CLCINFOITEM cii = { sizeof(cii) };
+ cii.hParentGroup = nullptr;
+ cii.pszText = TranslateT("*** All contacts ***");
+ hInfoItem = clist.AddInfoItem(&cii);
- if (g_CluiData.current_viewmode[0] != '\0') {
- wchar_t *temp = mir_utf8decodeW(g_CluiData.current_viewmode);
- if (temp) {
- index = SendDlgItemMessage(hwndDlg, IDC_VIEWMODES, LB_FINDSTRING, -1, (LPARAM)temp);
- mir_free(temp);
- }
- if (index == -1)
- index = 0;
- }
+ int index = 0;
- if (SendDlgItemMessage(hwndDlg, IDC_VIEWMODES, LB_SETCURSEL, index, 0) != LB_ERR) {
- clvm_curItem = index;
- UpdateFilters();
+ 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);
}
- else clvm_curItem = -1;
-
- g_ViewModeOptDlg = TRUE;
- i = 0;
- while (_page2Controls[i] != 0)
- ShowWindow(GetDlgItem(hwndDlg, _page2Controls[i++]), SW_HIDE);
- ShowWindow(hwndDlg, SW_SHOWNORMAL);
- EnableWindow(GetDlgItem(hwndDlg, IDC_APPLY), FALSE);
- SendDlgItemMessage(hwndDlg, IDC_AUTOCLEARSPIN, UDM_SETRANGE, 0, MAKELONG(1000, 0));
- SetWindowText(hwndDlg, TranslateT("Configure view modes"));
+ if (index == -1)
+ index = 0;
}
- return TRUE;
- case WM_COMMAND:
- switch (LOWORD(wParam)) {
- case IDC_PROTOGROUPOP:
- case IDC_GROUPSTATUSOP:
- case IDC_LASTMESSAGEUNIT:
- case IDC_LASTMESSAGEOP:
- if (HIWORD(wParam) == CBN_SELCHANGE)
- EnableWindow(GetDlgItem(hwndDlg, IDC_APPLY), TRUE);
- break;
+ if (modes.SetCurSel(0) != LB_ERR) {
+ m_iCurrItem = index;
+ 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;
+ }
- case IDC_USEGROUPS:
- EnableWindow(GetDlgItem(hwndDlg, IDC_APPLY), TRUE);
- break;
+ void OnChange() override
+ {
+ btnApply.Enable();
+ }
- case IDC_AUTOCLEAR:
- EnableWindow(GetDlgItem(hwndDlg, IDC_APPLY), TRUE);
- break;
+ bool OnApply() override
+ {
+ SaveState();
+ if (g_CluiData.bFilterEffective)
+ ApplyViewMode(g_CluiData.current_viewmode);
+ return true;
+ }
- case IDC_LASTMSG:
- {
- int bUseLastMsg = IsDlgButtonChecked(hwndDlg, IDC_LASTMSG);
- EnableWindow(GetDlgItem(hwndDlg, IDC_LASTMESSAGEOP), bUseLastMsg);
- EnableWindow(GetDlgItem(hwndDlg, IDC_LASTMESSAGEUNIT), bUseLastMsg);
- EnableWindow(GetDlgItem(hwndDlg, IDC_LASTMSGVALUE), bUseLastMsg);
- EnableWindow(GetDlgItem(hwndDlg, IDC_APPLY), TRUE);
- }
- break;
+ void OnDestroy() override
+ {
+ ImageList_RemoveAll(himlViewModes);
+ ImageList_Destroy(himlViewModes);
+ g_ViewModeOptDlg = nullptr;
+ }
- case IDC_AUTOCLEARVAL:
- case IDC_LASTMSGVALUE:
- if (HIWORD(wParam) == EN_CHANGE && GetFocus() == (HWND)lParam)
- EnableWindow(GetDlgItem(hwndDlg, IDC_APPLY), TRUE);
- break;
+ void onChange_LastMsg(CCtrlCheck *)
+ {
+ bool bUseLastMsg = chkLastMsg.GetState();
+ EnableWindow(GetDlgItem(m_hwnd, IDC_LASTMESSAGEOP), bUseLastMsg);
+ EnableWindow(GetDlgItem(m_hwnd, IDC_LASTMESSAGEUNIT), bUseLastMsg);
+ EnableWindow(GetDlgItem(m_hwnd, IDC_LASTMSGVALUE), bUseLastMsg);
+ btnApply.Enable();
+ }
- case IDC_DELETEVIEWMODE:
- if (MessageBox(nullptr, TranslateT("Really delete this view mode? This cannot be undone"), TranslateT("Delete a view mode"), MB_YESNO | MB_ICONQUESTION) == IDYES) {
- int iLen = SendDlgItemMessage(hwndDlg, IDC_VIEWMODES, LB_GETTEXTLEN, SendDlgItemMessage(hwndDlg, IDC_VIEWMODES, LB_GETCURSEL, 0, 0), 0);
- if (iLen) {
- wchar_t *szTempBuf = (wchar_t *)_alloca((iLen + 1) * sizeof(wchar_t));
- SendDlgItemMessage(hwndDlg, IDC_VIEWMODES, LB_GETTEXT, SendDlgItemMessage(hwndDlg, IDC_VIEWMODES, LB_GETCURSEL, 0, 0), (LPARAM)szTempBuf);
- DeleteViewMode(T2Utf(szTempBuf));
-
- SendDlgItemMessage(hwndDlg, IDC_VIEWMODES, LB_DELETESTRING, SendDlgItemMessage(hwndDlg, IDC_VIEWMODES, LB_GETCURSEL, 0, 0), 0);
- if (SendDlgItemMessage(hwndDlg, IDC_VIEWMODES, LB_SETCURSEL, 0, 0) != LB_ERR) {
- clvm_curItem = 0;
- UpdateFilters();
- }
- else clvm_curItem = -1;
- }
- }
- break;
+ void onClick_Add(CCtrlButton *)
+ {
+ ENTER_STRING es = {};
+ es.caption = LPGENW("Enter view mode name");
+ if (!EnterString(&es))
+ return;
- case IDC_ADDVIEWMODE:
- {
- wchar_t szBuf[256];
- szBuf[0] = 0;
- GetDlgItemText(hwndDlg, IDC_NEWVIEMODE, szBuf, _countof(szBuf));
- szBuf[255] = 0;
-
- if (szBuf[0] != 0) {
- T2Utf szUTF8Buf(szBuf);
-
- 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 = SendDlgItemMessage(hwndDlg, IDC_VIEWMODES, LB_INSERTSTRING, -1, (LPARAM)szBuf);
- if (iNewItem != LB_ERR) {
- SendDlgItemMessage(hwndDlg, IDC_VIEWMODES, LB_SETCURSEL, (WPARAM)iNewItem, 0);
- SaveViewMode(szUTF8Buf, L"", "", 0, -1, 0, 0, 0, 0);
- clvm_curItem = iNewItem;
- UpdateStickies();
- SendDlgItemMessage(hwndDlg, IDC_PROTOGROUPOP, CB_SETCURSEL, 0, 0);
- SendDlgItemMessage(hwndDlg, IDC_GROUPSTATUSOP, CB_SETCURSEL, 0, 0);
- }
- }
- SetDlgItemText(hwndDlg, IDC_NEWVIEMODE, L"");
- }
- EnableWindow(GetDlgItem(hwndDlg, IDC_ADDVIEWMODE), FALSE);
- UpdateFilters();
- ShowPage(clvmHwnd, 0);
- break;
- }
- case IDC_CLEARALL:
- {
- for (auto &hContact : Contacts()) {
- HANDLE hItem = (HANDLE)SendDlgItemMessage(hwndDlg, IDC_CLIST, CLM_FINDCONTACT, hContact, 0);
- if (hItem)
- SendDlgItemMessage(hwndDlg, IDC_CLIST, CLM_SETCHECKMARK, (WPARAM)hItem, 0);
- }
+ 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, 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);
}
- case IDOK:
- case IDC_APPLY:
- SaveState();
- if (g_CluiData.bFilterEffective)
- ApplyViewMode(g_CluiData.current_viewmode);
- if (LOWORD(wParam) == IDOK)
- DestroyWindow(hwndDlg);
- break;
- case IDCANCEL:
- DestroyWindow(hwndDlg);
- break;
}
- if (LOWORD(wParam) == IDC_NEWVIEMODE && HIWORD(wParam) == EN_CHANGE)
- EnableWindow(GetDlgItem(hwndDlg, IDC_ADDVIEWMODE), TRUE);
+ UpdateFilters();
+ ShowPage(0);
+ }
+
+ 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;
- if (LOWORD(wParam) == IDC_VIEWMODES && HIWORD(wParam) == LBN_SELCHANGE) {
- SaveState();
- clvm_curItem = SendDlgItemMessage(hwndDlg, IDC_VIEWMODES, LB_GETCURSEL, 0, 0);
+ DeleteViewMode(T2Utf(szTempBuf));
+
+ modes.DeleteString(idx);
+ if (modes.SetCurSel(0) != LB_ERR) {
+ m_iCurrItem = 0;
UpdateFilters();
- //EnableWindow(GetDlgItem(hwndDlg, IDC_APPLY), TRUE);
- //SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
}
- break;
+ else m_iCurrItem = -1;
+ }
- case WM_NOTIFY:
- switch (((LPNMHDR)lParam)->idFrom) {
- case IDC_GROUPS:
- case IDC_STATUSMODES:
- case IDC_PROTOCOLS:
- case IDC_CLIST:
- if (((LPNMHDR)lParam)->code == NM_CLICK || ((LPNMHDR)lParam)->code == CLN_CHECKCHANGED)
- EnableWindow(GetDlgItem(hwndDlg, IDC_APPLY), TRUE);
-
- if (((LPNMHDR)lParam)->code == CLN_LISTREBUILT)
- UpdateStickies();
-
- if (((LPNMHDR)lParam)->code == NM_CLICK) {
- NMCLISTCONTROL *nm = (NMCLISTCONTROL *)lParam;
- if (nm->iColumn == -1)
- break;
+ void onClick_Apply(CCtrlButton *)
+ {
+ OnApply();
+ }
- DWORD hitFlags;
- HANDLE hItem = (HANDLE)SendDlgItemMessage(hwndDlg, IDC_CLIST, CLM_HITTEST, (WPARAM)&hitFlags, MAKELPARAM(nm->pt.x, nm->pt.y));
- if (hItem == nullptr)
- break;
+ void onClick_ClearAll(CCtrlButton*)
+ {
+ for (auto &hContact : Contacts()) {
+ HANDLE hItem = clist.FindContact(hContact);
+ if (hItem)
+ clist.SetCheck(hItem, 0);
+ }
+ }
- if (!(hitFlags & CLCHT_ONITEMEXTRA))
- break;
+ void onSelChange_List(CCtrlListBox*)
+ {
+ SaveState();
+ m_iCurrItem = modes.GetCurSel();
+ UpdateFilters();
+ }
- int iImage = SendDlgItemMessage(hwndDlg, IDC_CLIST, CLM_GETEXTRAIMAGE, (WPARAM)hItem, MAKELPARAM(nm->iColumn, 0));
- if (iImage == nullImage)
- iImage = nm->iColumn;
- else if (iImage != EMPTY_EXTRA_ICON)
- iImage = nullImage;
- SetIconsForColumn(GetDlgItem(hwndDlg, IDC_CLIST), hItem, hInfoItem, nm->iColumn, iImage);
- }
- break;
+ void onListRebuilt_Clist(CCtrlClc::TEventInfo *)
+ {
+ for (auto &hContact : Contacts()) {
+ HANDLE hItem = clist.FindContact(hContact);
+ if (hItem)
+ clist.SetCheck(hItem, db_get_dw(hContact, CLVM_MODULE, g_szModename, 0));
- case IDC_TAB:
- if (((LPNMHDR)lParam)->code == TCN_SELCHANGE) {
- int id = TabCtrl_GetCurSel(GetDlgItem(hwndDlg, IDC_TAB));
+ DWORD localMask = HIWORD(db_get_dw(hContact, CLVM_MODULE, g_szModename, 0));
+ UpdateClistItem(hItem, (localMask == 0 || localMask == stickyStatusMask) ? stickyStatusMask : localMask);
+ }
+
+ for (int i = ID_STATUS_OFFLINE; i <= ID_STATUS_MAX; i++)
+ clist.SetExtraImage(hInfoItem, i - ID_STATUS_OFFLINE, (1 << (i - ID_STATUS_OFFLINE)) & stickyStatusMask ? i - ID_STATUS_OFFLINE : MAX_STATUS_COUNT);
+
+ HANDLE hItem = clist.GetNextItem(0, CLGN_ROOT);
+ hItem = clist.GetNextItem(hItem, CLGN_NEXTGROUP);
+ while (hItem) {
+ for (int i = ID_STATUS_OFFLINE; i <= ID_STATUS_MAX; i++)
+ clist.SetExtraImage(hItem, i - ID_STATUS_OFFLINE, nullImage);
+ hItem = clist.GetNextItem(hItem, CLGN_NEXTGROUP);
+ }
+ }
+
+ void onClick_Clist(CCtrlClc::TEventInfo *ev)
+ {
+ NMCLISTCONTROL *nm = (NMCLISTCONTROL *)ev->info;
+ if (nm->iColumn == -1)
+ return;
+
+ DWORD hitFlags;
+ HANDLE hItem = clist.HitTest(nm->pt.x, nm->pt.y, &hitFlags);
+ if (hItem == nullptr)
+ return;
+
+ if (!(hitFlags & CLCHT_ONITEMEXTRA))
+ return;
+
+ int iImage = clist.GetExtraImage(hItem, nm->iColumn);
+ if (iImage == nullImage)
+ iImage = nm->iColumn;
+ else if (iImage != EMPTY_EXTRA_ICON)
+ 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(hwndDlg, 0);
+ ShowPage(0);
else
- ShowPage(hwndDlg, 1);
- break;
+ ShowPage(1);
+ return 0;
}
}
- break;
- case WM_DESTROY:
- ImageList_RemoveAll(himlViewModes);
- ImageList_Destroy(himlViewModes);
- g_ViewModeOptDlg = FALSE;
- break;
+ return CDlgBase::DlgProc(msg, wParam, lParam);
}
- return FALSE;
-}
+};
/////////////////////////////////////////////////////////////////////////////////////////
@@ -1074,7 +1070,7 @@ clvm_reset_command:
case IDC_CONFIGUREMODES:
clvm_config_command:
if (!g_ViewModeOptDlg)
- CreateDialogParam(g_plugin.getInst(), MAKEINTRESOURCE(IDD_OPT_VIEWMODES), nullptr, DlgProcViewModesSetup, 0);
+ (new CViewModeSetupDlg())->Create();
break;
}
diff --git a/plugins/Clist_modern/src/resource.h b/plugins/Clist_modern/src/resource.h
index 7aac6af638..2da51322ab 100644
--- a/plugins/Clist_modern/src/resource.h
+++ b/plugins/Clist_modern/src/resource.h
@@ -4,10 +4,10 @@
//
#define IDC_ALWAYS_VISIBLEICON 0
#define IDC_APPLY 3
-#define IDD_OPT_ITEM_CONTACT_TIME 102
+#define IDD_OPT_ITEM_CONTACT_TIME 101
#define IDI_MIRANDA 102
#define IDD_OPT_ROWTMPL 103
-#define IDI_SMS 103
+#define IDI_SMS 104
#define IDD_OPT_CLIST 126
#define IDD_OPT_SOUND 134
#define IDD_OPT_HOTKEYS 134
@@ -448,7 +448,7 @@
#define IDC_PROTOCOLS 19103
#define IDC_ADDVIEWMODE 19104
#define IDC_DELETEVIEWMODE 19105
-#define IDC_NEWVIEMODE 19106
+#define IDC_RENAMEVIEWMODE 19106
#define IDC_GROUPS 19107
#define IDC_STATUSMODES 19108
#define IDC_CLIST 19109
diff --git a/plugins/Clist_modern/src/version.h b/plugins/Clist_modern/src/version.h
index 090ab46c27..04c33a3fbc 100644
--- a/plugins/Clist_modern/src/version.h
+++ b/plugins/Clist_modern/src/version.h
@@ -1,7 +1,7 @@
#define __MAJOR_VERSION 0
#define __MINOR_VERSION 9
#define __RELEASE_NUM 1
-#define __BUILD_NUM 10
+#define __BUILD_NUM 11
#include <stdver.h>