diff options
Diffstat (limited to 'protocols/CloudFile/src/menus.cpp')
-rw-r--r-- | protocols/CloudFile/src/menus.cpp | 75 |
1 files changed, 39 insertions, 36 deletions
diff --git a/protocols/CloudFile/src/menus.cpp b/protocols/CloudFile/src/menus.cpp index 33fe369406..38a12c6798 100644 --- a/protocols/CloudFile/src/menus.cpp +++ b/protocols/CloudFile/src/menus.cpp @@ -1,48 +1,51 @@ #include "stdafx.h" -HGENMENU hContactMenu; - -static INT_PTR UploadMenuCommand(void *obj, WPARAM hContact, LPARAM) -{ - CCloudService *service = (CCloudService*)obj; - service->OpenUploadDialog(hContact); - return 0; -} +static HGENMENU hContactMenu; void InitializeMenus() { + if (hContactMenu) + Menu_RemoveItem(hContactMenu); + + // no money, no honey + if (g_arServices.getCount() == 0) + return; + CMenuItem mi(&g_plugin); SET_UID(mi, 0x93d4495b, 0x259b, 0x4fba, 0xbc, 0x14, 0xf9, 0x46, 0x2c, 0xda, 0xfc, 0x6d); - mi.name.a = LPGEN("Upload to..."); - - ptrA defaultService(g_plugin.getStringA("DefaultService")); - if (defaultService) { - CCloudService *service = FindService(defaultService); - if (service) { - mi.name.a = LPGEN("Upload"); - mi.pszService = MODULENAME "/Default/Upload"; - CreateServiceFunctionObj(mi.pszService, UploadMenuCommand, service); - } - } - mi.position = -2000019999; - mi.hIcon = g_plugin.getIcon(IDI_UPLOAD); - hContactMenu = Menu_AddContactMenuItem(&mi); -} -void CCloudService::OnModulesLoaded() -{ - CMenuItem mi(GetId()); - mi.root = hContactMenu; - CMStringA serviceName(FORMAT, "/%s/Upload", GetAccountName()); - mi.pszService = serviceName.GetBuffer(); - mi.flags = CMIF_SYSTEM | CMIF_UNICODE; - mi.name.w = (wchar_t*)GetUserName(); - mi.position = Services.getCount(); - mi.hIcolibItem = g_plugin.getIconHandle(GetIconId()); - Menu_AddContactMenuItem(&mi); - - CreateServiceFunctionObj(mi.pszService, UploadMenuCommand, this); + CMStringA szService; + if (g_arServices.getCount() == 1) { + auto *S = g_arServices[0]; + + szService.Format("%s%s", S->m_szModuleName, PS_UPLOAD); + CMStringW wszTitle(FORMAT, L"%s %s", TranslateT("Upload to"), S->m_tszUserName); + mi.flags |= CMIF_UNICODE; + mi.pszService = szService; + mi.name.w = wszTitle.GetBuffer(); + mi.hIcolibItem = g_plugin.getIconHandle(S->GetIconId()); + hContactMenu = Menu_AddContactMenuItem(&mi); + } + else { + mi.hIcolibItem = g_plugin.getIconHandle(IDI_UPLOAD); + mi.name.a = LPGEN("Upload to..."); + hContactMenu = Menu_AddContactMenuItem(&mi); + + int i = 1000; + for (auto &S : g_arServices) { + szService.Format("%s%s", S->m_szModuleName, PS_UPLOAD); + + CMenuItem mi2(S->GetId()); + mi2.root = hContactMenu; + mi2.flags = CMIF_SYSTEM | CMIF_UNICODE; + mi2.name.w = S->m_tszUserName; + mi2.position = i++; + mi2.pszService = szService; + mi2.hIcolibItem = g_plugin.getIconHandle(S->GetIconId()); + Menu_AddContactMenuItem(&mi2); + } + } } int OnPrebuildContactMenu(WPARAM hContact, LPARAM) |