void addProtoStatusMenuItem(char *protoName) { PROTOACCOUNT *pdescr = Proto_GetAccount(protoName); if (pdescr == nullptr || pdescr->ppro == nullptr) return; HGENMENU hRoot = Menu_GetProtocolRoot(pdescr->ppro); if (hRoot == nullptr) return; char buf[200]; mir_snprintf(buf, "CSList/ShowList/%s", protoName); if (!ServiceExists(buf)) CreateServiceFunctionParam(buf, showList, (LPARAM)protoName); CMenuItem mi(g_plugin); mi.flags = CMIF_UNICODE; mi.hIcolibItem = forms[0].hIcoLibItem; mi.name.w = MODULENAME; mi.position = 2000040000; mi.pszService = buf; mi.root = hRoot; Menu_AddStatusMenuItem(&mi); RegisterHotkeys(buf, pdescr->tszAccountName, pdescr->iOrder); }
int CMraProto::MraRebuildStatusMenu(WPARAM, LPARAM) { CHAR szServiceFunction[MAX_PATH], szValueName[MAX_PATH]; HGENMENU hRoot; { TCHAR szItem[MAX_PATH + 64]; mir_sntprintf(szItem, _countof(szItem), _T("%s Custom Status"), m_tszUserName); CMenuItem mi; mi.root = pcli->pfnGetProtocolMenu(m_szModuleName); mi.name.t = szItem; mi.position = 10001; hRoot = Menu_AddStatusMenuItem(&mi, m_szModuleName); } CMenuItem mi; mi.position = 2000060000; mi.root = hRoot; mi.flags = CMIF_UNICODE; mi.pszService = szServiceFunction; CMStringW szStatusTitle; DWORD dwCount = MRA_XSTATUS_OFF_CLI_COUNT; if (getByte(NULL, "xStatusShowAll", MRA_DEFAULT_SHOW_ALL_XSTATUSES)) dwCount = MRA_XSTATUS_COUNT; for (DWORD i = 0; i < dwCount; i ++) { mir_snprintf(szServiceFunction, _countof(szServiceFunction), "/menuXStatus%ld", i); mi.position ++; if (i) { mir_snprintf(szValueName, _countof(szValueName), "XStatus%ldName", i); if (mraGetStringW(NULL, szValueName, szStatusTitle)) mi.name.t = (TCHAR*)szStatusTitle.c_str(); else mi.name.t = (TCHAR*)lpcszXStatusNameDef[i]; mi.hIcolibItem = hXStatusAdvancedStatusIcons[i]; } else { mi.name.t = (TCHAR*)lpcszXStatusNameDef[i]; mi.hIcolibItem = NULL; } hXStatusMenuItems[i] = Menu_AddStatusMenuItem(&mi, m_szModuleName); } return 0; }
int TwitterProto::OnBuildStatusMenu(WPARAM, LPARAM) { CMenuItem mi; mi.root = Menu_GetProtocolRoot(this); mi.flags = CMIF_TCHAR; mi.position = 1001; Menu_AddStatusMenuItem(&mi, m_szModuleName); // TODO: Disable this menu item when offline // "Send Tweet..." mi.pszService = "/Tweet"; CreateProtoService(mi.pszService, &TwitterProto::OnTweet); mi.name.t = LPGENT("Send Tweet..."); mi.position = 200001; mi.hIcolibItem = GetIconHandle("tweet"); Menu_AddStatusMenuItem(&mi, m_szModuleName); return 0; }
static int CreateMainMenuItems(WPARAM, LPARAM) { char servicename[128]; int i, count; CMenuItem mi; mi.position = 2000100000; mi.flags = CMIF_TCHAR; mcount = 0; count = GetProfileCount(0, 0); for (i = 0; i < count; i++) { TCHAR profilename[128]; if (!db_get_b(NULL, MODULENAME, OptName(i, SETTING_CREATEMMITEM), 0) || GetProfileName(i, (LPARAM)profilename)) continue; if (db_get_b(NULL, MODULENAME, OptName(i, SETTING_INSUBMENU), 1)) mi.root = Menu_CreateRoot(MO_STATUS, LPGENT("Status profiles"), 2000100000); mi.name.t = profilename; mi.position = 2000100000 + mcount; mir_snprintf(servicename, _countof(servicename), "%s%d", MS_SS_MENUSETPROFILEPREFIX, mcount); switch(mcount) { case 0: hProfileServices[mcount] = CreateServiceFunction(servicename, profileService0); break; case 1: hProfileServices[mcount] = CreateServiceFunction(servicename, profileService1); break; case 2: hProfileServices[mcount] = CreateServiceFunction(servicename, profileService2); break; case 3: hProfileServices[mcount] = CreateServiceFunction(servicename, profileService3); break; case 4: hProfileServices[mcount] = CreateServiceFunction(servicename, profileService4); break; case 5: hProfileServices[mcount] = CreateServiceFunction(servicename, profileService5); break; default: MessageBox(NULL, TranslateT("There is a maximum of 6 menu items"), TranslateT("StartupStatus"), MB_OK); return 0; } mi.pszService = servicename; if (Menu_AddStatusMenuItem(&mi)) { menuprofiles[mcount] = i; mcount += 1; } } return 0; }
int CMraProto::MraRebuildStatusMenu(WPARAM wParam, LPARAM lParam) { CHAR szServiceFunction[MAX_PATH*2], *pszServiceFunctionName, szValueName[MAX_PATH]; strncpy(szServiceFunction, m_szModuleName, sizeof(szServiceFunction)); pszServiceFunctionName = szServiceFunction + strlen(m_szModuleName); TCHAR szItem[MAX_PATH+64]; mir_sntprintf(szItem, SIZEOF(szItem), _T("%s Custom Status"), m_tszUserName); CLISTMENUITEM mi = { sizeof(mi) }; mi.position = 2000060000; mi.popupPosition = 500085000; mi.ptszPopupName = szItem; mi.flags = CMIF_UNICODE; mi.pszService = szServiceFunction; mi.pszContactOwner = m_szModuleName; CMStringW szStatusTitle; for (size_t i = 0; i < MRA_XSTATUS_COUNT; i++) { mir_snprintf(pszServiceFunctionName, 100, "/menuXStatus%ld", i); mi.position++; if (i) { mir_snprintf(szValueName, SIZEOF(szValueName), "XStatus%ldName", i); if ( mraGetStringW(NULL, szValueName, szStatusTitle)) mi.ptszName = (TCHAR*)szStatusTitle.c_str(); else mi.ptszName = lpcszXStatusNameDef[i]; mi.icolibItem = hXStatusAdvancedStatusIcons[i]; } else { mi.ptszName = lpcszXStatusNameDef[i]; mi.hIcon = NULL; } hXStatusMenuItems[i] = Menu_AddStatusMenuItem(&mi); } return 0; }
/** * This function rebuilds the account context menu (clist status <account>). If user selected to * cascade menus, a root menu item is created which holds the popup for all the other items. * Note: since miranda 0.8 genmenu is part of core (we don't need to check for). * * @param wParam - 0 not used * @param lParam - clear bit for old menu items * 0 don't delete old items (its calld by ME_CLIST_PREBUILDSTATUSMENU hook) * other then 0 delete old items first * * @return always 0 **/ INT_PTR RebuildAccount(WPARAM, LPARAM lParam) { const BYTE mItems = 3; // menuitems to create BYTE item = 0; int mProtoCount = pcli->menuProtoCount; // on call by hook or first start if (!lParam || !hMenuItemAccount) { size_t sizeNew = mItems * mProtoCount * sizeof(HGENMENU); hMenuItemAccount = (HGENMENU*)mir_realloc(hMenuItemAccount, sizeNew); // set all bytes 0 to avoid problems memset(hMenuItemAccount, 0, sizeNew); } // on options change else // delete all MenuItems backward (first item second group) RemoveMenuItems(hMenuItemAccount, mItems * mProtoCount); // load options int flag = db_get_b(NULL, MODNAME, SET_MI_ACCOUNT, MCAS_NOTINITIATED); if (flag == MCAS_NOTINITIATED) { flag = MCAS_EXIMPORT | TRUE; db_set_b(NULL, MODNAME, SET_MI_ACCOUNT, flag); } // loop for all account names for (int i = 0; i < mProtoCount; i++) { // set all bytes 0 to avoid problems item = 0; HGENMENU mhRoot = pcli->menuProtos[i].pMenu, mhExIm; if (mhRoot == NULL) break; PROTOACCOUNT *pa = Proto_GetAccount(pcli->menuProtos[i].szProto); // create service name main (account module name) and set pointer to end it char text[200]; mir_strcpy(text, pcli->menuProtos[i].szProto); CMenuItem mi; mi.pszService = text; char* tDest = text + mir_strlen(text); // support new genmenu style mi.root = mhRoot; switch (flag) { case 3: // cascade off mhExIm = mhRoot; // seperator mi.position = 50100; hMenuItemAccount[mItems*i + item++] = Menu_AddStatusMenuItem(&mi, pa->szModuleName); break; case 5: // cascade all mi.position = 50100; mi.hIcolibItem = IcoLib_GetIcon(ICO_COMMON_MAIN); mi.name.a = MODULELONGNAME; hMenuItemAccount[mItems*i + item] = Menu_AddStatusMenuItem(&mi, pa->szModuleName); mhRoot = hMenuItemAccount[mItems*i + item++]; mhExIm = mhRoot; break; case 9: // cascade Ex/Import mi.position = 50100; mi.hIcolibItem = IcoLib_GetIcon(ICO_BTN_EXIMPORT); mi.name.a = LPGEN("Export/import"); hMenuItemAccount[mItems*i + item] = Menu_AddStatusMenuItem(&mi, pa->szModuleName); mhRoot = hMenuItemAccount[mItems*i + item++]; mhExIm = mhRoot; break; default: // disable Menue return 0; } // VCard's Ex/Import menuitems mi.root = mhExIm; // Export mir_strcpy(tDest, "/ExportAccount"); CreateServiceFunction(mi.pszService, svcExIm_Account_Service); mi.name.a = LPGEN("&Export xml"); mi.position = 50200; mi.hIcolibItem = IcoLib_GetIcon(ICO_BTN_EXPORT); hMenuItemAccount[mItems*i + item++] = Menu_AddStatusMenuItem(&mi, pa->szModuleName); // Import mir_strcpy(tDest, "/ImportAccount"); CreateServiceFunction(mi.pszService, svcExIm_Account_Service); mi.name.a = LPGEN("&Import xml"); mi.position = 50300; mi.hIcolibItem = IcoLib_GetIcon(ICO_BTN_IMPORT); hMenuItemAccount[mItems*i + item++] = Menu_AddStatusMenuItem(&mi, pa->szModuleName); } return 0; }