core/MenuManager.h
author Scott Ehlert <ds@alliedmods.net>
Fri Jun 01 06:33:54 2007 +0000 (2007-06-01)
changeset 873 a2136b3be10d
parent 790 9b1474d03470
child 877 898c39fbfde9
permissions -rw-r--r--
- Added natives: PrintToChat() and PrintCenterText()
- Bit of reorganization with moving some natives from sourcemod.inc to halflife.inc
dvander@769
     1
/**
dvander@769
     2
 * vim: set ts=4 :
dvander@769
     3
 * ===============================================================
dvander@769
     4
 * SourceMod (C)2004-2007 AlliedModders LLC.  All rights reserved.
dvander@769
     5
 * ===============================================================
dvander@769
     6
 *
dvander@769
     7
 * This file is not open source and may not be copied without explicit
dvander@769
     8
 * written permission of AlliedModders LLC.  This file may not be redistributed 
dvander@769
     9
 * in whole or significant part.
dvander@769
    10
 * For information, see LICENSE.txt or http://www.sourcemod.net/license.php
dvander@769
    11
 *
dvander@769
    12
 * Version: $Id$
dvander@769
    13
 */
dvander@769
    14
dvander@769
    15
#ifndef _INCLUDE_SOURCEMOD_MENUMANAGER_H_
dvander@769
    16
#define _INCLUDE_SOURCEMOD_MENUMANAGER_H_
dvander@769
    17
dvander@769
    18
#include <IMenuManager.h>
dvander@769
    19
#include <sh_vector.h>
dvander@769
    20
#include <sh_stack.h>
dvander@769
    21
#include <sh_list.h>
dvander@769
    22
#include "sm_memtable.h"
dvander@769
    23
#include "sm_globals.h"
dvander@769
    24
dvander@769
    25
using namespace SourceMod;
dvander@769
    26
using namespace SourceHook;
dvander@769
    27
dvander@769
    28
class BroadcastHandler : public IMenuHandler
dvander@769
    29
{
dvander@769
    30
public:
dvander@769
    31
	BroadcastHandler(IMenuHandler *handler);
dvander@769
    32
public: //IMenuHandler
dvander@787
    33
	void OnMenuDisplay(IBaseMenu *menu, int client, IMenuPanel *display);
dvander@769
    34
	void OnMenuSelect(IBaseMenu *menu, int client, unsigned int item);
dvander@769
    35
	void OnMenuEnd(IBaseMenu *menu);
dvander@769
    36
	void OnMenuCancel(IBaseMenu *menu, int client, MenuCancelReason reason);
dvander@769
    37
	unsigned int GetMenuAPIVersion2();
dvander@769
    38
public:
dvander@769
    39
	virtual void OnBroadcastEnd(IBaseMenu *menu);
dvander@769
    40
public:
dvander@769
    41
	IMenuHandler *m_pHandler;
dvander@769
    42
	unsigned int numClients;
dvander@769
    43
};
dvander@769
    44
dvander@769
    45
class VoteHandler : public BroadcastHandler
dvander@769
    46
{
dvander@769
    47
public:
dvander@769
    48
	VoteHandler(IMenuVoteHandler *handler);
dvander@769
    49
public:
dvander@769
    50
	void Initialize(IBaseMenu *menu);
dvander@769
    51
	void OnMenuSelect(IBaseMenu *menu, int client, unsigned int item);
dvander@769
    52
	void OnBroadcastEnd(IBaseMenu *menu);
dvander@769
    53
private:
dvander@769
    54
	CVector<unsigned int> m_counts;
dvander@769
    55
	CVector<unsigned int> m_ties;
dvander@769
    56
	unsigned int numItems;
dvander@769
    57
	IMenuVoteHandler *m_pVoteHandler;
dvander@769
    58
};
dvander@769
    59
dvander@769
    60
class MenuManager : 
dvander@769
    61
	public IMenuManager,
