summaryrefslogtreecommitdiff
path: root/protocols/Teams/src/teams_menus.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'protocols/Teams/src/teams_menus.cpp')
-rw-r--r--protocols/Teams/src/teams_menus.cpp92
1 files changed, 92 insertions, 0 deletions
diff --git a/protocols/Teams/src/teams_menus.cpp b/protocols/Teams/src/teams_menus.cpp
new file mode 100644
index 0000000000..e46d2174e1
--- /dev/null
+++ b/protocols/Teams/src/teams_menus.cpp
@@ -0,0 +1,92 @@
+/*
+Copyright (c) 2025 Miranda NG team (https://miranda-ng.org)
+
+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 version 2
+of the License.
+
+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, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "stdafx.h"
+
+HGENMENU CTeamsProto::ContactMenuItems[CMI_MAX];
+
+int CTeamsProto::OnPrebuildContactMenu(WPARAM hContact, LPARAM)
+{
+ if (!hContact)
+ return 0;
+
+ if (m_iStatus < ID_STATUS_ONLINE)
+ return 0;
+
+ if (isChatRoom(hContact))
+ return 0;
+
+ bool isCtrlPressed = (GetKeyState(VK_CONTROL) & 0x8000) != 0;
+ bool isAuthNeed = getByte(hContact, "Auth", 0) > 0;
+ bool isGrantNeed = getByte(hContact, "Grant", 0) > 0;
+ bool isBlocked = getBool(hContact, "IsBlocked", false);
+
+ Menu_ShowItem(GetMenuItem(PROTO_MENU_REQ_AUTH), isCtrlPressed || isAuthNeed);
+ Menu_ShowItem(GetMenuItem(PROTO_MENU_GRANT_AUTH), isCtrlPressed || isGrantNeed);
+
+ Menu_ShowItem(ContactMenuItems[CMI_BLOCK], true);
+ Menu_ShowItem(ContactMenuItems[CMI_UNBLOCK], isCtrlPressed || isBlocked);
+ return 0;
+}
+
+int CTeamsProto::PrebuildContactMenu(WPARAM hContact, LPARAM lParam)
+{
+ for (auto &it : ContactMenuItems)
+ Menu_ShowItem(it, false);
+ CTeamsProto *proto = CMPlugin::getInstance(hContact);
+ return proto ? proto->OnPrebuildContactMenu(hContact, lParam) : 0;
+}
+
+void CTeamsProto::InitMenus()
+{
+ HookEvent(ME_CLIST_PREBUILDCONTACTMENU, &CTeamsProto::PrebuildContactMenu);
+
+ CMenuItem mi(&g_plugin);
+ mi.flags = CMIF_UNICODE;
+
+ mi.pszService = MODULENAME "/BlockContact";
+ mi.name.w = LPGENW("Block contact");
+ mi.position = CMI_POSITION + CMI_BLOCK;
+ mi.hIcolibItem = g_plugin.getIconHandle(IDI_BLOCKUSER);
+ SET_UID(mi, 0xc6169b8f, 0x53ab, 0x4242, 0xbe, 0x90, 0xe2, 0x4a, 0xa5, 0x73, 0x88, 0x32);
+ ContactMenuItems[CMI_BLOCK] = Menu_AddContactMenuItem(&mi);
+ CreateServiceFunction(mi.pszService, GlobalService<&CTeamsProto::BlockContact>);
+
+ mi.pszService = MODULENAME "/UnblockContact";
+ mi.name.w = LPGENW("Unblock contact");
+ mi.position = CMI_POSITION + CMI_UNBLOCK;
+ mi.hIcolibItem = g_plugin.getIconHandle(IDI_UNBLOCKUSER);
+ SET_UID(mi, 0x88542f43, 0x7448, 0x48d0, 0x81, 0xa3, 0x26, 0x0, 0x4f, 0x37, 0xee, 0xe0);
+ ContactMenuItems[CMI_UNBLOCK] = Menu_AddContactMenuItem(&mi);
+ CreateServiceFunction(mi.pszService, GlobalService<&CTeamsProto::UnblockContact>);
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// Protocol's menu in the status bar
+
+void CTeamsProto::OnBuildProtoMenu()
+{
+ CMenuItem mi(&g_plugin);
+ mi.root = Menu_GetProtocolRoot(this);
+
+ mi.pszService = "/CreateNewChat";
+ CreateProtoService(mi.pszService, &CTeamsProto::SvcCreateChat);
+ mi.name.a = LPGEN("Create new chat");
+ mi.position = 200000;
+ mi.hIcolibItem = g_plugin.getIconHandle(IDI_CONFERENCE);
+ Menu_AddProtoMenuItem(&mi, m_szModuleName);
+}