core/MenuStyle_Radio.h
author David Anderson <dvander@alliedmods.net>
Mon May 14 04:46:06 2007 +0000 (2007-05-14)
changeset 790 9b1474d03470
parent 787 52283fe61d42
child 819 a2f2353049b9
permissions -rw-r--r--
redid API yet again - IMenuHandler is now bound to an IBaseMenu instance
implemented MOST natives
removed broadcasting/voting handlers for the time being
fixed a crash bug in basecontext when i didn't obey the api
moved radio displays to a caching stack
dvander@780
     1
/**
dvander@780
     2
 * vim: set ts=4 :
dvander@780
     3
 * ===============================================================
dvander@780
     4
 * SourceMod (C)2004-2007 AlliedModders LLC.  All rights reserved.
dvander@780
     5
 * ===============================================================
dvander@780
     6
 *
dvander@780
     7
 * This file is not open source and may not be copied without explicit
dvander@780
     8
 * written permission of AlliedModders LLC.  This file may not be redistributed 
dvander@780
     9
 * in whole or significant part.
dvander@780
    10
 * For information, see LICENSE.txt or http://www.sourcemod.net/license.php
dvander@780
    11
 *
dvander@780
    12
 * Version: $Id$
dvander@780
    13
 */
dvander@780
    14
dvander@780
    15
#ifndef _INCLUDE_MENUSTYLE_RADIO_H
dvander@780
    16
#define _INCLUDE_MENUSTYLE_RADIO_H
dvander@780
    17
dvander@780
    18
#include "sm_globals.h"
dvander@780
    19
#include "MenuManager.h"
dvander@780
    20
#include "MenuStyle_Base.h"
dvander@780
    21
#include "sourcemm_api.h"
dvander@780
    22
#include <IPlayerHelpers.h>
dvander@780
    23
#include <IUserMessages.h>
dvander@780
    24
#include "sm_fastlink.h"
dvander@790
    25
#include <sh_stack.h>
dvander@780
    26
dvander@780
    27
using namespace SourceMod;
dvander@780
    28
dvander@790
    29
class CRadioDisplay;
dvander@790
    30
class CRadioMenu;
dvander@790
    31
dvander@780
    32
class CRadioStyle : 
dvander@780
    33
	public BaseMenuStyle,
dvander@780
    34
	public SMGlobalClass,
dvander@780
    35
	public IUserMessageListener
dvander@780
    36
{
dvander@780
    37
public:
dvander@780
    38
	CRadioStyle();
dvander@780
    39
public: //SMGlobalClass
dvander@785
    40
	void OnSourceModLevelChange(const char *mapName);
dvander@780
    41
	void OnSourceModShutdown();
dvander@780
    42
public: //BaseMenuStyle
dvander@780
    43
	CBaseMenuPlayer *GetMenuPlayer(int client);
dvander@787
    44
	void SendDisplay(int client, IMenuPanel *display);
dvander@780
    45
public: //IMenuStyle
dvander@780
    46
	const char *GetStyleName();
dvander@787
    47
	IMenuPanel *CreatePanel();
dvander@790
    48
	IBaseMenu *CreateMenu(IMenuHandler *pHandler, IdentityToken_t *pOwner);
dvander@780
    49
	unsigned int GetMaxPageItems();
dvander@780
    50
public: //IUserMessageListener
dvander@780
    51
	void OnUserMessage(int msg_id, bf_write *bf, IRecipientFilter *pFilter);
dvander@780
    52
	void OnUserMessageSent(int msg_id);
dvander@780
    53
public:
dvander@780
    54
	bool IsSupported();
dvander@780
    55
	bool OnClientCommand(int client);
dvander@790
    56
public:
dvander@790
    57
	CRadioDisplay *MakeRadioDisplay(CRadioMenu *menu=NULL);
dvander@790
    58
	void FreeRadioDisplay(CRadioDisplay *display);
dvander@780
    59
private:
dvander@780
    60
	CBaseMenuPlayer *m_players;
dvander@790
    61
	CStack<CRadioDisplay *> m_FreeDisplays;
dvander@780
    62
};
dvander@780
    63
dvander@787
    64
class CRadioDisplay : public IMenuPanel
dvander@780
    65
{
dvander@790
    66
	friend class CRadioStyle;
dvander@780
    67
public:
dvander@780
    68
	CRadioDisplay();
dvander@780
    69
	CRadioDisplay(CRadioMenu *menu);
dvander@787
    70
public: //IMenuPanel
dvander@780
    71
	IMenuStyle *GetParentStyle();
dvander@780
    72
	void Reset();
dvander@780
    73
	void DrawTitle(const char *text, bool onlyIfEmpty=false);
dvander@780
    74
	unsigned int DrawItem(const ItemDrawInfo &item);
dvander@780
    75
	bool DrawRawLine(const char *rawline);
dvander@780
    76
	bool SetExtOption(MenuOption option, const void *valuePtr);
dvander@780
    77
	bool CanDrawItem(unsigned int drawFlags);
dvander@780
    78
	bool SendDisplay(int client, IMenuHandler *handler, unsigned int time);
dvander@780
    79
	void DeleteThis();
dvander@780
    80
	void SendRawDisplay(int client, unsigned int time);
dvander@780
    81
private:
dvander@780
    82
	String m_BufferText;
dvander@780
    83
	String m_Title;
dvander@780
    84
	unsigned int m_NextPos;
dvander@780
    85
	int keys;
dvander@780
    86
};
dvander@780
    87
dvander@780
    88
class CRadioMenu : public CBaseMenu
dvander@780
    89
{
dvander@780
    90
public:
dvander@790
    91
	CRadioMenu(IMenuHandler *pHandler, IdentityToken_t *pOwner);
dvander@780
    92
public:
dvander@780
    93
	bool SetExtOption(MenuOption option, const void *valuePtr);
dvander@787
    94
	IMenuPanel *CreatePanel();
dvander@790
    95
	bool Display(int client, unsigned int time);
dvander@780
    96
	void Cancel_Finally();
dvander@780
    97
};
dvander@780
    98
dvander@780
    99
extern CRadioStyle g_RadioMenuStyle;
dvander@780
   100
dvander@780
   101
#endif //_INCLUDE_MENUSTYLE_RADIO_H