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/AdvancedAutoAway | |
| 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/AdvancedAutoAway')
4 files changed, 0 insertions, 1248 deletions
diff --git a/plugins/StatusManager/src/AdvancedAutoAway/aaa_msgoptions.cpp b/plugins/StatusManager/src/AdvancedAutoAway/aaa_msgoptions.cpp deleted file mode 100644 index 2f4228af74..0000000000 --- a/plugins/StatusManager/src/AdvancedAutoAway/aaa_msgoptions.cpp +++ /dev/null @@ -1,188 +0,0 @@ -/* - AdvancedAutoAway 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" - -struct AAMSGSETTING -{ - short useCustom; - int status; - char* msg; -}; - -char *StatusModeToDbSetting(int status, const char *suffix); - -void DisableDialog(HWND hwndDlg) -{ - EnableWindow(GetDlgItem(hwndDlg, IDC_STATUS), FALSE); - EnableWindow(GetDlgItem(hwndDlg, IDC_STATUSMSG), FALSE); - EnableWindow(GetDlgItem(hwndDlg, IDC_VARIABLESHELP), FALSE); - EnableWindow(GetDlgItem(hwndDlg, IDC_RADUSECUSTOM), FALSE); - EnableWindow(GetDlgItem(hwndDlg, IDC_RADUSEMIRANDA), FALSE); -} - -INT_PTR CALLBACK DlgProcAutoAwayMsgOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) -{ - static AAMSGSETTING** settings; - static int last, count; - - switch (msg) { - case WM_INITDIALOG: - TranslateDialogDefault(hwndDlg); - { - ShowWindow(GetDlgItem(hwndDlg, IDC_VARIABLESHELP), ServiceExists(MS_VARS_SHOWHELP) ? SW_SHOW : SW_HIDE); - count = 0; - last = -1; - - PROTOACCOUNT** proto; - int protoCount = 0; - Proto_EnumAccounts(&protoCount, &proto); - if (protoCount <= 0) { - DisableDialog(hwndDlg); - break; - } - - DWORD protoModeMsgFlags = 0; - for (int i = 0; i < protoCount; i++) - if (CallProtoService(proto[i]->szModuleName, PS_GETCAPS, PFLAGNUM_1, 0) & PF1_MODEMSGSEND & ~PF1_INDIVMODEMSG) - protoModeMsgFlags |= CallProtoService(proto[i]->szModuleName, PS_GETCAPS, PFLAGNUM_3, 0); - - if (protoModeMsgFlags == 0) { - DisableDialog(hwndDlg); - break; - } - - settings = (AAMSGSETTING**)mir_alloc(sizeof(AAMSGSETTING*)); - count = 0; - for (int i = 0; i < _countof(statusModeList); i++) { - if (!(protoModeMsgFlags & Proto_Status2Flag(statusModeList[i]))) - continue; - - int j = SendDlgItemMessage(hwndDlg, IDC_STATUS, CB_ADDSTRING, 0, (LPARAM)Clist_GetStatusModeDescription(statusModeList[i], 0)); - SendDlgItemMessage(hwndDlg, IDC_STATUS, CB_SETITEMDATA, j, statusModeList[i]); - settings = (AAMSGSETTING**)mir_realloc(settings, (count + 1) * sizeof(AAMSGSETTING*)); - settings[count] = (AAMSGSETTING*)mir_alloc(sizeof(AAMSGSETTING)); - settings[count]->status = statusModeList[i]; - - DBVARIANT dbv; - if (!db_get(0, AAAMODULENAME, StatusModeToDbSetting(statusModeList[i], SETTING_STATUSMSG), &dbv)) { - settings[count]->msg = (char*)mir_alloc(mir_strlen(dbv.pszVal) + 1); - mir_strcpy(settings[count]->msg, dbv.pszVal); - db_free(&dbv); - } - else settings[count]->msg = nullptr; - - settings[count]->useCustom = db_get_b(0, AAAMODULENAME, StatusModeToDbSetting(statusModeList[i], SETTING_MSGCUSTOM), FALSE); - count += 1; - } - SendDlgItemMessage(hwndDlg, IDC_STATUS, CB_SETCURSEL, 0, 0); - SendMessage(hwndDlg, WM_COMMAND, MAKEWPARAM(IDC_STATUS, CBN_SELCHANGE), 0); - } - break; - - case WM_COMMAND: - if (((HIWORD(wParam) == EN_CHANGE) || (HIWORD(wParam) == BN_CLICKED)) && ((HWND)lParam == GetFocus())) - SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); - - switch (LOWORD(wParam)) { - case IDC_RADUSEMIRANDA: - CheckDlgButton(hwndDlg, IDC_RADUSECUSTOM, BST_UNCHECKED == IsDlgButtonChecked(hwndDlg, IDC_RADUSEMIRANDA) ? BST_CHECKED : BST_UNCHECKED); - EnableWindow(GetDlgItem(hwndDlg, IDC_STATUSMSG), IsDlgButtonChecked(hwndDlg, IDC_RADUSECUSTOM)); - EnableWindow(GetDlgItem(hwndDlg, IDC_VARIABLESHELP), IsDlgButtonChecked(hwndDlg, IDC_RADUSECUSTOM)); - settings[SendDlgItemMessage(hwndDlg, IDC_STATUS, CB_GETCURSEL, 0, 0)]->useCustom = IsDlgButtonChecked(hwndDlg, IDC_RADUSECUSTOM); - break; - - case IDC_RADUSECUSTOM: - CheckDlgButton(hwndDlg, IDC_RADUSEMIRANDA, BST_UNCHECKED == IsDlgButtonChecked(hwndDlg, IDC_RADUSECUSTOM) ? BST_CHECKED : BST_UNCHECKED); - EnableWindow(GetDlgItem(hwndDlg, IDC_STATUSMSG), IsDlgButtonChecked(hwndDlg, IDC_RADUSECUSTOM)); - EnableWindow(GetDlgItem(hwndDlg, IDC_VARIABLESHELP), IsDlgButtonChecked(hwndDlg, IDC_RADUSECUSTOM)); - settings[SendDlgItemMessage(hwndDlg, IDC_STATUS, CB_GETCURSEL, 0, 0)]->useCustom = IsDlgButtonChecked(hwndDlg, IDC_RADUSECUSTOM); - break; - - case IDC_STATUS: - if (HIWORD(wParam) == CBN_SELCHANGE) { - int i = SendDlgItemMessage(hwndDlg, IDC_STATUS, CB_GETCURSEL, 0, 0); - int len = SendDlgItemMessage(hwndDlg, IDC_STATUSMSG, WM_GETTEXTLENGTH, 0, 0); - if (last != -1) { - if (settings[last]->msg == nullptr) - settings[last]->msg = (char*)mir_alloc(len + 1); - else - settings[last]->msg = (char*)mir_realloc(settings[last]->msg, len + 1); - GetDlgItemTextA(hwndDlg, IDC_STATUSMSG, settings[last]->msg, (len + 1)); - } - - if (i != -1) { - if (settings[i]->msg != nullptr) - SetDlgItemTextA(hwndDlg, IDC_STATUSMSG, settings[i]->msg); - else { - ptrW msgw((wchar_t*)CallService(MS_AWAYMSG_GETSTATUSMSGW, settings[i]->status, 0)); - SetDlgItemText(hwndDlg, IDC_STATUSMSG, (msgw != nullptr) ? msgw : L""); - } - - if (settings[i]->useCustom) { - EnableWindow(GetDlgItem(hwndDlg, IDC_STATUSMSG), TRUE); - EnableWindow(GetDlgItem(hwndDlg, IDC_VARIABLESHELP), TRUE); - CheckDlgButton(hwndDlg, IDC_RADUSECUSTOM, BST_CHECKED); - CheckDlgButton(hwndDlg, IDC_RADUSEMIRANDA, BST_UNCHECKED); - } - else { - EnableWindow(GetDlgItem(hwndDlg, IDC_STATUSMSG), FALSE); - EnableWindow(GetDlgItem(hwndDlg, IDC_VARIABLESHELP), FALSE); - CheckDlgButton(hwndDlg, IDC_RADUSEMIRANDA, BST_CHECKED); - CheckDlgButton(hwndDlg, IDC_RADUSECUSTOM, BST_UNCHECKED); - } - } - last = i; - } - break; - - case IDC_VARIABLESHELP: - CallService(MS_VARS_SHOWHELP, (WPARAM)GetDlgItem(hwndDlg, IDC_STATUSMSG), 0); - break; - } - break; - - case WM_NOTIFY: - switch (((LPNMHDR)lParam)->code) { - case PSN_WIZFINISH: - AAALoadOptions(); - break; - - case PSN_APPLY: - SendMessage(hwndDlg, WM_COMMAND, MAKEWPARAM(IDC_STATUS, CBN_SELCHANGE), 0); - for (int i = 0; i < count; i++) { - db_set_b(0, AAAMODULENAME, StatusModeToDbSetting(settings[i]->status, SETTING_MSGCUSTOM), (BYTE)settings[i]->useCustom); - if ((settings[i]->useCustom) && (settings[i]->msg != nullptr) && (settings[i]->msg[0] != '\0')) - db_set_s(0, AAAMODULENAME, StatusModeToDbSetting(settings[i]->status, SETTING_STATUSMSG), settings[i]->msg); - } - break; - } - break; - - case WM_DESTROY: - for (int i = 0; i < count; i++) { - mir_free(settings[i]->msg); - mir_free(settings[i]); - } - mir_free(settings); - break; - } - - return FALSE; -} diff --git a/plugins/StatusManager/src/AdvancedAutoAway/aaa_options.cpp b/plugins/StatusManager/src/AdvancedAutoAway/aaa_options.cpp deleted file mode 100644 index 2176847926..0000000000 --- a/plugins/StatusManager/src/AdvancedAutoAway/aaa_options.cpp +++ /dev/null @@ -1,461 +0,0 @@ -/* -AdvancedAutoAway 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 LoadAutoAwaySetting(SMProto &autoAwaySetting, char* protoName); - -INT_PTR CALLBACK DlgProcAutoAwayMsgOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam); - -static BOOL bSettingSame = FALSE; - -///////////////////////////////////////////////////////////////////////////////////////// -// Dialog service functions - -static int WriteAutoAwaySetting(SMProto &autoAwaySetting, char *protoName) -{ - char setting[128]; - mir_snprintf(setting, "%s_OptionFlags", protoName); - db_set_w(0, AAAMODULENAME, setting, (WORD)autoAwaySetting.optionFlags); - mir_snprintf(setting, "%s_AwayTime", protoName); - db_set_w(0, AAAMODULENAME, setting, (WORD)autoAwaySetting.awayTime); - mir_snprintf(setting, "%s_NATime", protoName); - db_set_w(0, AAAMODULENAME, setting, (WORD)autoAwaySetting.naTime); - mir_snprintf(setting, "%s_StatusFlags", protoName); - db_set_w(0, AAAMODULENAME, setting, (WORD)autoAwaySetting.statusFlags); - mir_snprintf(setting, "%s_Lv1Status", protoName); - db_set_w(0, AAAMODULENAME, setting, (WORD)autoAwaySetting.lv1Status); - mir_snprintf(setting, "%s_Lv2Status", protoName); - db_set_w(0, AAAMODULENAME, setting, (WORD)autoAwaySetting.lv2Status); - - return 0; -} - -static void SetDialogItems(HWND hwndDlg, SMProto *setting) -{ - bool bSetNA = (setting->optionFlags & FLAG_SETNA) != 0; - - bool bIsTimed = (setting->optionFlags & FLAG_ONMOUSE) != 0; - bool bSaver = (setting->optionFlags & FLAG_ONSAVER) != 0; - bool bFullScr = (setting->optionFlags & FLAG_FULLSCREEN) != 0; - bool bOnLock = (setting->optionFlags & FLAG_ONLOCK) != 0; - bool bOnTS = (setting->optionFlags & FLAG_ONTS) != 0; - bool bAnyOption = bIsTimed | bSaver | bFullScr | bOnLock | bOnTS; - - CheckDlgButton(hwndDlg, IDC_FULLSCREEN, bFullScr ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(hwndDlg, IDC_SCREENSAVE, bSaver ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(hwndDlg, IDC_ONLOCK, (setting->optionFlags & FLAG_ONLOCK) != 0 ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(hwndDlg, IDC_ONTSDISCONNECT, bOnTS ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(hwndDlg, IDC_TIMED, bIsTimed ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(hwndDlg, IDC_SETNA, bSetNA ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(hwndDlg, IDC_CONFIRM, (setting->optionFlags & FLAG_CONFIRM) != 0 ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(hwndDlg, IDC_RESETSTATUS, (setting->optionFlags & FLAG_RESET) != 0 ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(hwndDlg, IDC_ENTERIDLE, (setting->optionFlags & FLAG_ENTERIDLE) != 0 ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(hwndDlg, IDC_MONITORMIRANDA, (setting->optionFlags & FLAG_MONITORMIRANDA) != 0 ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(hwndDlg, IDC_LV2ONINACTIVE, (setting->optionFlags & FLAG_LV2ONINACTIVE) != 0 ? BST_CHECKED : BST_UNCHECKED); - - SetDlgItemInt(hwndDlg, IDC_AWAYTIME, setting->awayTime, FALSE); - SetDlgItemInt(hwndDlg, IDC_NATIME, setting->naTime, FALSE); - - EnableWindow(GetDlgItem(hwndDlg, IDC_SETNA), bIsTimed); - EnableWindow(GetDlgItem(hwndDlg, IDC_LV2ONINACTIVE), bIsTimed && bSetNA); - EnableWindow(GetDlgItem(hwndDlg, IDC_MONITORMIRANDA), bIsTimed); - EnableWindow(GetDlgItem(hwndDlg, IDC_AWAYTIME), bIsTimed); - EnableWindow(GetDlgItem(hwndDlg, IDC_LV1AFTERSTR), bIsTimed); - - EnableWindow(GetDlgItem(hwndDlg, IDC_LV1STATUS), bAnyOption); - EnableWindow(GetDlgItem(hwndDlg, IDC_STATUSLIST), bAnyOption); - EnableWindow(GetDlgItem(hwndDlg, IDC_RESETSTATUS), bAnyOption && IsDlgButtonChecked(hwndDlg, IDC_LV2ONINACTIVE)); - EnableWindow(GetDlgItem(hwndDlg, IDC_CONFIRM), bAnyOption && IsDlgButtonChecked(hwndDlg, IDC_LV2ONINACTIVE) && IsDlgButtonChecked(hwndDlg, IDC_RESETSTATUS)); - - EnableWindow(GetDlgItem(hwndDlg, IDC_NATIME), bSetNA && bIsTimed); - EnableWindow(GetDlgItem(hwndDlg, IDC_SETNASTR), bSetNA && bIsTimed); - EnableWindow(GetDlgItem(hwndDlg, IDC_SETNASTR), bSetNA && bIsTimed); - EnableWindow(GetDlgItem(hwndDlg, IDC_LV2STATUS), bSetNA && bIsTimed); - - EnableWindow(GetDlgItem(hwndDlg, IDC_PROTOCOL), !bSettingSame); -} - -static SMProto* GetSetting(HWND hwndDlg, SMProto *sameSetting) -{ - if (bSettingSame) - return sameSetting; - - int iItem = SendDlgItemMessage(hwndDlg, IDC_PROTOCOL, CB_GETCURSEL, 0, 0); - if (iItem == -1) - return nullptr; - - INT_PTR iData = (INT_PTR)SendDlgItemMessage(hwndDlg, IDC_PROTOCOL, CB_GETITEMDATA, iItem, 0); - return (iData == -1) ? nullptr : (SMProto*)iData; -} - -static void SetDialogStatus(HWND hwndDlg, SMProto *sameSetting) -{ - SMProto *setting = GetSetting(hwndDlg, sameSetting); - if (setting == nullptr) - return; - - // create columns - HWND hList = GetDlgItem(hwndDlg, IDC_STATUSLIST); - ListView_SetExtendedListViewStyleEx(hList, LVS_EX_FULLROWSELECT | LVS_EX_CHECKBOXES, LVS_EX_FULLROWSELECT | LVS_EX_CHECKBOXES); - - LVCOLUMN lvCol = { 0 }; - lvCol.mask = LVCF_WIDTH | LVCF_TEXT; - lvCol.pszText = TranslateT("Status"); - lvCol.cx = 118; - ListView_InsertColumn(hList, 0, &lvCol); - - // get pointer to settings - SetDialogItems(hwndDlg, setting); -} - -///////////////////////////////////////////////////////////////////////////////////////// -// Rules dialog window procedure - -static TProtoSettings optionSettings; - -static INT_PTR CALLBACK DlgProcAutoAwayRulesOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) -{ - static SMProto* sameSetting; - SMProto *setting; - static int init; - - switch (msg) { - case WM_INITDIALOG: - init = TRUE; - TranslateDialogDefault(hwndDlg); - - // copy the settings - optionSettings = protoList; - - sameSetting = (SMProto*)mir_alloc(sizeof(SMProto)); - LoadAutoAwaySetting(*sameSetting, SETTING_ALL); - - // fill list from currentProtoSettings - { - for (auto &p : optionSettings) { - int item = SendDlgItemMessage(hwndDlg, IDC_PROTOCOL, CB_ADDSTRING, 0, (LPARAM)p->m_tszAccName); - SendDlgItemMessage(hwndDlg, IDC_PROTOCOL, CB_SETITEMDATA, item, (LPARAM)p); - } - } - // set cursor to first protocol - SendDlgItemMessage(hwndDlg, IDC_PROTOCOL, CB_SETCURSEL, 0, 0); - - // status list - SetDialogStatus(hwndDlg, sameSetting); - - SendMessage(hwndDlg, WM_COMMAND, (WPARAM)IDC_PROTOCOL, (LPARAM)0x11111111); - init = FALSE; - break; - - case WM_COMMAND: - if ((HIWORD(wParam) == EN_CHANGE || HIWORD(wParam) == BN_CLICKED) && (HWND)lParam == GetFocus()) - SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); - - setting = GetSetting(hwndDlg, sameSetting); - if (!setting) - break; - - switch (LOWORD(wParam)) { - case IDC_PROTOCOL: - // status listview - init = TRUE; - { - HWND hList = GetDlgItem(hwndDlg, IDC_STATUSLIST); - ListView_DeleteAllItems(hList); - - int flags = 0; - if (!bSettingSame) - flags = CallProtoService(setting->m_szName, PS_GETCAPS, PFLAGNUM_2, 0)&~CallProtoService(setting->m_szName, PS_GETCAPS, (WPARAM)PFLAGNUM_5, 0); - - LVITEM lvItem = { 0 }; - lvItem.mask = LVIF_TEXT | LVIF_PARAM; - lvItem.iItem = 0; - lvItem.iSubItem = 0; - for (int i = 0; i < _countof(statusModeList); i++) { - if ((flags & statusModePf2List[i]) || (statusModePf2List[i] == PF2_OFFLINE) || (bSettingSame)) { - lvItem.pszText = Clist_GetStatusModeDescription(statusModeList[i], 0); - lvItem.lParam = (LPARAM)statusModePf2List[i]; - ListView_InsertItem(hList, &lvItem); - ListView_SetCheckState(hList, lvItem.iItem, setting->statusFlags & statusModePf2List[i] ? TRUE : FALSE); - lvItem.iItem++; - } - } - } - init = FALSE; - // status dropdown boxes - { - int flags = 0; - if (!bSettingSame) - flags = CallProtoService(setting->m_szName, PS_GETCAPS, PFLAGNUM_2, 0)&~CallProtoService(setting->m_szName, PS_GETCAPS, (WPARAM)PFLAGNUM_5, 0); - - // clear box and add new status, loop status and check if compatible with proto - SendDlgItemMessage(hwndDlg, IDC_LV1STATUS, CB_RESETCONTENT, 0, 0); - SendDlgItemMessage(hwndDlg, IDC_LV2STATUS, CB_RESETCONTENT, 0, 0); - for (int i = 0; i < _countof(statusModeList); i++) { - if ((flags & statusModePf2List[i]) || statusModePf2List[i] == PF2_OFFLINE || bSettingSame) { - wchar_t *statusMode = Clist_GetStatusModeDescription(statusModeList[i], 0); - int item = SendDlgItemMessage(hwndDlg, IDC_LV1STATUS, CB_ADDSTRING, 0, (LPARAM)statusMode); - SendDlgItemMessage(hwndDlg, IDC_LV1STATUS, CB_SETITEMDATA, item, (LPARAM)statusModeList[i]); - item = SendDlgItemMessage(hwndDlg, IDC_LV2STATUS, CB_ADDSTRING, 0, (LPARAM)statusMode); - SendDlgItemMessage(hwndDlg, IDC_LV2STATUS, CB_SETITEMDATA, item, (LPARAM)statusModeList[i]); - if (statusModeList[i] == setting->lv1Status) { - SendDlgItemMessage(hwndDlg, IDC_LV1STATUS, CB_SETCURSEL, (WPARAM)item, 0); - SetDlgItemText(hwndDlg, IDC_SETNASTR, CMStringW(FORMAT, TranslateT("minutes of %s mode"), statusMode)); - } - if (statusModeList[i] == setting->lv2Status) - SendDlgItemMessage(hwndDlg, IDC_LV2STATUS, CB_SETCURSEL, (WPARAM)item, 0); - } - } - } - SetDialogItems(hwndDlg, setting); - break; - - case IDC_LV1STATUS: - if (HIWORD(wParam) == CBN_SELCHANGE) - SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); - - setting->lv1Status = (int)SendDlgItemMessage(hwndDlg, IDC_LV1STATUS, CB_GETITEMDATA, SendDlgItemMessage(hwndDlg, IDC_LV1STATUS, CB_GETCURSEL, 0, 0), 0); - SetDlgItemText(hwndDlg, IDC_SETNASTR, CMStringW(FORMAT, TranslateT("minutes of %s mode"), Clist_GetStatusModeDescription(setting->lv1Status, 0))); - break; - - case IDC_LV2STATUS: - if (HIWORD(wParam) == CBN_SELCHANGE) - SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); - - setting->lv2Status = (int)SendDlgItemMessage(hwndDlg, IDC_LV2STATUS, CB_GETITEMDATA, SendDlgItemMessage(hwndDlg, IDC_LV2STATUS, CB_GETCURSEL, 0, 0), 0); - break; - - case IDC_FULLSCREEN: - setting->optionFlags ^= FLAG_FULLSCREEN; - SetDialogItems(hwndDlg, setting); - break; - - case IDC_SCREENSAVE: - setting->optionFlags ^= FLAG_ONSAVER; - SetDialogItems(hwndDlg, setting); - break; - - case IDC_ONLOCK: - setting->optionFlags ^= FLAG_ONLOCK; - SetDialogItems(hwndDlg, setting); - break; - - case IDC_ONTSDISCONNECT: - setting->optionFlags ^= FLAG_ONTS; - SetDialogItems(hwndDlg, setting); - break; - - case IDC_TIMED: - setting->optionFlags ^= FLAG_ONMOUSE; - SetDialogItems(hwndDlg, setting); - break; - - case IDC_SETNA: - setting->optionFlags ^= FLAG_SETNA; - SetDialogItems(hwndDlg, setting); - break; - - case IDC_AWAYTIME: - setting->awayTime = GetDlgItemInt(hwndDlg, IDC_AWAYTIME, nullptr, FALSE); - break; - - case IDC_NATIME: - setting->naTime = GetDlgItemInt(hwndDlg, IDC_NATIME, nullptr, FALSE); - break; - - case IDC_LV2ONINACTIVE: - setting->optionFlags ^= FLAG_LV2ONINACTIVE; - SetDialogItems(hwndDlg, setting); - break; - - case IDC_CONFIRM: - setting->optionFlags ^= FLAG_CONFIRM; - SetDialogItems(hwndDlg, setting); - break; - - case IDC_RESETSTATUS: - setting->optionFlags ^= FLAG_RESET; - SetDialogItems(hwndDlg, setting); - break; - - case IDC_MONITORMIRANDA: - setting->optionFlags ^= FLAG_MONITORMIRANDA; - SetDialogItems(hwndDlg, setting); - break; - - case IDC_ENTERIDLE: - setting->optionFlags ^= FLAG_ENTERIDLE; - SetDialogItems(hwndDlg, setting); - break; - } - break; - - case WM_SHOWWINDOW: - init = TRUE; - - if (setting = GetSetting(hwndDlg, sameSetting)) - SetDialogItems(hwndDlg, setting); - - SendMessage(hwndDlg, WM_COMMAND, (WPARAM)IDC_PROTOCOL, (LPARAM)0x11111111); - init = FALSE; - break; - - case WM_NOTIFY: - switch (((NMHDR*)lParam)->idFrom) { - case IDC_STATUSLIST: - if (init) - break; - - switch (((NMHDR*)lParam)->code) { - case LVN_ITEMCHANGED: - NMLISTVIEW *nmlv = (NMLISTVIEW*)lParam; - if (IsWindowVisible(GetDlgItem(hwndDlg, IDC_STATUSLIST)) && ((nmlv->uNewState ^ nmlv->uOldState) & LVIS_STATEIMAGEMASK)) { - SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); - - if (setting = GetSetting(hwndDlg, sameSetting)) { - HWND hList = GetDlgItem(hwndDlg, IDC_STATUSLIST); - LVITEM lvItem = { 0 }; - lvItem.mask = LVIF_PARAM; - lvItem.iItem = nmlv->iItem; - ListView_GetItem(hList, &lvItem); - int pf2Status = lvItem.lParam; - if (ListView_GetCheckState(hList, lvItem.iItem)) - setting->statusFlags |= pf2Status; - else - setting->statusFlags &= ~pf2Status; - } - } - break; - } - break; - } - - switch (((LPNMHDR)lParam)->code) { - case PSN_WIZFINISH: - AAALoadOptions(); - break; - - case PSN_APPLY: - if (bSettingSame) - WriteAutoAwaySetting(*sameSetting, SETTING_ALL); - else { - for (auto &it : optionSettings) - WriteAutoAwaySetting(*it, it->m_szName); - } - } - break; - - case WM_DESTROY: - optionSettings.destroy(); - mir_free(sameSetting); - break; - } - return FALSE; -} - -///////////////////////////////////////////////////////////////////////////////////////// -// General options window procedure - -static INT_PTR CALLBACK DlgProcAutoAwayGeneralOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) -{ - switch (msg) { - case WM_INITDIALOG: - TranslateDialogDefault(hwndDlg); - CheckDlgButton(hwndDlg, IDC_IGNLOCK, db_get_b(0, AAAMODULENAME, SETTING_IGNLOCK, FALSE) != 0 ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(hwndDlg, IDC_IGNSYSKEYS, db_get_b(0, AAAMODULENAME, SETTING_IGNSYSKEYS, FALSE) != 0 ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(hwndDlg, IDC_IGNALTCOMBO, db_get_b(0, AAAMODULENAME, SETTING_IGNALTCOMBO, FALSE) != 0 ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(hwndDlg, IDC_MONITORMOUSE, db_get_b(0, AAAMODULENAME, SETTING_MONITORMOUSE, BST_CHECKED) != 0 ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(hwndDlg, IDC_MONITORKEYBOARD, db_get_b(0, AAAMODULENAME, SETTING_MONITORKEYBOARD, BST_CHECKED) != 0 ? BST_CHECKED : BST_UNCHECKED); - SetDlgItemInt(hwndDlg, IDC_AWAYCHECKTIMEINSECS, db_get_w(0, AAAMODULENAME, SETTING_AWAYCHECKTIMEINSECS, 5), FALSE); - SetDlgItemInt(hwndDlg, IDC_CONFIRMDELAY, db_get_w(0, AAAMODULENAME, SETTING_CONFIRMDELAY, 5), FALSE); - CheckDlgButton(hwndDlg, bSettingSame ? IDC_SAMESETTINGS : IDC_PERPROTOCOLSETTINGS, BST_CHECKED); - break; - - case WM_COMMAND: - if ((HIWORD(wParam) == EN_CHANGE || HIWORD(wParam) == BN_CLICKED) && (HWND)lParam == GetFocus()) - SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); - - switch (LOWORD(wParam)) { - case IDC_MONITORMOUSE: - CheckDlgButton(hwndDlg, IDC_MONITORMOUSE, (((BST_UNCHECKED == IsDlgButtonChecked(hwndDlg, IDC_MONITORMOUSE)) && (BST_UNCHECKED == IsDlgButtonChecked(hwndDlg, IDC_MONITORKEYBOARD))) || (IsDlgButtonChecked(hwndDlg, IDC_MONITORMOUSE)) ? BST_CHECKED : BST_UNCHECKED)); - break; - - case IDC_MONITORKEYBOARD: - CheckDlgButton(hwndDlg, IDC_MONITORKEYBOARD, (((BST_UNCHECKED == IsDlgButtonChecked(hwndDlg, IDC_MONITORMOUSE)) && (BST_UNCHECKED == IsDlgButtonChecked(hwndDlg, IDC_MONITORKEYBOARD))) || (IsDlgButtonChecked(hwndDlg, IDC_MONITORKEYBOARD)) ? BST_CHECKED : BST_UNCHECKED)); - break; - - case IDC_SAMESETTINGS: - case IDC_PERPROTOCOLSETTINGS: - bSettingSame = IsDlgButtonChecked(hwndDlg, IDC_SAMESETTINGS); - break; - } - break; - - case WM_NOTIFY: - if (((LPNMHDR)lParam)->idFrom == 0) { - switch (((LPNMHDR)lParam)->code) { - case PSN_WIZFINISH: - AAALoadOptions(); - break; - - case PSN_APPLY: - db_set_b(0, AAAMODULENAME, SETTING_IGNLOCK, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_IGNLOCK)); - db_set_b(0, AAAMODULENAME, SETTING_IGNSYSKEYS, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_IGNSYSKEYS)); - db_set_b(0, AAAMODULENAME, SETTING_IGNALTCOMBO, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_IGNALTCOMBO)); - db_set_b(0, AAAMODULENAME, SETTING_SAMESETTINGS, (BYTE)bSettingSame); - db_set_w(0, AAAMODULENAME, SETTING_AWAYCHECKTIMEINSECS, (WORD)GetDlgItemInt(hwndDlg, IDC_AWAYCHECKTIMEINSECS, nullptr, FALSE)); - db_set_w(0, AAAMODULENAME, SETTING_CONFIRMDELAY, (WORD)GetDlgItemInt(hwndDlg, IDC_CONFIRMDELAY, nullptr, FALSE)); - db_set_b(0, AAAMODULENAME, SETTING_MONITORMOUSE, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_MONITORMOUSE)); - db_set_b(0, AAAMODULENAME, SETTING_MONITORKEYBOARD, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_MONITORKEYBOARD)); - } - } - break; - } - return FALSE; -} - -///////////////////////////////////////////////////////////////////////////////////////// -// Options initialization procedure - -int AutoAwayOptInitialise(WPARAM wParam, LPARAM) -{ - OPTIONSDIALOGPAGE odp = { 0 }; - odp.position = 1000000000; - odp.hInstance = g_plugin.getInst(); - odp.flags = ODPF_BOLDGROUPS; - odp.szGroup.a = LPGEN("Status"); - odp.szTitle.a = LPGEN("Auto away"); - - odp.szTab.a = LPGEN("General"); - odp.pfnDlgProc = DlgProcAutoAwayGeneralOpts; - odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_GENAUTOAWAY); - Options_AddPage(wParam, &odp, AAALangPack); - - odp.szTab.a = LPGEN("Rules"); - odp.pfnDlgProc = DlgProcAutoAwayRulesOpts; - odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_AUTOAWAY); - Options_AddPage(wParam, &odp, AAALangPack); - - odp.szTab.a = LPGEN("Status messages"); - odp.pfnDlgProc = DlgProcAutoAwayMsgOpts; - odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_AUTOAWAYMSG); - Options_AddPage(wParam, &odp, AAALangPack); - return 0; -} diff --git a/plugins/StatusManager/src/AdvancedAutoAway/advancedautoaway.cpp b/plugins/StatusManager/src/AdvancedAutoAway/advancedautoaway.cpp deleted file mode 100644 index 7981175e5f..0000000000 --- a/plugins/StatusManager/src/AdvancedAutoAway/advancedautoaway.cpp +++ /dev/null @@ -1,553 +0,0 @@ -/* - AdvancedAutoAway 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 - - - Some code is copied from Miranda's AutoAway module -*/ - -#include "..\stdafx.h" - -#ifdef _DEBUG -#define SECS_PER_MINUTE 20 /* speedup */ -#else -#define SECS_PER_MINUTE 60 /* default I believe */ -#endif - -///////////////////////////////////////////////////////////////////////////////////////// - -int AAALangPack; - -static HANDLE hEvents[3]; - -static BOOL ignoreLockKeys = FALSE; -static BOOL ignoreSysKeys = FALSE; -static BOOL ignoreAltCombo = FALSE; -static BOOL monitorMouse = TRUE; -static BOOL monitorKeyboard = TRUE; -static HWND confirmDialog; -static int mouseStationaryTimer; -HHOOK hMirandaMouseHook = nullptr; -HHOOK hMirandaKeyBoardHook = nullptr; -#pragma data_seg("Shared") -DWORD lastInput = 0; -POINT lastMousePos = { 0 }; -HHOOK hMouseHook = nullptr; -HHOOK hKeyBoardHook = nullptr; -#pragma data_seg() -#pragma comment(linker, "/section:Shared,rws") -DWORD lastMirandaInput = 0; -static UINT_PTR hAutoAwayTimer; -// prototypes -extern DWORD StatusModeToProtoFlag(int status); -static int HookWindowsHooks(int hookMiranda, int hookAll); -static int UnhookWindowsHooks(); -static LRESULT CALLBACK MouseHookFunction(int code, WPARAM wParam, LPARAM lParam); -static LRESULT CALLBACK KeyBoardHookFunction(int code, WPARAM wParam, LPARAM lParam); -static LRESULT CALLBACK MirandaMouseHookFunction(int code, WPARAM wParam, LPARAM lParam); -static LRESULT CALLBACK MirandaKeyBoardHookFunction(int code, WPARAM wParam, LPARAM lParam); -BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved); - -static VOID CALLBACK AutoAwayTimer(HWND hwnd, UINT message, UINT_PTR idEvent, DWORD dwTime); -extern int AutoAwayOptInitialise(WPARAM wParam, LPARAM lParam); -extern char *StatusModeToDbSetting(int status, const char *suffix); - -///////////////////////////////////////////////////////////////////////////////////////// -// Load from DB - -void AAAUnloadOptions() -{ - UnhookWindowsHooks(); - if (hAutoAwayTimer != 0) - KillTimer(nullptr, hAutoAwayTimer); -} - -void AAALoadOptions() -{ - // if bOverride is enabled, samesettings will be ignored (for options loading) - int monitorMiranda = FALSE; // use windows hooks? - int monitorAll = FALSE; // use windows hooks? - - AAAUnloadOptions(); - - ignoreLockKeys = db_get_b(0, AAAMODULENAME, SETTING_IGNLOCK, FALSE); - ignoreSysKeys = db_get_b(0, AAAMODULENAME, SETTING_IGNSYSKEYS, FALSE); - ignoreAltCombo = db_get_b(0, AAAMODULENAME, SETTING_IGNALTCOMBO, FALSE); - monitorMouse = db_get_b(0, AAAMODULENAME, SETTING_MONITORMOUSE, TRUE); - monitorKeyboard = db_get_b(0, AAAMODULENAME, SETTING_MONITORKEYBOARD, TRUE); - lastInput = lastMirandaInput = GetTickCount(); - - for (auto &it : protoList) { - char* protoName; - if ((db_get_b(0, AAAMODULENAME, SETTING_SAMESETTINGS, 0))) - protoName = SETTING_ALL; - else - protoName = it->m_szName; - LoadAutoAwaySetting(*it, protoName); - - if (it->optionFlags & FLAG_MONITORMIRANDA) - monitorMiranda = TRUE; - else if (ignoreLockKeys || ignoreSysKeys || ignoreAltCombo || (monitorMouse != monitorKeyboard)) - monitorAll = TRUE; - } - - HookWindowsHooks(monitorMiranda, monitorAll); - hAutoAwayTimer = SetTimer(nullptr, 0, db_get_w(0, AAAMODULENAME, SETTING_AWAYCHECKTIMEINSECS, 5) * 1000, AutoAwayTimer); -} - -int LoadAutoAwaySetting(SMProto &autoAwaySetting, char* protoName) -{ - char setting[128]; - mir_snprintf(setting, "%s_OptionFlags", protoName); - autoAwaySetting.optionFlags = db_get_w(0, AAAMODULENAME, setting, FLAG_LV2ONINACTIVE | FLAG_RESET | FLAG_ENTERIDLE); - mir_snprintf(setting, "%s_AwayTime", protoName); - autoAwaySetting.awayTime = db_get_w(0, AAAMODULENAME, setting, SETTING_AWAYTIME_DEFAULT); - mir_snprintf(setting, "%s_NATime", protoName); - autoAwaySetting.naTime = db_get_w(0, AAAMODULENAME, setting, SETTING_NATIME_DEFAULT); - mir_snprintf(setting, "%s_StatusFlags", protoName); - autoAwaySetting.statusFlags = db_get_w(0, AAAMODULENAME, setting, StatusModeToProtoFlag(ID_STATUS_ONLINE) | StatusModeToProtoFlag(ID_STATUS_FREECHAT)); - - int flags; - if (db_get_b(0, AAAMODULENAME, SETTING_SAMESETTINGS, 0)) - flags = 0xFFFFFF; - else - flags = CallProtoService(protoName, PS_GETCAPS, PFLAGNUM_2, 0)&~CallProtoService(protoName, PS_GETCAPS, (WPARAM)PFLAGNUM_5, 0); - mir_snprintf(setting, "%s_Lv1Status", protoName); - autoAwaySetting.lv1Status = db_get_w(0, AAAMODULENAME, setting, (flags&StatusModeToProtoFlag(ID_STATUS_AWAY)) ? ID_STATUS_AWAY : ID_STATUS_OFFLINE); - mir_snprintf(setting, "%s_Lv2Status", protoName); - autoAwaySetting.lv2Status = db_get_w(0, AAAMODULENAME, setting, (flags&StatusModeToProtoFlag(ID_STATUS_NA)) ? ID_STATUS_NA : ID_STATUS_OFFLINE); - - return 0; -} - -static int ProcessProtoAck(WPARAM, LPARAM lParam) -{ - ACKDATA *ack = (ACKDATA*)lParam; - if (ack->type != ACKTYPE_STATUS || ack->result != ACKRESULT_SUCCESS) - return 0; - - log_debugA("ProcessProtoAck: ack->szModule: %s", ack->szModule); - for (auto &it : protoList) { - log_debugA("chk: %s", it->m_szName); - if (!mir_strcmp(it->m_szName, ack->szModule)) { - log_debugA("ack->szModule: %s p.statusChanged: %d", ack->szModule, it->bStatusChanged); - if (!it->bStatusChanged) - it->bManualStatus = true; - - it->bStatusChanged = false; - } - } - - return 0; -} - -///////////////////////////////////////////////////////////////////////////////////////// -// Account control event - -static char* status2descr(int status) -{ - switch (status) { - case ACTIVE: return "ACTIVE"; - case STATUS1_SET: return "STATUS1_SET"; - case STATUS2_SET: return "STATUS2_SET"; - case SET_ORGSTATUS: return "SET_ORGSTATUS"; - case HIDDEN_ACTIVE: return "HIDDEN_ACTIVE"; - } - return "ERROR"; -} - -static int changeState(SMProto &setting, int mode, STATES newState) -{ - if (setting.curState == newState) - return 0; - - setting.oldState = setting.curState; - setting.curState = newState; - - log_debugA("%s state change: %s -> %s", setting.m_szName, status2descr(setting.oldState), status2descr(setting.curState)); - - if (setting.curState != SET_ORGSTATUS && setting.curState != ACTIVE && setting.bStatusChanged) { - /* change the awaymessage */ - if (setting.m_szMsg != nullptr) { - mir_free(setting.m_szMsg); - setting.m_szMsg = nullptr; - } - - if (db_get_b(0, AAAMODULENAME, StatusModeToDbSetting(setting.aaaStatus, SETTING_MSGCUSTOM), FALSE)) - setting.m_szMsg = db_get_wsa(0, AAAMODULENAME, StatusModeToDbSetting(setting.aaaStatus, SETTING_STATUSMSG)); - } - else if (setting.m_szMsg != nullptr) { - mir_free(setting.m_szMsg); - setting.m_szMsg = nullptr; - } - - if (setting.optionFlags & FLAG_ENTERIDLE) { - if (newState == ACTIVE) // we're returning back - Idle_Enter(-1); - else - Idle_Enter(mode); - } - - return 0; -} - -static int getIdleMode(int options) -{ - if ((options & FLAG_ONSAVER) && IsScreenSaverRunning()) - return 1; - - if ((options & FLAG_ONLOCK) && IsWorkstationLocked()) - return 2; - - if ((options & FLAG_ONTS) && IsTerminalDisconnected()) - return 3; - - if ((options & FLAG_FULLSCREEN) && IsFullScreen()) - return 4; - - return 0; -} - -static VOID CALLBACK AutoAwayTimer(HWND, UINT, UINT_PTR, DWORD) -{ - int statusChanged = FALSE; - int confirm = FALSE; - - for (auto &it : protoList) { - it->aaaStatus = ID_STATUS_DISABLED; - - if (it->optionFlags & FLAG_MONITORMIRANDA) - mouseStationaryTimer = (GetTickCount() - lastMirandaInput) / 1000; - else { - LASTINPUTINFO ii = { sizeof(ii) }; - GetLastInputInfo(&ii); - mouseStationaryTimer = (GetTickCount() - ii.dwTime) / 1000; - } - - int sts1Time = it->awayTime * SECS_PER_MINUTE; - int sts2Time = it->naTime * SECS_PER_MINUTE; - int sts1setTime = it->sts1setTimer == 0 ? 0 : (GetTickCount() - it->sts1setTimer) / 1000; - int currentMode = Proto_GetStatus(it->m_szName); - - int mode = getIdleMode(it->optionFlags); - - /* check states */ - if (it->curState == ACTIVE) { - if (((mouseStationaryTimer >= sts1Time && (it->optionFlags & FLAG_ONMOUSE)) || mode) && currentMode != it->lv1Status && it->statusFlags & StatusModeToProtoFlag(currentMode)) { - if (it->optionFlags & FLAG_ONMOUSE) - mode = 5; - - /* from ACTIVE to STATUS1_SET */ - it->m_lastStatus = it->originalStatusMode = Proto_GetStatus(it->m_szName); - it->aaaStatus = it->lv1Status; - it->sts1setTimer = GetTickCount(); - sts1setTime = 0; - it->bStatusChanged = statusChanged = true; - changeState(*it, mode, STATUS1_SET); - } - else if (mouseStationaryTimer >= sts2Time && currentMode == it->lv1Status && currentMode != it->lv2Status && (it->optionFlags & FLAG_SETNA) && (it->statusFlags & StatusModeToProtoFlag(currentMode))) { - /* from ACTIVE to STATUS2_SET */ - it->m_lastStatus = it->originalStatusMode = Proto_GetStatus(it->m_szName); - it->aaaStatus = it->lv2Status; - it->bStatusChanged = statusChanged = true; - changeState(*it, mode, STATUS2_SET); - } - } - - if (it->curState == STATUS1_SET) { - if ((mouseStationaryTimer < sts1Time && !mode) && !(it->optionFlags & FLAG_RESET)) { - /* from STATUS1_SET to HIDDEN_ACTIVE */ - changeState(*it, mode, HIDDEN_ACTIVE); - it->m_lastStatus = Proto_GetStatus(it->m_szName); - } - else if (((mouseStationaryTimer < sts1Time) && !mode) && - ((it->optionFlags & FLAG_LV2ONINACTIVE) || (!(it->optionFlags & FLAG_SETNA))) && - (it->optionFlags & FLAG_RESET)) { - /* from STATUS1_SET to SET_ORGSTATUS */ - changeState(*it, mode, SET_ORGSTATUS); - } - else if ((it->optionFlags & FLAG_SETNA) && sts1setTime >= sts2Time) { - /* when set STATUS2, currentMode doesn't have to be in the selected status list (statusFlags) */ - /* from STATUS1_SET to STATUS2_SET */ - it->m_lastStatus = Proto_GetStatus(it->m_szName); - it->aaaStatus = it->lv2Status; - it->bStatusChanged = statusChanged = true; - changeState(*it, mode, STATUS2_SET); - } - } - - if (it->curState == STATUS2_SET) { - if (mouseStationaryTimer < sts2Time && !mode && (it->optionFlags & FLAG_RESET)) { - /* from STATUS2_SET to SET_ORGSTATUS */ - changeState(*it, mode, SET_ORGSTATUS); - } - else if (mouseStationaryTimer < sts2Time && !mode && !(it->optionFlags & FLAG_RESET)) { - /* from STATUS2_SET to HIDDEN_ACTIVE */ - /* Remember: after status1 is set, and "only on inactive" is NOT set, it implies !reset. */ - changeState(*it, mode, HIDDEN_ACTIVE); - it->m_lastStatus = Proto_GetStatus(it->m_szName); - } - } - - if (it->curState == HIDDEN_ACTIVE) { - if (it->bManualStatus) { - /* HIDDEN_ACTIVE to ACTIVE */ - // it->bStatusChanged = false; - changeState(*it, mode, ACTIVE); - it->sts1setTimer = 0; - it->bManualStatus = false; - } - else if ((it->optionFlags & FLAG_SETNA) && currentMode == it->lv1Status && - currentMode != it->lv2Status && (it->statusFlags & StatusModeToProtoFlag(currentMode)) && - (mouseStationaryTimer >= sts2Time || (sts1setTime >= sts2Time && !(it->optionFlags & FLAG_LV2ONINACTIVE)))) { - /* HIDDEN_ACTIVE to STATUS2_SET */ - it->m_lastStatus = it->originalStatusMode = Proto_GetStatus(it->m_szName); - it->aaaStatus = it->lv2Status; - it->bStatusChanged = statusChanged = true; - changeState(*it, mode, STATUS2_SET); - } - } - if (it->curState == SET_ORGSTATUS) { - /* SET_ORGSTATUS to ACTIVE */ - it->m_lastStatus = Proto_GetStatus(it->m_szName); - it->aaaStatus = it->originalStatusMode; - confirm = (it->optionFlags & FLAG_CONFIRM) ? TRUE : confirm; - it->bStatusChanged = statusChanged = true; - changeState(*it, mode, ACTIVE); - it->sts1setTimer = 0; - } - it->bManualStatus = false; - } - - if (confirm || statusChanged) { - TProtoSettings ps(protoList); // make a copy of data not to pollute main array - for (auto &it : ps) - it->m_status = it->aaaStatus; - - if (confirm) - confirmDialog = ShowConfirmDialogEx(&ps, db_get_w(0, AAAMODULENAME, SETTING_CONFIRMDELAY, 5)); - else if (statusChanged) - SetStatusEx(ps); - } -} - -///////////////////////////////////////////////////////////////////////////////////////// -// Windows hooks - -static int HookWindowsHooks(int hookMiranda, int hookAll) -{ - if (hookMiranda) { - if (monitorKeyboard && hMirandaKeyBoardHook == nullptr) - hMirandaKeyBoardHook = SetWindowsHookEx(WH_KEYBOARD, MirandaKeyBoardHookFunction, nullptr, GetCurrentThreadId()); - if (monitorMouse && hMirandaMouseHook == nullptr) - hMirandaMouseHook = SetWindowsHookEx(WH_MOUSE, MirandaMouseHookFunction, nullptr, GetCurrentThreadId()); - } - if (hookAll) { - if (monitorKeyboard && hKeyBoardHook == nullptr) - hKeyBoardHook = SetWindowsHookEx(WH_KEYBOARD, KeyBoardHookFunction, nullptr, GetCurrentThreadId()); - if (monitorMouse && hMouseHook == nullptr) - hMouseHook = SetWindowsHookEx(WH_MOUSE, MouseHookFunction, nullptr, GetCurrentThreadId()); - } - - return 0; -} - -static int UnhookWindowsHooks() -{ - UnhookWindowsHookEx(hMouseHook); - UnhookWindowsHookEx(hKeyBoardHook); - UnhookWindowsHookEx(hMirandaMouseHook); - UnhookWindowsHookEx(hMirandaKeyBoardHook); - - hMouseHook = hKeyBoardHook = hMirandaMouseHook = hMirandaKeyBoardHook = nullptr; - return 0; -} - -static LRESULT CALLBACK MirandaMouseHookFunction(int code, WPARAM wParam, LPARAM lParam) -{ - if (code >= 0) { - PMOUSEHOOKSTRUCT mouseInfo = (PMOUSEHOOKSTRUCT)lParam; - POINT pt = mouseInfo->pt; - - /* TioDuke's KeyBoardNotifyExt: only update if a Miranda window is focused */ - DWORD pid; - GetWindowThreadProcessId(GetForegroundWindow(), &pid); - if (pid != GetCurrentProcessId()) - return CallNextHookEx(hMirandaMouseHook, code, wParam, lParam); - - if (pt.x != lastMousePos.x || pt.y != lastMousePos.y) { - lastMousePos = pt; - lastMirandaInput = GetTickCount(); - } - } - - return CallNextHookEx(hMirandaMouseHook, code, wParam, lParam); -} - -static LRESULT CALLBACK MirandaKeyBoardHookFunction(int code, WPARAM wParam, LPARAM lParam) -{ - if (code >= 0) { - if (ignoreAltCombo) { - if (((GetKeyState(VK_MENU) < 0) || (wParam == VK_MENU)) || - ((GetKeyState(VK_TAB) < 0) || (wParam == VK_TAB)) || - ((GetKeyState(VK_SHIFT) < 0) || (wParam == VK_SHIFT)) || - ((GetKeyState(VK_CONTROL) < 0) || (wParam == VK_CONTROL)) || - ((GetKeyState(VK_ESCAPE) < 0) || (wParam == VK_ESCAPE)) || - ((GetKeyState(VK_LWIN) < 0) || (wParam == VK_LWIN)) || - ((GetKeyState(VK_RWIN) < 0) || (wParam == VK_RWIN))) { - return CallNextHookEx(hMirandaKeyBoardHook, code, wParam, lParam); - } - } - - switch (wParam) { - case VK_NUMLOCK: - case VK_CAPITAL: - case VK_SCROLL: - if (!ignoreLockKeys) - lastMirandaInput = GetTickCount(); - break; - - case VK_TAB: - case VK_SHIFT: - case VK_CONTROL: - case VK_MENU: - case VK_ESCAPE: - case VK_LWIN: - case VK_RWIN: - if (!ignoreSysKeys) - lastMirandaInput = GetTickCount(); - break; - - default: - lastMirandaInput = GetTickCount(); - break; - } - } - - return CallNextHookEx(hMirandaKeyBoardHook, code, wParam, lParam); -} - -static LRESULT CALLBACK MouseHookFunction(int code, WPARAM wParam, LPARAM lParam) -{ - if (code >= 0) { - PMOUSEHOOKSTRUCT mouseInfo = (PMOUSEHOOKSTRUCT)lParam; - POINT pt = mouseInfo->pt; - - /* TioDuke's KeyBoardNotifyExt: also grab clicks */ - if ((wParam >= WM_NCLBUTTONDOWN && wParam <= WM_NCXBUTTONDBLCLK && wParam != 0x00AA) || (wParam >= WM_LBUTTONDOWN && wParam <= WM_XBUTTONDBLCLK)) - lastInput = GetTickCount(); - - if (pt.x != lastMousePos.x || pt.y != lastMousePos.y) { - lastMousePos = pt; - lastInput = GetTickCount(); - } - } - - return CallNextHookEx(hMouseHook, code, wParam, lParam); -} - -static LRESULT CALLBACK KeyBoardHookFunction(int code, WPARAM wParam, LPARAM lParam) -{ - if (code >= 0) { - if (ignoreAltCombo) { - if (((GetKeyState(VK_MENU) < 0) || (wParam == VK_MENU)) || - ((GetKeyState(VK_TAB) < 0) || (wParam == VK_TAB)) || - ((GetKeyState(VK_SHIFT) < 0) || (wParam == VK_SHIFT)) || - ((GetKeyState(VK_CONTROL) < 0) || (wParam == VK_CONTROL)) || - ((GetKeyState(VK_ESCAPE) < 0) || (wParam == VK_ESCAPE)) || - ((GetKeyState(VK_LWIN) < 0) || (wParam == VK_LWIN)) || - ((GetKeyState(VK_RWIN) < 0) || (wParam == VK_RWIN))) { - return CallNextHookEx(hKeyBoardHook, code, wParam, lParam); - } - } - - switch (wParam) { - case VK_NUMLOCK: - case VK_CAPITAL: - case VK_SCROLL: - if (!ignoreLockKeys) - lastInput = GetTickCount(); - break; - - case VK_TAB: - case VK_SHIFT: - case VK_CONTROL: - case VK_MENU: - case VK_ESCAPE: - case VK_LWIN: - case VK_RWIN: - if (!ignoreSysKeys) - lastInput = GetTickCount(); - break; - - default: - lastInput = GetTickCount(); - break; - } - } - - return CallNextHookEx(hKeyBoardHook, code, wParam, lParam); -} - -///////////////////////////////////////////////////////////////////////////////////////// -// Inits & stuff - -static int AutoAwayShutdown(WPARAM, LPARAM) -{ - AAAUnloadOptions(); - return 0; -} - -int AAAModuleLoaded(WPARAM, LPARAM) -{ - hEvents[0] = HookEvent(ME_OPT_INITIALISE, AutoAwayOptInitialise); - hEvents[1] = HookEvent(ME_SYSTEM_PRESHUTDOWN, AutoAwayShutdown); - hEvents[2] = HookEvent(ME_PROTO_ACK, ProcessProtoAck); - - mouseStationaryTimer = 0; - lastInput = lastMirandaInput = GetTickCount(); - - //////////////////////////////////////////////////////////////////////////////////////// - - AAALoadOptions(); - return 0; -} - -void AdvancedAutoAwayLoad() -{ - AAALangPack = GetPluginLangId(MIID_LAST, 0); - - if (g_bMirandaLoaded) - AAAModuleLoaded(0, 0); - else - HookEvent(ME_SYSTEM_MODULESLOADED, AAAModuleLoaded); -} - -void AdvancedAutoAwayUnload() -{ - if (g_bMirandaLoaded) - AutoAwayShutdown(0, 0); - - KillModuleOptions(AAALangPack); - - for (auto &it : hEvents) { - UnhookEvent(it); - it = nullptr; - } - - protoList.destroy(); -} diff --git a/plugins/StatusManager/src/AdvancedAutoAway/advancedautoaway.h b/plugins/StatusManager/src/AdvancedAutoAway/advancedautoaway.h deleted file mode 100644 index e2d6b4ec61..0000000000 --- a/plugins/StatusManager/src/AdvancedAutoAway/advancedautoaway.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - AdvancedAutoAway 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 __ADVANCED_AUTOAWAY_HEADER -#define __ADVANCED_AUTOAWAY_HEADER - -#define AAAMODULENAME "AdvancedAutoAway" -#define SETTING_IGNLOCK "IgnoreLockKeys" -#define SETTING_IGNSYSKEYS "IgnoreSysKeys" -#define SETTING_IGNALTCOMBO "IgnoreAltCombo" -#define SETTING_SAMESETTINGS "SameAutoAwaySettings" -#define SETTING_ALL "ALLPROTOS" -#define SETTING_MSGCUSTOM "Custom" -#define SETTING_STATUSMSG "Msg" -#define SETTING_CONFIRMDELAY "ConfirmTimeout" -#define SETTING_ENTERIDLE "EnterIdle" - -#define SETTING_AWAYTIME_DEFAULT 5 -#define SETTING_NATIME_DEFAULT 20 -#define SETTING_AWAYCHECKTIMEINSECS "CheckInterval" - -#define SETTING_MONITORMOUSE "MonitorMouse" -#define SETTING_MONITORKEYBOARD "MonitorKeyboard" - -void AdvancedAutoAwayLoad(); -void AdvancedAutoAwayUnload(); - -int LoadAutoAwaySetting(SMProto&, char *protoName); -void AAALoadOptions(); - -#endif |
