void CMraProto::InitMenus() { CreateProtoService(MRA_GOTO_INBOX, &CMraProto::MraGotoInbox); CreateProtoService(MRA_SHOW_INBOX_STATUS, &CMraProto::MraShowInboxStatus); CreateProtoService(MRA_EDIT_PROFILE, &CMraProto::MraEditProfile); CreateProtoService(MRA_VIEW_ALBUM, &CMraProto::MraViewAlbum); CreateProtoService(MRA_READ_BLOG, &CMraProto::MraReadBlog); CreateProtoService(MRA_REPLY_BLOG_STATUS, &CMraProto::MraReplyBlogStatus); CreateProtoService(MRA_VIEW_VIDEO, &CMraProto::MraViewVideo); CreateProtoService(MRA_ANSWERS, &CMraProto::MraAnswers); CreateProtoService(MRA_WORLD, &CMraProto::MraWorld); CreateProtoService(MRA_ZHUKI, &CMraProto::MraZhuki); CreateProtoService(MRA_WEB_SEARCH, &CMraProto::MraWebSearch); CreateProtoService(MRA_UPD_ALL_USERS_INFO, &CMraProto::MraUpdateAllUsersInfo); CreateProtoService(MRA_CHK_USERS_AVATARS, &CMraProto::MraCheckUpdatesUsersAvt); CreateProtoService(MRA_REQ_AUTH_FOR_ALL, &CMraProto::MraRequestAuthForAll); hContactMenuRoot = CListCreateMenu(-2000001001, -500050000, FALSE, gdiContactMenuItems, CONTACT_MENU_ITEMS_COUNT, hContactMenuItems); // xstatus menu for (int i = 0; i < MRA_XSTATUS_COUNT; i++) { char szServiceName[100]; mir_snprintf(szServiceName, SIZEOF(szServiceName), "/menuXStatus%d", i); CreateProtoServiceParam(szServiceName, &CMraProto::MraXStatusMenu, i); } }
void CMraProto::InitMenus() { /* Main menu and contacts services. */ CreateProtoService(MRA_GOTO_INBOX, &CMraProto::MraGotoInbox); CreateProtoService(MRA_SHOW_INBOX_STATUS, &CMraProto::MraShowInboxStatus); CreateProtoService(MRA_EDIT_PROFILE, &CMraProto::MraEditProfile); CreateProtoService(MRA_VIEW_ALBUM, &CMraProto::MraViewAlbum); CreateProtoService(MRA_REPLY_BLOG_STATUS, &CMraProto::MraReplyBlogStatus); CreateProtoService(MRA_VIEW_VIDEO, &CMraProto::MraViewVideo); CreateProtoService(MRA_ANSWERS, &CMraProto::MraAnswers); CreateProtoService(MRA_WORLD, &CMraProto::MraWorld); CreateProtoService(MRA_WEB_SEARCH, &CMraProto::MraWebSearch); CreateProtoService(MRA_UPD_ALL_USERS_INFO, &CMraProto::MraUpdateAllUsersInfo); CreateProtoService(MRA_CHK_USERS_AVATARS, &CMraProto::MraCheckUpdatesUsersAvt); CreateProtoService(MRA_REQ_AUTH_FOR_ALL, &CMraProto::MraRequestAuthForAll); /* Contacts only services. */ CreateProtoService(MRA_REQ_AUTH, &CMraProto::MraRequestAuthorization); CreateProtoService(MRA_GRANT_AUTH, &CMraProto::MraGrantAuthorization); CreateProtoService(MRA_SEND_EMAIL, &CMraProto::MraSendEmail); CreateProtoService(MRA_SEND_POSTCARD, &CMraProto::MraSendPostcard); hContactMenuRoot = CListCreateMenu(-2000001001, -500050000, FALSE, gdiContactMenuItems, CONTACT_MENU_ITEMS_COUNT, hContactMenuItems); // xstatus menu for (DWORD i = 0; i < MRA_XSTATUS_COUNT; i++) { char szServiceName[100]; mir_snprintf(szServiceName, _countof(szServiceName), "/menuXStatus%d", i); CreateProtoServiceParam(szServiceName, &CMraProto::MraXStatusMenu, i); } }
void CJabberProto::MenuInit() { CMenuItem mi; mi.root = m_hMenuRoot = Menu_GetProtocolRoot(this); mi.flags = CMIF_UNMOVABLE; // "Bookmarks..." mi.pszService = "/Bookmarks"; CreateProtoService(mi.pszService, &CJabberProto::OnMenuHandleBookmarks); mi.name.a = LPGEN("Bookmarks"); mi.position = 200001; mi.hIcolibItem = GetIconHandle(IDI_BOOKMARKS); m_hMenuBookmarks = Menu_AddProtoMenuItem(&mi, m_szModuleName); // "Services..." mi.pszService = NULL; mi.name.a = LPGEN("Services..."); mi.position = 200003; mi.hIcolibItem = GetIconHandle(IDI_SERVICE_DISCOVERY); HGENMENU hMenuServicesRoot = Menu_AddProtoMenuItem(&mi, m_szModuleName); // "Service Discovery..." mi.root = hMenuServicesRoot; mi.pszService = "/ServiceDiscovery"; CreateProtoService(mi.pszService, &CJabberProto::OnMenuHandleServiceDiscovery); mi.name.a = LPGEN("Service Discovery"); mi.position = 2000050001; mi.hIcolibItem = GetIconHandle(IDI_SERVICE_DISCOVERY); m_hMenuServiceDiscovery = Menu_AddProtoMenuItem(&mi, m_szModuleName); mi.pszService = "/SD/MyTransports"; CreateProtoService(mi.pszService, &CJabberProto::OnMenuHandleServiceDiscoveryMyTransports); mi.name.a = LPGEN("Registered Transports"); mi.position = 2000050003; mi.hIcolibItem = GetIconHandle(IDI_TRANSPORTL); m_hMenuSDMyTransports = Menu_AddProtoMenuItem(&mi, m_szModuleName); mi.pszService = "/SD/Transports"; CreateProtoService(mi.pszService, &CJabberProto::OnMenuHandleServiceDiscoveryTransports); mi.name.a = LPGEN("Local Server Transports"); mi.position = 2000050004; mi.hIcolibItem = GetIconHandle(IDI_TRANSPORT); m_hMenuSDTransports = Menu_AddProtoMenuItem(&mi, m_szModuleName); mi.pszService = "/SD/Conferences"; CreateProtoService(mi.pszService, &CJabberProto::OnMenuHandleServiceDiscoveryConferences); mi.name.a = LPGEN("Browse chatrooms"); mi.position = 2000050005; mi.hIcolibItem = GetIconHandle(IDI_GROUP); m_hMenuSDConferences = Menu_AddProtoMenuItem(&mi, m_szModuleName); mi.pszService = "/Groupchat"; CreateProtoService(mi.pszService, &CJabberProto::OnMenuHandleJoinGroupchat); mi.name.a = LPGEN("Create/Join group chat"); mi.position = 2000050006; mi.hIcolibItem = GetIconHandle(IDI_GROUP); m_hMenuGroupchat = Menu_AddProtoMenuItem(&mi, m_szModuleName); // "Change Password..." mi.pszService = "/ChangePassword"; CreateProtoService(mi.pszService, &CJabberProto::OnMenuHandleChangePassword); mi.name.a = LPGEN("Change Password"); mi.position = 2000050007; mi.hIcolibItem = GetIconHandle(IDI_KEYS); m_hMenuChangePassword = Menu_AddProtoMenuItem(&mi, m_szModuleName); // "Roster editor" mi.pszService = "/RosterEditor"; CreateProtoService(mi.pszService, &CJabberProto::OnMenuHandleRosterControl); mi.name.a = LPGEN("Roster editor"); mi.position = 2000050009; mi.hIcolibItem = GetIconHandle(IDI_AGENTS); m_hMenuRosterControl = Menu_AddProtoMenuItem(&mi, m_szModuleName); // "XML Console" mi.pszService = "/XMLConsole"; CreateProtoService(mi.pszService, &CJabberProto::OnMenuHandleConsole); mi.name.a = LPGEN("XML Console"); mi.position = 2000050010; mi.hIcolibItem = GetIconHandle(IDI_CONSOLE); Menu_AddProtoMenuItem(&mi, m_szModuleName); mi.pszService = "/Notes"; CreateProtoService(mi.pszService, &CJabberProto::OnMenuHandleNotes); mi.name.a = LPGEN("Notes"); mi.position = 2000050011; mi.hIcolibItem = GetIconHandle(IDI_NOTES); m_hMenuNotes = Menu_AddProtoMenuItem(&mi, m_szModuleName); BuildPrivacyMenu(); if (m_menuItemsStatus) BuildPrivacyListsMenu(false); ////////////////////////////////////////////////////////////////////////////////////// // build priority menu m_priorityMenuVal = 0; m_priorityMenuValSet = false; mi.pszService = NULL; mi.position = 200006; mi.root = m_hMenuRoot; mi.name.a = LPGEN("Resource priority"); mi.flags = CMIF_UNMOVABLE | CMIF_HIDDEN; m_hMenuPriorityRoot = Menu_AddProtoMenuItem(&mi); TCHAR szName[128]; char srvFce[MAX_PATH + 64]; mi.pszService = srvFce; mi.name.t = szName; mi.position = 2000040000; mi.flags = CMIF_UNMOVABLE | CMIF_TCHAR | CMIF_KEEPUNTRANSLATED; mi.root = m_hMenuPriorityRoot; mir_snprintf(srvFce, "/menuSetPriority/%d", 0); bool needServices = !ProtoServiceExists(m_szModuleName, srvFce); if (needServices) CreateProtoServiceParam(srvFce, &CJabberProto::OnMenuSetPriority, 0); int steps[] = { 10, 5, 1, 0, -1, -5, -10 }; for (int i = 0; i < _countof(steps); i++) { if (!steps[i]) { mi.position += 100000; continue; } mir_snprintf(srvFce, "/menuSetPriority/%d", steps[i]); if (steps[i] > 0) { mir_sntprintf(szName, TranslateT("Increase priority by %d"), steps[i]); mi.hIcolibItem = GetIconHandle(IDI_ARROW_UP); } else { mir_sntprintf(szName, TranslateT("Decrease priority by %d"), -steps[i]); mi.hIcolibItem = GetIconHandle(IDI_ARROW_DOWN); } if (needServices) CreateProtoServiceParam(srvFce, &CJabberProto::OnMenuSetPriority, (LPARAM)steps[i]); mi.position++; Menu_AddProtoMenuItem(&mi, m_szModuleName); } UpdatePriorityMenu((short)getWord("Priority", 0)); ////////////////////////////////////////////////////////////////////////////////////// // finalize status menu m_pepServices.RebuildMenu(); CheckMenuItems(); NotifyFastHook(hStatusMenuInit, (WPARAM)m_hMenuRoot, (LPARAM)(IJabberInterface*)this); }
int CJabberProto::OnPrebuildContactMenu(WPARAM hContact, LPARAM) { if (hContact == NULL) return 0; bool bIsChatRoom = isChatRoom(hContact); bool bIsTransport = getBool(hContact, "IsTransport", false); if ((bIsChatRoom == GCW_CHATROOM) || bIsChatRoom == 0) { if (ptrT(getTStringA(hContact, bIsChatRoom ? (char*)"ChatRoomID" : (char*)"jid")) != NULL) { Menu_ShowItem(g_hMenuConvert, TRUE); Menu_ModifyItem(g_hMenuConvert, bIsChatRoom ? LPGENT("&Convert to Contact") : LPGENT("&Convert to Chat Room")); } } if (!m_bJabberOnline) return 0; Menu_ShowItem(g_hMenuDirectPresence[0], TRUE); for (int i = 0; i < _countof(PresenceModeArray); i++) Menu_ModifyItem(g_hMenuDirectPresence[i + 1], NULL, Skin_LoadProtoIcon(m_szModuleName, PresenceModeArray[i].mode)); if (bIsChatRoom) { ptrT roomid(getTStringA(hContact, "ChatRoomID")); if (roomid != NULL) { Menu_ShowItem(g_hMenuRosterAdd, FALSE); if (ListGetItemPtr(LIST_BOOKMARK, roomid) == NULL) if (m_ThreadInfo && m_ThreadInfo->jabberServerCaps & JABBER_CAPS_PRIVATE_STORAGE) Menu_ShowItem(g_hMenuAddBookmark, TRUE); } } if (bIsChatRoom == GCW_CHATROOM) return 0; if (bIsTransport) { Menu_ShowItem(g_hMenuLogin, TRUE); Menu_ShowItem(g_hMenuRefresh, TRUE); } ptrT jid(getTStringA(hContact, "jid")); if (jid == NULL) return 0; JabberCapsBits jcb = GetTotalJidCapabilites(jid); JABBER_LIST_ITEM *item = ListGetItemPtr(LIST_ROSTER, jid); if (item == NULL) return 0; bool bCtrlPressed = (GetKeyState(VK_CONTROL) & 0x8000) != 0; Menu_ShowItem(g_hMenuRequestAuth, item->subscription == SUB_FROM || item->subscription == SUB_NONE || bCtrlPressed); Menu_ShowItem(g_hMenuGrantAuth, bCtrlPressed); Menu_ShowItem(g_hMenuRevokeAuth, item->subscription == SUB_FROM || item->subscription == SUB_BOTH || bCtrlPressed); Menu_ShowItem(g_hMenuCommands, ((jcb & JABBER_CAPS_COMMANDS) != 0) || bCtrlPressed); Menu_ShowItem(g_hMenuSendNote, TRUE); if (item->arResources.getCount() == 0) return 0; Menu_ShowItem(g_hMenuResourcesRoot, TRUE); Menu_ModifyItem(g_hMenuResourcesRoot, NULL, m_hProtoIcon); Menu_ModifyItem(g_hMenuResourcesActive, NULL, m_hProtoIcon, (item->resourceMode == RSMODE_LASTSEEN) ? CMIF_CHECKED : 0); Menu_ModifyItem(g_hMenuResourcesServer, NULL, m_hProtoIcon, (item->resourceMode == RSMODE_SERVER) ? CMIF_CHECKED : 0); int nMenuResourceItemsNew = m_nMenuResourceItems; if (m_nMenuResourceItems < item->arResources.getCount()) { m_phMenuResourceItems = (HGENMENU*)mir_realloc(m_phMenuResourceItems, item->arResources.getCount() * sizeof(HGENMENU)); nMenuResourceItemsNew = item->arResources.getCount(); } char text[256]; CMenuItem mi; mi.pszService = text; CMString szTmp; for (int i = 0; i < nMenuResourceItemsNew; i++) { mir_snprintf(text, "/UseResource_%d", i); if (i >= m_nMenuResourceItems) { CreateProtoServiceParam(text, &CJabberProto::OnMenuHandleResource, MENUITEM_RESOURCES + i); mi.name.a = ""; mi.position = i; mi.root = g_hMenuResourcesRoot; m_phMenuResourceItems[i] = Menu_AddContactMenuItem(&mi, m_szModuleName); } if (i < item->arResources.getCount()) { pResourceStatus r(item->arResources[i]); HICON hIcon = (HICON)INVALID_HANDLE_VALUE; Menu_SetChecked(m_phMenuResourceItems[i], item->resourceMode == RSMODE_MANUAL && item->m_pManualResource == r); if (ServiceExists(MS_FP_GETCLIENTICONT)) { FormatMirVer(r, szTmp); hIcon = Finger_GetClientIcon(szTmp, 0); } szTmp.Format(_T("%s [%s, %d]"), r->m_tszResourceName, pcli->pfnGetStatusModeDescription(r->m_iStatus, 0), r->m_iPriority); Menu_ModifyItem(m_phMenuResourceItems[i], szTmp, hIcon); DestroyIcon(hIcon); } else Menu_ShowItem(m_phMenuResourceItems[i], FALSE); } m_nMenuResourceItems = nMenuResourceItemsNew; return 0; }