3 * ===============================================================
4 * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved.
5 * ===============================================================
7 * This file is not open source and may not be copied without explicit
8 * written permission of AlliedModders LLC. This file may not be redistributed
9 * in whole or significant part.
10 * For information, see LICENSE.txt or http://www.sourcemod.net/license.php
15 #ifndef _INCLUDE_SOURCEMOD_MENUMANAGER_H_
16 #define _INCLUDE_SOURCEMOD_MENUMANAGER_H_
18 #include <IMenuManager.h>
19 #include <sh_vector.h>
22 #include "sm_memtable.h"
23 #include "sm_globals.h"
25 using namespace SourceMod;
26 using namespace SourceHook;
28 class VoteMenuHandler : public IVoteMenuHandler
30 public: //IMenuHandler
31 unsigned int GetMenuAPIVersion2();
32 void OnMenuStart(IBaseMenu *menu);
33 void OnMenuDisplay(IBaseMenu *menu, int client, IMenuPanel *display);
34 void OnMenuSelect(IBaseMenu *menu, int client, unsigned int item);
35 void OnMenuCancel(IBaseMenu *menu, int client, MenuCancelReason reason);
36 void OnMenuEnd(IBaseMenu *menu, MenuEndReason reason);
37 void OnMenuDrawItem(IBaseMenu *menu, int client, unsigned int item, unsigned int &style);
38 void OnMenuDisplayItem(IBaseMenu *menu, int client, unsigned int item, const char **display);
39 public: //IVoteMenuHandler
40 bool IsVoteInProgress();
41 void InitializeVoting(IBaseMenu *menu);
45 void Reset(IMenuHandler *mh);
47 void DecrementPlayerCount();
51 IMenuHandler *m_pHandler;
52 unsigned int m_Clients;
54 CVector<unsigned int> m_Votes;
55 IBaseMenu *m_pCurMenu;
58 unsigned int m_NumVotes;
64 public IHandleTypeDispatch
66 friend class BroadcastHandler;
67 friend class VoteHandler;
68 friend class CBaseMenu;
69 friend class BaseMenuStyle;
72 public: //SMGlobalClass
73 void OnSourceModAllInitialized();
74 void OnSourceModAllShutdown();
75 public: //IMenuManager
76 virtual const char *GetInterfaceName()
78 return SMINTERFACE_MENUMANAGER_NAME;
80 virtual unsigned int GetInterfaceVersion()
82 return SMINTERFACE_MENUMANAGER_VERSION;
85 unsigned int GetStyleCount();
86 IMenuStyle *GetStyle(unsigned int index);
87 IMenuStyle *FindStyleByName(const char *name);
88 IMenuStyle *GetDefaultStyle();
89 void AddStyle(IMenuStyle *style);
90 bool SetDefaultStyle(IMenuStyle *style);
91 IMenuPanel *RenderMenu(int client, menu_states_t &states, ItemOrder order);
92 IVoteMenuHandler *CreateVoteWrapper(IMenuHandler *mh);
93 void ReleaseVoteWrapper(IVoteMenuHandler *mh);
94 public: //IHandleTypeDispatch
95 void OnHandleDestroy(HandleType_t type, void *object);
97 HandleError ReadMenuHandle(Handle_t handle, IBaseMenu **menu);
98 HandleError ReadStyleHandle(Handle_t handle, IMenuStyle **style);
100 Handle_t CreateMenuHandle(IBaseMenu *menu, IdentityToken_t *pOwner);
101 Handle_t CreateStyleHandle(IMenuStyle *style);
104 IMenuStyle *m_pDefaultStyle;
105 CStack<VoteMenuHandler *> m_VoteHandlers;
106 CVector<IMenuStyle *> m_Styles;
107 HandleType_t m_StyleType;
108 HandleType_t m_MenuType;
111 extern MenuManager g_Menus;
113 #endif //_INCLUDE_SOURCEMOD_MENUMANAGER_H_