diff options
author | George Hazan <ghazan@miranda.im> | 2017-12-11 17:42:59 +0300 |
---|---|---|
committer | George Hazan <ghazan@miranda.im> | 2017-12-11 17:42:59 +0300 |
commit | 57f367fe12acc07ab0404c794795922600ee9c47 (patch) | |
tree | 8c4745f28e1585fe2c71b78bbd5b495c39ab7eb8 | |
parent | f3f0942aad16fc57bc88a3cfc9fe202e31d41a48 (diff) |
StdIdle: options separated to their own file
-rw-r--r-- | src/core/stdidle/src/idle.cpp | 171 | ||||
-rw-r--r-- | src/core/stdidle/src/options.cpp | 134 | ||||
-rw-r--r-- | src/core/stdidle/src/stdafx.h | 31 |
3 files changed, 190 insertions, 146 deletions
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<BYTE> g_bIdleCheck(IDLEMOD, "UserIdleCheck", 0);
-static CMOption<BYTE> g_bIdleMethod(IDLEMOD, "IdleMethod", 0);
-static CMOption<BYTE> g_bIdleOnSaver(IDLEMOD, "IdleOnSaver", 0);
-static CMOption<BYTE> g_bIdleOnFullScr(IDLEMOD, "IdleOnFullScr", 0);
-static CMOption<BYTE> g_bIdleOnLock(IDLEMOD, "IdleOnLock", 0);
-static CMOption<BYTE> g_bIdlePrivate(IDLEMOD, "IdlePrivate", 0);
-static CMOption<BYTE> g_bIdleSoundsOff(IDLEMOD, "IdleSoundsOff", 1);
-static CMOption<BYTE> g_bIdleOnTerminal(IDLEMOD, "IdleOnTerminalDisconnect", 0);
-static CMOption<BYTE> g_bIdleStatusLock(IDLEMOD, "IdleStatusLock", 0);
-static CMOption<BYTE> g_bAAEnable(IDLEMOD, "AAEnable", 0);
-static CMOption<WORD> g_bAAStatus(IDLEMOD, "AAStatus", 0);
-static CMOption<DWORD> 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<BYTE> bIdleCheck, bIdleMethod, bIdleOnSaver, bIdleOnFullScr, bIdleOnLock;
+ CMOption<BYTE> bIdlePrivate, bIdleSoundsOff, bIdleOnTerminal, bIdleStatusLock;
+ CMOption<BYTE> bAAEnable;
+ CMOption<WORD> bAAStatus;
+ CMOption<DWORD> iIdleTime1st;
+};
+
+extern Settings S;
+
+void IdleObject_Destroy();
+void IdleObject_Create();
|