diff options
| author | George Hazan <ghazan@miranda.im> | 2018-06-19 12:43:27 +0300 |
|---|---|---|
| committer | George Hazan <ghazan@miranda.im> | 2018-06-19 12:43:27 +0300 |
| commit | 0fb39531240a0a23e92c0456fe72e26027740696 (patch) | |
| tree | 8b85028b680b6951f8afa369297adfc93baef79a /plugins/StatusManager/src/StartupStatus | |
| parent | aef4307d04fb8d8bbc05921d45d97a63e627fb4d (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')
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 |
