From ac32858e8eb13d9823bf72daad436ab8f9db31ee Mon Sep 17 00:00:00 2001 From: George Hazan Date: Sun, 19 Apr 2020 21:57:05 +0300 Subject: fixes #2347 (Clist_nicer: "Do not separate offline contacts" option do not work until restart) --- plugins/Clist_nicer/src/clcopts.cpp | 682 ++++++++++++++++++------------------ 1 file changed, 343 insertions(+), 339 deletions(-) (limited to 'plugins') diff --git a/plugins/Clist_nicer/src/clcopts.cpp b/plugins/Clist_nicer/src/clcopts.cpp index 6a9838805d..db73bf5a47 100644 --- a/plugins/Clist_nicer/src/clcopts.cpp +++ b/plugins/Clist_nicer/src/clcopts.cpp @@ -76,8 +76,6 @@ static const greyoutValues[] = { { PF2_INVISIBLE, LPGENW("Invisible") }, }; -static UINT sortCtrlIDs[] = { IDC_SORTPRIMARY, IDC_SORTTHEN, IDC_SORTFINALLY, 0 }; - static void FillCheckBoxTree(HWND hwndTree, const struct CheckBoxValues_t *values, int nValues, DWORD style) { TVINSERTSTRUCT tvis; @@ -145,420 +143,354 @@ void GetDefaultFontSetting(int i, LOGFONT *lf, COLORREF *colour) } } -static INT_PTR CALLBACK DlgProcDspGroups(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) -{ - switch (msg) { - case WM_INITDIALOG: - TranslateDialogDefault(hwndDlg); - { - SendDlgItemMessage(hwndDlg, IDC_GROUPALIGN, CB_INSERTSTRING, -1, (LPARAM)TranslateT("Always left")); - SendDlgItemMessage(hwndDlg, IDC_GROUPALIGN, CB_INSERTSTRING, -1, (LPARAM)TranslateT("Always right")); - SendDlgItemMessage(hwndDlg, IDC_GROUPALIGN, CB_INSERTSTRING, -1, (LPARAM)TranslateT("Automatic (RTL)")); +///////////////////////////////////////////////////////////////////////////////////////// - DWORD exStyle = db_get_dw(0, "CLC", "ExStyle", Clist_GetDefaultExStyle()); - for (auto &it : checkBoxToGroupStyleEx) - CheckDlgButton(hwndDlg, it.id, (exStyle & it.flag) ^ (it.flag * it.not_t) ? BST_CHECKED : BST_UNCHECKED); +class CRowItemsBaseDlg : public CDlgBase +{ + void OnFinish(CDlgBase*) + { + Clist_ClcOptionsChanged(); + PostMessage(g_clistApi.hwndContactList, CLUIINTM_REDRAW, 0, 0); + } - CheckDlgButton(hwndDlg, IDC_NOGROUPICON, (cfg::dat.dwFlags & CLUI_FRAME_NOGROUPICON) ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(hwndDlg, IDC_CENTERGROUPNAMES, db_get_b(0, "CLCExt", "EXBK_CenterGroupnames", 0) ? BST_CHECKED : BST_UNCHECKED); - SendDlgItemMessage(hwndDlg, IDC_GROUPALIGN, CB_SETCURSEL, cfg::dat.bGroupAlign, 0); - - SendDlgItemMessage(hwndDlg, IDC_LEFTMARGINSPIN, UDM_SETRANGE, 0, MAKELONG(64, 0)); - SendDlgItemMessage(hwndDlg, IDC_LEFTMARGINSPIN, UDM_SETPOS, 0, db_get_b(0, "CLC", "LeftMargin", CLCDEFAULT_LEFTMARGIN)); - SendDlgItemMessage(hwndDlg, IDC_RIGHTMARGINSPIN, UDM_SETRANGE, 0, MAKELONG(64, 0)); - SendDlgItemMessage(hwndDlg, IDC_RIGHTMARGINSPIN, UDM_SETPOS, 0, db_get_b(0, "CLC", "RightMargin", CLCDEFAULT_LEFTMARGIN)); - SendDlgItemMessage(hwndDlg, IDC_ROWGAPSPIN, UDM_SETRANGE, 0, MAKELONG(10, 0)); - SendDlgItemMessage(hwndDlg, IDC_ROWGAPSPIN, UDM_SETPOS, 0, cfg::dat.bRowSpacing); - SendDlgItemMessage(hwndDlg, IDC_GROUPINDENTSPIN, UDM_SETRANGE, 0, MAKELONG(50, 0)); - SendDlgItemMessage(hwndDlg, IDC_GROUPINDENTSPIN, UDM_SETPOS, 0, db_get_b(0, "CLC", "GroupIndent", CLCDEFAULT_GROUPINDENT)); - SendDlgItemMessage(hwndDlg, IDC_ROWHEIGHTSPIN, UDM_SETRANGE, 0, MAKELONG(255, 8)); - SendDlgItemMessage(hwndDlg, IDC_ROWHEIGHTSPIN, UDM_SETPOS, 0, db_get_b(0, "CLC", "RowHeight", CLCDEFAULT_ROWHEIGHT)); - SendDlgItemMessage(hwndDlg, IDC_GROUPROWHEIGHTSPIN, UDM_SETRANGE, 0, MAKELONG(255, 8)); - SendDlgItemMessage(hwndDlg, IDC_GROUPROWHEIGHTSPIN, UDM_SETPOS, 0, db_get_b(0, "CLC", "GRowHeight", CLCDEFAULT_ROWHEIGHT)); - SendDlgItemMessage(hwndDlg, IDC_AVATARPADDINGSPIN, UDM_SETRANGE, 0, MAKELONG(10, 0)); - SendDlgItemMessage(hwndDlg, IDC_AVATARPADDINGSPIN, UDM_SETPOS, 0, cfg::dat.avatarPadding); - } - return TRUE; +public: + CRowItemsBaseDlg(int iDlg) : + CDlgBase(g_plugin, iDlg) + { + m_OnFinishWizard = Callback(this, &CRowItemsBaseDlg::OnFinish); + } +}; - case WM_COMMAND: - if ((LOWORD(wParam) == IDC_ROWHEIGHT || LOWORD(wParam) == IDC_AVATARPADDING || LOWORD(wParam) == IDC_ROWGAP || LOWORD(wParam) == IDC_RIGHTMARGIN || LOWORD(wParam) == IDC_LEFTMARGIN || LOWORD(wParam) == IDC_GROUPINDENT || LOWORD(wParam) == IDC_GROUPROWHEIGHT) - && (HIWORD(wParam) != EN_CHANGE || (HWND)lParam != GetFocus())) - return 0; - if (LOWORD(wParam) == IDC_GROUPALIGN && (HIWORD(wParam) != CBN_SELCHANGE || (HWND)lParam != GetFocus())) - return 0; - SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); - break; +///////////////////////////////////////////////////////////////////////////////////////// - case WM_NOTIFY: - switch (((LPNMHDR)lParam)->idFrom) { - case 0: - if (((LPNMHDR)lParam)->code == PSN_APPLY) { - DWORD exStyle = db_get_dw(0, "CLC", "ExStyle", Clist_GetDefaultExStyle()); +static UINT sortCtrlIDs[] = { IDC_SORTPRIMARY, IDC_SORTTHEN, IDC_SORTFINALLY }; - for (auto &it : checkBoxToGroupStyleEx) { - if ((IsDlgButtonChecked(hwndDlg, it.id) == 0) == it.not_t) - exStyle |= it.flag; - else - exStyle &= ~(it.flag); - } - db_set_dw(0, "CLC", "ExStyle", exStyle); +class CDspItemsDlg : public CRowItemsBaseDlg +{ + CCtrlCombo comboAlign; - cfgSetFlag(hwndDlg, IDC_NOGROUPICON, CLUI_FRAME_NOGROUPICON); +public: + CDspItemsDlg() : + CRowItemsBaseDlg(IDD_OPT_DSPITEMS), + comboAlign(this, IDC_CLISTALIGN) + { + } - db_set_b(0, "CLCExt", "EXBK_CenterGroupnames", IsDlgButtonChecked(hwndDlg, IDC_CENTERGROUPNAMES) ? 1 : 0); + bool OnInitDialog() override + { + for (auto &it : sortCtrlIDs) { + SendDlgItemMessage(m_hwnd, it, CB_INSERTSTRING, -1, (LPARAM)TranslateT("Nothing")); + SendDlgItemMessage(m_hwnd, it, CB_INSERTSTRING, -1, (LPARAM)TranslateT("Name")); + SendDlgItemMessage(m_hwnd, it, CB_INSERTSTRING, -1, (LPARAM)TranslateT("Protocol")); + SendDlgItemMessage(m_hwnd, it, CB_INSERTSTRING, -1, (LPARAM)TranslateT("Status")); + SendDlgItemMessage(m_hwnd, it, CB_INSERTSTRING, -1, (LPARAM)TranslateT("Last message")); + SendDlgItemMessage(m_hwnd, it, CB_INSERTSTRING, -1, (LPARAM)TranslateT("Message frequency")); + } - LRESULT curSel = SendDlgItemMessage(hwndDlg, IDC_GROUPALIGN, CB_GETCURSEL, 0, 0); - if (curSel != CB_ERR) { - cfg::dat.bGroupAlign = (BYTE)curSel; - db_set_b(0, "CLC", "GroupAlign", cfg::dat.bGroupAlign); - } + comboAlign.AddString(TranslateT("Never")); + comboAlign.AddString(TranslateT("Always")); + comboAlign.AddString(TranslateT("For RTL only")); + comboAlign.AddString(TranslateT("RTL TEXT only")); - cfg::dat.bRowSpacing = (BYTE)SendDlgItemMessage(hwndDlg, IDC_ROWGAPSPIN, UDM_GETPOS, 0, 0); - db_set_b(0, "CLC", "RowGap", cfg::dat.bRowSpacing); + CheckDlgButton(m_hwnd, IDC_EVENTSONTOP, (cfg::dat.dwFlags & CLUI_STICKYEVENTS) ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(m_hwnd, IDC_DONTSEPARATE, cfg::dat.bDontSeparateOffline ? BST_CHECKED : BST_UNCHECKED); + for (int i = 0; i < _countof(sortCtrlIDs); i++) + SendDlgItemMessage(m_hwnd, sortCtrlIDs[i], CB_SETCURSEL, cfg::dat.sortOrder[i], 0); - BOOL translated; - cfg::dat.avatarPadding = (BYTE)GetDlgItemInt(hwndDlg, IDC_AVATARPADDING, &translated, FALSE); - g_plugin.setByte("AvatarPadding", cfg::dat.avatarPadding); + comboAlign.SetCurSel(cfg::dat.bUseDCMirroring); + return true; + } - db_set_b(0, "CLC", "LeftMargin", (BYTE)SendDlgItemMessage(hwndDlg, IDC_LEFTMARGINSPIN, UDM_GETPOS, 0, 0)); - db_set_b(0, "CLC", "RightMargin", (BYTE)SendDlgItemMessage(hwndDlg, IDC_RIGHTMARGINSPIN, UDM_GETPOS, 0, 0)); - db_set_b(0, "CLC", "GroupIndent", (BYTE)SendDlgItemMessage(hwndDlg, IDC_GROUPINDENTSPIN, UDM_GETPOS, 0, 0)); - db_set_b(0, "CLC", "RowHeight", (BYTE)SendDlgItemMessage(hwndDlg, IDC_ROWHEIGHTSPIN, UDM_GETPOS, 0, 0)); - db_set_b(0, "CLC", "GRowHeight", (BYTE)SendDlgItemMessage(hwndDlg, IDC_GROUPROWHEIGHTSPIN, UDM_GETPOS, 0, 0)); - return TRUE; - } - break; + bool OnApply() override + { + for (int i = 0; i < _countof(sortCtrlIDs); i++) { + LRESULT curSel = SendDlgItemMessage(m_hwnd, sortCtrlIDs[i], CB_GETCURSEL, 0, 0); + if (curSel == 0 || curSel == CB_ERR) + cfg::dat.sortOrder[i] = 0; + else + cfg::dat.sortOrder[i] = (BYTE)curSel; } - break; + g_plugin.setDword("SortOrder", MAKELONG(MAKEWORD(cfg::dat.sortOrder[0], cfg::dat.sortOrder[1]), MAKEWORD(cfg::dat.sortOrder[2], 0))); + + cfg::dat.bDontSeparateOffline = IsDlgButtonChecked(m_hwnd, IDC_DONTSEPARATE) ? 1 : 0; + g_plugin.setByte("DontSeparateOffline", (BYTE)cfg::dat.bDontSeparateOffline); + + cfgSetFlag(m_hwnd, IDC_EVENTSONTOP, CLUI_STICKYEVENTS); + + cfg::dat.bUseDCMirroring = comboAlign.GetCurSel(); + db_set_b(0, "CLC", "MirrorDC", cfg::dat.bUseDCMirroring); + return true; } - return FALSE; -} +}; + +///////////////////////////////////////////////////////////////////////////////////////// -static INT_PTR CALLBACK DlgProcDspItems(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) +class CDspGroupsDlg : public CRowItemsBaseDlg { - switch (msg) { - case WM_INITDIALOG: - TranslateDialogDefault(hwndDlg); - { - for (int i = 0; sortCtrlIDs[i] != 0; i++) { - SendDlgItemMessage(hwndDlg, sortCtrlIDs[i], CB_INSERTSTRING, -1, (LPARAM)TranslateT("Nothing")); - SendDlgItemMessage(hwndDlg, sortCtrlIDs[i], CB_INSERTSTRING, -1, (LPARAM)TranslateT("Name")); - SendDlgItemMessage(hwndDlg, sortCtrlIDs[i], CB_INSERTSTRING, -1, (LPARAM)TranslateT("Protocol")); - SendDlgItemMessage(hwndDlg, sortCtrlIDs[i], CB_INSERTSTRING, -1, (LPARAM)TranslateT("Status")); - SendDlgItemMessage(hwndDlg, sortCtrlIDs[i], CB_INSERTSTRING, -1, (LPARAM)TranslateT("Last message")); - SendDlgItemMessage(hwndDlg, sortCtrlIDs[i], CB_INSERTSTRING, -1, (LPARAM)TranslateT("Message frequency")); - } - SendDlgItemMessage(hwndDlg, IDC_CLISTALIGN, CB_INSERTSTRING, -1, (LPARAM)TranslateT("Never")); - SendDlgItemMessage(hwndDlg, IDC_CLISTALIGN, CB_INSERTSTRING, -1, (LPARAM)TranslateT("Always")); - SendDlgItemMessage(hwndDlg, IDC_CLISTALIGN, CB_INSERTSTRING, -1, (LPARAM)TranslateT("For RTL only")); - SendDlgItemMessage(hwndDlg, IDC_CLISTALIGN, CB_INSERTSTRING, -1, (LPARAM)TranslateT("RTL TEXT only")); - CheckDlgButton(hwndDlg, IDC_EVENTSONTOP, (cfg::dat.dwFlags & CLUI_STICKYEVENTS) ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(hwndDlg, IDC_DONTSEPARATE, cfg::dat.bDontSeparateOffline ? BST_CHECKED : BST_UNCHECKED); - for (int i = 0; sortCtrlIDs[i] != 0; i++) - SendDlgItemMessage(hwndDlg, sortCtrlIDs[i], CB_SETCURSEL, cfg::dat.sortOrder[i], 0); +public: + CDspGroupsDlg() : + CRowItemsBaseDlg(IDD_OPT_DSPGROUPS) + { + } + + bool OnInitDialog() override + { + SendDlgItemMessage(m_hwnd, IDC_GROUPALIGN, CB_INSERTSTRING, -1, (LPARAM)TranslateT("Always left")); + SendDlgItemMessage(m_hwnd, IDC_GROUPALIGN, CB_INSERTSTRING, -1, (LPARAM)TranslateT("Always right")); + SendDlgItemMessage(m_hwnd, IDC_GROUPALIGN, CB_INSERTSTRING, -1, (LPARAM)TranslateT("Automatic (RTL)")); + + DWORD exStyle = db_get_dw(0, "CLC", "ExStyle", Clist_GetDefaultExStyle()); + for (auto &it : checkBoxToGroupStyleEx) + CheckDlgButton(m_hwnd, it.id, (exStyle & it.flag) ^ (it.flag * it.not_t) ? BST_CHECKED : BST_UNCHECKED); + + CheckDlgButton(m_hwnd, IDC_NOGROUPICON, (cfg::dat.dwFlags & CLUI_FRAME_NOGROUPICON) ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(m_hwnd, IDC_CENTERGROUPNAMES, db_get_b(0, "CLCExt", "EXBK_CenterGroupnames", 0) ? BST_CHECKED : BST_UNCHECKED); + SendDlgItemMessage(m_hwnd, IDC_GROUPALIGN, CB_SETCURSEL, cfg::dat.bGroupAlign, 0); + + SendDlgItemMessage(m_hwnd, IDC_LEFTMARGINSPIN, UDM_SETRANGE, 0, MAKELONG(64, 0)); + SendDlgItemMessage(m_hwnd, IDC_LEFTMARGINSPIN, UDM_SETPOS, 0, db_get_b(0, "CLC", "LeftMargin", CLCDEFAULT_LEFTMARGIN)); + SendDlgItemMessage(m_hwnd, IDC_RIGHTMARGINSPIN, UDM_SETRANGE, 0, MAKELONG(64, 0)); + SendDlgItemMessage(m_hwnd, IDC_RIGHTMARGINSPIN, UDM_SETPOS, 0, db_get_b(0, "CLC", "RightMargin", CLCDEFAULT_LEFTMARGIN)); + SendDlgItemMessage(m_hwnd, IDC_ROWGAPSPIN, UDM_SETRANGE, 0, MAKELONG(10, 0)); + SendDlgItemMessage(m_hwnd, IDC_ROWGAPSPIN, UDM_SETPOS, 0, cfg::dat.bRowSpacing); + SendDlgItemMessage(m_hwnd, IDC_GROUPINDENTSPIN, UDM_SETRANGE, 0, MAKELONG(50, 0)); + SendDlgItemMessage(m_hwnd, IDC_GROUPINDENTSPIN, UDM_SETPOS, 0, db_get_b(0, "CLC", "GroupIndent", CLCDEFAULT_GROUPINDENT)); + SendDlgItemMessage(m_hwnd, IDC_ROWHEIGHTSPIN, UDM_SETRANGE, 0, MAKELONG(255, 8)); + SendDlgItemMessage(m_hwnd, IDC_ROWHEIGHTSPIN, UDM_SETPOS, 0, db_get_b(0, "CLC", "RowHeight", CLCDEFAULT_ROWHEIGHT)); + SendDlgItemMessage(m_hwnd, IDC_GROUPROWHEIGHTSPIN, UDM_SETRANGE, 0, MAKELONG(255, 8)); + SendDlgItemMessage(m_hwnd, IDC_GROUPROWHEIGHTSPIN, UDM_SETPOS, 0, db_get_b(0, "CLC", "GRowHeight", CLCDEFAULT_ROWHEIGHT)); + SendDlgItemMessage(m_hwnd, IDC_AVATARPADDINGSPIN, UDM_SETRANGE, 0, MAKELONG(10, 0)); + SendDlgItemMessage(m_hwnd, IDC_AVATARPADDINGSPIN, UDM_SETPOS, 0, cfg::dat.avatarPadding); + return true; + } + + bool OnApply() override + { + DWORD exStyle = db_get_dw(0, "CLC", "ExStyle", Clist_GetDefaultExStyle()); - SendDlgItemMessage(hwndDlg, IDC_CLISTALIGN, CB_SETCURSEL, cfg::dat.bUseDCMirroring, 0); + for (auto &it : checkBoxToGroupStyleEx) { + if ((IsDlgButtonChecked(m_hwnd, it.id) == 0) == it.not_t) + exStyle |= it.flag; + else + exStyle &= ~(it.flag); } - return TRUE; + db_set_dw(0, "CLC", "ExStyle", exStyle); - case WM_COMMAND: - if ((LOWORD(wParam) == IDC_SORTPRIMARY || LOWORD(wParam) == IDC_SORTTHEN || LOWORD(wParam) == IDC_SORTFINALLY || LOWORD(wParam) == IDC_CLISTALIGN) - && (HIWORD(wParam) != CBN_SELCHANGE || (HWND)lParam != GetFocus())) - return 0; - SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); - break; + cfgSetFlag(m_hwnd, IDC_NOGROUPICON, CLUI_FRAME_NOGROUPICON); - case WM_NOTIFY: - switch (((LPNMHDR)lParam)->idFrom) { - case 0: - if (((LPNMHDR)lParam)->code == PSN_APPLY) { - for (int i = 0; sortCtrlIDs[i] != 0; i++) { - LRESULT curSel = SendDlgItemMessage(hwndDlg, sortCtrlIDs[i], CB_GETCURSEL, 0, 0); - if (curSel == 0 || curSel == CB_ERR) - cfg::dat.sortOrder[i] = 0; - else - cfg::dat.sortOrder[i] = (BYTE)curSel; - } - g_plugin.setDword("SortOrder", MAKELONG(MAKEWORD(cfg::dat.sortOrder[0], cfg::dat.sortOrder[1]), MAKEWORD(cfg::dat.sortOrder[2], 0))); - - cfg::dat.bDontSeparateOffline = IsDlgButtonChecked(hwndDlg, IDC_DONTSEPARATE) ? 1 : 0; - g_plugin.setByte("DontSeparateOffline", (BYTE)cfg::dat.bDontSeparateOffline); - - cfgSetFlag(hwndDlg, IDC_EVENTSONTOP, CLUI_STICKYEVENTS); - - cfg::dat.bUseDCMirroring = (BYTE)SendDlgItemMessage(hwndDlg, IDC_CLISTALIGN, CB_GETCURSEL, 0, 0); - db_set_b(0, "CLC", "MirrorDC", cfg::dat.bUseDCMirroring); - return TRUE; - } - break; + db_set_b(0, "CLCExt", "EXBK_CenterGroupnames", IsDlgButtonChecked(m_hwnd, IDC_CENTERGROUPNAMES) ? 1 : 0); + + LRESULT curSel = SendDlgItemMessage(m_hwnd, IDC_GROUPALIGN, CB_GETCURSEL, 0, 0); + if (curSel != CB_ERR) { + cfg::dat.bGroupAlign = (BYTE)curSel; + db_set_b(0, "CLC", "GroupAlign", cfg::dat.bGroupAlign); } - break; + + cfg::dat.bRowSpacing = (BYTE)SendDlgItemMessage(m_hwnd, IDC_ROWGAPSPIN, UDM_GETPOS, 0, 0); + db_set_b(0, "CLC", "RowGap", cfg::dat.bRowSpacing); + + BOOL translated; + cfg::dat.avatarPadding = (BYTE)GetDlgItemInt(m_hwnd, IDC_AVATARPADDING, &translated, FALSE); + g_plugin.setByte("AvatarPadding", cfg::dat.avatarPadding); + + db_set_b(0, "CLC", "LeftMargin", (BYTE)SendDlgItemMessage(m_hwnd, IDC_LEFTMARGINSPIN, UDM_GETPOS, 0, 0)); + db_set_b(0, "CLC", "RightMargin", (BYTE)SendDlgItemMessage(m_hwnd, IDC_RIGHTMARGINSPIN, UDM_GETPOS, 0, 0)); + db_set_b(0, "CLC", "GroupIndent", (BYTE)SendDlgItemMessage(m_hwnd, IDC_GROUPINDENTSPIN, UDM_GETPOS, 0, 0)); + db_set_b(0, "CLC", "RowHeight", (BYTE)SendDlgItemMessage(m_hwnd, IDC_ROWHEIGHTSPIN, UDM_GETPOS, 0, 0)); + db_set_b(0, "CLC", "GRowHeight", (BYTE)SendDlgItemMessage(m_hwnd, IDC_GROUPROWHEIGHTSPIN, UDM_GETPOS, 0, 0)); + return true; } - return FALSE; -} +}; ///////////////////////////////////////////////////////////////////////////////////////// static UINT avatar_controls[] = { IDC_ALIGNMENT, IDC_AVATARSBORDER, IDC_AVATARSROUNDED, IDC_AVATARBORDERCLR, IDC_ALWAYSALIGNNICK, IDC_AVATARHEIGHT, IDC_AVATARSIZESPIN, 0 }; -static INT_PTR CALLBACK DlgProcDspAdvanced(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) +class CDspAdvancedDlg : public CRowItemsBaseDlg { - switch (msg) { - case WM_INITDIALOG: - TranslateDialogDefault(hwndDlg); - - SendDlgItemMessage(hwndDlg, IDC_DUALROWMODE, CB_INSERTSTRING, -1, (LPARAM)TranslateT("Never")); - SendDlgItemMessage(hwndDlg, IDC_DUALROWMODE, CB_INSERTSTRING, -1, (LPARAM)TranslateT("Always")); - SendDlgItemMessage(hwndDlg, IDC_DUALROWMODE, CB_INSERTSTRING, -1, (LPARAM)TranslateT("When space allows it")); - SendDlgItemMessage(hwndDlg, IDC_DUALROWMODE, CB_INSERTSTRING, -1, (LPARAM)TranslateT("When needed")); + CCtrlCheck chkLocalTime, chkAvaRound, chkAvaBorder; + +public: + CDspAdvancedDlg() : + CRowItemsBaseDlg(IDD_OPT_DSPADVANCED), + chkAvaRound(this, IDC_AVATARSROUNDED), + chkAvaBorder(this, IDC_AVATARSBORDER), + chkLocalTime(this, IDC_SHOWLOCALTIME) + { + chkLocalTime.OnChange = Callback(this, &CDspAdvancedDlg::onChange_LocalTime); + } - SendDlgItemMessage(hwndDlg, IDC_ALIGNMENT, CB_INSERTSTRING, -1, (LPARAM)TranslateT("With nickname - left")); - SendDlgItemMessage(hwndDlg, IDC_ALIGNMENT, CB_INSERTSTRING, -1, (LPARAM)TranslateT("Far left")); - SendDlgItemMessage(hwndDlg, IDC_ALIGNMENT, CB_INSERTSTRING, -1, (LPARAM)TranslateT("Far right")); - SendDlgItemMessage(hwndDlg, IDC_ALIGNMENT, CB_INSERTSTRING, -1, (LPARAM)TranslateT("With nickname - right")); + bool OnInitDialog() override + { + SendDlgItemMessage(m_hwnd, IDC_DUALROWMODE, CB_INSERTSTRING, -1, (LPARAM)TranslateT("Never")); + SendDlgItemMessage(m_hwnd, IDC_DUALROWMODE, CB_INSERTSTRING, -1, (LPARAM)TranslateT("Always")); + SendDlgItemMessage(m_hwnd, IDC_DUALROWMODE, CB_INSERTSTRING, -1, (LPARAM)TranslateT("When space allows it")); + SendDlgItemMessage(m_hwnd, IDC_DUALROWMODE, CB_INSERTSTRING, -1, (LPARAM)TranslateT("When needed")); + + SendDlgItemMessage(m_hwnd, IDC_ALIGNMENT, CB_INSERTSTRING, -1, (LPARAM)TranslateT("With nickname - left")); + SendDlgItemMessage(m_hwnd, IDC_ALIGNMENT, CB_INSERTSTRING, -1, (LPARAM)TranslateT("Far left")); + SendDlgItemMessage(m_hwnd, IDC_ALIGNMENT, CB_INSERTSTRING, -1, (LPARAM)TranslateT("Far right")); + SendDlgItemMessage(m_hwnd, IDC_ALIGNMENT, CB_INSERTSTRING, -1, (LPARAM)TranslateT("With nickname - right")); { int i = 0; if (cfg::dat.bAvatarServiceAvail) { - Utils::enableDlgControl(hwndDlg, IDC_CLISTAVATARS, TRUE); + Utils::enableDlgControl(m_hwnd, IDC_CLISTAVATARS, TRUE); while (avatar_controls[i] != 0) - Utils::enableDlgControl(hwndDlg, avatar_controls[i++], TRUE); + Utils::enableDlgControl(m_hwnd, avatar_controls[i++], TRUE); } else { - Utils::enableDlgControl(hwndDlg, IDC_CLISTAVATARS, FALSE); + Utils::enableDlgControl(m_hwnd, IDC_CLISTAVATARS, FALSE); while (avatar_controls[i] != 0) - Utils::enableDlgControl(hwndDlg, avatar_controls[i++], FALSE); + Utils::enableDlgControl(m_hwnd, avatar_controls[i++], FALSE); } } - CheckDlgButton(hwndDlg, IDC_NOAVATARSOFFLINE, cfg::dat.bNoOfflineAvatars ? BST_CHECKED : BST_UNCHECKED); - SendDlgItemMessage(hwndDlg, IDC_DUALROWMODE, CB_SETCURSEL, cfg::dat.dualRowMode, 0); - CheckDlgButton(hwndDlg, IDC_CLISTAVATARS, (cfg::dat.dwFlags & CLUI_FRAME_AVATARS) ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(m_hwnd, IDC_NOAVATARSOFFLINE, cfg::dat.bNoOfflineAvatars ? BST_CHECKED : BST_UNCHECKED); + SendDlgItemMessage(m_hwnd, IDC_DUALROWMODE, CB_SETCURSEL, cfg::dat.dualRowMode, 0); + CheckDlgButton(m_hwnd, IDC_CLISTAVATARS, (cfg::dat.dwFlags & CLUI_FRAME_AVATARS) ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(hwndDlg, IDC_AVATARSBORDER, (cfg::dat.dwFlags & CLUI_FRAME_AVATARBORDER) ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(hwndDlg, IDC_AVATARSROUNDED, (cfg::dat.dwFlags & CLUI_FRAME_ROUNDAVATAR) ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(hwndDlg, IDC_ALWAYSALIGNNICK, (cfg::dat.dwFlags & CLUI_FRAME_ALWAYSALIGNNICK) ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(hwndDlg, IDC_SHOWSTATUSMSG, (cfg::dat.dwFlags & CLUI_FRAME_SHOWSTATUSMSG) ? BST_CHECKED : BST_UNCHECKED); + chkAvaBorder.SetState((cfg::dat.dwFlags & CLUI_FRAME_AVATARBORDER) != 0); + chkAvaRound.SetState((cfg::dat.dwFlags & CLUI_FRAME_ROUNDAVATAR) != 0); + CheckDlgButton(m_hwnd, IDC_ALWAYSALIGNNICK, (cfg::dat.dwFlags & CLUI_FRAME_ALWAYSALIGNNICK) ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(m_hwnd, IDC_SHOWSTATUSMSG, (cfg::dat.dwFlags & CLUI_FRAME_SHOWSTATUSMSG) ? BST_CHECKED : BST_UNCHECKED); - SendDlgItemMessage(hwndDlg, IDC_AVATARBORDERCLR, CPM_SETCOLOUR, 0, cfg::dat.avatarBorder); + SendDlgItemMessage(m_hwnd, IDC_AVATARBORDERCLR, CPM_SETCOLOUR, 0, cfg::dat.avatarBorder); - SendDlgItemMessage(hwndDlg, IDC_RADIUSSPIN, UDM_SETRANGE, 0, MAKELONG(10, 2)); - SendDlgItemMessage(hwndDlg, IDC_RADIUSSPIN, UDM_SETPOS, 0, cfg::dat.avatarRadius); + SendDlgItemMessage(m_hwnd, IDC_RADIUSSPIN, UDM_SETRANGE, 0, MAKELONG(10, 2)); + SendDlgItemMessage(m_hwnd, IDC_RADIUSSPIN, UDM_SETPOS, 0, cfg::dat.avatarRadius); - SendDlgItemMessage(hwndDlg, IDC_AVATARSIZESPIN, UDM_SETRANGE, 0, MAKELONG(100, 16)); - SendDlgItemMessage(hwndDlg, IDC_AVATARSIZESPIN, UDM_SETPOS, 0, cfg::dat.avatarSize); + SendDlgItemMessage(m_hwnd, IDC_AVATARSIZESPIN, UDM_SETRANGE, 0, MAKELONG(100, 16)); + SendDlgItemMessage(m_hwnd, IDC_AVATARSIZESPIN, UDM_SETPOS, 0, cfg::dat.avatarSize); - Utils::enableDlgControl(hwndDlg, IDC_RADIUS, IsDlgButtonChecked(hwndDlg, IDC_AVATARSROUNDED) ? TRUE : FALSE); - Utils::enableDlgControl(hwndDlg, IDC_RADIUSSPIN, IsDlgButtonChecked(hwndDlg, IDC_AVATARSROUNDED) ? TRUE : FALSE); - Utils::enableDlgControl(hwndDlg, IDC_AVATARBORDERCLR, IsDlgButtonChecked(hwndDlg, IDC_AVATARSBORDER) ? TRUE : FALSE); + onChange_AvatarsBorder(0); + onChange_AvatarsRounded(0); - CheckDlgButton(hwndDlg, IDC_SHOWLOCALTIME, cfg::dat.bShowLocalTime ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(hwndDlg, IDC_SHOWLOCALTIMEONLYWHENDIFFERENT, cfg::dat.bShowLocalTimeSelective ? BST_CHECKED : BST_UNCHECKED); - Utils::enableDlgControl(hwndDlg, IDC_SHOWLOCALTIMEONLYWHENDIFFERENT, IsDlgButtonChecked(hwndDlg, IDC_SHOWLOCALTIME)); + chkLocalTime.SetState(cfg::dat.bShowLocalTime); + CheckDlgButton(m_hwnd, IDC_SHOWLOCALTIMEONLYWHENDIFFERENT, cfg::dat.bShowLocalTimeSelective ? BST_CHECKED : BST_UNCHECKED); + onChange_LocalTime(0); if (cfg::dat.dwFlags & CLUI_FRAME_AVATARSLEFT) - SendDlgItemMessage(hwndDlg, IDC_ALIGNMENT, CB_SETCURSEL, 1, 0); + SendDlgItemMessage(m_hwnd, IDC_ALIGNMENT, CB_SETCURSEL, 1, 0); else if (cfg::dat.dwFlags & CLUI_FRAME_AVATARSRIGHT) - SendDlgItemMessage(hwndDlg, IDC_ALIGNMENT, CB_SETCURSEL, 2, 0); + SendDlgItemMessage(m_hwnd, IDC_ALIGNMENT, CB_SETCURSEL, 2, 0); else if (cfg::dat.dwFlags & CLUI_FRAME_AVATARSRIGHTWITHNICK) - SendDlgItemMessage(hwndDlg, IDC_ALIGNMENT, CB_SETCURSEL, 3, 0); + SendDlgItemMessage(m_hwnd, IDC_ALIGNMENT, CB_SETCURSEL, 3, 0); else - SendDlgItemMessage(hwndDlg, IDC_ALIGNMENT, CB_SETCURSEL, 0, 0); - return TRUE; - - case WM_COMMAND: - switch (LOWORD(wParam)) { - case IDC_CLISTAVATARS: - if ((HWND)lParam != GetFocus()) - return 0; - break; - - case IDC_SHOWLOCALTIME: - Utils::enableDlgControl(hwndDlg, IDC_SHOWLOCALTIMEONLYWHENDIFFERENT, IsDlgButtonChecked(hwndDlg, IDC_SHOWLOCALTIME)); - break; - - case IDC_AVATARSROUNDED: - Utils::enableDlgControl(hwndDlg, IDC_RADIUS, IsDlgButtonChecked(hwndDlg, IDC_AVATARSROUNDED) ? TRUE : FALSE); - Utils::enableDlgControl(hwndDlg, IDC_RADIUSSPIN, IsDlgButtonChecked(hwndDlg, IDC_AVATARSROUNDED) ? TRUE : FALSE); - break; + SendDlgItemMessage(m_hwnd, IDC_ALIGNMENT, CB_SETCURSEL, 0, 0); + return true; + } - case IDC_AVATARSBORDER: - Utils::enableDlgControl(hwndDlg, IDC_AVATARBORDERCLR, IsDlgButtonChecked(hwndDlg, IDC_AVATARSBORDER) ? TRUE : FALSE); - break; + bool OnApply() override + { + LRESULT sel = SendDlgItemMessage(m_hwnd, IDC_ALIGNMENT, CB_GETCURSEL, 0, 0); + if (sel != CB_ERR) { + cfg::dat.dwFlags &= ~(CLUI_FRAME_AVATARSLEFT | CLUI_FRAME_AVATARSRIGHT | CLUI_FRAME_AVATARSRIGHTWITHNICK); + if (sel == 1) + cfg::dat.dwFlags |= CLUI_FRAME_AVATARSLEFT; + else if (sel == 2) + cfg::dat.dwFlags |= CLUI_FRAME_AVATARSRIGHT; + else if (sel == 3) + cfg::dat.dwFlags |= CLUI_FRAME_AVATARSRIGHTWITHNICK; } - if ((LOWORD(wParam) == IDC_RADIUS || LOWORD(wParam) == IDC_AVATARHEIGHT) && (HIWORD(wParam) != EN_CHANGE || (HWND)lParam != GetFocus())) - return 0; - if ((LOWORD(wParam) == IDC_ALIGNMENT || LOWORD(wParam) == IDC_DUALROWMODE) && (HIWORD(wParam) != CBN_SELCHANGE || (HWND)lParam != GetFocus())) - return 0; - SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); - break; - case WM_NOTIFY: - if (((LPNMHDR)lParam)->code == PSN_APPLY) { - LRESULT sel = SendDlgItemMessage(hwndDlg, IDC_ALIGNMENT, CB_GETCURSEL, 0, 0); - if (sel != CB_ERR) { - cfg::dat.dwFlags &= ~(CLUI_FRAME_AVATARSLEFT | CLUI_FRAME_AVATARSRIGHT | CLUI_FRAME_AVATARSRIGHTWITHNICK); - if (sel == 1) - cfg::dat.dwFlags |= CLUI_FRAME_AVATARSLEFT; - else if (sel == 2) - cfg::dat.dwFlags |= CLUI_FRAME_AVATARSRIGHT; - else if (sel == 3) - cfg::dat.dwFlags |= CLUI_FRAME_AVATARSRIGHTWITHNICK; - } - - cfgSetFlag(hwndDlg, IDC_CLISTAVATARS, CLUI_FRAME_AVATARS); - cfgSetFlag(hwndDlg, IDC_AVATARSBORDER, CLUI_FRAME_AVATARBORDER); - cfgSetFlag(hwndDlg, IDC_AVATARSROUNDED, CLUI_FRAME_ROUNDAVATAR); - cfgSetFlag(hwndDlg, IDC_ALWAYSALIGNNICK, CLUI_FRAME_ALWAYSALIGNNICK); - cfgSetFlag(hwndDlg, IDC_SHOWSTATUSMSG, CLUI_FRAME_SHOWSTATUSMSG); + cfgSetFlag(m_hwnd, IDC_CLISTAVATARS, CLUI_FRAME_AVATARS); + cfgSetFlag(m_hwnd, IDC_AVATARSBORDER, CLUI_FRAME_AVATARBORDER); + cfgSetFlag(m_hwnd, IDC_AVATARSROUNDED, CLUI_FRAME_ROUNDAVATAR); + cfgSetFlag(m_hwnd, IDC_ALWAYSALIGNNICK, CLUI_FRAME_ALWAYSALIGNNICK); + cfgSetFlag(m_hwnd, IDC_SHOWSTATUSMSG, CLUI_FRAME_SHOWSTATUSMSG); - cfg::dat.avatarBorder = SendDlgItemMessage(hwndDlg, IDC_AVATARBORDERCLR, CPM_GETCOLOUR, 0, 0); - db_set_dw(0, "CLC", "avatarborder", cfg::dat.avatarBorder); + cfg::dat.avatarBorder = SendDlgItemMessage(m_hwnd, IDC_AVATARBORDERCLR, CPM_GETCOLOUR, 0, 0); + db_set_dw(0, "CLC", "avatarborder", cfg::dat.avatarBorder); - BOOL translated; - cfg::dat.avatarRadius = GetDlgItemInt(hwndDlg, IDC_RADIUS, &translated, FALSE); - db_set_dw(0, "CLC", "avatarradius", cfg::dat.avatarRadius); + BOOL translated; + cfg::dat.avatarRadius = GetDlgItemInt(m_hwnd, IDC_RADIUS, &translated, FALSE); + db_set_dw(0, "CLC", "avatarradius", cfg::dat.avatarRadius); - cfg::dat.avatarSize = GetDlgItemInt(hwndDlg, IDC_AVATARHEIGHT, &translated, FALSE); - g_plugin.setWord("AvatarSize", (WORD)cfg::dat.avatarSize); + cfg::dat.avatarSize = GetDlgItemInt(m_hwnd, IDC_AVATARHEIGHT, &translated, FALSE); + g_plugin.setWord("AvatarSize", (WORD)cfg::dat.avatarSize); - cfg::dat.bNoOfflineAvatars = IsDlgButtonChecked(hwndDlg, IDC_NOAVATARSOFFLINE) ? TRUE : FALSE; - g_plugin.setByte("NoOfflineAV", (BYTE)cfg::dat.bNoOfflineAvatars); + cfg::dat.bNoOfflineAvatars = IsDlgButtonChecked(m_hwnd, IDC_NOAVATARSOFFLINE) ? TRUE : FALSE; + g_plugin.setByte("NoOfflineAV", (BYTE)cfg::dat.bNoOfflineAvatars); - cfg::dat.bShowLocalTime = IsDlgButtonChecked(hwndDlg, IDC_SHOWLOCALTIME) ? 1 : 0; - db_set_b(0, "CLC", "ShowLocalTime", (BYTE)cfg::dat.bShowLocalTime); + cfg::dat.bShowLocalTime = IsDlgButtonChecked(m_hwnd, IDC_SHOWLOCALTIME) ? 1 : 0; + db_set_b(0, "CLC", "ShowLocalTime", (BYTE)cfg::dat.bShowLocalTime); - cfg::dat.bShowLocalTimeSelective = IsDlgButtonChecked(hwndDlg, IDC_SHOWLOCALTIMEONLYWHENDIFFERENT) ? 1 : 0; - db_set_b(0, "CLC", "SelectiveLocalTime", (BYTE)cfg::dat.bShowLocalTimeSelective); + cfg::dat.bShowLocalTimeSelective = IsDlgButtonChecked(m_hwnd, IDC_SHOWLOCALTIMEONLYWHENDIFFERENT) ? 1 : 0; + db_set_b(0, "CLC", "SelectiveLocalTime", (BYTE)cfg::dat.bShowLocalTimeSelective); - KillTimer(g_clistApi.hwndContactTree, TIMERID_REFRESH); - if (cfg::dat.bShowLocalTime) - SetTimer(g_clistApi.hwndContactTree, TIMERID_REFRESH, 65000, nullptr); + KillTimer(g_clistApi.hwndContactTree, TIMERID_REFRESH); + if (cfg::dat.bShowLocalTime) + SetTimer(g_clistApi.hwndContactTree, TIMERID_REFRESH, 65000, nullptr); - cfg::dat.dualRowMode = (BYTE)SendDlgItemMessage(hwndDlg, IDC_DUALROWMODE, CB_GETCURSEL, 0, 0); - if (cfg::dat.dualRowMode == CB_ERR) - cfg::dat.dualRowMode = 0; - db_set_b(0, "CLC", "DualRowMode", cfg::dat.dualRowMode); - return TRUE; - } - break; + cfg::dat.dualRowMode = (BYTE)SendDlgItemMessage(m_hwnd, IDC_DUALROWMODE, CB_GETCURSEL, 0, 0); + if (cfg::dat.dualRowMode == CB_ERR) + cfg::dat.dualRowMode = 0; + db_set_b(0, "CLC", "DualRowMode", cfg::dat.dualRowMode); + return true; } - return FALSE; -} - -static INT_PTR CALLBACK DlgProcIcons(HWND hwndDlg, UINT msg, WPARAM, LPARAM lParam) -{ - switch (msg) { - case WM_INITDIALOG: - TranslateDialogDefault(hwndDlg); - CheckDlgButton(hwndDlg, IDC_XSTATUSASSTATUS, (cfg::dat.dwFlags & CLUI_FRAME_USEXSTATUSASSTATUS) ? BST_CHECKED : BST_UNCHECKED); - - CheckDlgButton(hwndDlg, IDC_SHOWSTATUSICONS, (cfg::dat.dwFlags & CLUI_FRAME_STATUSICONS) ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(hwndDlg, IDC_SHOWMETA, (cfg::dat.dwFlags & CLUI_USEMETAICONS) ? BST_CHECKED : BST_UNCHECKED); - - CheckDlgButton(hwndDlg, IDC_OVERLAYICONS, (cfg::dat.dwFlags & CLUI_FRAME_OVERLAYICONS) ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(hwndDlg, IDC_SELECTIVEICONS, (cfg::dat.dwFlags & CLUI_FRAME_SELECTIVEICONS) ? BST_CHECKED : BST_UNCHECKED); - - CheckDlgButton(hwndDlg, IDC_STATUSICONSCENTERED, cfg::dat.bCenterStatusIcons ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(hwndDlg, IDC_IDLE, db_get_b(0, "CLC", "ShowIdle", CLCDEFAULT_SHOWIDLE) ? BST_CHECKED : BST_UNCHECKED); - return TRUE; - case WM_COMMAND: - SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); - break; - - case WM_NOTIFY: - switch (((LPNMHDR)lParam)->code) { - case PSN_APPLY: - cfgSetFlag(hwndDlg, IDC_SHOWSTATUSICONS, CLUI_FRAME_STATUSICONS); - cfgSetFlag(hwndDlg, IDC_SHOWMETA, CLUI_USEMETAICONS); - cfgSetFlag(hwndDlg, IDC_OVERLAYICONS, CLUI_FRAME_OVERLAYICONS); - cfgSetFlag(hwndDlg, IDC_XSTATUSASSTATUS, CLUI_FRAME_USEXSTATUSASSTATUS); - cfgSetFlag(hwndDlg, IDC_SELECTIVEICONS, CLUI_FRAME_SELECTIVEICONS); - - db_set_b(0, "CLC", "ShowIdle", IsDlgButtonChecked(hwndDlg, IDC_IDLE) ? 1 : 0); - - cfg::dat.bCenterStatusIcons = IsDlgButtonChecked(hwndDlg, IDC_STATUSICONSCENTERED) ? 1 : 0; - db_set_b(0, "CLC", "si_centered", (BYTE)cfg::dat.bCenterStatusIcons); - return TRUE; - } - break; + void onChange_LocalTime(CCtrlCheck *) + { + Utils::enableDlgControl(m_hwnd, IDC_SHOWLOCALTIMEONLYWHENDIFFERENT, IsDlgButtonChecked(m_hwnd, IDC_SHOWLOCALTIME)); } - return FALSE; -} -int ClcOptInit(WPARAM wParam, LPARAM) -{ - //////////////////////////////////////////////////////////////////////////// - // Main options tabs + void onChange_AvatarsRounded(CCtrlCheck *) + { + bool bEnable = chkAvaRound.GetState(); + Utils::enableDlgControl(m_hwnd, IDC_RADIUS, bEnable); + Utils::enableDlgControl(m_hwnd, IDC_RADIUSSPIN, bEnable); + } - OPTIONSDIALOGPAGE odp = {}; - odp.position = -1000000000; - odp.flags = ODPF_BOLDGROUPS; - odp.szTitle.a = LPGEN("Contact list"); - odp.szTab.a = LPGEN("General"); - odp.pfnDlgProc = DlgProcGenOpts; - odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_CLIST); - g_plugin.addOptions(wParam, &odp); + void onChange_AvatarsBorder(CCtrlCheck *) + { + Utils::enableDlgControl(m_hwnd, IDC_AVATARBORDERCLR, chkAvaBorder.GetState()); + } +}; - odp.szTab.a = LPGEN("List layout"); - odp.pfnDlgProc = DlgProcClcMainOpts; - odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_CLC); - g_plugin.addOptions(wParam, &odp); +///////////////////////////////////////////////////////////////////////////////////////// - odp.szTab.a = LPGEN("Window"); - odp.pfnDlgProc = DlgProcCluiOpts; - odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_CLUI); - g_plugin.addOptions(wParam, &odp); +class CDspIconsDlg : public CRowItemsBaseDlg +{ - odp.szTab.a = LPGEN("Background"); - odp.pfnDlgProc = DlgProcClcBkgOpts; - odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_CLCBKG); - g_plugin.addOptions(wParam, &odp); +public: + CDspIconsDlg() : + CRowItemsBaseDlg(IDD_OPT_ICONS) + { + } - odp.szTab.a = LPGEN("Status bar"); - odp.pfnDlgProc = DlgProcSBarOpts; - odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_SBAR); - g_plugin.addOptions(wParam, &odp); + bool OnInitDialog() override + { + CheckDlgButton(m_hwnd, IDC_XSTATUSASSTATUS, (cfg::dat.dwFlags & CLUI_FRAME_USEXSTATUSASSTATUS) ? BST_CHECKED : BST_UNCHECKED); - //////////////////////////////////////////////////////////////////////////// - // Contact rows tabs + CheckDlgButton(m_hwnd, IDC_SHOWSTATUSICONS, (cfg::dat.dwFlags & CLUI_FRAME_STATUSICONS) ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(m_hwnd, IDC_SHOWMETA, (cfg::dat.dwFlags & CLUI_USEMETAICONS) ? BST_CHECKED : BST_UNCHECKED); - odp.position = 0; - odp.szGroup.a = LPGEN("Contact list"); - odp.szTitle.a = LPGEN("Row items"); - odp.szTab.a = LPGEN("Contacts"); - odp.pfnDlgProc = DlgProcDspItems; - odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_DSPITEMS); - odp.flags = ODPF_BOLDGROUPS; - g_plugin.addOptions(wParam, &odp); + CheckDlgButton(m_hwnd, IDC_OVERLAYICONS, (cfg::dat.dwFlags & CLUI_FRAME_OVERLAYICONS) ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(m_hwnd, IDC_SELECTIVEICONS, (cfg::dat.dwFlags & CLUI_FRAME_SELECTIVEICONS) ? BST_CHECKED : BST_UNCHECKED); - odp.szTab.a = LPGEN("Groups and layout"); - odp.pfnDlgProc = DlgProcDspGroups; - odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_DSPGROUPS); - g_plugin.addOptions(wParam, &odp); + CheckDlgButton(m_hwnd, IDC_STATUSICONSCENTERED, cfg::dat.bCenterStatusIcons ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(m_hwnd, IDC_IDLE, db_get_b(0, "CLC", "ShowIdle", CLCDEFAULT_SHOWIDLE) ? BST_CHECKED : BST_UNCHECKED); + return true; + } - odp.szTab.a = LPGEN("Advanced"); - odp.pfnDlgProc = DlgProcDspAdvanced; - odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_DSPADVANCED); - g_plugin.addOptions(wParam, &odp); + bool OnApply() override + { + cfgSetFlag(m_hwnd, IDC_SHOWSTATUSICONS, CLUI_FRAME_STATUSICONS); + cfgSetFlag(m_hwnd, IDC_SHOWMETA, CLUI_USEMETAICONS); + cfgSetFlag(m_hwnd, IDC_OVERLAYICONS, CLUI_FRAME_OVERLAYICONS); + cfgSetFlag(m_hwnd, IDC_XSTATUSASSTATUS, CLUI_FRAME_USEXSTATUSASSTATUS); + cfgSetFlag(m_hwnd, IDC_SELECTIVEICONS, CLUI_FRAME_SELECTIVEICONS); - odp.szTab.a = LPGEN("Icons"); - odp.pfnDlgProc = DlgProcIcons; - odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_ICONS); - g_plugin.addOptions(wParam, &odp); + db_set_b(0, "CLC", "ShowIdle", IsDlgButtonChecked(m_hwnd, IDC_IDLE) ? 1 : 0); - //////////////////////////////////////////////////////////////////////////// - // Other options + cfg::dat.bCenterStatusIcons = IsDlgButtonChecked(m_hwnd, IDC_STATUSICONSCENTERED) ? 1 : 0; + db_set_b(0, "CLC", "si_centered", (BYTE)cfg::dat.bCenterStatusIcons); + return true; + } +}; - odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT); - odp.szGroup.a = LPGEN("Skins"); - odp.szTitle.a = LPGEN("Contact list"); - odp.flags = ODPF_BOLDGROUPS; - odp.pfnDlgProc = OptionsDlgProc; - g_plugin.addOptions(wParam, &odp); - return 0; -} +///////////////////////////////////////////////////////////////////////////////////////// static int opt_clc_main_changed = 0; @@ -669,6 +601,8 @@ static INT_PTR CALLBACK DlgProcClcMainOpts(HWND hwndDlg, UINT msg, WPARAM wParam return FALSE; } +///////////////////////////////////////////////////////////////////////////////////////// + static int opt_clc_bkg_changed = 0; static INT_PTR CALLBACK DlgProcClcBkgOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) @@ -794,3 +728,73 @@ static INT_PTR CALLBACK DlgProcClcBkgOpts(HWND hwndDlg, UINT msg, WPARAM wParam, } return FALSE; } + +int ClcOptInit(WPARAM wParam, LPARAM) +{ + //////////////////////////////////////////////////////////////////////////// + // Main options tabs + + OPTIONSDIALOGPAGE odp = {}; + odp.position = -1000000000; + odp.flags = ODPF_BOLDGROUPS; + odp.szTitle.a = LPGEN("Contact list"); + odp.szTab.a = LPGEN("General"); + odp.pfnDlgProc = DlgProcGenOpts; + odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_CLIST); + g_plugin.addOptions(wParam, &odp); + + odp.szTab.a = LPGEN("List layout"); + odp.pfnDlgProc = DlgProcClcMainOpts; + odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_CLC); + g_plugin.addOptions(wParam, &odp); + + odp.szTab.a = LPGEN("Window"); + odp.pfnDlgProc = DlgProcCluiOpts; + odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_CLUI); + g_plugin.addOptions(wParam, &odp); + + odp.szTab.a = LPGEN("Background"); + odp.pfnDlgProc = DlgProcClcBkgOpts; + odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_CLCBKG); + g_plugin.addOptions(wParam, &odp); + + odp.szTab.a = LPGEN("Status bar"); + odp.pfnDlgProc = DlgProcSBarOpts; + odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_SBAR); + g_plugin.addOptions(wParam, &odp); + + //////////////////////////////////////////////////////////////////////////// + // Other options + + odp.position = 0; + odp.szGroup.a = LPGEN("Skins"); + odp.szTitle.a = LPGEN("Contact list"); + odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT); + odp.pfnDlgProc = OptionsDlgProc; + g_plugin.addOptions(wParam, &odp); + + //////////////////////////////////////////////////////////////////////////// + // Contact rows tabs + + odp.szGroup.a = LPGEN("Contact list"); + odp.szTitle.a = LPGEN("Row items"); + + odp.pfnDlgProc = 0; + odp.pszTemplate = 0; + odp.szTab.a = LPGEN("Contacts"); + odp.pDialog = new CDspItemsDlg(); + g_plugin.addOptions(wParam, &odp); + + odp.szTab.a = LPGEN("Groups and layout"); + odp.pDialog = new CDspGroupsDlg(); + g_plugin.addOptions(wParam, &odp); + + odp.szTab.a = LPGEN("Advanced"); + odp.pDialog = new CDspAdvancedDlg(); + g_plugin.addOptions(wParam, &odp); + + odp.szTab.a = LPGEN("Icons"); + odp.pDialog = new CDspIconsDlg(); + g_plugin.addOptions(wParam, &odp); + return 0; +} -- cgit v1.2.3