diff options
author | George Hazan <ghazan@miranda.im> | 2018-06-26 15:59:59 +0300 |
---|---|---|
committer | George Hazan <ghazan@miranda.im> | 2018-06-26 15:59:59 +0300 |
commit | e076e5344fdf27269b9c6fd23999fadb30e2cc48 (patch) | |
tree | 39dd410136e07861003cad2152a2a0f09d4ba902 /plugins | |
parent | 46e41c788a2c01d75b638dafc63ab696275d540c (diff) |
fixes #1437 (StartupStatus: cannot select status profile)
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/StatusManager/src/ss_options.cpp | 489 | ||||
-rw-r--r-- | plugins/StatusManager/src/ss_profiles.cpp | 18 | ||||
-rw-r--r-- | plugins/StatusManager/src/startupstatus.cpp | 4 | ||||
-rw-r--r-- | plugins/StatusManager/src/startupstatus.h | 9 | ||||
-rw-r--r-- | plugins/StatusManager/src/version.h | 2 |
5 files changed, 265 insertions, 257 deletions
diff --git a/plugins/StatusManager/src/ss_options.cpp b/plugins/StatusManager/src/ss_options.cpp index 2ef03d852a..1a0ff8dbaf 100644 --- a/plugins/StatusManager/src/ss_options.cpp +++ b/plugins/StatusManager/src/ss_options.cpp @@ -47,7 +47,7 @@ static char* GetStatusDesc(int status) return "offline"; } -static char* GetCMDLArguments(TProtoSettings& protoSettings) +static char* GetCMDLArguments(TProtoSettings &protoSettings) { if (protoSettings.getCount() == 0) return nullptr; @@ -83,7 +83,7 @@ static char* GetCMDLArguments(TProtoSettings& protoSettings) return cmdl; } -static char* GetCMDL(TProtoSettings& protoSettings) +static char* GetCMDL(TProtoSettings &protoSettings) { char path[MAX_PATH]; GetModuleFileNameA(nullptr, path, MAX_PATH); @@ -103,7 +103,7 @@ static char* GetCMDL(TProtoSettings& protoSettings) ///////////////////////////////////////////////////////////////////////////////////////// // Link processing -static wchar_t* GetLinkDescription(TProtoSettings& protoSettings) +static wchar_t* GetLinkDescription(TProtoSettings &protoSettings) { if (protoSettings.getCount() == 0) return nullptr; @@ -132,6 +132,9 @@ static wchar_t* GetLinkDescription(TProtoSettings& protoSettings) return mir_wstrndup(result, result.GetLength()); } +///////////////////////////////////////////////////////////////////////////////////////// +// Command line options + class CCmdlDlg : public CDlgBase { TProtoSettings ps; @@ -139,8 +142,8 @@ class CCmdlDlg : public CDlgBase CCtrlButton btnLink, btnCopy; public: - CCmdlDlg(int iProfileNo) - : CDlgBase(g_plugin, IDD_CMDLOPTIONS), + CCmdlDlg(int iProfileNo) : + CDlgBase(g_plugin, IDD_CMDLOPTIONS), btnCopy(this, IDC_COPY), btnLink(this, IDC_SHORTCUT), ps(protoList) @@ -211,249 +214,281 @@ public: } }; -static INT_PTR CALLBACK StartupStatusOptDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) +///////////////////////////////////////////////////////////////////////////////////////// +// basic class for all SS options + +class CSSOptionsBaseDlg : public CDlgBase { - static BOOL bInitDone = FALSE; - - switch (msg) { - case WM_INITDIALOG: - bInitDone = FALSE; - - TranslateDialogDefault(hwndDlg); - CheckDlgButton(hwndDlg, IDC_SETPROFILE, db_get_b(0, SSMODULENAME, SETTING_SETPROFILE, 1) ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(hwndDlg, IDC_OVERRIDE, db_get_b(0, SSMODULENAME, SETTING_OVERRIDE, 1) ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(hwndDlg, IDC_SHOWDIALOG, db_get_b(0, SSMODULENAME, SETTING_SHOWDIALOG, 0) ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(hwndDlg, IDC_SETWINSTATE, db_get_b(0, SSMODULENAME, SETTING_SETWINSTATE, 0) ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(hwndDlg, IDC_SETWINLOCATION, db_get_b(0, SSMODULENAME, SETTING_SETWINLOCATION, 0) ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(hwndDlg, IDC_SETDOCKED, db_get_b(0, SSMODULENAME, SETTING_SETDOCKED, 0) ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(hwndDlg, IDC_SETWINSIZE, db_get_b(0, SSMODULENAME, SETTING_SETWINSIZE, 0) ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(hwndDlg, IDC_OFFLINECLOSE, db_get_b(0, SSMODULENAME, SETTING_OFFLINECLOSE, 1) ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(hwndDlg, IDC_AUTODIAL, db_get_b(0, SSMODULENAME, SETTING_AUTODIAL, 0) ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(hwndDlg, IDC_AUTOHANGUP, db_get_b(0, SSMODULENAME, SETTING_AUTOHANGUP, 0) ? BST_CHECKED : BST_UNCHECKED); - SetDlgItemInt(hwndDlg, IDC_SETPROFILEDELAY, db_get_dw(0, SSMODULENAME, SETTING_SETPROFILEDELAY, 500), FALSE); - SetDlgItemInt(hwndDlg, IDC_DLGTIMEOUT, db_get_dw(0, SSMODULENAME, SETTING_DLGTIMEOUT, 5), FALSE); - SetDlgItemInt(hwndDlg, IDC_XPOS, db_get_dw(0, SSMODULENAME, SETTING_XPOS, 0), TRUE); - SetDlgItemInt(hwndDlg, IDC_YPOS, db_get_dw(0, SSMODULENAME, SETTING_YPOS, 0), TRUE); - SetDlgItemInt(hwndDlg, IDC_WIDTH, db_get_dw(0, SSMODULENAME, SETTING_WIDTH, 0), FALSE); - SetDlgItemInt(hwndDlg, IDC_HEIGHT, db_get_dw(0, SSMODULENAME, SETTING_HEIGHT, 0), FALSE); - { - int val = db_get_b(0, SSMODULENAME, SETTING_DOCKED, DOCKED_NONE); - int item = SendDlgItemMessage(hwndDlg, IDC_DOCKED, CB_ADDSTRING, 0, (LPARAM)TranslateT("Left")); - SendDlgItemMessage(hwndDlg, IDC_DOCKED, CB_SETITEMDATA, (WPARAM)item, (LPARAM)DOCKED_LEFT); - if (val == DOCKED_LEFT) - SendDlgItemMessage(hwndDlg, IDC_DOCKED, CB_SETCURSEL, (WPARAM)item, 0); - - item = SendDlgItemMessage(hwndDlg, IDC_DOCKED, CB_ADDSTRING, 0, (LPARAM)TranslateT("Right")); - SendDlgItemMessage(hwndDlg, IDC_DOCKED, CB_SETITEMDATA, (WPARAM)item, (LPARAM)DOCKED_RIGHT); - if (val == DOCKED_RIGHT) - SendDlgItemMessage(hwndDlg, IDC_DOCKED, CB_SETCURSEL, (WPARAM)item, 0); - - item = SendDlgItemMessage(hwndDlg, IDC_DOCKED, CB_ADDSTRING, 0, (LPARAM)TranslateT("None")); - SendDlgItemMessage(hwndDlg, IDC_DOCKED, CB_SETITEMDATA, (WPARAM)item, (LPARAM)DOCKED_NONE); - if (val == DOCKED_NONE) - SendDlgItemMessage(hwndDlg, IDC_DOCKED, CB_SETCURSEL, (WPARAM)item, 0); + void OnFinishWizard(void*) + { + if (hTTBModuleLoadedHook) { + RemoveTopToolbarButtons(); + CreateTopToolbarButtons(0, 0); } - EnableWindow(GetDlgItem(hwndDlg, IDC_PROFILE), IsDlgButtonChecked(hwndDlg, IDC_SETPROFILE) || IsDlgButtonChecked(hwndDlg, IDC_SHOWDIALOG)); - EnableWindow(GetDlgItem(hwndDlg, IDC_SETPROFILEDELAY), IsDlgButtonChecked(hwndDlg, IDC_SETPROFILE)); - EnableWindow(GetDlgItem(hwndDlg, IDC_OVERRIDE), IsDlgButtonChecked(hwndDlg, IDC_SETPROFILE)); - EnableWindow(GetDlgItem(hwndDlg, IDC_DLGTIMEOUT), IsDlgButtonChecked(hwndDlg, IDC_SHOWDIALOG)); - EnableWindow(GetDlgItem(hwndDlg, IDC_WINSTATE), IsDlgButtonChecked(hwndDlg, IDC_SETWINSTATE)); - EnableWindow(GetDlgItem(hwndDlg, IDC_XPOS), IsDlgButtonChecked(hwndDlg, IDC_SETWINLOCATION)); - EnableWindow(GetDlgItem(hwndDlg, IDC_YPOS), IsDlgButtonChecked(hwndDlg, IDC_SETWINLOCATION)); - SendMessage(hwndDlg, UM_REINITPROFILES, 0, 0); - SendMessage(hwndDlg, UM_REINITDOCKED, 0, 0); - SendMessage(hwndDlg, UM_REINITWINSTATE, 0, 0); - SendMessage(hwndDlg, UM_REINITWINSIZE, 0, 0); - SetTimer(hwndDlg, 0, 100, nullptr); - bInitDone = TRUE; - break; - - case WM_TIMER: - if (BST_UNCHECKED == IsDlgButtonChecked(hwndDlg, IDC_SETWINLOCATION) && BST_UNCHECKED == IsDlgButtonChecked(hwndDlg, IDC_SETWINSIZE)) { - SetDlgItemTextA(hwndDlg, IDC_CURWINSIZE, ""); - SetDlgItemTextA(hwndDlg, IDC_CURWINLOC, ""); - break; - } - else { - wchar_t text[128]; - mir_snwprintf(text, TranslateT("size: %d x %d"), - db_get_dw(0, MODULE_CLIST, SETTING_WIDTH, 0), - db_get_dw(0, MODULE_CLIST, SETTING_HEIGHT, 0)); - SetDlgItemText(hwndDlg, IDC_CURWINSIZE, text); - - mir_snwprintf(text, TranslateT("loc: %d x %d"), - db_get_dw(0, MODULE_CLIST, SETTING_XPOS, 0), - db_get_dw(0, MODULE_CLIST, SETTING_YPOS, 0)); - SetDlgItemText(hwndDlg, IDC_CURWINLOC, text); - } - break; + UnregisterHotKeys(); + RegisterHotKeys(); + } - case UM_REINITPROFILES: - // creates profile combo box according to 'dat' - SendDlgItemMessage(hwndDlg, IDC_PROFILE, CB_RESETCONTENT, 0, 0); - { - int defProfile; - int profileCount = GetProfileCount((WPARAM)&defProfile, 0); +protected: + CSSOptionsBaseDlg(int iDlg) : + CDlgBase(g_plugin, iDlg) + { + m_OnFinishWizard = Callback(this, &CSSOptionsBaseDlg::OnFinishWizard); + } +}; + +///////////////////////////////////////////////////////////////////////////////////////// +// Main SS options dialog + +class CSSMainOptDlg : public CSSOptionsBaseDlg +{ + // creates profile combo box according to 'dat' + void ReinitProfiles() + { + profiles.ResetContent(); + + int defProfile; + int profileCount = GetProfileCount((WPARAM)&defProfile, 0); + if (profileCount > 0) { for (int i = 0; i < profileCount; i++) { wchar_t profileName[128]; if (GetProfileName(i, (LPARAM)profileName)) continue; - int item = SendDlgItemMessage(hwndDlg, IDC_PROFILE, CB_ADDSTRING, 0, (LPARAM)profileName); - SendDlgItemMessage(hwndDlg, IDC_PROFILE, CB_SETITEMDATA, item, i); + profiles.AddString(profileName, i); } - SendDlgItemMessage(hwndDlg, IDC_PROFILE, CB_SETCURSEL, defProfile, 0); } - break; - - case UM_REINITDOCKED: - EnableWindow(GetDlgItem(hwndDlg, IDC_SETDOCKED), db_get_b(0, MODULE_CLIST, SETTING_TOOLWINDOW, 1)); - if (!IsWindowEnabled(GetDlgItem(hwndDlg, IDC_SETDOCKED))) - CheckDlgButton(hwndDlg, IDC_SETDOCKED, BST_UNCHECKED); - - EnableWindow(GetDlgItem(hwndDlg, IDC_DOCKED), IsDlgButtonChecked(hwndDlg, IDC_SETDOCKED)); - break; - - case UM_REINITWINSTATE: - { - int val = db_get_b(0, SSMODULENAME, SETTING_WINSTATE, SETTING_STATE_NORMAL); - SendDlgItemMessage(hwndDlg, IDC_WINSTATE, CB_RESETCONTENT, 0, 0); - - int item = SendDlgItemMessage(hwndDlg, IDC_WINSTATE, CB_ADDSTRING, 0, (LPARAM)TranslateT("Hidden")); - SendDlgItemMessage(hwndDlg, IDC_WINSTATE, CB_SETITEMDATA, item, (LPARAM)SETTING_STATE_HIDDEN); - if (val == SETTING_STATE_HIDDEN) - SendDlgItemMessage(hwndDlg, IDC_WINSTATE, CB_SETCURSEL, item, 0); - - if (!db_get_b(0, MODULE_CLIST, SETTING_TOOLWINDOW, 0)) { - item = SendDlgItemMessage(hwndDlg, IDC_WINSTATE, CB_ADDSTRING, 0, (LPARAM)TranslateT("Minimized")); - SendDlgItemMessage(hwndDlg, IDC_WINSTATE, CB_SETITEMDATA, item, SETTING_STATE_MINIMIZED); - if (val == SETTING_STATE_MINIMIZED) - SendDlgItemMessage(hwndDlg, IDC_WINSTATE, CB_SETCURSEL, item, 0); - } - item = SendDlgItemMessage(hwndDlg, IDC_WINSTATE, CB_ADDSTRING, 0, (LPARAM)TranslateT("Normal")); - SendDlgItemMessage(hwndDlg, IDC_WINSTATE, CB_SETITEMDATA, item, SETTING_STATE_NORMAL); - if (val == SETTING_STATE_NORMAL || (val == SETTING_STATE_MINIMIZED) && db_get_b(0, MODULE_CLIST, SETTING_TOOLWINDOW, 0)) - SendDlgItemMessage(hwndDlg, IDC_WINSTATE, CB_SETCURSEL, item, 0); + else profiles.AddString(TranslateT("default")); + profiles.SetCurSel(defProfile); + + chkSetDocked.Enable(db_get_b(0, MODULE_CLIST, SETTING_TOOLWINDOW, 1)); + if (!chkSetDocked.Enabled()) + chkSetDocked.SetState(false); + onChange_Docked(0); + + int val = db_get_b(0, SSMODULENAME, SETTING_WINSTATE, SETTING_STATE_NORMAL); + SendDlgItemMessage(m_hwnd, IDC_WINSTATE, CB_RESETCONTENT, 0, 0); + + int item = SendDlgItemMessage(m_hwnd, IDC_WINSTATE, CB_ADDSTRING, 0, (LPARAM)TranslateT("Hidden")); + SendDlgItemMessage(m_hwnd, IDC_WINSTATE, CB_SETITEMDATA, item, (LPARAM)SETTING_STATE_HIDDEN); + if (val == SETTING_STATE_HIDDEN) + SendDlgItemMessage(m_hwnd, IDC_WINSTATE, CB_SETCURSEL, item, 0); + + if (!db_get_b(0, MODULE_CLIST, SETTING_TOOLWINDOW, 0)) { + item = SendDlgItemMessage(m_hwnd, IDC_WINSTATE, CB_ADDSTRING, 0, (LPARAM)TranslateT("Minimized")); + SendDlgItemMessage(m_hwnd, IDC_WINSTATE, CB_SETITEMDATA, item, SETTING_STATE_MINIMIZED); + if (val == SETTING_STATE_MINIMIZED) + SendDlgItemMessage(m_hwnd, IDC_WINSTATE, CB_SETCURSEL, item, 0); } - break; - - case UM_REINITWINSIZE: - EnableWindow(GetDlgItem(hwndDlg, IDC_WIDTH), IsDlgButtonChecked(hwndDlg, IDC_SETWINSIZE)); - EnableWindow(GetDlgItem(hwndDlg, IDC_HEIGHT), !db_get_b(0, MODULE_CLUI, SETTING_AUTOSIZE, 0) && IsDlgButtonChecked(hwndDlg, IDC_SETWINSIZE)); - - case WM_COMMAND: - if (HIWORD(wParam) == BN_CLICKED || HIWORD(wParam) == LBN_SELCHANGE || HIWORD(wParam) == CBN_SELCHANGE || HIWORD(wParam) == EN_CHANGE) - if (bInitDone) - SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); - - switch (LOWORD(wParam)) { - case IDC_SETPROFILE: - EnableWindow(GetDlgItem(hwndDlg, IDC_PROFILE), IsDlgButtonChecked(hwndDlg, IDC_SETPROFILE) || IsDlgButtonChecked(hwndDlg, IDC_SHOWDIALOG)); - EnableWindow(GetDlgItem(hwndDlg, IDC_SETPROFILEDELAY), IsDlgButtonChecked(hwndDlg, IDC_SETPROFILE)); - EnableWindow(GetDlgItem(hwndDlg, IDC_OVERRIDE), IsDlgButtonChecked(hwndDlg, IDC_SETPROFILE)); - break; - case IDC_SHOWDIALOG: - EnableWindow(GetDlgItem(hwndDlg, IDC_PROFILE), IsDlgButtonChecked(hwndDlg, IDC_SETPROFILE) || IsDlgButtonChecked(hwndDlg, IDC_SHOWDIALOG)); - EnableWindow(GetDlgItem(hwndDlg, IDC_DLGTIMEOUT), IsDlgButtonChecked(hwndDlg, IDC_SHOWDIALOG)); - break; - case IDC_SETWINSTATE: - EnableWindow(GetDlgItem(hwndDlg, IDC_WINSTATE), IsDlgButtonChecked(hwndDlg, IDC_SETWINSTATE)); - break; - case IDC_SETDOCKED: - EnableWindow(GetDlgItem(hwndDlg, IDC_DOCKED), IsDlgButtonChecked(hwndDlg, IDC_SETDOCKED)); - break; - case IDC_SETWINLOCATION: - EnableWindow(GetDlgItem(hwndDlg, IDC_XPOS), IsDlgButtonChecked(hwndDlg, IDC_SETWINLOCATION)); - EnableWindow(GetDlgItem(hwndDlg, IDC_YPOS), IsDlgButtonChecked(hwndDlg, IDC_SETWINLOCATION)); - break; - case IDC_SETWINSIZE: - SendMessage(hwndDlg, UM_REINITWINSIZE, 0, 0); - break; - case IDC_SHOWCMDL: - { - int defProfile = (int)SendDlgItemMessage(hwndDlg, IDC_PROFILE, CB_GETITEMDATA, - SendDlgItemMessage(hwndDlg, IDC_PROFILE, CB_GETCURSEL, 0, 0), 0); - CCmdlDlg *pDlg = new CCmdlDlg(defProfile); - pDlg->Show(); - break; - } - } - break; + + item = SendDlgItemMessage(m_hwnd, IDC_WINSTATE, CB_ADDSTRING, 0, (LPARAM)TranslateT("Normal")); + SendDlgItemMessage(m_hwnd, IDC_WINSTATE, CB_SETITEMDATA, item, SETTING_STATE_NORMAL); + if (val == SETTING_STATE_NORMAL || (val == SETTING_STATE_MINIMIZED) && db_get_b(0, MODULE_CLIST, SETTING_TOOLWINDOW, 0)) + SendDlgItemMessage(m_hwnd, IDC_WINSTATE, CB_SETCURSEL, item, 0); - case WM_SHOWWINDOW: - if (wParam == FALSE) - break; + onChange_SetWinSize(0); + } - bInitDone = FALSE; - SendMessage(hwndDlg, UM_REINITPROFILES, 0, 0); - SendMessage(hwndDlg, UM_REINITDOCKED, 0, 0); - SendMessage(hwndDlg, UM_REINITWINSTATE, 0, 0); - SendMessage(hwndDlg, UM_REINITWINSIZE, 0, 0); - bInitDone = TRUE; - break; - - case WM_NOTIFY: - switch (((LPNMHDR)lParam)->code) { - case PSN_WIZFINISH: - SSLoadMainOptions(); - break; + CCtrlButton btnShowCmdl; + CCtrlCheck chkSetProfile, chkShowDialog, chkSetWinSize, chkSetWinState, chkSetWinLocation, chkSetDocked; + CCtrlCombo profiles; + CTimer timer; + +public: + CSSMainOptDlg() : + CSSOptionsBaseDlg(IDD_OPT_STARTUPSTATUS), + timer(this, 10), + profiles(this, IDC_PROFILE), + btnShowCmdl(this, IDC_SHOWCMDL), + chkSetDocked(this, IDC_SETDOCKED), + chkSetProfile(this, IDC_SETPROFILE), + chkShowDialog(this, IDC_SHOWDIALOG), + chkSetWinSize(this, IDC_SETWINSIZE), + chkSetWinState(this, IDC_SETWINSTATE), + chkSetWinLocation(this, IDC_SETWINLOCATION) + { + btnShowCmdl.OnClick = Callback(this, &CSSMainOptDlg::onClick_Show); - case PSN_APPLY: - db_set_b(0, SSMODULENAME, SETTING_SETPROFILE, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_SETPROFILE)); - if (IsDlgButtonChecked(hwndDlg, IDC_SETPROFILE)) - db_set_dw(0, SSMODULENAME, SETTING_SETPROFILEDELAY, GetDlgItemInt(hwndDlg, IDC_SETPROFILEDELAY, nullptr, FALSE)); + timer.OnEvent = Callback(this, &CSSMainOptDlg::onTimer); - if (IsDlgButtonChecked(hwndDlg, IDC_SETPROFILE) || IsDlgButtonChecked(hwndDlg, IDC_SHOWDIALOG)) { - int val = (int)SendDlgItemMessage(hwndDlg, IDC_PROFILE, CB_GETITEMDATA, SendDlgItemMessage(hwndDlg, IDC_PROFILE, CB_GETCURSEL, 0, 0), 0); - db_set_w(0, SSMODULENAME, SETTING_DEFAULTPROFILE, (WORD)val); - } - db_set_b(0, SSMODULENAME, SETTING_OVERRIDE, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_OVERRIDE)); - db_set_b(0, SSMODULENAME, SETTING_SHOWDIALOG, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_SHOWDIALOG)); - if (IsDlgButtonChecked(hwndDlg, IDC_SHOWDIALOG)) - db_set_dw(0, SSMODULENAME, SETTING_DLGTIMEOUT, GetDlgItemInt(hwndDlg, IDC_DLGTIMEOUT, nullptr, FALSE)); - - db_set_b(0, SSMODULENAME, SETTING_SETWINSTATE, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_SETWINSTATE)); - if (IsDlgButtonChecked(hwndDlg, IDC_SETWINSTATE)) { - int val = (int)SendDlgItemMessage(hwndDlg, IDC_WINSTATE, CB_GETITEMDATA, SendDlgItemMessage(hwndDlg, IDC_WINSTATE, CB_GETCURSEL, 0, 0), 0); - db_set_b(0, SSMODULENAME, SETTING_WINSTATE, (BYTE)val); - } - db_set_b(0, SSMODULENAME, SETTING_SETDOCKED, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_SETDOCKED)); - if (IsDlgButtonChecked(hwndDlg, IDC_SETDOCKED)) { - int val = (int)SendDlgItemMessage(hwndDlg, IDC_DOCKED, CB_GETITEMDATA, SendDlgItemMessage(hwndDlg, IDC_DOCKED, CB_GETCURSEL, 0, 0), 0); - db_set_b(0, SSMODULENAME, SETTING_DOCKED, (BYTE)val); - } - db_set_b(0, SSMODULENAME, SETTING_SETWINLOCATION, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_SETWINLOCATION)); - if (IsDlgButtonChecked(hwndDlg, IDC_SETWINLOCATION)) { - db_set_dw(0, SSMODULENAME, SETTING_XPOS, GetDlgItemInt(hwndDlg, IDC_XPOS, nullptr, TRUE)); - db_set_dw(0, SSMODULENAME, SETTING_YPOS, GetDlgItemInt(hwndDlg, IDC_YPOS, nullptr, TRUE)); - } - db_set_b(0, SSMODULENAME, SETTING_SETWINSIZE, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_SETWINSIZE)); - if (IsDlgButtonChecked(hwndDlg, IDC_SETWINSIZE)) { - db_set_dw(0, SSMODULENAME, SETTING_WIDTH, GetDlgItemInt(hwndDlg, IDC_WIDTH, nullptr, FALSE)); - db_set_dw(0, SSMODULENAME, SETTING_HEIGHT, GetDlgItemInt(hwndDlg, IDC_HEIGHT, nullptr, FALSE)); - } - db_set_b(0, SSMODULENAME, SETTING_OFFLINECLOSE, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_OFFLINECLOSE)); - db_set_b(0, SSMODULENAME, SETTING_AUTODIAL, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_AUTODIAL)); - db_set_b(0, SSMODULENAME, SETTING_AUTOHANGUP, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_AUTOHANGUP)); + chkSetDocked.OnChange = Callback(this, &CSSMainOptDlg::onChange_Docked); + chkSetProfile.OnChange = Callback(this, &CSSMainOptDlg::onChange_SetProfile); + chkShowDialog.OnChange = Callback(this, &CSSMainOptDlg::onChange_ShowDialog); + chkSetWinSize.OnChange = Callback(this, &CSSMainOptDlg::onChange_SetWinSize); + chkSetWinState.OnChange = Callback(this, &CSSMainOptDlg::onChange_SetWinState); + chkSetWinLocation.OnChange = Callback(this, &CSSMainOptDlg::onChange_SetWinLocation); + } + + void OnInitDialog() override + { + CheckDlgButton(m_hwnd, IDC_SETPROFILE, db_get_b(0, SSMODULENAME, SETTING_SETPROFILE, 1) ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(m_hwnd, IDC_OVERRIDE, db_get_b(0, SSMODULENAME, SETTING_OVERRIDE, 1) ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(m_hwnd, IDC_SHOWDIALOG, db_get_b(0, SSMODULENAME, SETTING_SHOWDIALOG, 0) ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(m_hwnd, IDC_SETWINSTATE, db_get_b(0, SSMODULENAME, SETTING_SETWINSTATE, 0) ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(m_hwnd, IDC_SETWINLOCATION, db_get_b(0, SSMODULENAME, SETTING_SETWINLOCATION, 0) ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(m_hwnd, IDC_SETDOCKED, db_get_b(0, SSMODULENAME, SETTING_SETDOCKED, 0) ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(m_hwnd, IDC_SETWINSIZE, db_get_b(0, SSMODULENAME, SETTING_SETWINSIZE, 0) ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(m_hwnd, IDC_OFFLINECLOSE, db_get_b(0, SSMODULENAME, SETTING_OFFLINECLOSE, 1) ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(m_hwnd, IDC_AUTODIAL, db_get_b(0, SSMODULENAME, SETTING_AUTODIAL, 0) ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(m_hwnd, IDC_AUTOHANGUP, db_get_b(0, SSMODULENAME, SETTING_AUTOHANGUP, 0) ? BST_CHECKED : BST_UNCHECKED); + SetDlgItemInt(m_hwnd, IDC_SETPROFILEDELAY, db_get_dw(0, SSMODULENAME, SETTING_SETPROFILEDELAY, 500), FALSE); + SetDlgItemInt(m_hwnd, IDC_DLGTIMEOUT, db_get_dw(0, SSMODULENAME, SETTING_DLGTIMEOUT, 5), FALSE); + SetDlgItemInt(m_hwnd, IDC_XPOS, db_get_dw(0, SSMODULENAME, SETTING_XPOS, 0), TRUE); + SetDlgItemInt(m_hwnd, IDC_YPOS, db_get_dw(0, SSMODULENAME, SETTING_YPOS, 0), TRUE); + SetDlgItemInt(m_hwnd, IDC_WIDTH, db_get_dw(0, SSMODULENAME, SETTING_WIDTH, 0), FALSE); + SetDlgItemInt(m_hwnd, IDC_HEIGHT, db_get_dw(0, SSMODULENAME, SETTING_HEIGHT, 0), FALSE); + + int val = db_get_b(0, SSMODULENAME, SETTING_DOCKED, DOCKED_NONE); + int item = SendDlgItemMessage(m_hwnd, IDC_DOCKED, CB_ADDSTRING, 0, (LPARAM)TranslateT("Left")); + SendDlgItemMessage(m_hwnd, IDC_DOCKED, CB_SETITEMDATA, (WPARAM)item, (LPARAM)DOCKED_LEFT); + if (val == DOCKED_LEFT) + SendDlgItemMessage(m_hwnd, IDC_DOCKED, CB_SETCURSEL, (WPARAM)item, 0); + + item = SendDlgItemMessage(m_hwnd, IDC_DOCKED, CB_ADDSTRING, 0, (LPARAM)TranslateT("Right")); + SendDlgItemMessage(m_hwnd, IDC_DOCKED, CB_SETITEMDATA, (WPARAM)item, (LPARAM)DOCKED_RIGHT); + if (val == DOCKED_RIGHT) + SendDlgItemMessage(m_hwnd, IDC_DOCKED, CB_SETCURSEL, (WPARAM)item, 0); + + item = SendDlgItemMessage(m_hwnd, IDC_DOCKED, CB_ADDSTRING, 0, (LPARAM)TranslateT("None")); + SendDlgItemMessage(m_hwnd, IDC_DOCKED, CB_SETITEMDATA, (WPARAM)item, (LPARAM)DOCKED_NONE); + if (val == DOCKED_NONE) + SendDlgItemMessage(m_hwnd, IDC_DOCKED, CB_SETCURSEL, (WPARAM)item, 0); + + onChange_SetProfile(0); + onChange_ShowDialog(0); + onChange_SetWinState(0); + onChange_SetWinLocation(0); + + ReinitProfiles(); + timer.Start(100); + } + + void OnApply() override + { + bool bChecked = chkSetProfile.GetState(); + db_set_b(0, SSMODULENAME, SETTING_SETPROFILE, bChecked); + if (bChecked) + db_set_dw(0, SSMODULENAME, SETTING_SETPROFILEDELAY, GetDlgItemInt(m_hwnd, IDC_SETPROFILEDELAY, nullptr, FALSE)); + + if (bChecked || chkShowDialog.GetState()) + db_set_w(0, SSMODULENAME, SETTING_DEFAULTPROFILE, (WORD)profiles.GetItemData(profiles.GetCurSel())); + + db_set_b(0, SSMODULENAME, SETTING_OVERRIDE, (BYTE)IsDlgButtonChecked(m_hwnd, IDC_OVERRIDE)); + db_set_b(0, SSMODULENAME, SETTING_SHOWDIALOG, bChecked = chkShowDialog.GetState()); + if (bChecked) + db_set_dw(0, SSMODULENAME, SETTING_DLGTIMEOUT, GetDlgItemInt(m_hwnd, IDC_DLGTIMEOUT, nullptr, FALSE)); + + db_set_b(0, SSMODULENAME, SETTING_SETWINSTATE, bChecked = chkSetWinState.GetState()); + if (bChecked) { + int val = (int)SendDlgItemMessage(m_hwnd, IDC_WINSTATE, CB_GETITEMDATA, SendDlgItemMessage(m_hwnd, IDC_WINSTATE, CB_GETCURSEL, 0, 0), 0); + db_set_b(0, SSMODULENAME, SETTING_WINSTATE, (BYTE)val); + } + + db_set_b(0, SSMODULENAME, SETTING_SETDOCKED, bChecked = chkSetDocked.GetState()); + if (bChecked) { + int val = (int)SendDlgItemMessage(m_hwnd, IDC_DOCKED, CB_GETITEMDATA, SendDlgItemMessage(m_hwnd, IDC_DOCKED, CB_GETCURSEL, 0, 0), 0); + db_set_b(0, SSMODULENAME, SETTING_DOCKED, (BYTE)val); + } + + db_set_b(0, SSMODULENAME, SETTING_SETWINLOCATION, bChecked = chkSetWinLocation.GetState()); + if (bChecked) { + db_set_dw(0, SSMODULENAME, SETTING_XPOS, GetDlgItemInt(m_hwnd, IDC_XPOS, nullptr, TRUE)); + db_set_dw(0, SSMODULENAME, SETTING_YPOS, GetDlgItemInt(m_hwnd, IDC_YPOS, nullptr, TRUE)); + } + + db_set_b(0, SSMODULENAME, SETTING_SETWINSIZE, bChecked = chkSetWinSize.GetState()); + if (bChecked) { + db_set_dw(0, SSMODULENAME, SETTING_WIDTH, GetDlgItemInt(m_hwnd, IDC_WIDTH, nullptr, FALSE)); + db_set_dw(0, SSMODULENAME, SETTING_HEIGHT, GetDlgItemInt(m_hwnd, IDC_HEIGHT, nullptr, FALSE)); } - break; + + db_set_b(0, SSMODULENAME, SETTING_OFFLINECLOSE, (BYTE)IsDlgButtonChecked(m_hwnd, IDC_OFFLINECLOSE)); + db_set_b(0, SSMODULENAME, SETTING_AUTODIAL, (BYTE)IsDlgButtonChecked(m_hwnd, IDC_AUTODIAL)); + db_set_b(0, SSMODULENAME, SETTING_AUTOHANGUP, (BYTE)IsDlgButtonChecked(m_hwnd, IDC_AUTOHANGUP)); } - return FALSE; -} + INT_PTR DlgProc(UINT msg, WPARAM wParam, LPARAM lParam) override + { + if (msg == WM_SHOWWINDOW && wParam) + ReinitProfiles(); + + return CDlgBase::DlgProc(msg, wParam, lParam); + } + + void onClick_Show(CCtrlButton*) + { + CCmdlDlg *pDlg = new CCmdlDlg(profiles.GetItemData(profiles.GetCurSel())); + pDlg->Show(); + } + + void onChange_SetProfile(CCtrlCheck*) + { + bool bChecked = chkSetProfile.GetState(); + profiles.Enable(bChecked || chkShowDialog.GetState()); + EnableWindow(GetDlgItem(m_hwnd, IDC_SETPROFILEDELAY), bChecked); + EnableWindow(GetDlgItem(m_hwnd, IDC_OVERRIDE), bChecked); + } + + void onChange_ShowDialog(CCtrlCheck*) + { + bool bChecked = chkShowDialog.GetState(); + profiles.Enable(chkSetProfile.GetState() || bChecked); + EnableWindow(GetDlgItem(m_hwnd, IDC_DLGTIMEOUT), bChecked); + } + + void onChange_SetWinState(CCtrlCheck*) + { + EnableWindow(GetDlgItem(m_hwnd, IDC_WINSTATE), chkSetWinState.GetState()); + } + + void onChange_SetWinLocation(CCtrlCheck*) + { + bool bChecked = chkSetWinLocation.GetState(); + EnableWindow(GetDlgItem(m_hwnd, IDC_XPOS), bChecked); + EnableWindow(GetDlgItem(m_hwnd, IDC_YPOS), bChecked); + } + + void onChange_SetWinSize(CCtrlCheck*) + { + bool bChecked = chkSetWinSize.GetState(); + EnableWindow(GetDlgItem(m_hwnd, IDC_WIDTH), bChecked); + EnableWindow(GetDlgItem(m_hwnd, IDC_HEIGHT), !db_get_b(0, MODULE_CLUI, SETTING_AUTOSIZE, 0) && bChecked); + } + + void onChange_Docked(CCtrlCheck*) + { + EnableWindow(GetDlgItem(m_hwnd, IDC_DOCKED), chkSetDocked.GetState()); + } + + void onTimer(CTimer*) + { + if (chkSetWinLocation.GetState() && chkSetWinSize.GetState()) { + SetDlgItemTextA(m_hwnd, IDC_CURWINSIZE, ""); + SetDlgItemTextA(m_hwnd, IDC_CURWINLOC, ""); + } + else { + wchar_t text[128]; + mir_snwprintf(text, TranslateT("size: %d x %d"), db_get_dw(0, MODULE_CLIST, SETTING_WIDTH, 0), db_get_dw(0, MODULE_CLIST, SETTING_HEIGHT, 0)); + SetDlgItemText(m_hwnd, IDC_CURWINSIZE, text); + + mir_snwprintf(text, TranslateT("loc: %d x %d"), db_get_dw(0, MODULE_CLIST, SETTING_XPOS, 0), db_get_dw(0, MODULE_CLIST, SETTING_YPOS, 0)); + SetDlgItemText(m_hwnd, IDC_CURWINLOC, text); + } + } +}; ///////////////////////////////////////////////////////////////////////////////////////// // new profile dialog -class CAddProfileDlg : public CDlgBase +class CAddProfileDlg : public CSSOptionsBaseDlg { CCtrlEdit edtProfile; CCtrlButton btnOk; public: - CAddProfileDlg() - : CDlgBase(g_plugin, IDD_ADDPROFILE), + CAddProfileDlg() : + CSSOptionsBaseDlg(IDD_ADDPROFILE), btnOk(this, IDOK), edtProfile(this, IDC_PROFILENAME) { @@ -623,13 +658,6 @@ public: lstStatus.OnSelChange = Callback(this, &CSSAdvancedOptDlg::onChange_Status); lstAccount.OnSelChange = Callback(this, &CSSAdvancedOptDlg::onChange_Account); - - m_OnFinishWizard = Callback(this, &CSSAdvancedOptDlg::OnFinishWizard); - } - - void OnFinishWizard(void*) - { - SSLoadMainOptions(); } virtual void OnInitDialog() override @@ -837,7 +865,7 @@ public: edtHotkey.Enable(chkRegHotkey.GetState()); } - virtual INT_PTR DlgProc(UINT msg, WPARAM wParam, LPARAM lParam) override + INT_PTR DlgProc(UINT msg, WPARAM wParam, LPARAM lParam) override { switch (msg) { case UM_ADDPROFILE: @@ -866,13 +894,10 @@ int StartupStatusOptionsInit(WPARAM wparam, LPARAM) odp.flags = ODPF_BOLDGROUPS; odp.szTab.a = LPGEN("General"); - odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_STARTUPSTATUS); - odp.pfnDlgProc = StartupStatusOptDlgProc; + odp.pDialog = new CSSMainOptDlg(); Options_AddPage(wparam, &odp, SSLangPack); odp.szTab.a = LPGEN("Status profiles"); - odp.pszTemplate = nullptr; - odp.pfnDlgProc = nullptr; odp.pDialog = new CSSAdvancedOptDlg(); Options_AddPage(wparam, &odp, SSLangPack); return 0; diff --git a/plugins/StatusManager/src/ss_profiles.cpp b/plugins/StatusManager/src/ss_profiles.cpp index f678db190d..2898136d83 100644 --- a/plugins/StatusManager/src/ss_profiles.cpp +++ b/plugins/StatusManager/src/ss_profiles.cpp @@ -242,7 +242,7 @@ static DWORD CALLBACK MessageWndProc(HWND, UINT msg, WPARAM wParam, LPARAM) return TRUE; } -static int UnregisterHotKeys() +void UnregisterHotKeys() { if (hkInfo != nullptr) { for (int i = 0; i < hkiCount; i++) { @@ -256,12 +256,10 @@ static int UnregisterHotKeys() hkiCount = 0; hkInfo = nullptr; hMessageWindow = nullptr; - - return 0; } // assumes UnregisterHotKeys was called before -static int RegisterHotKeys() +int RegisterHotKeys() { hMessageWindow = CreateWindowEx(0, L"STATIC", nullptr, 0, 0, 0, 0, 0, nullptr, nullptr, nullptr, nullptr); SetWindowLongPtr(hMessageWindow, GWLP_WNDPROC, (LONG_PTR)MessageWndProc); @@ -293,18 +291,6 @@ static int RegisterHotKeys() return 0; } -int SSLoadMainOptions() -{ - if (hTTBModuleLoadedHook) { - RemoveTopToolbarButtons(); - CreateTopToolbarButtons(0, 0); - } - - UnregisterHotKeys(); - RegisterHotKeys(); - return 0; -} - int LoadProfileModule() { CreateServiceFunction(MS_SS_LOADANDSETPROFILE, LoadAndSetProfile); diff --git a/plugins/StatusManager/src/startupstatus.cpp b/plugins/StatusManager/src/startupstatus.cpp index f315ddfc97..6adac7c061 100644 --- a/plugins/StatusManager/src/startupstatus.cpp +++ b/plugins/StatusManager/src/startupstatus.cpp @@ -72,7 +72,7 @@ static int IsValidStatusDesc(char* statusDesc) return 0; } -static void ProcessCommandLineOptions(TProtoSettings& protoSettings) +static void ProcessCommandLineOptions(TProtoSettings &protoSettings) { if (protoSettings.getCount() == 0) return; @@ -183,7 +183,7 @@ static int CSStatusChangeEx(WPARAM wParam, LPARAM) return 0; if (wParam != 0) { - PROTOCOLSETTINGEX** ps = *(PROTOCOLSETTINGEX***)wParam; + PROTOCOLSETTINGEX **ps = *(PROTOCOLSETTINGEX***)wParam; if (ps == nullptr) return -1; diff --git a/plugins/StatusManager/src/startupstatus.h b/plugins/StatusManager/src/startupstatus.h index 5d16d50843..17e606cff6 100644 --- a/plugins/StatusManager/src/startupstatus.h +++ b/plugins/StatusManager/src/startupstatus.h @@ -47,11 +47,7 @@ typedef struct { int profile; } HKINFO; -#define UM_REINITPROFILES WM_USER + 1 #define UM_ADDPROFILE WM_USER + 5 -#define UM_REINITDOCKED WM_USER + 7 -#define UM_REINITWINSTATE WM_USER + 8 -#define UM_REINITWINSIZE WM_USER + 9 #define CLUIINTM_REDRAW (WM_USER+100) @@ -116,8 +112,6 @@ char* OptName(int i, const char *setting); void StartupStatusLoad(); void StartupStatusUnload(); -int SSLoadMainOptions(); - // profile void FillStatus(SMProto &ps, int profile); int GetProfile(int profileID, TProtoSettings &arSettings); @@ -131,6 +125,9 @@ extern HANDLE hTTBModuleLoadedHook; void RemoveTopToolbarButtons(); int CreateTopToolbarButtons(WPARAM wParam, LPARAM lParam); +int RegisterHotKeys(); +void UnregisterHotKeys(); + int LoadProfileModule(); int InitProfileModule(); int DeinitProfilesModule(); diff --git a/plugins/StatusManager/src/version.h b/plugins/StatusManager/src/version.h index d1ad4fa6a4..4c5ff450f9 100644 --- a/plugins/StatusManager/src/version.h +++ b/plugins/StatusManager/src/version.h @@ -2,7 +2,7 @@ #define __MAJOR_VERSION 1 #define __MINOR_VERSION 2 #define __RELEASE_NUM 0 -#define __BUILD_NUM 3 +#define __BUILD_NUM 4 // other stuff for Version resource #include <stdver.h> |