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 BroadcastHandler : public IMenuHandler
31 BroadcastHandler(IMenuHandler *handler);
32 public: //IMenuHandler
33 void OnMenuDisplay(IBaseMenu *menu, int client, IMenuPanel *display);
34 void OnMenuSelect(IBaseMenu *menu, int client, unsigned int item);
35 void OnMenuEnd(IBaseMenu *menu);
36 void OnMenuCancel(IBaseMenu *menu, int client, MenuCancelReason reason);
37 unsigned int GetMenuAPIVersion2();
39 virtual void OnBroadcastEnd(IBaseMenu *menu);
41 IMenuHandler *m_pHandler;
42 unsigned int numClients;
45 class VoteHandler : public BroadcastHandler
48 VoteHandler(IMenuVoteHandler *handler);
50 void Initialize(IBaseMenu *menu);
51 void OnMenuSelect(IBaseMenu *menu, int client, unsigned int item);
52 void OnBroadcastEnd(IBaseMenu *menu);
54 CVector<unsigned int> m_counts;
55 CVector<unsigned int> m_ties;
56 unsigned int numItems;
57 IMenuVoteHandler *m_pVoteHandler;
63 public IHandleTypeDispatch
65 friend class BroadcastHandler;
66 friend class VoteHandler;
67 friend class CBaseMenu;
68 friend class BaseMenuStyle;
71 public: //SMGlobalClass
72 void OnSourceModAllInitialized();
73 void OnSourceModAllShutdown();
74 public: //IMenuManager
75 virtual const char *GetInterfaceName()
77 return SMINTERFACE_MENUMANAGER_NAME;
79 virtual unsigned int GetInterfaceVersion()
81 return SMINTERFACE_MENUMANAGER_VERSION;
84 unsigned int GetStyleCount();
85 IMenuStyle *GetStyle(unsigned int index);
86 IMenuStyle *FindStyleByName(const char *name);
87 unsigned int BroadcastMenu(IBaseMenu *menu,
88 IMenuHandler *handler,
90 unsigned int numClients,
92 unsigned int VoteMenu(IBaseMenu *menu,
93 IMenuVoteHandler *handler,
95 unsigned int numClients,
97 IMenuStyle *GetDefaultStyle();
98 void AddStyle(IMenuStyle *style);
99 bool SetDefaultStyle(IMenuStyle *style);
100 IMenuPanel *RenderMenu(int client, menu_states_t &states, ItemOrder order);
101 public: //IHandleTypeDispatch
102 void OnHandleDestroy(HandleType_t type, void *object);
104 HandleError ReadMenuHandle(Handle_t handle, IBaseMenu **menu);
105 HandleError ReadStyleHandle(Handle_t handle, IMenuStyle **style);
107 void FreeBroadcastHandler(BroadcastHandler *bh);
108 void FreeVoteHandler(VoteHandler *vh);
109 Handle_t CreateMenuHandle(IBaseMenu *menu, IdentityToken_t *pOwner);
110 Handle_t CreateStyleHandle(IMenuStyle *style);
113 IMenuStyle *m_pDefaultStyle;
114 CStack<BroadcastHandler *> m_BroadcastHandlers;
115 CStack<VoteHandler *> m_VoteHandlers;
116 CVector<IMenuStyle *> m_Styles;
117 HandleType_t m_StyleType;
118 HandleType_t m_MenuType;
121 extern MenuManager g_Menus;
123 #endif //_INCLUDE_SOURCEMOD_MENUMANAGER_H_