dvander@769: /** dvander@769: * vim: set ts=4 : dvander@769: * =============================================================== dvander@769: * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. dvander@769: * =============================================================== dvander@769: * dvander@769: * This file is not open source and may not be copied without explicit dvander@769: * written permission of AlliedModders LLC. This file may not be redistributed dvander@769: * in whole or significant part. dvander@769: * For information, see LICENSE.txt or http://www.sourcemod.net/license.php 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@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@877: class VoteMenuHandler : public IVoteMenuHandler dvander@769: { dvander@769: public: //IMenuHandler dvander@877: unsigned int GetMenuAPIVersion2(); dvander@877: void OnMenuStart(IBaseMenu *menu); dvander@787: void OnMenuDisplay(IBaseMenu *menu, int client, IMenuPanel *display); dvander@769: void OnMenuSelect(IBaseMenu *menu, int client, unsigned int item); dvander@877: void OnMenuCancel(IBaseMenu *menu, int client, MenuCancelReason reason); dvander@769: void OnMenuEnd(IBaseMenu *menu); dvander@877: void OnMenuDrawItem(IBaseMenu *menu, int client, unsigned int item, unsigned int &style); dvander@877: void OnMenuDisplayItem(IBaseMenu *menu, int client, unsigned int item, const char **display); dvander@877: public: //IVoteMenuHandler dvander@877: bool IsVoteInProgress(); dvander@877: void InitializeVoting(IBaseMenu *menu); dvander@877: void StartVoting(); dvander@884: void CancelVoting(); dvander@769: public: dvander@877: void Reset(IMenuHandler *mh); dvander@877: private: dvander@877: void DecrementPlayerCount(); dvander@877: void EndVoting(); dvander@877: void InternalReset(); dvander@877: private: dvander@769: IMenuHandler *m_pHandler; dvander@877: unsigned int m_Clients; dvander@877: unsigned int m_Items; dvander@877: CVector m_Votes; dvander@877: IBaseMenu *m_pCurMenu; dvander@877: bool m_bStarted; dvander@884: bool m_bCancelled; dvander@877: unsigned int m_NumVotes; dvander@769: }; 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@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@877: IVoteMenuHandler *CreateVoteWrapper(IMenuHandler *mh); dvander@877: void ReleaseVoteWrapper(IVoteMenuHandler *mh); 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@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@877: CStack m_VoteHandlers; dvander@769: CVector m_Styles; dvander@790: HandleType_t m_StyleType; dvander@790: HandleType_t m_MenuType; dvander@769: }; dvander@769: dvander@769: extern MenuManager g_Menus; dvander@769: dvander@769: #endif //_INCLUDE_SOURCEMOD_MENUMANAGER_H_