From 57f367fe12acc07ab0404c794795922600ee9c47 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Mon, 11 Dec 2017 17:42:59 +0300 Subject: StdIdle: options separated to their own file --- src/core/stdidle/src/idle.cpp | 171 ++++++--------------------------------- src/core/stdidle/src/options.cpp | 134 ++++++++++++++++++++++++++++++ src/core/stdidle/src/stdafx.h | 31 +++++++ 3 files changed, 190 insertions(+), 146 deletions(-) create mode 100644 src/core/stdidle/src/options.cpp (limited to 'src/core') diff --git a/src/core/stdidle/src/idle.cpp b/src/core/stdidle/src/idle.cpp index 4684a3344c..dfb2786f56 100644 --- a/src/core/stdidle/src/idle.cpp +++ b/src/core/stdidle/src/idle.cpp @@ -24,20 +24,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "stdafx.h" -#define IDLEMOD "Idle" - -static CMOption g_bIdleCheck(IDLEMOD, "UserIdleCheck", 0); -static CMOption g_bIdleMethod(IDLEMOD, "IdleMethod", 0); -static CMOption g_bIdleOnSaver(IDLEMOD, "IdleOnSaver", 0); -static CMOption g_bIdleOnFullScr(IDLEMOD, "IdleOnFullScr", 0); -static CMOption g_bIdleOnLock(IDLEMOD, "IdleOnLock", 0); -static CMOption g_bIdlePrivate(IDLEMOD, "IdlePrivate", 0); -static CMOption g_bIdleSoundsOff(IDLEMOD, "IdleSoundsOff", 1); -static CMOption g_bIdleOnTerminal(IDLEMOD, "IdleOnTerminalDisconnect", 0); -static CMOption g_bIdleStatusLock(IDLEMOD, "IdleStatusLock", 0); -static CMOption g_bAAEnable(IDLEMOD, "AAEnable", 0); -static CMOption g_bAAStatus(IDLEMOD, "AAStatus", 0); -static CMOption g_iIdleTime1st(IDLEMOD, "IdleTime1st", 10); +Settings S; static bool bModuleInitialized = false; @@ -48,38 +35,37 @@ struct IdleObject int bIsIdle; }; -static const WORD aa_Status[] = { ID_STATUS_AWAY, ID_STATUS_NA, ID_STATUS_OCCUPIED, ID_STATUS_DND, ID_STATUS_ONTHEPHONE, ID_STATUS_OUTTOLUNCH }; - static IdleObject gIdleObject; static HANDLE hIdleEvent; void CALLBACK IdleTimer(HWND hwnd, UINT umsg, UINT_PTR idEvent, DWORD dwTime); +int IdleOptInit(WPARAM wParam, LPARAM); -static void IdleObject_Create(IdleObject *obj) +void IdleObject_Create() { - memset(obj, 0, sizeof(IdleObject)); - obj->hTimer = SetTimer(nullptr, 0, 2000, IdleTimer); + memset(&gIdleObject, 0, sizeof(gIdleObject)); + gIdleObject.hTimer = SetTimer(nullptr, 0, 2000, IdleTimer); } -static void IdleObject_Destroy(IdleObject *obj) +void IdleObject_Destroy() { - if (obj->bIsIdle) + if (gIdleObject.bIsIdle) NotifyEventHooks(hIdleEvent, 0, 0); - obj->bIsIdle = false; - KillTimer(nullptr, obj->hTimer); + gIdleObject.bIsIdle = false; + KillTimer(nullptr, gIdleObject.hTimer); } static int IdleObject_IsUserIdle() { - if (g_bIdleMethod) { + if (S.bIdleMethod) { DWORD dwTick; CallService(MS_SYSTEM_GETIDLE, 0, (LPARAM)&dwTick); - return GetTickCount() - dwTick > (g_iIdleTime1st * 60 * 1000); + return GetTickCount() - dwTick > (S.iIdleTime1st * 60 * 1000); } LASTINPUTINFO ii = { sizeof(ii) }; if (GetLastInputInfo(&ii)) - return GetTickCount() - ii.dwTime > (g_iIdleTime1st * 60 * 1000); + return GetTickCount() - ii.dwTime > (S.iIdleTime1st * 60 * 1000); return FALSE; } @@ -89,23 +75,23 @@ static void IdleObject_Tick(IdleObject *obj) bool idle = false; int idleType = 0, flags = 0; - if (g_bIdleCheck && IdleObject_IsUserIdle()) { + if (S.bIdleCheck && IdleObject_IsUserIdle()) { idleType = 1; idle = true; } - else if (g_bIdleOnSaver && IsScreenSaverRunning()) { + else if (S.bIdleOnSaver && IsScreenSaverRunning()) { idleType = 2; idle = true; } - else if (g_bIdleOnFullScr && IsFullScreen()) { + else if (S.bIdleOnFullScr && IsFullScreen()) { idleType = 5; idle = true; } - else if (g_bIdleOnLock && IsWorkstationLocked()) { + else if (S.bIdleOnLock && IsWorkstationLocked()) { idleType = 3; idle = true; } - else if (g_bIdleOnTerminal && IsTerminalDisconnected()) { + else if (S.bIdleOnTerminal && IsTerminalDisconnected()) { idleType = 4; idle = true; } - if (g_bIdlePrivate) + if (S.bIdlePrivate) flags |= IDF_PRIVACY; if (!obj->bIsIdle && idle) { @@ -127,124 +113,17 @@ void CALLBACK IdleTimer(HWND, UINT, UINT_PTR idEvent, DWORD) IdleObject_Tick(&gIdleObject); } -int IdleGetStatusIndex(WORD status) -{ - for (int j = 0; j < _countof(aa_Status); j++) - if (aa_Status[j] == status) - return j; - - return 0; -} - -class COptionsDlg : public CPluginDlgBase -{ - CCtrlEdit edt1sttime; - CCtrlSpin spinIdle; - CCtrlCombo cmbAAStatus; - CCtrlCheck chkShort, chkOnWindows, chkOnMiranda, chkScreenSaver, chkFullScreen, chkLocked; - CCtrlCheck chkPrivate, chkStatusLock, chkTerminal, chkSoundsOff, chkShortIdle; - - void ShowHide() - { - BOOL bChecked = chkShort.GetState(); - chkOnWindows.Enable(bChecked); - chkOnMiranda.Enable(bChecked); - edt1sttime.Enable(bChecked); - - bChecked = chkShortIdle.GetState(); - cmbAAStatus.Enable(bChecked); - chkStatusLock.Enable(bChecked); - } - -public: - COptionsDlg() : - CPluginDlgBase(hInst, IDD_OPT_IDLE, IDLEMOD), - edt1sttime(this, IDC_IDLE1STTIME), - spinIdle(this, IDC_IDLESPIN), - cmbAAStatus(this, IDC_AASTATUS), - chkShort(this, IDC_IDLESHORT), - chkLocked(this, IDC_LOCKED), - chkPrivate(this, IDC_IDLEPRIVATE), - chkTerminal(this, IDC_IDLETERMINAL), - chkOnWindows(this, IDC_IDLEONWINDOWS), - chkSoundsOff(this, IDC_IDLESOUNDSOFF), - chkOnMiranda(this, IDC_IDLEONMIRANDA), - chkShortIdle(this, IDC_AASHORTIDLE), - chkStatusLock(this, IDC_IDLESTATUSLOCK), - chkFullScreen(this, IDC_FULLSCREEN), - chkScreenSaver(this, IDC_SCREENSAVER) - { - CreateLink(chkShort, g_bIdleCheck); - CreateLink(chkLocked, g_bIdleOnLock); - CreateLink(chkPrivate, g_bIdlePrivate); - CreateLink(chkTerminal, g_bIdleOnTerminal); - CreateLink(chkShortIdle, g_bAAEnable); - CreateLink(chkOnMiranda, g_bIdleMethod); - CreateLink(chkSoundsOff, g_bIdleSoundsOff); - CreateLink(chkStatusLock, g_bIdleStatusLock); - CreateLink(chkFullScreen, g_bIdleOnFullScr); - CreateLink(chkScreenSaver, g_bIdleOnSaver); - - chkShortIdle.OnChange = chkShort.OnChange = Callback(this, &COptionsDlg::onChange); - } - - virtual void OnInitDialog() override - { - chkOnWindows.SetState(!g_bIdleMethod); - - spinIdle.SetRange(60, 1); - spinIdle.SetPosition(g_iIdleTime1st); - - for (int j = 0; j < _countof(aa_Status); j++) - cmbAAStatus.AddString(pcli->pfnGetStatusModeDescription(aa_Status[j], 0)); - cmbAAStatus.SetCurSel(IdleGetStatusIndex(g_bAAStatus)); - - ShowHide(); - } - - virtual void OnApply() override - { - g_iIdleTime1st = spinIdle.GetPosition(); - - int curSel = cmbAAStatus.GetCurSel(); - if (curSel != CB_ERR) - g_bAAStatus = aa_Status[curSel]; - - // destroy any current idle and reset settings. - IdleObject_Destroy(&gIdleObject); - IdleObject_Create(&gIdleObject); - } - - void onChange(CCtrlCheck*) - { - ShowHide(); - } -}; - -static int IdleOptInit(WPARAM wParam, LPARAM) -{ - OPTIONSDIALOGPAGE odp = { 0 }; - odp.position = 100000000; - odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_IDLE); - odp.szGroup.a = LPGEN("Status"); - odp.szTitle.a = LPGEN("Idle"); - odp.flags = ODPF_BOLDGROUPS; - odp.pDialog = new COptionsDlg(); - Options_AddPage(wParam, &odp); - return 0; -} - static INT_PTR IdleGetInfo(WPARAM, LPARAM lParam) { MIRANDA_IDLE_INFO *mii = (MIRANDA_IDLE_INFO*)lParam; if (!mii || mii->cbSize != sizeof(MIRANDA_IDLE_INFO)) return 1; - mii->idleTime = g_iIdleTime1st; - mii->privacy = g_bIdlePrivate; - mii->aaStatus = (g_bAAEnable) ? g_bAAStatus : 0; - mii->aaLock = g_bIdleStatusLock; - mii->idlesoundsoff = g_bIdleSoundsOff; + mii->idleTime = S.iIdleTime1st; + mii->privacy = S.bIdlePrivate; + mii->aaStatus = (S.bAAEnable) ? S.bAAStatus : 0; + mii->aaLock = S.bIdleStatusLock; + mii->idlesoundsoff = S.bIdleSoundsOff; mii->idleType = gIdleObject.idleType; return 0; } @@ -254,7 +133,7 @@ int LoadIdleModule(void) bModuleInitialized = TRUE; hIdleEvent = CreateHookableEvent(ME_IDLE_CHANGED); - IdleObject_Create(&gIdleObject); + IdleObject_Create(); CreateServiceFunction(MS_IDLE_GETIDLEINFO, IdleGetInfo); HookEvent(ME_OPT_INITIALISE, IdleOptInit); return 0; @@ -264,7 +143,7 @@ void UnloadIdleModule() { if (!bModuleInitialized) return; - IdleObject_Destroy(&gIdleObject); + IdleObject_Destroy(); DestroyHookableEvent(hIdleEvent); hIdleEvent = nullptr; } diff --git a/src/core/stdidle/src/options.cpp b/src/core/stdidle/src/options.cpp new file mode 100644 index 0000000000..58484c7650 --- /dev/null +++ b/src/core/stdidle/src/options.cpp @@ -0,0 +1,134 @@ +/* + +Miranda NG: the free IM client for Microsoft* Windows* + +Copyright (c) 2012-17 Miranda NG project (https://miranda-ng.org), +Copyright (c) 2000-12 Miranda IM project, +all portions of this codebase are copyrighted to the people +listed in contributors.txt. + +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" + +static const WORD aa_Status[] = { ID_STATUS_AWAY, ID_STATUS_NA, ID_STATUS_OCCUPIED, ID_STATUS_DND, ID_STATUS_ONTHEPHONE, ID_STATUS_OUTTOLUNCH }; + +int IdleGetStatusIndex(WORD status) +{ + for (int j = 0; j < _countof(aa_Status); j++) + if (aa_Status[j] == status) + return j; + + return 0; +} + +class COptionsDlg : public CPluginDlgBase +{ + CCtrlEdit edt1sttime; + CCtrlSpin spinIdle; + CCtrlCombo cmbAAStatus; + CCtrlCheck chkShort, chkOnWindows, chkOnMiranda, chkScreenSaver, chkFullScreen, chkLocked; + CCtrlCheck chkPrivate, chkStatusLock, chkTerminal, chkSoundsOff, chkShortIdle; + + void ShowHide() + { + BOOL bChecked = chkShort.GetState(); + chkOnWindows.Enable(bChecked); + chkOnMiranda.Enable(bChecked); + edt1sttime.Enable(bChecked); + + bChecked = chkShortIdle.GetState(); + cmbAAStatus.Enable(bChecked); + chkStatusLock.Enable(bChecked); + } + +public: + COptionsDlg() : + CPluginDlgBase(hInst, IDD_OPT_IDLE, IDLEMOD), + edt1sttime(this, IDC_IDLE1STTIME), + spinIdle(this, IDC_IDLESPIN), + cmbAAStatus(this, IDC_AASTATUS), + chkShort(this, IDC_IDLESHORT), + chkLocked(this, IDC_LOCKED), + chkPrivate(this, IDC_IDLEPRIVATE), + chkTerminal(this, IDC_IDLETERMINAL), + chkOnWindows(this, IDC_IDLEONWINDOWS), + chkSoundsOff(this, IDC_IDLESOUNDSOFF), + chkOnMiranda(this, IDC_IDLEONMIRANDA), + chkShortIdle(this, IDC_AASHORTIDLE), + chkStatusLock(this, IDC_IDLESTATUSLOCK), + chkFullScreen(this, IDC_FULLSCREEN), + chkScreenSaver(this, IDC_SCREENSAVER) + { + CreateLink(chkShort, S.bIdleCheck); + CreateLink(chkLocked, S.bIdleOnLock); + CreateLink(chkPrivate, S.bIdlePrivate); + CreateLink(chkTerminal, S.bIdleOnTerminal); + CreateLink(chkShortIdle, S.bAAEnable); + CreateLink(chkOnMiranda, S.bIdleMethod); + CreateLink(chkSoundsOff, S.bIdleSoundsOff); + CreateLink(chkStatusLock, S.bIdleStatusLock); + CreateLink(chkFullScreen, S.bIdleOnFullScr); + CreateLink(chkScreenSaver, S.bIdleOnSaver); + + chkShortIdle.OnChange = chkShort.OnChange = Callback(this, &COptionsDlg::onChange); + } + + virtual void OnInitDialog() override + { + chkOnWindows.SetState(!S.bIdleMethod); + + spinIdle.SetRange(60, 1); + spinIdle.SetPosition(S.iIdleTime1st); + + for (int j = 0; j < _countof(aa_Status); j++) + cmbAAStatus.AddString(pcli->pfnGetStatusModeDescription(aa_Status[j], 0)); + cmbAAStatus.SetCurSel(IdleGetStatusIndex(S.bAAStatus)); + + ShowHide(); + } + + virtual void OnApply() override + { + S.iIdleTime1st = spinIdle.GetPosition(); + + int curSel = cmbAAStatus.GetCurSel(); + if (curSel != CB_ERR) + S.bAAStatus = aa_Status[curSel]; + + // destroy any current idle and reset settings. + IdleObject_Destroy(); + IdleObject_Create(); + } + + void onChange(CCtrlCheck*) + { + ShowHide(); + } +}; + +int IdleOptInit(WPARAM wParam, LPARAM) +{ + OPTIONSDIALOGPAGE odp = { 0 }; + odp.position = 100000000; + odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_IDLE); + odp.szGroup.a = LPGEN("Status"); + odp.szTitle.a = LPGEN("Idle"); + odp.flags = ODPF_BOLDGROUPS; + odp.pDialog = new COptionsDlg(); + Options_AddPage(wParam, &odp); + return 0; +} diff --git a/src/core/stdidle/src/stdafx.h b/src/core/stdidle/src/stdafx.h index 6ca7b977ad..2060da635d 100644 --- a/src/core/stdidle/src/stdafx.h +++ b/src/core/stdidle/src/stdafx.h @@ -64,4 +64,35 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "../../mir_app/src/resource.h" +#define IDLEMOD "Idle" + extern HINSTANCE hInst; + +struct Settings +{ + Settings() : + bIdleCheck(IDLEMOD, "UserIdleCheck", 0), + bIdleMethod(IDLEMOD, "IdleMethod", 0), + bIdleOnSaver(IDLEMOD, "IdleOnSaver", 0), + bIdleOnFullScr(IDLEMOD, "IdleOnFullScr", 0), + bIdleOnLock(IDLEMOD, "IdleOnLock", 0), + bIdlePrivate(IDLEMOD, "IdlePrivate", 0), + bIdleSoundsOff(IDLEMOD, "IdleSoundsOff", 1), + bIdleOnTerminal(IDLEMOD, "IdleOnTerminalDisconnect", 0), + bIdleStatusLock(IDLEMOD, "IdleStatusLock", 0), + bAAEnable(IDLEMOD, "AAEnable", 0), + bAAStatus(IDLEMOD, "AAStatus", 0), + iIdleTime1st(IDLEMOD, "IdleTime1st", 10) + {} + + CMOption bIdleCheck, bIdleMethod, bIdleOnSaver, bIdleOnFullScr, bIdleOnLock; + CMOption bIdlePrivate, bIdleSoundsOff, bIdleOnTerminal, bIdleStatusLock; + CMOption bAAEnable; + CMOption bAAStatus; + CMOption iIdleTime1st; +}; + +extern Settings S; + +void IdleObject_Destroy(); +void IdleObject_Create(); -- cgit v1.2.3