From 8fa9881c798377013852e9b9e8a87ae8644a03a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20P=C3=B6sel?= Date: Tue, 29 Oct 2013 21:18:10 +0000 Subject: Adopted SmartAutoAway plugin First compilable version. git-svn-id: http://svn.miranda-ng.org/main/trunk@6688 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/SmartAutoAway/idleMenu.cpp | 132 +++++++++++++++++++++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 plugins/SmartAutoAway/idleMenu.cpp (limited to 'plugins/SmartAutoAway/idleMenu.cpp') diff --git a/plugins/SmartAutoAway/idleMenu.cpp b/plugins/SmartAutoAway/idleMenu.cpp new file mode 100644 index 0000000000..ae03310421 --- /dev/null +++ b/plugins/SmartAutoAway/idleMenu.cpp @@ -0,0 +1,132 @@ +/* + +Miranda IM: the free IM client for Microsoft* Windows* + +Copyright 2000-2006 Miranda ICQ/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 "globals.h" +#ifdef SAA_PLUGIN +# include "m_icolib.h" +#endif + +HANDLE hIdleMenu[4] = {NULL,NULL,NULL,NULL}; +HANDLE hHookIconsChanged = NULL; +static char *iconDescs[4]={"Not Idle","Short Idle","Long Idle","Reconnect"}; +static int iconInd[4]={IDI_IDLE_HERE,IDI_IDLE_SHORT,IDI_IDLE_LONG,IDI_RECONNECT}; +static char *IdleServices[4]={AA_IDLE_BENOTIDLESERVICE,AA_IDLE_BESHORTIDLESERVICE,AA_IDLE_BELONGIDLESERVICE,AA_IDLE_RECONNECTSERVICE}; + +void xModifyMenu(int menuInd,long flags) +{ if (hIdleMenu[menuInd]){ + CLISTMENUITEM mi = {0}; + + mi.cbSize = sizeof(mi); + mi.flags = CMIM_FLAGS; + mi.flags |= flags; + CallService(MS_CLIST_MODIFYMENUITEM,(WPARAM)hIdleMenu[menuInd],(LPARAM)&mi); +} } + +static int hasIcoLib = 0; + +static void CListSetMenuItemIcon(HANDLE hMenuItem, HICON hIcon) +{ + CLISTMENUITEM mi = {0}; + + mi.cbSize = sizeof(mi); + mi.flags = CMIM_FLAGS | CMIM_ICON; + + mi.hIcon = hIcon; + CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hMenuItem, (LPARAM)&mi); +} + +static int IconLibIconsChanged(WPARAM wParam, LPARAM lParam) +{ + int i; + for (i=0;i<4;i++) + { + HICON hIcon = Skin_GetIcon(IdleServices[i]); + CListSetMenuItemIcon(hIdleMenu[i], hIcon); + Skin_ReleaseIcon(IdleServices[i]); + } + return 0; +} + +void AddIdleMenu(){ + CLISTMENUITEM mi; + int i; + + SKINICONDESC sid = {0}; + hHookIconsChanged = HookEvent(ME_SKIN2_ICONSCHANGED, IconLibIconsChanged); + hasIcoLib = 1; + sid.cbSize = sizeof(SKINICONDESC); + sid.pszSection = SECTIONNAME; + sid.pszDefaultFile = NULL; + sid.iDefaultIndex = 0; + for (i=0;i<4;i++){ + sid.pszDescription = iconDescs[i]; + sid.pszName = IdleServices[i]; + sid.iDefaultIndex = iconInd[i]; + sid.hDefaultIcon = (HICON)LoadImage( + #ifdef SAA_PLUGIN + g_hInst, + #else + GetModuleHandle(NULL), + #endif + MAKEINTRESOURCE( iconInd[i] ), IMAGE_ICON, 0, 0, 0); + Skin_AddIcon(&sid); + DestroyIcon(sid.hDefaultIcon); + } + + ZeroMemory(&mi,sizeof(mi)); + mi.cbSize=sizeof(mi); + mi.pszPopupName="&Idle"; + mi.popupPosition=1000090000; + for (i=0;i<4;i++) + { + mi.hIcon = Skin_GetIcon(IdleServices[i]); + mi.position = i+1; + mi.pszName = iconDescs[i]; + mi.pszService = IdleServices[i]; + if (i==3) mi.position = 1000000; + hIdleMenu[i] = (HANDLE)Menu_AddMainMenuItem(&mi); + + Skin_ReleaseIcon(IdleServices[i]); + } +} + +MIRANDASERVICE idleServiceNotIdle(WPARAM w, LPARAM l){ + SimulateIdle(0); + return 0; +}; +MIRANDASERVICE idleServiceShortIdle(WPARAM w, LPARAM l){ + SimulateIdle(1); + return 0; +}; +MIRANDASERVICE idleServiceLongIdle(WPARAM w, LPARAM l){ + SimulateIdle(2); + return 0; +}; +MIRANDASERVICE reconnectService(WPARAM w, LPARAM l){ + int i; + for (i=0;i