int LoadHelpModule(void) { HookEvent(ME_SYSTEM_PRESHUTDOWN,ShutdownHelpModule); CreateServiceFunction("Help/AboutCommand",AboutCommand); CreateServiceFunction("Help/IndexCommand",IndexCommand); CreateServiceFunction("Help/WebsiteCommand",WebsiteCommand); CreateServiceFunction("Help/BugCommand",BugCommand); hBugEvent = CreateHookableEvent(ME_HELP_BUGREPORT); SetHookDefaultForHookableEvent(hBugEvent, BugCommandEvent); CLISTMENUITEM mi = { 0 }; mi.cbSize = sizeof(mi); mi.flags = CMIF_ICONFROMICOLIB; mi.icolibItem = GetSkinIconHandle(SKINICON_OTHER_MIRANDA); mi.pszPopupName = LPGEN("&Help"); mi.popupPosition = 2000090000; mi.position = 2000090000; mi.pszName = LPGEN("&About..."); mi.pszService = "Help/AboutCommand"; CallService(MS_CLIST_ADDMAINMENUITEM,0,(LPARAM)&mi); mi.icolibItem = GetSkinIconHandle(SKINICON_OTHER_HELP); mi.position = -500050000; mi.pszName = LPGEN("&Support"); mi.pszService = "Help/IndexCommand"; CallService(MS_CLIST_ADDMAINMENUITEM,0,(LPARAM)&mi); mi.icolibItem = GetSkinIconHandle(SKINICON_OTHER_MIRANDAWEB); mi.position = 2000050000; mi.pszName = LPGEN("&Miranda IM Homepage"); mi.pszService = "Help/WebsiteCommand"; CallService(MS_CLIST_ADDMAINMENUITEM,0,(LPARAM)&mi); mi.icolibItem = GetSkinIconHandle(SKINICON_EVENT_URL); mi.position = 2000040000; mi.pszName = LPGEN("&Report Bug"); mi.pszService = "Help/BugCommand"; CallService(MS_CLIST_ADDMAINMENUITEM,0,(LPARAM)&mi); return 0; }
int OptProtosLoaded(WPARAM, LPARAM) { CLISTMENUITEM mi = { 0 }; mi.cbSize = sizeof(mi); mi.flags = CMIF_ICONFROMICOLIB; mi.icolibItem = GetSkinIconHandle( SKINICON_OTHER_ACCMGR ); mi.position = 1900000000; mi.pszName = LPGEN("&Accounts..."); mi.pszService = MS_PROTO_SHOWACCMGR; CallService( MS_CLIST_ADDMAINMENUITEM, 0, ( LPARAM )&mi ); return 0; }
HICON LoadSkinIcon( int idx, bool big ) { // // Query for global status icons // if ( idx < SKINICON_EVENT_MESSAGE ) { if ( idx >= SIZEOF( statusIcons )) return NULL; return LoadSkinProtoIcon( NULL, statusIcons[ idx ].id, big ); } return IcoLib_GetIconByHandle( GetSkinIconHandle( idx ), big ); }
int LoadSendRecvEMailModule(void) { CLISTMENUITEM mi = { 0 }; mi.cbSize = sizeof(mi); mi.position = -2000010000; mi.flags = CMIF_ICONFROMICOLIB; mi.icolibItem = GetSkinIconHandle( SKINICON_OTHER_SENDEMAIL ); mi.pszName = LPGEN("&E-mail"); mi.pszService = MS_EMAIL_SENDEMAIL; hEMailMenuItem = (HANDLE)CallService(MS_CLIST_ADDCONTACTMENUITEM, 0, (LPARAM)&mi); CreateServiceFunction(MS_EMAIL_SENDEMAIL, SendEMailCommand); HookEvent(ME_CLIST_PREBUILDCONTACTMENU, EMailPreBuildMenu); return 0; }
static int OnContactMenuBuild(WPARAM wParam, LPARAM) { int i; OBJLIST<GroupItemSort> groups(10, GroupItemSort::compare); if (!hMoveToGroupItem) { CLISTMENUITEM mi = { sizeof(mi) }; mi.position = 100000; mi.pszName = LPGEN("&Move to group"); mi.flags = CMIF_ROOTHANDLE; mi.icolibItem = GetSkinIconHandle(SKINICON_OTHER_GROUP); hMoveToGroupItem = Menu_AddContactMenuItem(&mi); } for (i=0; i < lphGroupsItems.getCount(); i++) CallService(MS_CLIST_REMOVECONTACTMENUITEM, (WPARAM)lphGroupsItems[i], 0); lphGroupsItems.destroy(); ptrT szContactGroup( db_get_tsa((HANDLE)wParam, "CList", "Group")); int pos = 1000; AddGroupItem(hMoveToGroupItem, TranslateT("<Root group>"), pos, -1, !szContactGroup); pos += 100000; // Separator for (i=0; ; i++) { char intname[20]; _itoa(i, intname, 10); DBVARIANT dbv; if (db_get_ts(NULL, "CListGroups", intname, &dbv)) break; if (dbv.ptszVal[0]) groups.insert(new GroupItemSort(dbv.ptszVal + 1, i + 1)); mir_free(dbv.ptszVal); } for (i=0; i < groups.getCount(); i++) { bool checked = szContactGroup && !_tcscmp(szContactGroup, groups[i].name); AddGroupItem(hMoveToGroupItem, groups[i].name, ++pos, groups[i].position, checked); } return 0; }
static INT_PTR sttLoadSkinIcon( WPARAM wParam, LPARAM lParam ) { switch (lParam) { case 0: return (INT_PTR)LoadSkinIcon( wParam ); case 1: return (INT_PTR)GetSkinIconHandle( wParam ); case 2: return (INT_PTR)LoadSkinIcon( wParam, true ); } return 0; }
int LoadHistoryModule(void) { CLISTMENUITEM mi = { 0 }; mi.cbSize = sizeof(mi); mi.position = 1000090000; mi.flags = CMIF_ICONFROMICOLIB; mi.icolibItem = GetSkinIconHandle( SKINICON_OTHER_HISTORY ); mi.pszName = LPGEN("View &History"); mi.pszService = MS_HISTORY_SHOWCONTACTHISTORY; CallService(MS_CLIST_ADDCONTACTMENUITEM,0,(LPARAM)&mi); CreateServiceFunction(MS_HISTORY_SHOWCONTACTHISTORY,UserHistoryCommand); hWindowList=(HANDLE)CallService(MS_UTILS_ALLOCWINDOWLIST,0,0); HookEvent(ME_DB_CONTACT_DELETED,HistoryContactDelete); HookEvent(ME_SYSTEM_PRESHUTDOWN,PreShutdownHistoryModule); return 0; }
void InitCustomMenus(void) { CreateServiceFunction("MainMenuExecService", MainMenuExecService); CreateServiceFunction("ContactMenuExecService", ContactMenuExecService); CreateServiceFunction("ContactMenuCheckService", ContactMenuCheckService); CreateServiceFunction("StatusMenuExecService", StatusMenuExecService); CreateServiceFunction("StatusMenuCheckService", StatusMenuCheckService); //free services CreateServiceFunction("CLISTMENUS/FreeOwnerDataMainMenu", FreeOwnerDataMainMenu); CreateServiceFunction("CLISTMENUS/FreeOwnerDataContactMenu", FreeOwnerDataContactMenu); CreateServiceFunction("CLISTMENUS/FreeOwnerDataStatusMenu", FreeOwnerDataStatusMenu); CreateServiceFunction(MS_CLIST_SETSTATUSMODE, SetStatusMode); CreateServiceFunction("CList/AddMainMenuItem", AddMainMenuItem); CreateServiceFunction("CList/AddStatusMenuItem", AddStatusMenuItem); CreateServiceFunction(MS_CLIST_MENUGETMAIN, MenuGetMain); CreateServiceFunction(MS_CLIST_MENUBUILDMAIN, BuildMainMenu); CreateServiceFunction("CList/AddContactMenuItem", AddContactMenuItem); CreateServiceFunction(MS_CLIST_MENUBUILDCONTACT, BuildContactMenu); CreateServiceFunction(MS_CLIST_SHOWHIDEMENUITEM, ShowHideMenuItem); CreateServiceFunction(MS_CLIST_MODIFYMENUITEM, ModifyCustomMenuItem); CreateServiceFunction(MS_CLIST_MENUMEASUREITEM, MeasureMenuItem); CreateServiceFunction(MS_CLIST_MENUDRAWITEM, DrawMenuItem); CreateServiceFunction(MS_CLIST_MENUGETSTATUS, BuildStatusMenu); CreateServiceFunction(MS_CLIST_MENUPROCESSCOMMAND, MenuProcessCommand); CreateServiceFunction(MS_CLIST_MENUPROCESSHOTKEY, MenuProcessHotkey); CreateServiceFunction("CList/AddProtoMenuItem", AddProtoMenuItem); hPreBuildContactMenuEvent = CreateHookableEvent(ME_CLIST_PREBUILDCONTACTMENU); hPreBuildMainMenuEvent = CreateHookableEvent(ME_CLIST_PREBUILDMAINMENU); cli.hPreBuildStatusMenuEvent = CreateHookableEvent(ME_CLIST_PREBUILDSTATUSMENU); hStatusModeChangeEvent = CreateHookableEvent(ME_CLIST_STATUSMODECHANGE); HookEvent(ME_PROTO_ACK, MenuProtoAck); hMainMenu = CreatePopupMenu(); hStatusMenu = CreatePopupMenu(); hStatusMainMenuHandles = NULL; hStatusMainMenuHandlesCnt = 0; hStatusMenuHandles = NULL; hStatusMenuHandlesCnt = 0; // new menu sys InitGenMenu(); // main menu hMainMenuObject = MO_CreateMenuObject("MainMenu", LPGEN("Main menu"), 0, "MainMenuExecService"); MO_SetOptionsMenuObject(hMainMenuObject, OPT_USERDEFINEDITEMS, TRUE); MO_SetOptionsMenuObject(hMainMenuObject, OPT_MENUOBJECT_SET_FREE_SERVICE, (INT_PTR)"CLISTMENUS/FreeOwnerDataMainMenu"); // contact menu hContactMenuObject = MO_CreateMenuObject("ContactMenu", LPGEN("Contact menu"), "ContactMenuCheckService", "ContactMenuExecService"); MO_SetOptionsMenuObject(hContactMenuObject, OPT_USERDEFINEDITEMS, TRUE); MO_SetOptionsMenuObject(hContactMenuObject, OPT_MENUOBJECT_SET_FREE_SERVICE, (INT_PTR)"CLISTMENUS/FreeOwnerDataContactMenu"); // initialize hotkeys CreateServiceFunction(MS_CLIST_HKSTATUS, HotkeySetStatus); HOTKEYDESC hkd = { sizeof(hkd) }; hkd.ptszSection = _T("Status"); hkd.dwFlags = HKD_TCHAR; for (int i = 0; i < SIZEOF(statusHotkeys); i++) { char szName[30]; mir_snprintf(szName, SIZEOF(szName), "StatusHotKey_%d", i); hkd.pszName = szName; hkd.lParam = statusModeList[i]; hkd.ptszDescription = fnGetStatusModeDescription(hkd.lParam, 0); hkd.DefHotKey = HOTKEYCODE(HOTKEYF_CONTROL, '0' + i) | HKF_MIRANDA_LOCAL; hkd.pszService = MS_CLIST_HKSTATUS; statusHotkeys[i] = Hotkey_Register(&hkd); } HookEvent(ME_HOTKEYS_CHANGED, sttRebuildHotkeys); // add exit command to menu CLISTMENUITEM mi = { sizeof(mi) }; mi.position = 0x7fffffff; mi.pszService = "CloseAction"; mi.pszName = LPGEN("E&xit"); mi.icolibItem = GetSkinIconHandle(SKINICON_OTHER_EXIT); AddMainMenuItem(0, (LPARAM)&mi); cli.currentStatusMenuItem = ID_STATUS_OFFLINE; cli.currentDesiredStatusMode = ID_STATUS_OFFLINE; HookEvent(ME_SKIN_ICONSCHANGED, MenuIconsChanged); }