core/MenuManager.h
author David Anderson <dvander@alliedmods.net>
Sun May 13 18:55:59 2007 +0000 (2007-05-13)
changeset 787 52283fe61d42
parent 780 570fa34723bf
child 790 9b1474d03470
permissions -rw-r--r--
changed IMenuDisplay/CreateDisplay to IMenuPanel/CreatePanel
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@769
    62
	public SMGlobalClass
dvander@769
    63
{
dvander@769
    64
	friend class BroadcastHandler;
dvander@769
    65
	friend class VoteHandler;
dvander@769
    66
public:
dvander@769
    67
	MenuManager();
dvander@769
    68
public: //SMGlobalClass
dvander@769
    69
	void OnSourceModAllInitialized();
dvander@769
    70
	void OnSourceModAllShutdown();
dvander@769
    71
public: //IMenuManager
dvander@769
    72
	virtual const char *GetInterfaceName()
dvander@769
    73
	{
dvander@769
    74
		return SMINTERFACE_MENUMANAGER_NAME;
dvander@769
    75
	}
dvander@769
    76
	virtual unsigned int GetInterfaceVersion()
dvander@769
    77
	{
dvander@769
    78
		return SMINTERFACE_MENUMANAGER_VERSION;
dvander@769
    79
	}
dvander@769
    80
public:
dvander@769
    81
	unsigned int GetStyleCount();
dvander@769
    82
	IMenuStyle *GetStyle(unsigned int index);
dvander@769
    83
	IMenuStyle *FindStyleByName(const char *name);
dvander@769
    84
	unsigned int BroadcastMenu(IBaseMenu *menu, 
dvander@769
    85
		IMenuHandler *handler,
dvander@769
    86
		int clients[], 
dvander@769
    87
		unsigned int numClients,
dvander@769
    88
		unsigned int time);
dvander@769
    89
	unsigned int VoteMenu(IBaseMenu *menu, 
dvander@769
    90
		IMenuVoteHandler *handler,
dvander@769
    91
		int clients[], 
dvander@769
    92
		unsigned int numClients,
dvander@769
    93
		unsigned int time);
dvander@769
    94
	IMenuStyle *GetDefaultStyle();
dvander@780
    95
	void AddStyle(IMenuStyle *style);
dvander@769
    96
	bool SetDefaultStyle(IMenuStyle *style);
dvander@787
    97
	IMenuPanel *RenderMenu(int client, menu_states_t &states, ItemOrder order);
dvander@769
    98
protected:
dvander@769
    99
	void FreeBroadcastHandler(BroadcastHandler *bh);
dvander@769
   100
	void FreeVoteHandler(VoteHandler *vh);
dvander@769
   101
private:
dvander@769
   102
	int m_ShowMenu;
dvander@769
   103
	IMenuStyle *m_pDefaultStyle;
dvander@769
   104
	CStack<BroadcastHandler *> m_BroadcastHandlers;
dvander@769
   105
	CStack<VoteHandler *> m_VoteHandlers;
dvander@769
   106
	CVector<IMenuStyle *> m_Styles;
dvander@769
   107
};
dvander@769
   108
dvander@769
   109
extern MenuManager g_Menus;
dvander@769
   110
dvander@769
   111
#endif //_INCLUDE_SOURCEMOD_MENUMANAGER_H_