dvander@790
    62
	public SMGlobalClass,
dvander@790
    63
	public IHandleTypeDispatch
dvander@769
    64
{
dvander@769
    65
	friend class BroadcastHandler;
dvander@769
    66
	friend class VoteHandler;
dvander@790
    67
	friend class CBaseMenu;
dvander@790
    68
	friend class BaseMenuStyle;
dvander@769
    69
public:
dvander@769
    70
	MenuManager();
dvander@769
    71
public: //SMGlobalClass
dvander@769
    72
	void OnSourceModAllInitialized();
dvander@769
    73
	void OnSourceModAllShutdown();
dvander@769
    74
public: //IMenuManager
dvander@769
    75
	virtual const char *GetInterfaceName()
dvander@769
    76
	{
dvander@769
    77
		return SMINTERFACE_MENUMANAGER_NAME;
dvander@769
    78
	}
dvander@769
    79
	virtual unsigned int GetInterfaceVersion()
dvander@769
    80
	{
dvander@769
    81
		return SMINTERFACE_MENUMANAGER_VERSION;
dvander@769
    82
	}
dvander@769
    83
public:
dvander@769
    84
	unsigned int GetStyleCount();
dvander@769
    85
	IMenuStyle *GetStyle(unsigned int index);
dvander@769
    86
	IMenuStyle *FindStyleByName(const char *name);
dvander@769
    87
	unsigned int BroadcastMenu(IBaseMenu *menu, 
dvander@769
    88
		IMenuHandler *handler,
dvander@769
    89
		int clients[], 
dvander@769
    90
		unsigned int numClients,
dvander@769
    91
		unsigned int time);
dvander@769
    92
	unsigned int VoteMenu(IBaseMenu *menu, 
dvander@769
    93
		IMenuVoteHandler *handler,
dvander@769
    94
		int clients[], 
dvander@769
    95
		unsigned int numClients,
dvander@769
    96
		unsigned int time);
dvander@769
    97
	IMenuStyle *GetDefaultStyle();
dvander@780
    98
	void AddStyle(IMenuStyle *style);
dvander@769
    99
	bool SetDefaultStyle(IMenuStyle *style);
dvander@787
   100
	IMenuPanel *RenderMenu(int client, menu_states_t &states, ItemOrder order);
dvander@790
   101
public: //IHandleTypeDispatch
dvander@790
   102
	void OnHandleDestroy(HandleType_t type, void *object);
dvander@790
   103
public:
dvander@790
   104
	HandleError ReadMenuHandle(Handle_t handle, IBaseMenu **menu);
dvander@790
   105
	HandleError ReadStyleHandle(Handle_t handle, IMenuStyle **style);
dvander@769
   106
protected:
dvander@769
   107
	void FreeBroadcastHandler(BroadcastHandler *bh);
dvander@769
   108
	void FreeVoteHandler(VoteHandler *vh);
dvander@790
   109
	Handle_t CreateMenuHandle(IBaseMenu *menu, IdentityToken_t *pOwner);
dvander@790
   110
	Handle_t CreateStyleHandle(IMenuStyle *style);
dvander@769
   111
private:
dvander@769
   112
	int m_ShowMenu;
dvander@769
   113
	IMenuStyle *m_pDefaultStyle;
dvander@769
   114
	CStack<BroadcastHandler *> m_BroadcastHandlers;
dvander@769
   115
	CStack<VoteHandler *> m_VoteHandlers;
dvander@769
   116
	CVector<IMenuStyle *> m_Styles;
dvander@790
   117
	HandleType_t m_StyleType;
dvander@790
   118
	HandleType_t m_MenuType;
dvander@769
   119
};
dvander@769
   120
dvander@769
   121
extern MenuManager g_Menus;
dvander@769
   122
dvander@769
   123
#endif //_INCLUDE_SOURCEMOD_MENUMANAGER_H_