dvander@769: /** dvander@769: * vim: set ts=4 : ds@1330: * ============================================================================= dvander@1231: * SourceMod dvander@1231: * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. ds@1330: * ============================================================================= dvander@769: * ds@1330: * This program is free software; you can redistribute it and/or modify it under ds@1330: * the terms of the GNU General Public License, version 3.0, as published by the ds@1330: * Free Software Foundation. dvander@1231: * ds@1330: * This program is distributed in the hope that it will be useful, but WITHOUT ds@1330: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS ds@1330: * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more ds@1330: * details. dvander@1231: * ds@1330: * You should have received a copy of the GNU General Public License along with ds@1330: * this program. If not, see . dvander@1231: * ds@1330: * As a special exception, AlliedModders LLC gives you permission to link the ds@1330: * code of this program (as well as its derivative works) to "Half-Life 2," the ds@1330: * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software ds@1330: * by the Valve Corporation. You must obey the GNU General Public License in ds@1330: * all respects for all other code used. Additionally, AlliedModders LLC grants ds@1330: * this exception to all derivative works. AlliedModders LLC defines further ds@1330: * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), ds@1330: * or . dvander@769: * dvander@769: * Version: $Id$ dvander@769: */ dvander@769: dvander@769: #ifndef _INCLUDE_SOURCEMOD_MENUMANAGER_H_ dvander@769: #define _INCLUDE_SOURCEMOD_MENUMANAGER_H_ dvander@769: dvander@769: #include dvander@769: #include dvander@769: #include dvander@769: #include dvander@1220: #include dvander@769: #include "sm_memtable.h" dvander@769: #include "sm_globals.h" dvander@769: dvander@769: using namespace SourceMod; dvander@769: using namespace SourceHook; dvander@769: dvander@769: class MenuManager : dvander@769: public IMenuManager, dvander@790: public SMGlobalClass, dvander@790: public IHandleTypeDispatch dvander@769: { dvander@769: friend class BroadcastHandler; dvander@769: friend class VoteHandler; dvander@790: friend class CBaseMenu; dvander@790: friend class BaseMenuStyle; dvander@769: public: dvander@769: MenuManager(); dvander@769: public: //SMGlobalClass dvander@769: void OnSourceModAllInitialized(); dvander@769: void OnSourceModAllShutdown(); dvander@1220: ConfigResult OnSourceModConfigChanged(const char *key, dvander@1220: const char *value, dvander@1220: ConfigSource source, dvander@1220: char *error, dvander@1220: size_t maxlength); dvander@1258: void OnSourceModLevelChange(const char *mapName); dvander@769: public: //IMenuManager dvander@769: virtual const char *GetInterfaceName() dvander@769: { dvander@769: return SMINTERFACE_MENUMANAGER_NAME; dvander@769: } dvander@769: virtual unsigned int GetInterfaceVersion() dvander@769: { dvander@769: return SMINTERFACE_MENUMANAGER_VERSION; dvander@769: } dvander@769: public: dvander@769: unsigned int GetStyleCount(); dvander@769: IMenuStyle *GetStyle(unsigned int index); dvander@769: IMenuStyle *FindStyleByName(const char *name); dvander@769: IMenuStyle *GetDefaultStyle(); dvander@780: void AddStyle(IMenuStyle *style); dvander@769: bool SetDefaultStyle(IMenuStyle *style); dvander@787: IMenuPanel *RenderMenu(int client, menu_states_t &states, ItemOrder order); dvander@1269: void CancelMenu(IBaseMenu *menu); dvander@1269: bool StartVote(IBaseMenu *menu, dvander@1269: unsigned int num_clients, dvander@1269: int clients[], dvander@1269: unsigned int max_time, dvander@1269: unsigned int flags=0); dvander@1269: bool IsVoteInProgress(); dvander@1269: void CancelVoting(); dvander@1291: unsigned int GetRemainingVoteDelay(); dvander@790: public: //IHandleTypeDispatch dvander@790: void OnHandleDestroy(HandleType_t type, void *object); dvander@790: public: dvander@790: HandleError ReadMenuHandle(Handle_t handle, IBaseMenu **menu); dvander@790: HandleError ReadStyleHandle(Handle_t handle, IMenuStyle **style); dvander@1220: public: dvander@1220: bool MenuSoundsEnabled(); dvander@1220: const char *GetMenuSound(ItemSelection sel); dvander@769: protected: dvander@790: Handle_t CreateMenuHandle(IBaseMenu *menu, IdentityToken_t *pOwner); dvander@790: Handle_t CreateStyleHandle(IMenuStyle *style); dvander@769: private: dvander@769: int m_ShowMenu; dvander@769: IMenuStyle *m_pDefaultStyle; dvander@769: CVector m_Styles; dvander@790: HandleType_t m_StyleType; dvander@790: HandleType_t m_MenuType; dvander@1220: String m_SelectSound; dvander@1220: String m_ExitBackSound; dvander@1243: String m_ExitSound; dvander@769: }; dvander@769: dvander@769: extern MenuManager g_Menus; dvander@769: dvander@769: #endif //_INCLUDE_SOURCEMOD_MENUMANAGER_H_