core/MenuManager.h
author Scott Ehlert <ds@alliedmods.net>
Wed Jun 06 20:42:46 2007 +0000 (2007-06-06)
changeset 891 30343d215489
parent 884 a5f3239cef1a
child 997 2fc3152c3118
permissions -rw-r--r--
Changed a few natives/stocks that should have used IsClientInGame() rather than IsClientConnected()
     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 VoteMenuHandler : public IVoteMenuHandler
    29 {
    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);
    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);
    42 	void StartVoting();
    43 	void CancelVoting();
    44 public:
    45 	void Reset(IMenuHandler *mh);
    46 private:
    47 	void DecrementPlayerCount();
    48 	void EndVoting();
    49 	void InternalReset();
    50 private:
    51 	IMenuHandler *m_pHandler;
    52 	unsigned int m_Clients;
    53 	unsigned int m_Items;
    54 	CVector<unsigned int> m_Votes;
    55 	IBaseMenu *m_pCurMenu;
    56 	bool m_bStarted;
    57 	bool m_bCancelled;
    58 	unsigned int m_NumVotes;
    59 };
    60 
    61 class MenuManager : 
    62 	public IMenuManager,
    63 	public SMGlobalClass,
    64 	public IHandleTypeDispatch
    65 {
    66 	friend class BroadcastHandler;
    67 	friend class VoteHandler;
    68 	friend class CBaseMenu;
    69 	friend class BaseMenuStyle;
    70 public:
    71 	MenuManager();
    72 public: //SMGlobalClass
    73 	void OnSourceModAllInitialized();
    74 	void OnSourceModAllShutdown();
    75 public: //IMenuManager
    76 	virtual const char *GetInterfaceName()
    77 	{
    78 		return SMINTERFACE_MENUMANAGER_NAME;
    79 	}
    80 	virtual unsigned int GetInterfaceVersion()
    81 	{
    82 		return SMINTERFACE_MENUMANAGER_VERSION;
    83 	}
    84 public:
    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);
    96 public:
    97 	HandleError ReadMenuHandle(Handle_t handle, IBaseMenu **menu);
    98 	HandleError ReadStyleHandle(Handle_t handle, IMenuStyle **style);
    99 protected:
   100 	Handle_t CreateMenuHandle(IBaseMenu *menu, IdentityToken_t *pOwner);
   101 	Handle_t CreateStyleHandle(IMenuStyle *style);
   102 private:
   103 	int m_ShowMenu;
   104 	IMenuStyle *m_pDefaultStyle;
   105 	CStack<VoteMenuHandler *> m_VoteHandlers;
   106 	CVector<IMenuStyle *> m_Styles;
   107 	HandleType_t m_StyleType;
   108 	HandleType_t m_MenuType;
   109 };
   110 
   111 extern MenuManager g_Menus;
   112 
   113 #endif //_INCLUDE_SOURCEMOD_MENUMANAGER_H_