summaryrefslogtreecommitdiff
path: root/plugins/StatusManager/src/StartupStatus
diff options
context:
space:
mode:
authorGeorge Hazan <ghazan@miranda.im>2018-06-19 12:43:27 +0300
committerGeorge Hazan <ghazan@miranda.im>2018-06-19 12:43:27 +0300
commit0fb39531240a0a23e92c0456fe72e26027740696 (patch)
tree8b85028b680b6951f8afa369297adfc93baef79a /plugins/StatusManager/src/StartupStatus
parentaef4307d04fb8d8bbc05921d45d97a63e627fb4d (diff)
StatusManager:
- project structure linearized; - AAA flag "Use same settings wasn't saved across Miranda starts; - perversion with declaring static arrays in commonstatus.h removed
Diffstat (limited to 'plugins/StatusManager/src/StartupStatus')
-rw-r--r--plugins/StatusManager/src/StartupStatus/ss_options.cpp879
-rw-r--r--plugins/StatusManager/src/StartupStatus/ss_profiles.cpp332
-rw-r--r--plugins/StatusManager/src/StartupStatus/ss_toolbars.cpp72
-rw-r--r--plugins/StatusManager/src/StartupStatus/startupstatus.cpp461
-rw-r--r--plugins/StatusManager/src/StartupStatus/startupstatus.h138
5 files changed, 0 insertions, 1882 deletions
diff --git a/plugins/StatusManager/src/StartupStatus/ss_options.cpp b/plugins/StatusManager/src/StartupStatus/ss_options.cpp
deleted file mode 100644
index dd6e877083..0000000000
--- a/plugins/StatusManager/src/StartupStatus/ss_options.cpp
+++ /dev/null
@@ -1,879 +0,0 @@
-/*
- StartupStatus Plugin for Miranda-IM (www.miranda-im.org)
- Copyright 2003-2006 P. Boon
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-*/
-
-#include "..\stdafx.h"
-
-char* OptName(int i, const char* setting)
-{
- static char buf[100];
- mir_snprintf(buf, "%d_%s", i, setting);
- return buf;
-}
-
-/////////////////////////////////////////////////////////////////////////////////////////
-// Command line processing
-
-static char* GetStatusDesc(int status)
-{
- switch (status) {
- case ID_STATUS_AWAY: return "away";
- case ID_STATUS_NA: return "na";
- case ID_STATUS_DND: return "dnd";
- case ID_STATUS_OCCUPIED: return "occupied";
- case ID_STATUS_FREECHAT: return "freechat";
- case ID_STATUS_ONLINE: return "online";
- case ID_STATUS_OFFLINE: return "offline";
- case ID_STATUS_INVISIBLE: return "invisible";
- case ID_STATUS_ONTHEPHONE: return "onthephone";
- case ID_STATUS_OUTTOLUNCH: return "outtolunch";
- case ID_STATUS_LAST: return "last";
- }
- return "offline";
-}
-
-static char* GetCMDLArguments(TProtoSettings& protoSettings)
-{
- if (protoSettings.getCount() == 0)
- return nullptr;
-
- char *cmdl, *pnt;
- pnt = cmdl = (char*)mir_alloc(mir_strlen(protoSettings[0].m_szName) + mir_strlen(GetStatusDesc(protoSettings[0].m_status)) + 4);
-
- for (int i = 0; i < protoSettings.getCount(); i++) {
- *pnt++ = '/';
- mir_strcpy(pnt, protoSettings[i].m_szName);
- pnt += mir_strlen(protoSettings[i].m_szName);
- *pnt++ = '=';
- mir_strcpy(pnt, GetStatusDesc(protoSettings[i].m_status));
- pnt += mir_strlen(GetStatusDesc(protoSettings[i].m_status));
- if (i != protoSettings.getCount() - 1) {
- *pnt++ = ' ';
- *pnt++ = '\0';
- cmdl = (char*)mir_realloc(cmdl, mir_strlen(cmdl) + mir_strlen(protoSettings[i + 1].m_szName) + mir_strlen(GetStatusDesc(protoSettings[i + 1].m_status)) + 4);
- pnt = cmdl + mir_strlen(cmdl);
- }
- }
-
- if (db_get_b(0, SSMODULENAME, SETTING_SHOWDIALOG, FALSE) == TRUE) {
- *pnt++ = ' ';
- *pnt++ = '\0';
- cmdl = (char*)mir_realloc(cmdl, mir_strlen(cmdl) + 12);
- pnt = cmdl + mir_strlen(cmdl);
- mir_strcpy(pnt, "/showdialog");
- pnt += 11;
- *pnt = '\0';
- }
-
- return cmdl;
-}
-
-static char* GetCMDL(TProtoSettings& protoSettings)
-{
- char path[MAX_PATH];
- GetModuleFileNameA(nullptr, path, MAX_PATH);
-
- char* cmdl = (char*)mir_alloc(mir_strlen(path) + 4);
- mir_snprintf(cmdl, mir_strlen(path) + 4, "\"%s\" ", path);
-
- char* args = GetCMDLArguments(protoSettings);
- if (args) {
- cmdl = (char*)mir_realloc(cmdl, mir_strlen(cmdl) + mir_strlen(args) + 1);
- mir_strcat(cmdl, args);
- mir_free(args);
- }
- return cmdl;
-}
-
-/////////////////////////////////////////////////////////////////////////////////////////
-// Link processing
-
-static wchar_t* GetLinkDescription(TProtoSettings& protoSettings)
-{
- if (protoSettings.getCount() == 0)
- return nullptr;
-
- CMStringW result(SHORTCUT_DESC);
- for (auto &p : protoSettings) {
- wchar_t *status;
- if (p->m_status == ID_STATUS_LAST)
- status = TranslateT("<last>");
- else if (p->m_status == ID_STATUS_CURRENT)
- status = TranslateT("<current>");
- else if (p->m_status >= MIN_STATUS && p->m_status <= MAX_STATUS)
- status = Clist_GetStatusModeDescription(p->m_status, 0);
- else
- status = nullptr;
- if (status == nullptr)
- status = TranslateT("<unknown>");
-
- result.AppendChar('\r');
- result.Append(p->m_tszAccName);
- result.AppendChar(':');
- result.AppendChar(' ');
- result.Append(status);
- }
-
- return mir_wstrndup(result, result.GetLength());
-}
-
-class CCmdlDlg : public CDlgBase
-{
- TProtoSettings ps;
-
- CCtrlButton btnLink, btnCopy;
-
-public:
- CCmdlDlg(int iProfileNo)
- : CDlgBase(g_plugin, IDD_CMDLOPTIONS),
- btnCopy(this, IDC_COPY),
- btnLink(this, IDC_SHORTCUT),
- ps(protoList)
- {
- GetProfile(iProfileNo, ps);
- }
-
- void OnInitDialog() override
- {
- char* cmdl = GetCMDL(ps);
- SetDlgItemTextA(m_hwnd, IDC_CMDL, cmdl);
- mir_free(cmdl);
- }
-
- void onClick_Copy(CCtrlButton*)
- {
- if (OpenClipboard(m_hwnd)) {
- EmptyClipboard();
-
- char cmdl[2048];
- GetDlgItemTextA(m_hwnd, IDC_CMDL, cmdl, _countof(cmdl));
- HGLOBAL cmdlGlob = GlobalAlloc(GMEM_MOVEABLE, sizeof(cmdl));
- if (cmdlGlob != nullptr) {
- LPTSTR cmdlStr = (LPTSTR)GlobalLock(cmdlGlob);
- memcpy(cmdlStr, &cmdl, sizeof(cmdl));
- GlobalUnlock(cmdlGlob);
- SetClipboardData(CF_TEXT, cmdlGlob);
- }
- CloseClipboard();
- }
- }
-
- void onClick_Link(CCtrlButton*)
- {
- wchar_t savePath[MAX_PATH];
- if (SHGetSpecialFolderPath(nullptr, savePath, CSIDL_DESKTOPDIRECTORY, FALSE))
- wcsncat_s(savePath, SHORTCUT_FILENAME, _countof(savePath) - mir_wstrlen(savePath));
- else
- mir_snwprintf(savePath, L".\\%s", SHORTCUT_FILENAME);
-
- // Get a pointer to the IShellLink interface.
- IShellLink *psl;
- HRESULT hres = CoCreateInstance(CLSID_ShellLink, nullptr, CLSCTX_INPROC_SERVER, IID_IShellLink, (void**)&psl);
- if (SUCCEEDED(hres)) {
- ptrA args(GetCMDLArguments(ps));
- ptrW desc(GetLinkDescription(ps));
-
- // Set the path to the shortcut target, and add the
- // description.
- wchar_t path[MAX_PATH];
- GetModuleFileName(nullptr, path, _countof(path));
- psl->SetPath(path);
- psl->SetDescription(desc);
- psl->SetArguments(_A2T(args));
-
- // Query IShellLink for the IPersistFile interface for saving the
- // shortcut in persistent storage.
- IPersistFile *ppf;
- hres = psl->QueryInterface(IID_IPersistFile, (void**)&ppf);
-
- if (SUCCEEDED(hres)) {
- // Save the link by calling IPersistFile::Save.
- hres = ppf->Save(savePath, TRUE);
- ppf->Release();
- }
- psl->Release();
- }
- }
-};
-
-static INT_PTR CALLBACK StartupStatusOptDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
-{
- 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);
- }
-
- 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;
-
- 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);
- 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);
- }
- 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);
- }
- 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;
-
- case WM_SHOWWINDOW:
- if (wParam == FALSE)
- break;
-
- 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;
-
- 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));
-
- 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));
- }
- break;
- }
-
- return FALSE;
-}
-
-/////////////////////////////////////////////////////////////////////////////////////////
-// new profile dialog
-
-class CAddProfileDlg : public CDlgBase
-{
- CCtrlEdit edtProfile;
- CCtrlButton btnOk;
-
-public:
- CAddProfileDlg()
- : CDlgBase(g_plugin, IDD_ADDPROFILE),
- btnOk(this, IDOK),
- edtProfile(this, IDC_PROFILENAME)
- {
- edtProfile.OnChange = Callback(this, &CAddProfileDlg::onChange_Edit);
- }
-
- void OnInitDialog() override
- {
- btnOk.Disable();
- }
-
- void OnApply() override
- {
- ptrW profileName(edtProfile.GetText());
- SendMessage(m_hwndParent, UM_ADDPROFILE, 0, (LPARAM)profileName.get());
- }
-
- void OnDestroy() override
- {
- EnableWindow(m_hwndParent, TRUE);
- }
-
- void onChange_Edit(CCtrlEdit*)
- {
- btnOk.Enable(edtProfile.SendMsg(EM_LINELENGTH, 0, 0) > 0);
- }
-};
-
-/////////////////////////////////////////////////////////////////////////////////////////
-// advanced options dialog
-
-static int DeleteSetting(const char *szSetting, void *lParam)
-{
- LIST<char> *p = (LIST<char> *)lParam;
- p->insert(mir_strdup(szSetting));
- return 0;
-}
-
-class CSSAdvancedOptDlg : public CDlgBase
-{
- bool bNeedRebuildMenu;
-
- OBJLIST<PROFILEOPTIONS> arProfiles;
-
- void ReinitProfiles()
- {
- // creates profile combo box according to 'dat'
- cmbProfile.ResetContent();
- for (auto &it : arProfiles)
- cmbProfile.AddString(it->tszName, arProfiles.indexOf(&it));
-
- cmbProfile.SetCurSel(0);
- SetProfile();
- }
-
- void SetProfile()
- {
- int sel = cmbProfile.GetItemData(cmbProfile.GetCurSel());
- chkCreateTTB.SetState(arProfiles[sel].createTtb);
- chkShowDialog.SetState(arProfiles[sel].showDialog);
- chkCreateMMI.SetState(arProfiles[sel].createMmi);
- chkInSubmenu.SetState(arProfiles[sel].inSubMenu);
- chkInSubmenu.Enable(arProfiles[sel].createMmi);
- chkRegHotkey.SetState(arProfiles[sel].regHotkey);
- edtHotkey.SendMsg(HKM_SETHOTKEY, arProfiles[sel].hotKey, 0);
- edtHotkey.Enable(arProfiles[sel].regHotkey);
-
- // fill proto list
- lstAccount.ResetContent();
- for (auto &it : arProfiles[sel].ps)
- lstAccount.AddString(it->m_tszAccName, (LPARAM)it);
- lstAccount.SetCurSel(0);
-
- SetProtocol();
- }
-
- void SetProtocol()
- {
- int idx = lstAccount.GetCurSel();
- if (idx != -1) {
- // fill status box
- SMProto* ps = (SMProto*)lstAccount.GetItemData(idx);
-
- int flags = (CallProtoService(ps->m_szName, PS_GETCAPS, PFLAGNUM_2, 0))&~(CallProtoService(ps->m_szName, PS_GETCAPS, PFLAGNUM_5, 0));
- lstStatus.ResetContent();
- for (int i = 0; i < _countof(statusModeList); i++) {
- if ((flags & statusModePf2List[i]) || (statusModeList[i] == ID_STATUS_OFFLINE)) {
- int item = lstStatus.AddString(Clist_GetStatusModeDescription(statusModeList[i], 0), statusModeList[i]);
- if (ps->m_status == statusModeList[i])
- lstStatus.SetCurSel(item);
- }
- }
-
- int item = lstStatus.AddString(TranslateT("<current>"), ID_STATUS_CURRENT);
- if (ps->m_status == ID_STATUS_CURRENT)
- lstStatus.SetCurSel(item);
-
- item = lstStatus.AddString(TranslateT("<last>"), ID_STATUS_LAST);
- if (ps->m_status == ID_STATUS_LAST)
- lstStatus.SetCurSel(item);
- }
-
- SetStatusMsg();
- }
-
- // set status message
- void SetStatusMsg()
- {
- bool bStatusMsg = false;
- int idx = lstAccount.GetCurSel();
- if (idx != -1) {
- SMProto *ps = (SMProto*)lstAccount.GetItemData(idx);
-
- CheckRadioButton(m_hwnd, IDC_MIRANDAMSG, IDC_CUSTOMMSG, ps->m_szMsg != nullptr ? IDC_CUSTOMMSG : IDC_MIRANDAMSG);
- if (ps->m_szMsg != nullptr)
- edtStatusMsg.SetText(ps->m_szMsg);
-
- bStatusMsg = ((((CallProtoService(ps->m_szName, PS_GETCAPS, PFLAGNUM_1, 0) & PF1_MODEMSGSEND & ~PF1_INDIVMODEMSG)) &&
- (CallProtoService(ps->m_szName, PS_GETCAPS, PFLAGNUM_3, 0) & Proto_Status2Flag(ps->m_status))) || (ps->m_status == ID_STATUS_CURRENT) || (ps->m_status == ID_STATUS_LAST));
- }
- chkMiranda.Enable(bStatusMsg);
- chkCustom.Enable(bStatusMsg);
- btnHelp.Enable(bStatusMsg && chkCustom.GetState());
- edtStatusMsg.Enable(bStatusMsg && chkCustom.GetState());
- }
-
- CCtrlEdit edtStatusMsg, edtHotkey;
- CCtrlCombo cmbProfile;
- CCtrlCheck chkMiranda, chkCustom, chkCreateMMI, chkInSubmenu, chkRegHotkey, chkCreateTTB, chkShowDialog;
- CCtrlButton btnAdd, btnDelete, btnHelp;
- CCtrlListBox lstStatus, lstAccount;
-
-public:
- CSSAdvancedOptDlg() :
- CDlgBase(g_plugin, IDD_OPT_STATUSPROFILES),
- cmbProfile(this, IDC_PROFILE),
- btnAdd(this, IDC_ADDPROFILE),
- btnHelp(this, IDC_VARIABLESHELP),
- btnDelete(this, IDC_DELPROFILE),
- chkCustom(this, IDC_CUSTOMMSG),
- chkMiranda(this, IDC_MIRANDAMSG),
- chkCreateMMI(this, IDC_CREATEMMI),
- chkInSubmenu(this, IDC_INSUBMENU),
- chkRegHotkey(this, IDC_REGHOTKEY),
- chkCreateTTB(this, IDC_CREATETTB),
- chkShowDialog(this, IDC_SHOWDIALOG),
- edtHotkey(this, IDC_HOTKEY),
- edtStatusMsg(this, IDC_STATUSMSG),
- lstStatus(this, IDC_STATUS),
- lstAccount(this, IDC_PROTOCOL),
- arProfiles(5),
- bNeedRebuildMenu(false)
- {
- btnAdd.OnClick = Callback(this, &CSSAdvancedOptDlg::onClick_Add);
- btnHelp.OnClick = Callback(this, &CSSAdvancedOptDlg::onClick_Help);
- btnDelete.OnClick = Callback(this, &CSSAdvancedOptDlg::onClick_Delete);
-
- cmbProfile.OnChange = Callback(this, &CSSAdvancedOptDlg::onChange_Profile);
-
- chkCreateMMI.OnChange = Callback(this, &CSSAdvancedOptDlg::onChange_CreateMMI);
- chkInSubmenu.OnChange = Callback(this, &CSSAdvancedOptDlg::onChange_InSubmenu);
- chkCustom.OnChange = chkMiranda.OnChange = Callback(this, &CSSAdvancedOptDlg::onChange_StatusMsg);
- chkRegHotkey.OnChange = chkCreateTTB.OnChange = chkShowDialog.OnChange = Callback(this, &CSSAdvancedOptDlg::onChange_Option);
-
- edtHotkey.OnChange = Callback(this, &CSSAdvancedOptDlg::onChange_Hotkey);
- edtStatusMsg.OnChange = Callback(this, &CSSAdvancedOptDlg::onChange_EdtStatusMsg);
-
- 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
- {
- chkCreateMMI.SetText(TranslateT("Create a status menu item"));
-
- int defProfile;
- int profileCount = GetProfileCount((WPARAM)&defProfile, 0);
- if (profileCount == 0) {
- profileCount = 1;
- defProfile = 0;
- NotifyChange();
- }
-
- for (int i = 0; i < profileCount; i++) {
- PROFILEOPTIONS *ppo = new PROFILEOPTIONS;
- TProtoSettings &ar = ppo->ps;
-
- if (GetProfile(i, ar) == -1) {
- /* create an empty profile */
- if (i == defProfile)
- ppo->tszName = mir_wstrdup(TranslateT("default"));
- else
- ppo->tszName = mir_wstrdup(TranslateT("unknown"));
- }
- else {
- ppo->tszName = db_get_wsa(0, SSMODULENAME, OptName(i, SETTING_PROFILENAME));
- if (ppo->tszName == nullptr) {
- if (i == defProfile)
- ppo->tszName = mir_wstrdup(TranslateT("default"));
- else
- ppo->tszName = mir_wstrdup(TranslateT("unknown"));
- }
- ppo->createTtb = db_get_b(0, SSMODULENAME, OptName(i, SETTING_CREATETTBBUTTON), 0);
- ppo->showDialog = db_get_b(0, SSMODULENAME, OptName(i, SETTING_SHOWCONFIRMDIALOG), 0);
- ppo->createMmi = db_get_b(0, SSMODULENAME, OptName(i, SETTING_CREATEMMITEM), 0);
- ppo->inSubMenu = db_get_b(0, SSMODULENAME, OptName(i, SETTING_INSUBMENU), 1);
- ppo->regHotkey = db_get_b(0, SSMODULENAME, OptName(i, SETTING_REGHOTKEY), 0);
- ppo->hotKey = db_get_w(0, SSMODULENAME, OptName(i, SETTING_HOTKEY), MAKEWORD((char)('0' + i), HOTKEYF_CONTROL | HOTKEYF_SHIFT));
- }
- arProfiles.insert(ppo);
- }
- if (hTTBModuleLoadedHook == nullptr)
- chkCreateTTB.Disable();
-
- ReinitProfiles();
- ShowWindow(GetDlgItem(m_hwnd, IDC_VARIABLESHELP), ServiceExists(MS_VARS_SHOWHELPEX) ? SW_SHOW : SW_HIDE);
- }
-
- virtual void OnApply() override
- {
- int oldCount = db_get_w(0, SSMODULENAME, SETTING_PROFILECOUNT, 0);
- for (int i = 0; i < oldCount; i++) {
- LIST<char> arSettings(10);
- db_enum_settings(0, DeleteSetting, SSMODULENAME, &arSettings);
-
- char setting[128];
- int len = mir_snprintf(setting, "%d_", i);
- for (auto &it : arSettings) {
- if (!strncmp(setting, it, len))
- db_unset(0, SSMODULENAME, it);
- mir_free(it);
- }
- }
-
- for (auto &it : arProfiles) {
- int i = arProfiles.indexOf(&it);
- db_set_b(0, SSMODULENAME, OptName(i, SETTING_SHOWCONFIRMDIALOG), it->showDialog);
- db_set_b(0, SSMODULENAME, OptName(i, SETTING_CREATETTBBUTTON), it->createTtb);
- db_set_b(0, SSMODULENAME, OptName(i, SETTING_CREATEMMITEM), it->createMmi);
- db_set_b(0, SSMODULENAME, OptName(i, SETTING_INSUBMENU), it->inSubMenu);
- db_set_b(0, SSMODULENAME, OptName(i, SETTING_REGHOTKEY), it->regHotkey);
- db_set_w(0, SSMODULENAME, OptName(i, SETTING_HOTKEY), it->hotKey);
- db_set_ws(0, SSMODULENAME, OptName(i, SETTING_PROFILENAME), it->tszName);
-
- for (auto jt : it->ps) {
- if (jt->m_szMsg != nullptr) {
- char setting[128];
- mir_snprintf(setting, "%s_%s", jt->m_szName, SETTING_PROFILE_STSMSG);
- db_set_ws(0, SSMODULENAME, OptName(i, setting), jt->m_szMsg);
- }
- db_set_w(0, SSMODULENAME, OptName(i, jt->m_szName), jt->m_status);
- }
- }
- db_set_w(0, SSMODULENAME, SETTING_PROFILECOUNT, (WORD)arProfiles.getCount());
-
- // Rebuild status menu
- if (bNeedRebuildMenu)
- Menu_ReloadProtoMenus();
- }
-
- // add a profile
- void onClick_Add(CCtrlButton*)
- {
- CAddProfileDlg *pDlg = new CAddProfileDlg();
- pDlg->SetParent(m_hwnd);
- pDlg->Show();
- EnableWindow(m_hwnd, FALSE);
- }
-
- void onClick_Delete(CCtrlButton*)
- {
- // wparam == profile no
- int sel = cmbProfile.GetItemData(cmbProfile.GetCurSel());
- if (arProfiles.getCount() == 1) {
- MessageBox(nullptr, TranslateT("At least one profile must exist"), TranslateT("Status manager"), MB_OK);
- return;
- }
-
- arProfiles.remove(sel);
-
- int defProfile;
- GetProfileCount((WPARAM)&defProfile, 0);
- if (sel == defProfile) {
- MessageBox(nullptr, TranslateT("Your default profile will be changed"), TranslateT("Status manager"), MB_OK);
- db_set_w(0, SSMODULENAME, SETTING_DEFAULTPROFILE, 0);
- }
- ReinitProfiles();;
- }
-
- void onClick_Help(CCtrlButton*)
- {
- variables_showhelp(m_hwnd, IDC_STATUSMSG, VHF_INPUT | VHF_EXTRATEXT | VHF_HELP | VHF_FULLFILLSTRUCT | VHF_HIDESUBJECTTOKEN, nullptr, "Protocol ID");
- }
-
- void onChange_Status(CCtrlListBox*)
- {
- int idx = lstAccount.GetCurSel();
- if (idx != -1) {
- SMProto* ps = (SMProto*)lstAccount.GetItemData(idx);
- ps->m_status = lstStatus.GetItemData(lstStatus.GetCurSel());
- NotifyChange();
- }
- SetStatusMsg();
- }
-
- void onChange_Account(CCtrlListBox*)
- {
- SetProtocol();
- }
-
- void onChange_Profile(CCtrlCombo*)
- {
- SetProfile();
- }
-
- void onChange_StatusMsg(CCtrlCheck*)
- {
- int len;
- SMProto* ps = (SMProto*)lstAccount.GetItemData(lstAccount.GetCurSel());
- if (ps->m_szMsg != nullptr)
- mir_free(ps->m_szMsg);
-
- ps->m_szMsg = nullptr;
- if (chkCustom.GetState()) {
- len = edtStatusMsg.SendMsg(WM_GETTEXTLENGTH, 0, 0);
- ps->m_szMsg = (wchar_t*)mir_calloc(sizeof(wchar_t) * (len + 1));
- GetDlgItemText(m_hwnd, IDC_STATUSMSG, ps->m_szMsg, (len + 1));
- }
- SetStatusMsg();
- }
-
- void onChange_Hotkey(CCtrlEdit*)
- {
- int sel = cmbProfile.GetItemData(cmbProfile.GetCurSel());
- arProfiles[sel].hotKey = edtHotkey.SendMsg(HKM_GETHOTKEY, 0, 0);
- }
-
- void onChange_EdtStatusMsg(CCtrlEdit*)
- {
- // update the status message in memory, this is done on each character tick, not nice
- // but it works
- SMProto* ps = (SMProto*)lstAccount.GetItemData(lstAccount.GetCurSel());
- if (ps->m_szMsg != nullptr) {
- if (*ps->m_szMsg)
- mir_free(ps->m_szMsg);
- ps->m_szMsg = nullptr;
- }
- int len = edtStatusMsg.SendMsg(WM_GETTEXTLENGTH, 0, 0);
- ps->m_szMsg = (wchar_t*)mir_calloc(sizeof(wchar_t) * (len + 1));
- GetDlgItemText(m_hwnd, IDC_STATUSMSG, ps->m_szMsg, (len + 1));
- }
-
- void onChange_CreateMMI(CCtrlCheck*)
- {
- chkInSubmenu.Enable(chkCreateMMI.GetState());
- onChange_InSubmenu(nullptr);
- }
-
- void onChange_InSubmenu(CCtrlCheck*)
- {
- bNeedRebuildMenu = TRUE;
- onChange_Option(nullptr);
- }
-
- void onChange_Option(CCtrlCheck*)
- {
- int sel = cmbProfile.GetItemData(cmbProfile.GetCurSel());
- PROFILEOPTIONS &po = arProfiles[sel];
- po.createMmi = chkCreateMMI.GetState();
- po.inSubMenu = chkInSubmenu.GetState();
- po.createTtb = chkCreateTTB.GetState();
- po.regHotkey = chkRegHotkey.GetState();
- po.showDialog = chkShowDialog.GetState();
- edtHotkey.Enable(chkRegHotkey.GetState());
- }
-
- virtual INT_PTR DlgProc(UINT msg, WPARAM wParam, LPARAM lParam) override
- {
- switch (msg) {
- case UM_ADDPROFILE:
- wchar_t *tszName = (wchar_t*)lParam;
- if (tszName == nullptr)
- break;
-
- PROFILEOPTIONS* ppo = new PROFILEOPTIONS;
- ppo->tszName = mir_wstrdup(tszName);
- arProfiles.insert(ppo);
-
- ReinitProfiles();
- break;
- }
-
- return CDlgBase::DlgProc(msg, wParam, lParam);
- }
-};
-
-int StartupStatusOptionsInit(WPARAM wparam, LPARAM)
-{
- OPTIONSDIALOGPAGE odp = {};
- odp.hInstance = g_plugin.getInst();
- odp.szGroup.a = LPGEN("Status");
- odp.szTitle.a = LPGEN("Startup status");
- odp.flags = ODPF_BOLDGROUPS;
-
- odp.szTab.a = LPGEN("General");
- odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_STARTUPSTATUS);
- odp.pfnDlgProc = StartupStatusOptDlgProc;
- 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/StartupStatus/ss_profiles.cpp b/plugins/StatusManager/src/StartupStatus/ss_profiles.cpp
deleted file mode 100644
index c0345e7441..0000000000
--- a/plugins/StatusManager/src/StartupStatus/ss_profiles.cpp
+++ /dev/null
@@ -1,332 +0,0 @@
-/*
- StartupStatus Plugin for Miranda-IM (www.miranda-im.org)
- Copyright 2003-2006 P. Boon
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-*/
-
-#include "..\stdafx.h"
-
-#define MAX_MMITEMS 6
-
-struct PROFILECE
-{
- int profile;
- ptrA szProto;
- ptrW msg;
-};
-
-static OBJLIST<PROFILECE> arProfiles(1);
-
-extern int protoCount;
-
-static int menuprofiles[MAX_MMITEMS];
-static int mcount = 0;
-
-static UINT_PTR releaseTtbTimerId = 0;
-
-static HANDLE hTBModuleLoadedHook;
-static HANDLE hMessageHook = nullptr;
-
-static HWND hMessageWindow = nullptr;
-static HKINFO *hkInfo = nullptr;
-static int hkiCount = 0;
-
-static HANDLE* ttbButtons = nullptr;
-static int ttbButtonCount = 0;
-
-HANDLE hTTBModuleLoadedHook;
-
-static INT_PTR profileService(WPARAM, LPARAM, LPARAM param)
-{
- LoadAndSetProfile((WPARAM)menuprofiles[param], 0);
- return 0;
-}
-
-static int CreateMainMenuItems(WPARAM, LPARAM)
-{
- CMenuItem mi(g_plugin);
- mi.position = 2000100000;
- mi.flags = CMIF_UNICODE;
- mcount = 0;
- int count = GetProfileCount(0, 0);
- for (int i = 0; i < count && mcount < MAX_MMITEMS; i++) {
- wchar_t profilename[128];
- if (!db_get_b(0, SSMODULENAME, OptName(i, SETTING_CREATEMMITEM), 0) || GetProfileName(i, (LPARAM)profilename))
- continue;
-
- if (db_get_b(0, SSMODULENAME, OptName(i, SETTING_INSUBMENU), 1) && !mi.root) {
- mi.root = g_plugin.addRootMenu(MO_STATUS, LPGENW("Status profiles"), 2000100000);
- Menu_ConfigureItem(mi.root, MCI_OPT_UID, "1AB30D51-BABA-4B27-9288-1A12278BAD8D");
- }
-
- char servicename[128];
- mir_snprintf(servicename, "%s%d", MS_SS_MENUSETPROFILEPREFIX, mcount);
- CreateServiceFunctionParam(servicename, profileService, mcount);
-
- mi.name.w = profilename;
- mi.position = 2000100000 + mcount;
- mi.pszService = servicename;
- if (Menu_AddStatusMenuItem(&mi))
- menuprofiles[mcount++] = i;
- }
-
- return 0;
-}
-
-/////////////////////////////////////////////////////////////////////////////////////////
-
-INT_PTR GetProfileName(WPARAM wParam, LPARAM lParam)
-{
- int profile = (int)wParam;
- if (profile < 0) // get default profile
- profile = db_get_w(0, SSMODULENAME, SETTING_DEFAULTPROFILE, 0);
-
- int count = db_get_w(0, SSMODULENAME, SETTING_PROFILECOUNT, 0);
- if (profile >= count && count > 0)
- return -1;
-
- wchar_t* buf = (wchar_t*)lParam;
- if (count == 0) {
- wcsncpy(buf, TranslateT("default"), 128 - 1);
- return 0;
- }
-
- DBVARIANT dbv;
- char setting[80];
- mir_snprintf(setting, "%d_%s", profile, SETTING_PROFILENAME);
- if (db_get_ws(0, SSMODULENAME, setting, &dbv))
- return -1;
-
- wcsncpy(buf, dbv.ptszVal, 128 - 1); buf[127] = 0;
- db_free(&dbv);
- return 0;
-}
-
-INT_PTR GetProfileCount(WPARAM wParam, LPARAM)
-{
- int *def = (int*)wParam;
- int count = db_get_w(0, SSMODULENAME, SETTING_PROFILECOUNT, 0);
- if (def != nullptr) {
- *def = db_get_w(0, SSMODULENAME, SETTING_DEFAULTPROFILE, 0);
- if (*def >= count)
- *def = 0;
- }
-
- return count;
-}
-
-wchar_t* GetStatusMessage(int profile, const char *szProto)
-{
- char dbSetting[80];
- mir_snprintf(dbSetting, "%d_%s_%s", profile, szProto, SETTING_PROFILE_STSMSG);
-
- for (auto &p : arProfiles) {
- if (p->profile == profile && !mir_strcmp(p->szProto, szProto)) {
- p->msg = db_get_wsa(0, SSMODULENAME, dbSetting);
- return p->msg;
- }
- }
-
- PROFILECE *pce = new PROFILECE;
- pce->profile = profile;
- pce->szProto = mir_strdup(szProto);
- pce->msg = db_get_wsa(0, SSMODULENAME, dbSetting);
- arProfiles.insert(pce);
-
- return pce->msg;
-}
-
-void FillStatus(SMProto &ps, int profile)
-{
- // load status
- char setting[80];
- mir_snprintf(setting, "%d_%s", profile, ps.m_szName);
- int iStatus = db_get_w(0, SSMODULENAME, setting, 0);
- if (iStatus < MIN_STATUS || iStatus > MAX_STATUS)
- iStatus = DEFAULT_STATUS;
- ps.m_status = iStatus;
-
- // load last status
- mir_snprintf(setting, "%s%s", PREFIX_LAST, ps.m_szName);
- iStatus = db_get_w(0, SSMODULENAME, setting, 0);
- if (iStatus < MIN_STATUS || iStatus > MAX_STATUS)
- iStatus = DEFAULT_STATUS;
- ps.m_lastStatus = iStatus;
-
- ps.m_szMsg = GetStatusMessage(profile, ps.m_szName);
- if (ps.m_szMsg)
- ps.m_szMsg = mir_wstrdup(ps.m_szMsg);
-}
-
-int GetProfile(int profile, TProtoSettings &arSettings)
-{
- if (profile < 0) // get default profile
- profile = db_get_w(0, SSMODULENAME, SETTING_DEFAULTPROFILE, 0);
-
- int count = db_get_w(0, SSMODULENAME, SETTING_PROFILECOUNT, 0);
- if (profile >= count && count > 0)
- return -1;
-
- for (auto &it : arSettings)
- FillStatus(*it, profile);
-
- return (arSettings.getCount() == 0) ? -1 : 0;
-}
-
-static void CALLBACK releaseTtbTimerFunction(HWND, UINT, UINT_PTR, DWORD)
-{
- KillTimer(nullptr, releaseTtbTimerId);
- for (int i = 0; i < ttbButtonCount; i++)
- CallService(MS_TTB_SETBUTTONSTATE, (WPARAM)ttbButtons[i], 0);
-}
-
-INT_PTR LoadAndSetProfile(WPARAM iProfileNo, LPARAM)
-{
- // wParam == profile no.
- int profile = (int)iProfileNo;
- TProtoSettings ps(protoList);
- if (!GetProfile(profile, ps)) {
- profile = (profile >= 0) ? profile : db_get_w(0, SSMODULENAME, SETTING_DEFAULTPROFILE, 0);
-
- char setting[64];
- mir_snprintf(setting, "%d_%s", profile, SETTING_SHOWCONFIRMDIALOG);
- if (!db_get_b(0, SSMODULENAME, setting, 0))
- SetStatusEx(ps);
- else
- ShowConfirmDialogEx(&ps, db_get_dw(0, SSMODULENAME, SETTING_DLGTIMEOUT, 5));
- }
-
- // add timer here
- if (hTTBModuleLoadedHook)
- releaseTtbTimerId = SetTimer(nullptr, 0, 100, releaseTtbTimerFunction);
-
- return 0;
-}
-
-static UINT GetFsModifiers(WORD wHotKey)
-{
- UINT fsm = 0;
- if (HIBYTE(wHotKey)&HOTKEYF_ALT)
- fsm |= MOD_ALT;
- if (HIBYTE(wHotKey)&HOTKEYF_CONTROL)
- fsm |= MOD_CONTROL;
- if (HIBYTE(wHotKey)&HOTKEYF_SHIFT)
- fsm |= MOD_SHIFT;
- if (HIBYTE(wHotKey)&HOTKEYF_EXT)
- fsm |= MOD_WIN;
-
- return fsm;
-}
-
-static DWORD CALLBACK MessageWndProc(HWND, UINT msg, WPARAM wParam, LPARAM)
-{
- if (msg == WM_HOTKEY) {
- for (int i = 0; i < hkiCount; i++)
- if ((int)hkInfo[i].id == wParam)
- LoadAndSetProfile((WPARAM)hkInfo[i].profile, 0);
- }
-
- return TRUE;
-}
-
-static int UnregisterHotKeys()
-{
- if (hkInfo != nullptr) {
- for (int i = 0; i < hkiCount; i++) {
- UnregisterHotKey(hMessageWindow, (int)hkInfo[i].id);
- GlobalDeleteAtom(hkInfo[i].id);
- }
- mir_free(hkInfo);
- }
- DestroyWindow(hMessageWindow);
-
- hkiCount = 0;
- hkInfo = nullptr;
- hMessageWindow = nullptr;
-
- return 0;
-}
-
-// assumes UnregisterHotKeys was called before
-static int RegisterHotKeys()
-{
- hMessageWindow = CreateWindowEx(0, L"STATIC", nullptr, 0, 0, 0, 0, 0, nullptr, nullptr, nullptr, nullptr);
- SetWindowLongPtr(hMessageWindow, GWLP_WNDPROC, (LONG_PTR)MessageWndProc);
-
- int count = GetProfileCount(0, 0);
- for (int i = 0; i < count; i++) {
- if (!db_get_b(0, SSMODULENAME, OptName(i, SETTING_REGHOTKEY), 0))
- continue;
-
- WORD wHotKey = db_get_w(0, SSMODULENAME, OptName(i, SETTING_HOTKEY), 0);
- hkInfo = (HKINFO*)mir_realloc(hkInfo, (hkiCount + 1)*sizeof(HKINFO));
- if (hkInfo == nullptr)
- return -1;
-
- char atomname[255];
- mir_snprintf(atomname, "StatusProfile_%d", i);
- hkInfo[hkiCount].id = GlobalAddAtomA(atomname);
- if (hkInfo[hkiCount].id == 0)
- continue;
-
- hkInfo[hkiCount].profile = i;
- hkiCount++;
- RegisterHotKey(hMessageWindow, (int)hkInfo[hkiCount - 1].id, GetFsModifiers(wHotKey), LOBYTE(wHotKey));
- }
-
- if (hkiCount == 0)
- UnregisterHotKeys();
-
- return 0;
-}
-
-int SSLoadMainOptions()
-{
- if (hTTBModuleLoadedHook) {
- RemoveTopToolbarButtons();
- CreateTopToolbarButtons(0, 0);
- }
-
- UnregisterHotKeys();
- RegisterHotKeys();
- return 0;
-}
-
-int LoadProfileModule()
-{
- CreateServiceFunction(MS_SS_LOADANDSETPROFILE, LoadAndSetProfile);
- return 0;
-}
-
-int InitProfileModule()
-{
- hTTBModuleLoadedHook = HookEvent(ME_TTB_MODULELOADED, CreateTopToolbarButtons);
-
- HookEvent(ME_CLIST_PREBUILDSTATUSMENU, CreateMainMenuItems);
-
- CreateMainMenuItems(0, 0);
- RegisterHotKeys();
- return 0;
-}
-
-int DeinitProfilesModule()
-{
- arProfiles.destroy();
-
- UnregisterHotKeys();
- RemoveTopToolbarButtons();
- return 0;
-}
diff --git a/plugins/StatusManager/src/StartupStatus/ss_toolbars.cpp b/plugins/StatusManager/src/StartupStatus/ss_toolbars.cpp
deleted file mode 100644
index af1091a023..0000000000
--- a/plugins/StatusManager/src/StartupStatus/ss_toolbars.cpp
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- StartupStatus Plugin for Miranda-IM (www.miranda-im.org)
- Copyright 2003-2006 P. Boon
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-*/
-
-#include "..\stdafx.h"
-
-#define MAX_MMITEMS 6
-
-static LIST<void> ttbButtons(1);
-
-static IconItem iconList[] =
-{
- { LPGEN("Pressed toolbar icon"), "StartupStatus/TtbDown", IDI_TTBDOWN },
- { LPGEN("Released toolbar icon"), "StartupStatus/TtbUp", IDI_TTBUP },
-};
-
-/////////////////////////////////////////////////////////////////////////////////////////
-
-void RemoveTopToolbarButtons()
-{
- for (auto &it : ttbButtons.rev_iter())
- CallService(MS_TTB_REMOVEBUTTON, (WPARAM)it, 0);
- ttbButtons.destroy();
-}
-
-int CreateTopToolbarButtons(WPARAM, LPARAM)
-{
- if (iconList[0].hIcolib == nullptr)
- g_plugin.registerIcon("Toolbar/StartupStatus", iconList);
-
- int profileCount = CallService(MS_SS_GETPROFILECOUNT, 0, 0);
-
- TTBButton ttb = {};
- ttb.dwFlags = TTBBF_VISIBLE | TTBBF_SHOWTOOLTIP;
- ttb.pszService = MS_SS_LOADANDSETPROFILE;
- for (int i = 0; i < profileCount; i++) {
- char setting[80];
- mir_snprintf(setting, "%d_%s", i, SETTING_CREATETTBBUTTON);
- if (!db_get_b(0, SSMODULENAME, setting, FALSE))
- continue;
-
- DBVARIANT dbv;
- mir_snprintf(setting, "%d_%s", i, SETTING_PROFILENAME);
- if (db_get(0, SSMODULENAME, setting, &dbv))
- continue;
-
- ttb.hIconHandleDn = iconList[0].hIcolib;
- ttb.hIconHandleUp = iconList[1].hIcolib;
- ttb.wParamDown = ttb.wParamUp = i;
- ttb.name = ttb.pszTooltipUp = dbv.pszVal;
- HANDLE ttbAddResult = g_plugin.addTTB(&ttb);
- if (ttbAddResult)
- ttbButtons.insert(ttbAddResult);
- db_free(&dbv);
- }
- return 0;
-}
diff --git a/plugins/StatusManager/src/StartupStatus/startupstatus.cpp b/plugins/StatusManager/src/StartupStatus/startupstatus.cpp
deleted file mode 100644
index 4f3a487bb2..0000000000
--- a/plugins/StatusManager/src/StartupStatus/startupstatus.cpp
+++ /dev/null
@@ -1,461 +0,0 @@
-/*
- StartupStatus Plugin for Miranda-IM (www.miranda-im.org)
- Copyright 2003-2006 P. Boon
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-*/
-
-#include "..\stdafx.h"
-
-int SSLangPack;
-
-static HANDLE hServices[3], hEvents[3];
-static UINT_PTR setStatusTimerId = 0;
-
-/////////////////////////////////////////////////////////////////////////////////////////
-
-static HANDLE hProtoAckHook, hCSStatusChangeHook, hStatusChangeHook;
-
-static HWND hMessageWindow;
-
-static BYTE showDialogOnStartup = 0;
-
-/////////////////////////////////////////////////////////////////////////////////////////
-// command line options
-
-static PROTOCOLSETTINGEX* IsValidProtocol(TProtoSettings &protoSettings, const char *protoName)
-{
- for (auto &it : protoSettings)
- if (!it->ssDisabled && !strncmp(it->m_szName, protoName, mir_strlen(it->m_szName)))
- return it;
-
- return nullptr;
-}
-
-static int IsValidStatusDesc(char* statusDesc)
-{
- if (!strncmp("away", statusDesc, 4))
- return ID_STATUS_AWAY;
- if (!strncmp("na", statusDesc, 2))
- return ID_STATUS_NA;
- if (!strncmp("dnd", statusDesc, 3))
- return ID_STATUS_DND;
- if (!strncmp("occupied", statusDesc, 8))
- return ID_STATUS_OCCUPIED;
- if (!strncmp("freechat", statusDesc, 8))
- return ID_STATUS_FREECHAT;
- if (!strncmp("online", statusDesc, 6))
- return ID_STATUS_ONLINE;
- if (!strncmp("offline", statusDesc, 7))
- return ID_STATUS_OFFLINE;
- if (!strncmp("invisible", statusDesc, 9))
- return ID_STATUS_INVISIBLE;
- if (!strncmp("onthephone", statusDesc, 10))
- return ID_STATUS_ONTHEPHONE;
- if (!strncmp("outtolunch", statusDesc, 10))
- return ID_STATUS_OUTTOLUNCH;
- if (!strncmp("last", statusDesc, 4))
- return ID_STATUS_LAST;
-
- return 0;
-}
-
-static void ProcessCommandLineOptions(TProtoSettings& protoSettings)
-{
- if (protoSettings.getCount() == 0)
- return;
-
- char *cmdl = GetCommandLineA();
- while (*cmdl != '\0') {
- while (*cmdl != '/') {
- if (*cmdl == '\0')
- return;
-
- cmdl++;
- }
- if (*cmdl == '\0')
- return;
-
- cmdl++;
- if (!strncmp(cmdl, "showdialog", 10)) {
- showDialogOnStartup = TRUE;
- continue;
- }
- char *protoName = cmdl; // first protocol ?
- PROTOCOLSETTINGEX* protoSetting = IsValidProtocol(protoSettings, protoName);
- if (protoSetting != nullptr) {
- while (*cmdl != '=') {
- if (*cmdl == '\0')
- return;
-
- cmdl++; // skip to status
- }
-
- if (*cmdl == '\0')
- return;
-
- cmdl++;
- char *statusDesc = cmdl;
- int status = IsValidStatusDesc(statusDesc);
- if (status != 0)
- protoSetting->m_status = status;
- }
- }
-}
-
-static void SetLastStatusMessages(TProtoSettings &ps)
-{
- for (auto &it : ps) {
- if (it->m_status != ID_STATUS_LAST)
- continue;
-
- char dbSetting[128];
- mir_snprintf(dbSetting, "%s%s", PREFIX_LASTMSG, it->m_szName);
- it->m_szMsg = db_get_wsa(0, SSMODULENAME, dbSetting);
- }
-}
-
-/////////////////////////////////////////////////////////////////////////////////////////
-// Account control event
-
-// 'allow override'
-static int ProcessProtoAck(WPARAM, LPARAM lParam)
-{
- // 'something' made a status change
- ACKDATA *ack = (ACKDATA*)lParam;
- if (ack->type != ACKTYPE_STATUS && ack->result != ACKRESULT_FAILED)
- return 0;
-
- if (!db_get_b(0, SSMODULENAME, SETTING_OVERRIDE, 1) || protoList.getCount() == 0)
- return 0;
-
- for (auto &it : protoList) {
- if (!mir_strcmp(ack->szModule, it->m_szName)) {
- it->ssDisabled = true;
- log_debugA("StartupStatus: %s overridden by ME_PROTO_ACK, status will not be set", ack->szModule);
- }
- }
-
- return 0;
-}
-
-static int StatusChange(WPARAM, LPARAM lParam)
-{
- // change by menu
- if (!db_get_b(0, SSMODULENAME, SETTING_OVERRIDE, 1) || protoList.getCount() == 0)
- return 0;
-
- char *szProto = (char *)lParam;
- if (szProto == nullptr) { // global status change
- for (auto &it : protoList) {
- it->ssDisabled = true;
- log_debugA("StartupStatus: all protos overridden by ME_CLIST_STATUSMODECHANGE, status will not be set");
- }
- }
- else {
- for (auto &it : protoList) {
- if (!mir_strcmp(it->m_szName, szProto)) {
- it->ssDisabled = true;
- log_debugA("StartupStatus: %s overridden by ME_CLIST_STATUSMODECHANGE, status will not be set", szProto);
- }
- }
- }
-
- return 0;
-}
-
-static int CSStatusChangeEx(WPARAM wParam, LPARAM)
-{
- // another status plugin made the change
- if (!db_get_b(0, SSMODULENAME, SETTING_OVERRIDE, 1) || protoList.getCount() == 0)
- return 0;
-
- if (wParam != 0) {
- PROTOCOLSETTINGEX** ps = *(PROTOCOLSETTINGEX***)wParam;
- if (ps == nullptr)
- return -1;
-
- for (int i = 0; i < protoList.getCount(); i++) {
- for (auto &it : protoList) {
- if (ps[i]->m_szName == nullptr || it->m_szName == nullptr)
- continue;
-
- if (!mir_strcmp(ps[i]->m_szName, it->m_szName)) {
- log_debugA("StartupStatus: %s overridden by MS_CS_SETSTATUSEX, status will not be set", ps[i]->m_szName);
- it->ssDisabled = true;
- }
- }
- }
- }
-
- return 0;
-}
-
-static void CALLBACK SetStatusTimed(HWND, UINT, UINT_PTR, DWORD)
-{
- KillTimer(nullptr, setStatusTimerId);
- UnhookEvent(hProtoAckHook);
- UnhookEvent(hCSStatusChangeHook);
- UnhookEvent(hStatusChangeHook);
-
- TProtoSettings ps(protoList);
- for (auto &it : ps)
- if (it->ssDisabled)
- it->m_status = ID_STATUS_DISABLED;
-
- SetStatusEx(ps);
-}
-
-static int OnOkToExit(WPARAM, LPARAM)
-{
- // save last protocolstatus
- for (auto &pa : Accounts()) {
- if (!IsSuitableProto(pa))
- continue;
-
- if (!Proto_GetAccount(pa->szModuleName))
- continue;
-
- char lastName[128], lastMsg[128];
- mir_snprintf(lastName, "%s%s", PREFIX_LAST, pa->szModuleName);
- db_set_w(0, SSMODULENAME, lastName, pa->iRealStatus);
- mir_snprintf(lastMsg, "%s%s", PREFIX_LASTMSG, pa->szModuleName);
- db_unset(0, SSMODULENAME, lastMsg);
-
- if (!(CallProtoService(pa->szModuleName, PS_GETCAPS, PFLAGNUM_1, 0) & PF1_MODEMSGSEND & ~PF1_INDIVMODEMSG))
- continue;
-
- if (!(CallProtoService(pa->szModuleName, PS_GETCAPS, PFLAGNUM_3, 0) & Proto_Status2Flag(pa->iRealStatus)))
- continue;
-
- // NewAwaySys
- if (ServiceExists(MS_NAS_GETSTATE)) {
- NAS_PROTOINFO npi = { sizeof(npi) };
- npi.szProto = pa->szModuleName;
- CallService(MS_NAS_GETSTATE, (WPARAM)&npi, 1);
- if (npi.szMsg == nullptr) {
- npi.status = 0;
- npi.szProto = nullptr;
- CallService(MS_NAS_GETSTATE, (WPARAM)&npi, 1);
- }
- if (npi.szMsg != nullptr) {
- db_set_ws(0, SSMODULENAME, lastMsg, npi.tszMsg);
- mir_free(npi.tszMsg);
- }
- }
- }
-
- if (db_get_b(0, SSMODULENAME, SETTING_SETPROFILE, 1) || db_get_b(0, SSMODULENAME, SETTING_OFFLINECLOSE, 0))
- Clist_SetStatusMode(ID_STATUS_OFFLINE);
-
- return 0;
-}
-
-static int OnShutdown(WPARAM, LPARAM)
-{
- // set windowstate and docked for next startup
- if (db_get_b(0, SSMODULENAME, SETTING_SETWINSTATE, 0)) {
- int state = db_get_b(0, SSMODULENAME, SETTING_WINSTATE, SETTING_STATE_NORMAL);
- HWND hClist = g_clistApi.hwndContactList;
- BOOL isHidden = !IsWindowVisible(hClist);
- switch (state) {
- case SETTING_STATE_HIDDEN:
- // try to use services where possible
- if (!isHidden)
- g_clistApi.pfnShowHide();
- break;
-
- case SETTING_STATE_MINIMIZED:
- if (!db_get_b(0, MODULE_CLIST, SETTING_TOOLWINDOW, 0))
- ShowWindow(hClist, SW_SHOWMINIMIZED);
- break;
-
- case SETTING_STATE_NORMAL:
- // try to use services where possible (that's what they're for)
- if (isHidden)
- g_clistApi.pfnShowHide();
- break;
- }
- }
-
- // hangup
- if (db_get_b(0, SSMODULENAME, SETTING_AUTOHANGUP, 0))
- InternetAutodialHangup(0);
-
- int state = db_get_b(0, SSMODULENAME, SETTING_WINSTATE, SETTING_STATE_NORMAL);
- // set windowstate and docked for next startup
- if (db_get_b(0, SSMODULENAME, SETTING_SETWINSTATE, 0))
- db_set_b(0, MODULE_CLIST, SETTING_WINSTATE, (BYTE)state);
-
- if (hMessageWindow)
- DestroyWindow(hMessageWindow);
-
- protoList.destroy();
- return 0;
-}
-
-/* Window proc for poweroff event */
-static DWORD CALLBACK MessageWndProc(HWND, UINT msg, WPARAM wParam, LPARAM)
-{
- switch (msg) {
- case WM_ENDSESSION:
- log_debugA("WM_ENDSESSION");
- if (wParam) {
- log_debugA("WM_ENDSESSION: calling exit");
- OnShutdown(0, 0);
- log_debugA("WM_ENDSESSION: exit called");
- }
- break;
- }
-
- return TRUE;
-}
-
-int SSModuleLoaded(WPARAM, LPARAM)
-{
- InitProfileModule();
-
- hEvents[0] = HookEvent(ME_OPT_INITIALISE, StartupStatusOptionsInit);
-
- /* shutdown hook for normal shutdown */
- hEvents[1] = HookEvent(ME_SYSTEM_OKTOEXIT, OnOkToExit);
- hEvents[2] = HookEvent(ME_SYSTEM_PRESHUTDOWN, OnShutdown);
- /* message window for poweroff */
- hMessageWindow = CreateWindowEx(0, L"STATIC", nullptr, 0, 0, 0, 0, 0, nullptr, nullptr, nullptr, nullptr);
- SetWindowLongPtr(hMessageWindow, GWLP_WNDPROC, (LONG_PTR)MessageWndProc);
-
- GetProfile(-1, protoList);
-
- // override with cmdl
- ProcessCommandLineOptions(protoList);
- if (protoList.getCount() == 0)
- return 0;// no protocols are loaded
-
- SetLastStatusMessages(protoList);
- showDialogOnStartup = (showDialogOnStartup || db_get_b(0, SSMODULENAME, SETTING_SHOWDIALOG, 0));
-
- // dial
- if (showDialogOnStartup || db_get_b(0, SSMODULENAME, SETTING_SETPROFILE, 1))
- if (db_get_b(0, SSMODULENAME, SETTING_AUTODIAL, 0))
- InternetAutodial(0, nullptr);
-
- // set the status!
- if (showDialogOnStartup || db_get_b(0, SSMODULENAME, SETTING_SHOWDIALOG, 0))
- ShowConfirmDialogEx((TProtoSettings*)&protoList, db_get_dw(0, SSMODULENAME, SETTING_DLGTIMEOUT, 5));
- else if (db_get_b(0, SSMODULENAME, SETTING_SETPROFILE, 1)) {
- // set hooks for override
- if (db_get_b(0, SSMODULENAME, SETTING_OVERRIDE, 1)) {
- hProtoAckHook = HookEvent(ME_PROTO_ACK, ProcessProtoAck);
- hCSStatusChangeHook = HookEvent(ME_CS_STATUSCHANGEEX, CSStatusChangeEx);
- hStatusChangeHook = HookEvent(ME_CLIST_STATUSMODECHANGE, StatusChange);
- }
- setStatusTimerId = SetTimer(nullptr, 0, db_get_dw(0, SSMODULENAME, SETTING_SETPROFILEDELAY, 500), SetStatusTimed);
- }
-
- // win size and location
- if (db_get_b(0, SSMODULENAME, SETTING_SETWINLOCATION, 0) || db_get_b(0, SSMODULENAME, SETTING_SETWINSIZE, 0)) {
- HWND hClist = g_clistApi.hwndContactList;
-
- // store in db
- if (db_get_b(0, SSMODULENAME, SETTING_SETWINLOCATION, 0)) {
- db_set_dw(0, MODULE_CLIST, SETTING_XPOS, db_get_dw(0, SSMODULENAME, SETTING_XPOS, 0));
- db_set_dw(0, MODULE_CLIST, SETTING_YPOS, db_get_dw(0, SSMODULENAME, SETTING_YPOS, 0));
- }
- if (db_get_b(0, SSMODULENAME, SETTING_SETWINSIZE, 0)) {
- db_set_dw(0, MODULE_CLIST, SETTING_WIDTH, db_get_dw(0, SSMODULENAME, SETTING_WIDTH, 0));
- if (!db_get_b(0, MODULE_CLUI, SETTING_AUTOSIZE, 0))
- db_set_dw(0, MODULE_CLIST, SETTING_HEIGHT, db_get_dw(0, SSMODULENAME, SETTING_HEIGHT, 0));
- }
-
- WINDOWPLACEMENT wndpl = { sizeof(wndpl) };
- if (GetWindowPlacement(hClist, &wndpl)) {
- if (wndpl.showCmd == SW_SHOWNORMAL && !Clist_IsDocked()) {
- RECT rc;
- if (GetWindowRect(hClist, &rc)) {
- int x = rc.left;
- int y = rc.top;
- int width = rc.right - rc.left;
- int height = rc.bottom - rc.top;
- if (db_get_b(0, SSMODULENAME, SETTING_SETWINLOCATION, 0)) {
- x = db_get_dw(0, SSMODULENAME, SETTING_XPOS, x);
- y = db_get_dw(0, SSMODULENAME, SETTING_YPOS, y);
- }
- if (db_get_b(0, SSMODULENAME, SETTING_SETWINSIZE, 0)) {
- width = db_get_dw(0, SSMODULENAME, SETTING_WIDTH, width);
- if (!db_get_b(0, MODULE_CLUI, SETTING_AUTOSIZE, 0))
- height = db_get_dw(0, SSMODULENAME, SETTING_HEIGHT, height);
- }
- MoveWindow(hClist, x, y, width, height, TRUE);
- }
- }
- }
- }
-
- return 0;
-}
-
-static INT_PTR SrvGetProfile(WPARAM wParam, LPARAM lParam)
-{
- return GetProfile((int)wParam, *(TProtoSettings*)lParam);
-}
-
-void StartupStatusLoad()
-{
- SSLangPack = GetPluginLangId(MIID_LAST, 0);
-
- if (g_bMirandaLoaded)
- SSModuleLoaded(0, 0);
- else
- HookEvent(ME_SYSTEM_MODULESLOADED, SSModuleLoaded);
-
- if (db_get_b(0, SSMODULENAME, SETTING_SETPROFILE, 1) || db_get_b(0, SSMODULENAME, SETTING_OFFLINECLOSE, 0))
- db_set_w(0, "CList", "Status", (WORD)ID_STATUS_OFFLINE);
-
- // docking
- if (db_get_b(0, SSMODULENAME, SETTING_SETDOCKED, 0)) {
- int docked = db_get_b(0, SSMODULENAME, SETTING_DOCKED, DOCKED_NONE);
- if (docked == DOCKED_LEFT || docked == DOCKED_RIGHT)
- docked = -docked;
-
- db_set_b(0, MODULE_CLIST, SETTING_DOCKED, (BYTE)docked);
- }
-
- // Create service functions; the get functions are created here; they don't rely on commonstatus
- hServices[0] = CreateServiceFunction(MS_SS_GETPROFILE, SrvGetProfile);
- hServices[1] = CreateServiceFunction(MS_SS_GETPROFILECOUNT, GetProfileCount);
- hServices[2] = CreateServiceFunction(MS_SS_GETPROFILENAME, GetProfileName);
-
- LoadProfileModule();
-}
-
-void StartupStatusUnload()
-{
- if (g_bMirandaLoaded)
- OnShutdown(0, 0);
-
- KillModuleOptions(SSLangPack);
-
- for (auto &it : hServices) {
- DestroyServiceFunction(it);
- it = nullptr;
- }
-
- for (auto &it : hEvents) {
- UnhookEvent(it);
- it = nullptr;
- }
-
- DeinitProfilesModule();
-}
diff --git a/plugins/StatusManager/src/StartupStatus/startupstatus.h b/plugins/StatusManager/src/StartupStatus/startupstatus.h
deleted file mode 100644
index 5d16d50843..0000000000
--- a/plugins/StatusManager/src/StartupStatus/startupstatus.h
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- StartupStatus Plugin for Miranda-IM (www.miranda-im.org)
- Copyright 2003-2006 P. Boon
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-*/
-#ifndef __STARTUPSTATUSHEADER
-#define __STARTUPSTATUSHEADER
-
-#define SSMODULENAME "StartupStatus"
-
-struct PROFILEOPTIONS : public MZeroedObject
-{
- __inline PROFILEOPTIONS() :
- ps(protoList)
- {}
-
- __inline ~PROFILEOPTIONS()
- {
- mir_free(tszName);
- }
-
- wchar_t *tszName;
- TProtoSettings ps;
- BOOL showDialog;
- BOOL createTtb;
- BOOL createMmi;
- BOOL inSubMenu;
- BOOL regHotkey;
- WORD hotKey;
-};
-
-typedef struct {
- ATOM id;
- 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)
-
-#define MODULE_CLIST "CList"
-#define MODULE_CLUI "CLUI"
-#define SETTING_STATUS "Status"
-
-#define SETTING_SETWINSTATE "SetState"
-#define SETTING_WINSTATE "State"
-
-#define SETTING_SETDOCKED "SetDocked"
-#define SETTING_DOCKED "Docked"
-
-#define SETTING_SHOWDIALOG "ShowDialog"
-#define SETTING_OFFLINECLOSE "OfflineOnClose"
-#define SETTING_SETPROFILE "SetStatusOnStartup"
-#define SETTING_AUTODIAL "AutoDial"
-#define SETTING_AUTOHANGUP "AutoHangup"
-
-#define SETTING_TOOLWINDOW "ToolWindow"
-
-#define SETTING_OVERRIDE "AllowOverride"
-
-#define SETTING_SETWINLOCATION "SetWinLoc"
-#define SETTING_XPOS "x"
-#define SETTING_YPOS "y"
-
-#define SETTING_SETWINSIZE "SetWinSize"
-#define SETTING_WIDTH "Width"
-#define SETTING_HEIGHT "Height"
-#define SETTING_AUTOSIZE "AutoSize"
-
-#define SETTING_PROFILECOUNT "ProfileCount"
-#define SETTING_DEFAULTPROFILE "DefaultProfile"
-#define SETTING_PROFILENAME "ProfileName"
-#define SETTING_CREATETTBBUTTON "CreateTTBButton"
-#define SETTING_PROFILE_STSMSG "StatusMsg"
-#define SETTING_SHOWCONFIRMDIALOG "profile_ShowDialog"
-#define SETTING_CREATEMMITEM "CreateMMItem"
-#define SETTING_INSUBMENU "InSubMenu"
-#define SETTING_REGHOTKEY "RegHotKey"
-#define SETTING_HOTKEY "HotKey"
-#define SETTING_PROFILENO "ProfileNo"
-
-#define SETTING_SETPROFILEDELAY "SetStatusDelay"
-#define SETTING_DLGTIMEOUT "DialogTimeout"
-
-#define SHORTCUT_DESC L"Miranda NG"
-#define SHORTCUT_FILENAME L"\\Miranda NG.lnk"
-
-#define DOCKED_NONE 0
-#define DOCKED_LEFT 1
-#define DOCKED_RIGHT 2
-
-#define MS_SS_MENUSETPROFILEPREFIX "StartupStatus/SetProfile_"
-
-// options
-int StartupStatusOptionsInit(WPARAM wparam,LPARAM lparam);
-char* OptName(int i, const char *setting);
-
-// startupstatus
-void StartupStatusLoad();
-void StartupStatusUnload();
-
-int SSLoadMainOptions();
-
-// profile
-void FillStatus(SMProto &ps, int profile);
-int GetProfile(int profileID, TProtoSettings &arSettings);
-wchar_t* GetStatusMessage(int profile, const char *szProto);
-
-INT_PTR LoadAndSetProfile(WPARAM wParam, LPARAM lParam);
-INT_PTR GetProfileCount(WPARAM wParam, LPARAM lParam);
-INT_PTR GetProfileName(WPARAM wParam, LPARAM lParam);
-
-extern HANDLE hTTBModuleLoadedHook;
-void RemoveTopToolbarButtons();
-int CreateTopToolbarButtons(WPARAM wParam, LPARAM lParam);
-
-int LoadProfileModule();
-int InitProfileModule();
-int DeinitProfilesModule();
-
-#endif //__STARTUPSTATUSHEADER