core/MenuManager.h
author Scott Ehlert <ds@alliedmods.net>
Mon May 14 21:29:17 2007 +0000 (2007-05-14)
changeset 794 5947b0ee60bb
parent 790 9b1474d03470
child 877 898c39fbfde9
permissions -rw-r--r--
Implemented amb286 - .smx extension no longer required with "sm plugins load"
     1 /**
     2  * vim: set ts=4 :
     3  * ===============================================================
     4  * SourceMod (C)2004-2007 AlliedModders LLC.  All rights reserved.
     5  * ===============================================================
     6  *
     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
    11  *
    12  * Version: $Id$
    13  */
    14 
    15 #ifndef _INCLUDE_SOURCEMOD_MENUMANAGER_H_
    16 #define _INCLUDE_SOURCEMOD_MENUMANAGER_H_
    17 
    18 #include <IMenuManager.h>
    19 #include <sh_vector.h>
    20 #include <sh_stack.h>
    21 #include <sh_list.h>
    22 #include "sm_memtable.h"
    23 #include "sm_globals.h"
    24 
    25 using namespace SourceMod;
    26 using namespace SourceHook;
    27 
    28 class BroadcastHandler : public IMenuHandler
    29 {
    30 public:
    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();
    38 public:
    39 	virtual void OnBroadcastEnd(IBaseMenu *menu);
    40 public:
    41 	IMenuHandler *m_pHandler;
    42 	unsigned int numClients;
    43 };
    44 
    45 class VoteHandler : public BroadcastHandler
    46 {
    47 public:
    48 	VoteHandler(IMenuVoteHandler *handler);
    49 public:
    50 	void Initialize(IBaseMenu *menu);
    51 	void OnMenuSelect(IBaseMenu *menu, int client, unsigned int item);
    52 	void OnBroadcastEnd(IBaseMenu *menu);
    53 private:
    54 	CVector<unsigned int> m_counts;
    55 	CVector<unsigned int> m_ties;
    56 	unsigned int numItems;
    57 	IMenuVoteHandler *m_pVoteHandler;
    58 };
    59 
    60 class MenuManager : 
    61 	public IMenuManager,
    62 	public SMGlobalClass,
    63 	public IHandleTypeDispatch
    64 {
    65 	friend class BroadcastHandler;
    66 	friend class VoteHandler;
    67 	friend class CBaseMenu;
    68 	friend class BaseMenuStyle;
    69 public:
    70 	MenuManager();
    71 public: //SMGlobalClass
    72 	void OnSourceModAllInitialized();
    73 	void OnSourceModAllShutdown();
    74 public: //IMenuManager
    75 	virtual const char *GetInterfaceName()
    76 	{
    77 		return SMINTERFACE_MENUMANAGER_NAME;
    78 	}
    79 	virtual unsigned int GetInterfaceVersion()
    80 	{
    81 		return SMINTERFACE_MENUMANAGER_VERSION;
    82 	}
    83 public:
    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,
    89 		int clients[], 
    90 		unsigned int numClients,
    91 		unsigned int time);
    92 	unsigned int VoteMenu(IBaseMenu *menu, 
    93 		IMenuVoteHandler *handler,
    94 		int clients[], 
    95 		unsigned int numClients,
    96 		unsigned int time);
    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);
   103 public:
   104 	HandleError ReadMenuHandle(Handle_t handle, IBaseMenu **menu);
   105 	HandleError ReadStyleHandle(Handle_t handle, IMenuStyle **style);
   106 protected:
   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);
   111 private:
   112 	int m_ShowMenu;
   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;
   119 };
   120 
   121 extern MenuManager g_Menus;
   122 
   123 #endif //_INCLUDE_SOURCEMOD_MENUMANAGER_H_