// vim: set ts=4 sw=4 tw=99 noet: // // AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). // Copyright (C) The AMX Mod X Development Team. // // This software is licensed under the GNU General Public License, version 3 or higher. // Additional exceptions apply. For full license details, see LICENSE.txt or visit: // https://alliedmods.net/amxmodx-license #include "amxmodx.h" #include "CMenu.h" // ***************************************************** // class MenuMngr // ***************************************************** MenuMngr::MenuCommand::MenuCommand(CPluginMngr::CPlugin *a, int mi, int k, int f, bool new_menu) { plugin = a; keys = k; menuid = mi; next = 0; is_new_menu = new_menu; function = f; } MenuMngr::~MenuMngr() { clear(); MenuMngr::MenuIdEle::uniqueid = 0; } int MenuMngr::findMenuId(const char* name, AMX* amx) { for (MenuIdEle* b = headid; b; b = b->next) { if ((!amx || !b->amx || amx == b->amx) && strstr(name,b->name.c_str())) return b->id; } return 0; } int MenuMngr::registerMenuId(const char* n, AMX* a) { int id = findMenuId(n, a); if (id) { return id; } headid = new MenuIdEle(n, a, headid); return headid->id; } void MenuMngr::registerMenuCmd(CPluginMngr::CPlugin *a, int mi, int k, int f, bool from_new_menu) { MenuCommand **temp = &headcmd; if (from_new_menu) { MenuCommand *ptr; while (*temp) { ptr = *temp; if (ptr->is_new_menu && ptr->plugin == a && ptr->menuid == mi) { if (g_forwards.isSameSPForward(ptr->function, f)) { return; } } temp = &(*temp)->next; } } else { while (*temp) { temp = &(*temp)->next; } } *temp = new MenuCommand(a, mi, k, f, from_new_menu); } void MenuMngr::clear() { while (headid) { MenuIdEle* a = headid->next; delete headid; headid = a; } while (headcmd) { MenuCommand* a = headcmd->next; delete headcmd; headcmd = a; } } MenuMngr::iterator MenuMngr::SetWatchIter(MenuMngr::iterator iter) { MenuMngr::iterator old = m_watch_iter; m_watch_iter = iter; return old; } int MenuMngr::MenuIdEle::uniqueid = 0;