public/IMenuManager.h
author Nicholas Hastings <skamonkey@gmail.com>
Fri Mar 21 13:23:48 2014 -0400 (2014-03-21)
changeset 4293 f61ae385f12e
parent 2928 1f7626e1a49d
permissions -rw-r--r--
Add PbRemoveRepeatedFieldValue native (bug 6066, r=asherkin).
dvander@768
     1
/**
dvander@768
     2
 * vim: set ts=4 :
ds@1330
     3
 * =============================================================================
dvander@1226
     4
 * SourceMod
ds@1947
     5
 * Copyright (C) 2004-2008 AlliedModders LLC.  All rights reserved.
ds@1330
     6
 * =============================================================================
dvander@768
     7
 *
ds@1330
     8
 * This program is free software; you can redistribute it and/or modify it under
ds@1330
     9
 * the terms of the GNU General Public License, version 3.0, as published by the
ds@1330
    10
 * Free Software Foundation.
dvander@768
    11
 * 
ds@1330
    12
 * This program is distributed in the hope that it will be useful, but WITHOUT
ds@1330
    13
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
ds@1330
    14
 * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
ds@1330
    15
 * details.
dvander@1226
    16
 *
ds@1330
    17
 * You should have received a copy of the GNU General Public License along with
ds@1330
    18
 * this program.  If not, see <http://www.gnu.org/licenses/>.
dvander@1226
    19
 *
ds@1330
    20
 * As a special exception, AlliedModders LLC gives you permission to link the
ds@1330
    21
 * code of this program (as well as its derivative works) to "Half-Life 2," the
ds@1330
    22
 * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
ds@1330
    23
 * by the Valve Corporation.  You must obey the GNU General Public License in
ds@1330
    24
 * all respects for all other code used.  Additionally, AlliedModders LLC grants
ds@1330
    25
 * this exception to all derivative works.  AlliedModders LLC defines further
ds@1330
    26
 * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
ds@1330
    27
 * or <http://www.sourcemod.net/license.php>.
dvander@768
    28
 *
dvander@768
    29
 * Version: $Id$
dvander@768
    30
 */
dvander@768
    31
dvander@768
    32
#ifndef _INCLUDE_SOURCEMOD_MENU_SYSTEM_H_
dvander@768
    33
#define _INCLUDE_SOURCEMOD_MENU_SYSTEM_H_
dvander@768
    34
dvander@768
    35
#include <IShareSys.h>
dvander@790
    36
#include <IHandleSys.h>
dvander@768
    37
dvander@768
    38
#define SMINTERFACE_MENUMANAGER_NAME		"IMenuManager"
dvander@2737
    39
#define SMINTERFACE_MENUMANAGER_VERSION		16
dvander@768
    40
dvander@768
    41
/**
dvander@768
    42
 * @file IMenuManager.h
dvander@768
    43
 * @brief Abstracts on-screen menus for clients.
dvander@768
    44
 */
dvander@768
    45
dvander@768
    46
namespace SourceMod
dvander@768
    47
{
dvander@768
    48
	/**
dvander@768
    49
	 * @brief Used to determine how an item selection is interpreted.
dvander@768
    50
	 */
dvander@768
    51
	enum ItemSelection
dvander@768
    52
	{
dvander@768
    53
		ItemSel_None,					/**< Invalid selection */
dvander@1005
    54
		ItemSel_Back,					/**< Go back one page (really "Previous") */
dvander@768
    55
		ItemSel_Next,					/**< Go forward one page */
dvander@768
    56
		ItemSel_Exit,					/**< Menu was exited */
dvander@768
    57
		ItemSel_Item,					/**< Valid item selection */
dvander@1005
    58
		ItemSel_ExitBack,				/**< Sends MenuEnd_ExitBack */
dvander@768
    59
	};
dvander@768
    60
dvander@768
    61
	/**
dvander@768
    62
	 * @brief Used to determine which order to search for items in.
dvander@768
    63
	 */
dvander@768
    64
	enum ItemOrder
dvander@768
    65
	{
dvander@768
    66
		ItemOrder_Ascending,			/**< Items should be drawn ascendingly */
dvander@768
    67
		ItemOrder_Descending,			/**< Items should be drawn descendingly */
dvander@768
    68
	};
dvander@768
    69
dvander@768
    70
	/**
dvander@768
    71
	 * @brief Pairs an item type with an item menu position.
dvander@768
    72
	 */
dvander@768
    73
	struct menu_slots_t
dvander@768
    74
	{
dvander@768
    75
		ItemSelection type;				/**< Item selection type */
dvander@768
    76
		unsigned int item;				/**< Item position, if applicable */
dvander@768
    77
	};
dvander@768
    78
dvander@768
    79
	class IBaseMenu;
dvander@787
    80
	class IMenuPanel;
dvander@768
    81
	class IMenuHandler;
dvander@768
    82
dvander@768
    83
	/**
dvander@768
    84
	 * @brief Describes menu display information.
dvander@768
    85
	 */
dvander@768
    86
	struct menu_states_t
dvander@768
    87
	{
dvander@768
    88
		unsigned int apiVers;			/**< Must be filled with the API version */
dvander@768
    89
		IBaseMenu *menu;				/**< Menu pointer, or NULL if there is only a display */
dvander@768
    90
		IMenuHandler *mh;				/**< Menu callbacks handler */
dvander@768
    91
		unsigned int firstItem;			/**< MENU ONLY: First item displayed on the last page */
dvander@768
    92
		unsigned int lastItem;			/**< MENU ONLY: Last item displayed on the last page */
dvander@1476
    93
		unsigned int item_on_page;		/**< MENU ONLY: First item on page */
dvander@768
    94
		menu_slots_t slots[11];			/**< MENU ONLY: Item selection table (first index is 1) */
dvander@768
    95
	};
dvander@768
    96
dvander@768
    97
	#define ITEMDRAW_DEFAULT		(0)		/**< Item should be drawn normally */
dvander@768
    98
	#define ITEMDRAW_DISABLED		(1<<0)	/**< Item is drawn but not selectable */
dvander@768
    99
	#define ITEMDRAW_RAWLINE		(1<<1)	/**< Item should be a raw line, without a slot */
dvander@768
   100
	#define ITEMDRAW_NOTEXT			(1<<2)	/**< No text should be drawn */
dvander@768
   101
	#define ITEMDRAW_SPACER			(1<<3)	/**< Item should be drawn as a spacer, if possible */
dvander@777
   102
	#define ITEMDRAW_IGNORE	((1<<1)|(1<<2))	/**< Item should be completely ignored (rawline + notext) */
dvander@785
   103
	#define ITEMDRAW_CONTROL		(1<<4)	/**< Item is control text (back/next/exit) */
dvander@768
   104
dvander@768
   105
	/**
dvander@768
   106
	 * @brief Information about item drawing.
dvander@768
   107
	 */
dvander@768
   108
	struct ItemDrawInfo
dvander@768
   109
	{
dvander@1163
   110
		ItemDrawInfo(const char *DISPLAY=NULL, unsigned int STYLE=ITEMDRAW_DEFAULT, 
dvander@1163
   111
					 unsigned int FLAGS=0, const char *HELPTEXT=NULL) 
dvander@1347
   112
			: display(DISPLAY), style(STYLE)
dvander@768
   113
		{
dvander@768
   114
		}
dvander@777
   115
		const char *display;			/**< Display text (NULL for none) */
dvander@768
   116
		unsigned int style;				/**< ITEMDRAW style flags */
dvander@768
   117
	};
dvander@768
   118
dvander@768
   119
	/**
dvander@1269
   120
	 * @brief Contains information about a vote result.
dvander@1269
   121
	 */
dvander@1269
   122
	struct menu_vote_result_t
dvander@1269
   123
	{
dvander@1269
   124
		unsigned int num_clients;		/**< Number of clients the menu was displayed to */
dvander@1269
   125
		unsigned int num_votes;			/**< Number of votes received */
dvander@1269
   126
		struct menu_client_vote_t
dvander@1269
   127
		{
dvander@1269
   128
			int client;					/**< Client index */
dvander@1269
   129
			int item;					/**< Item # (or -1 for none) */
dvander@1269
   130
		} *client_list;					/**< Array of size num_clients */
dvander@1269
   131
		unsigned int num_items;			/**< Number of items voted for */
dvander@1269
   132
		struct menu_item_vote_t
dvander@1269
   133
		{
dvander@1269
   134
			unsigned int item;			/**< Item index */
dvander@1269
   135
			unsigned int count;			/**< Number of votes */
dvander@1269
   136
		} *item_list;					/**< Array of size num_items, sorted by count, 
dvander@1269
   137
											 descending */
dvander@1269
   138
	};
dvander@1269
   139
dvander@1269
   140
	/**
dvander@768
   141
	 * @brief Reasons for a menu dying.
dvander@768
   142
	 */
dvander@768
   143
	enum MenuCancelReason
dvander@768
   144
	{
dvander@1005
   145
		MenuCancel_Disconnected = -1,	/**< Client dropped from the server */
dvander@1005
   146
		MenuCancel_Interrupted = -2,	/**< Client was interrupted with another menu */
dvander@1005
   147
		MenuCancel_Exit = -3,			/**< Client selected "exit" on a paginated menu */
dvander@1005
   148
		MenuCancel_NoDisplay = -4,		/**< Menu could not be displayed to the client */
dvander@1005
   149
		MenuCancel_Timeout = -5,		/**< Menu timed out */
dvander@1005
   150
		MenuCancel_ExitBack = -6,		/**< Client selected "exit back" on a paginated menu */
dvander@768
   151
	};
dvander@768
   152
dvander@997
   153
	/**
dvander@997
   154
	 * @brief Reasons a menu ended.
dvander@997
   155
	 */
dvander@997
   156
	enum MenuEndReason
dvander@997
   157
	{
dvander@1005
   158
		MenuEnd_Selected = 0,				/**< Menu item was selected */
dvander@1005
   159
		MenuEnd_VotingDone = -1,			/**< Voting finished */
dvander@1005
   160
		MenuEnd_VotingCancelled = -2,		/**< Voting was cancelled */
dvander@1005
   161
		MenuEnd_Cancelled = -3,				/**< Menu was uncleanly cancelled */
dvander@1005
   162
		MenuEnd_Exit = -4,					/**< Menu was cleanly exited via "exit" */
dvander@1005
   163
		MenuEnd_ExitBack = -5,				/**< Menu was cleanly exited via "back" */
dvander@997
   164
	};
dvander@997
   165
dvander@1296
   166
	/**
dvander@1296
   167
	 * @brief Reasons a vote can be cancelled.
dvander@1296
   168
	 */
dvander@1296
   169
	enum VoteCancelReason
dvander@1296
   170
	{
dvander@1296
   171
		VoteCancel_Generic = -1,		/**< Vote was generically cancelled. */
dvander@1296
   172
		VoteCancel_NoVotes = -2,		/**< Vote did not receive any votes. */
dvander@1296
   173
	};
dvander@997
   174
dvander@777
   175
	#define MENU_NO_PAGINATION			0		/**< Menu should not be paginated (10 items max) */
dvander@768
   176
	#define MENU_TIME_FOREVER			0		/**< Menu should be displayed as long as possible */
dvander@768
   177
dvander@1259
   178
	#define MENUFLAG_BUTTON_EXIT		(1<<0)	/**< Menu has an "exit" button */
dvander@1259
   179
	#define MENUFLAG_BUTTON_EXITBACK	(1<<1)	/**< Menu has an "exit back" button */
dvander@1259
   180
	#define MENUFLAG_NO_SOUND			(1<<2)	/**< Menu will not have any select sounds */
pred@2928
   181
	#define MENUFLAG_BUTTON_NOVOTE		(1<<3)	/**< Menu has a "No Vote" button at slot 1 */
dvander@1259
   182
dvander@2737
   183
	#define VOTEFLAG_NO_REVOTES			(1<<0)	/**< Players cannot change their votes */
dvander@2737
   184
dvander@768
   185
	/**
dvander@768
   186
	 * @brief Extended menu options.
dvander@768
   187
	 */
dvander@768
   188
	enum MenuOption
dvander@768
   189
	{
dvander@768
   190
		MenuOption_IntroMessage,				/**< CONST CHAR *: Valve menus only; defaults to:
dvander@768
   191
													 "You have a menu, hit ESC"
dvander@768
   192
													 */
dvander@768
   193
		MenuOption_IntroColor,					/**< INT[4]: Valve menus only; specifies the intro message colour
dvander@768
   194
													 using R,G,B,A (defaults to 255,0,0,255)
dvander@768
   195
													 */
dvander@776
   196
		MenuOption_Priority,					/**< INT *: Valve menus only; priority (less is higher) */
dvander@768
   197
	};
dvander@768
   198
dvander@768
   199
	/**
dvander@768
   200
	 * @brief Describes the menu a player is viewing.
dvander@768
   201
	 */
dvander@768
   202
	enum MenuSource
dvander@768
   203
	{
dvander@768
   204
		MenuSource_None = 0,					/**< No menu is being displayed */
dvander@768
   205
		MenuSource_External = 1,				/**< External menu, no pointer */
dvander@768
   206
		MenuSource_BaseMenu = 2,				/**< An IBaseMenu pointer. */
dvander@787
   207
		MenuSource_Display = 3,					/**< IMenuPanel source, no pointer */
dvander@768
   208
	};
dvander@768
   209
dvander@768
   210
	class IMenuStyle;
dvander@768
   211
dvander@768
   212
	/**
dvander@768
   213
	 * @brief Sets how a raw menu should be drawn.
dvander@768
   214
	 */
dvander@787
   215
	class IMenuPanel
dvander@768
   216
	{
dvander@768
   217
	public:
dvander@768
   218
		/**
dvander@768
   219
		 * @brief Returns the parent IMenuStyle pointer.
dvander@768
   220
		 *
dvander@768
   221
		 * @return				IMenuStyle pointer which created
dvander@768
   222
		 *						this object.
dvander@768
   223
		 */
dvander@768
   224
		virtual IMenuStyle *GetParentStyle() =0;
dvander@768
   225
dvander@768
   226
		/**
dvander@768
   227
		 * @brief Resets/clears the cached display text.
dvander@768
   228
		 */
dvander@768
   229
		virtual void Reset() =0;
dvander@768
   230
dvander@768
   231
		/**
dvander@768
   232
		 * @brief Sets how the title should be drawn.
dvander@768
   233
		 *
dvander@768
   234
		 * @param text			Text string to display for the title.
dvander@768
   235
		 * @param onlyIfEmpty	Only sets the title if one does not already 
dvander@768
   236
		 *						exist.
dvander@768
   237
		 */
dvander@768
   238
		virtual void DrawTitle(const char *text, bool onlyIfEmpty=false) =0;
dvander@768
   239
dvander@768
   240
		/**
dvander@768
   241
		 * @brief Adds an item to the menu and returns the position (1-10).
dvander@768
   242
		 *
dvander@768
   243
		 * Note: Item will fail to draw if there are too many items,
dvander@768
   244
		 * or the item is not drawable (for example, invisible).	
dvander@768
   245
		 * 
dvander@768
   246
		 * @return				Item draw position, or 0 on failure.
dvander@768
   247
		 */
dvander@768
   248
		virtual unsigned int DrawItem(const ItemDrawInfo &item) =0;
dvander@768
   249
dvander@768
   250
		/**
dvander@768
   251
		 * @brief Draws a raw line of text, if supported.  The line does not 
dvander@768
   252
		 * need to be newline terminated.
dvander@768
   253
		 *
dvander@768
   254
		 * @return				True on success, false if not supported.
dvander@768
   255
		 */
dvander@768
   256
		virtual bool DrawRawLine(const char *rawline) =0;
dvander@768
   257
dvander@768
   258
		/**
dvander@768
   259
		 * @brief Sets an extended menu option.
dvander@768
   260
		 *
dvander@768
   261
		 * @param option		Option type.
dvander@768
   262
		 * @param valuePtr		Pointer of the type expected by the option.
dvander@768
   263
		 * @return				True on success, false if option or value is not supported.
dvander@768
   264
		 */
dvander@768
   265
		virtual bool SetExtOption(MenuOption option, const void *valuePtr) =0;
dvander@768
   266
dvander@768
   267
		/**
dvander@768
   268
		 * @brief Returns whether the display is capable of rendering an item
dvander@768
   269
		 * with the given flags.
dvander@768
   270
		 *
dvander@1678
   271
		 * @param drawFlags		ITEMDRAW flags.
dvander@768
   272
		 * @return				True if renderable, false otherwise.
dvander@768
   273
		 */
dvander@768
   274
		virtual bool CanDrawItem(unsigned int drawFlags) =0;
dvander@768
   275
dvander@768
   276
		/**
dvander@768
   277
		 * @brief Sends the menu display to a client.
dvander@768
   278
		 *
dvander@768
   279
		 * @param client		Client index to display to.
dvander@768
   280
		 * @param handler		Menu handler to use.
dvander@768
   281
		 * @param time			Time to hold menu for.
dvander@768
   282
		 * @return				True on success, false otherwise.
dvander@768
   283
		 */
dvander@768
   284
		virtual bool SendDisplay(int client, IMenuHandler *handler, unsigned int time) =0;
dvander@776
   285
dvander@776
   286
		/**
dvander@776
   287
		 * @brief Destroys the display object.
dvander@776
   288
		 */
dvander@776
   289
		virtual void DeleteThis() =0;
dvander@819
   290
dvander@819
   291
		/**
dvander@819
   292
		 * @brief Sets the selectable key map.  Returns false if the function 
dvander@819
   293
		 * is not supported.
dvander@819
   294
		 * 
dvander@1678
   295
		 * @param keymap		A bit string where each bit N-1 specifies 
dvander@819
   296
		 *						that key N is selectable (key 0 is bit 9).  
dvander@819
   297
		 *						If the selectable key map is 0, it will be
dvander@819
   298
		 *						automatically set to allow 0.
dvander@819
   299
		 * @return				True on success, false if not supported.
dvander@819
   300
		 */
dvander@819
   301
		virtual bool SetSelectableKeys(unsigned int keymap) =0;
dvander@840
   302
dvander@840
   303
		/**
dvander@840
   304
		 * @brief Returns the current key position.
dvander@840
   305
		 *
dvander@840
   306
		 * @return				Current key position starting at 1.
dvander@840
   307
		 */
dvander@840
   308
		virtual unsigned int GetCurrentKey() =0;
dvander@840
   309
dvander@840
   310
		/**
dvander@840
   311
		 * @brief Sets the next key position.  This cannot be used
dvander@840
   312
		 * to traverse backwards.
dvander@840
   313
		 *
dvander@840
   314
		 * @param key			Key that is greater or equal to
dvander@840
   315
		 *						GetCurrentKey().
dvander@840
   316
		 * @return				True on success, false otherwise.
dvander@840
   317
		 */
dvander@840
   318
		virtual bool SetCurrentKey(unsigned int key) =0;
dvander@1361
   319
dvander@1361
   320
		/**
dvander@1361
   321
		 * @brief Returns the number of characters that can be added to the 
dvander@1361
   322
		 * menu.  The internal buffer is truncated if overflowed; this is for 
dvander@1361
   323
		 * manual truncation/wrapping purposes.
dvander@1361
   324
		 *
dvander@1361
   325
		 * @return				Number of bytes available.  If the result is 
dvander@1361
   326
		 *						-1, then the panel has no text limit.
dvander@1361
   327
		 */
dvander@1361
   328
		virtual int GetAmountRemaining() =0;
dvander@1766
   329
dvander@1766
   330
		/**
dvander@1766
   331
		 * @brief For the Handle system, returns approximate memory usage.
dvander@1766
   332
		 *
dvander@1766
   333
		 * @return				Approximate number of bytes being used.
dvander@1766
   334
		 */
dvander@1766
   335
		virtual unsigned int GetApproxMemUsage() =0;
dvander@768
   336
	};
dvander@768
   337
dvander@768
   338
	/**
dvander@768
   339
	 * @brief Describes a "MenuStyle" system which manages
dvander@768
   340
	 * menu drawing and construction.
dvander@768
   341
	 */
dvander@768
   342
	class IMenuStyle
dvander@768
   343
	{
dvander@768
   344
	public:
dvander@768
   345
		/**
dvander@768
   346
		 * @brief Returns the style API version.
dvander@768
   347
		 *
dvander@768
   348
		 * @return				API version.
dvander@768
   349
		 */
dvander@768
   350
		virtual unsigned int GetStyleAPIVersion()
dvander@768
   351
		{
dvander@768
   352
			return SMINTERFACE_MENUMANAGER_VERSION;
dvander@768
   353
		}
dvander@768
   354
dvander@768
   355
		/**
dvander@768
   356
		 * @brief Returns the name of the menu style.
dvander@768
   357
		 *
dvander@768
   358
		 * @return				String containing the style name.
dvander@768
   359
		 */
dvander@768
   360
		virtual const char *GetStyleName() =0;
dvander@768
   361
dvander@768
   362
		/**
dvander@787
   363
		 * @brief Creates an IMenuPanel object.
dvander@768
   364
		 *
dvander@776
   365
		 * Note: the object should be freed using ::DeleteThis.
dvander@768
   366
		 *
dvander@787
   367
		 * @return				IMenuPanel object.
dvander@768
   368
		 */
dvander@787
   369
		virtual IMenuPanel *CreatePanel() =0;
dvander@768
   370
dvander@768
   371
		/**
dvander@768
   372
		 * @brief Creates an IBaseMenu object of this style.
dvander@768
   373
		 *
dvander@768
   374
		 * Note: the object should be freed using IBaseMenu::Destroy.
dvander@768
   375
		 *
dvander@790
   376
		 * @param handler		IMenuHandler pointer.
dvander@790
   377
		 * @param pOwner		Optional IdentityToken_t owner for handle 
dvander@790
   378
		 *						creation.
dvander@768
   379
		 * @return				An IBaseMenu pointer.
dvander@768
   380
		 */
dvander@790
   381
		virtual IBaseMenu *CreateMenu(IMenuHandler *handler, IdentityToken_t *pOwner=NULL) =0;
dvander@768
   382
dvander@768
   383
		/**
dvander@768
   384
		 * @brief Returns the maximum number of items per page.
dvander@768
   385
		 *
dvander@1653
   386
		 * Menu implementations must return >= 2.  Styles with only 1 or 0 
dvander@1653
   387
		 * items per page are not valid.
dvander@1653
   388
		 *
dvander@768
   389
		 * @return				Number of items per page.
dvander@768
   390
		 */
dvander@768
   391
		virtual unsigned int GetMaxPageItems() =0;
dvander@768
   392
dvander@768
   393
		/**
dvander@768
   394
		 * @brief Returns whether or not a client is viewing a menu.
dvander@768
   395
		 *
dvander@768
   396
		 * @param client		Client index.
dvander@768
   397
		 * @param object		Optional pointer to retrieve menu object,
dvander@768
   398
		 *						if any.
dvander@768
   399
		 * @return				MenuSource value.
dvander@768
   400
		 */
dvander@768
   401
		virtual MenuSource GetClientMenu(int client, void **object) =0;
dvander@768
   402
dvander@768
   403
		/**
dvander@768
   404
		 * @brief Cancels a client's menu.
dvander@768
   405
		 *
dvander@768
   406
		 * @param client		Client index.
dvander@768
   407
		 * @param autoIgnore	If true, no menus can be created during 
dvander@768
   408
		 *						the cancellation process.
dvander@768
   409
		 * @return				True if a menu was cancelled, false otherwise.
dvander@768
   410
		 */
dvander@768
   411
		virtual bool CancelClientMenu(int client, bool autoIgnore=false) =0;
dvander@790
   412
dvander@790
   413
		/**
dvander@790
   414
		 * @brief Returns a Handle the IMenuStyle object.
dvander@790
   415
		 *
dvander@790
   416
		 * @return				Handle_t pointing to this object.
dvander@790
   417
		 */
dvander@790
   418
		virtual Handle_t GetHandle() =0;
dvander@1766
   419
dvander@1766
   420
		/**
dvander@1766
   421
		 * @brief For the Handle system, returns approximate memory usage.
dvander@1766
   422
		 *
dvander@1766
   423
		 * @return				Approximate number of bytes being used.
dvander@1766
   424
		 */
dvander@1766
   425
		virtual unsigned int GetApproxMemUsage() =0;
dvander@768
   426
	};
dvander@768
   427
dvander@768
   428
	/**
dvander@768
   429
	 * @brief High-level interface for building menus.
dvander@768
   430
	 */
dvander@768
   431
	class IBaseMenu
dvander@768
   432
	{
dvander@768
   433
	public:
dvander@768
   434
		/**
dvander@768
   435
		 * @brief Appends an item to the end of a menu.
dvander@768
   436
		 *
dvander@768
   437
		 * @param info			Item information string.
dvander@768
   438
		 * @param draw			Default drawing information.
dvander@768
   439
		 * @return				True on success, false on item limit reached.
dvander@768
   440
		 */
dvander@768
   441
		virtual bool AppendItem(const char *info, const ItemDrawInfo &draw) =0;
dvander@768
   442
dvander@768
   443
		/**
dvander@768
   444
		 * @brief Inserts an item into the menu before a certain position; 
dvander@768
   445
		 * the new item will be at the given position and all next items 
dvander@768
   446
		 * pushed forward.
dvander@768
   447
		 *
dvander@768
   448
		 * @param position		Position, starting from 0.
dvander@768
   449
		 * @param info			Item information string.
dvander@768
   450
		 * @param draw			Default item draw info.
dvander@768
   451
		 * @return				True on success, false on invalid menu position
dvander@768
   452
		 */
dvander@768
   453
		virtual bool InsertItem(unsigned int position, const char *info, const ItemDrawInfo &draw) =0;
dvander@768
   454
dvander@768
   455
		/**
dvander@768
   456
		 * @brief Removes an item from the menu.
dvander@768
   457
		 *
dvander@768
   458
		 * @param position		Position, starting from 0.
dvander@768
   459
		 * @return				True on success, false on invalid menu position.
dvander@768
   460
		 */
dvander@768
   461
		virtual bool RemoveItem(unsigned int position) =0;
dvander@768
   462
dvander@768
   463
		/**
dvander@768
   464
		 * @brief Removes all items from the menu.
dvander@768
   465
		 */
dvander@768
   466
		virtual void RemoveAllItems() =0;
dvander@768
   467
dvander@768
   468
		/**
dvander@768
   469
		 * @brief Returns an item's info.
dvander@768
   470
		 *
dvander@768
   471
		 * @param position		Position, starting from 0.
dvander@768
   472
		 * @param draw			Optional pointer to store a draw information.
dvander@768
   473
		 * @return				Info string pointer, or NULL if position was invalid.
dvander@768
   474
		 */
dvander@768
   475
		virtual const char *GetItemInfo(unsigned int position, ItemDrawInfo *draw) =0;
dvander@768
   476
dvander@768
   477
		/**
dvander@768
   478
		 * @brief Returns the number of items.
dvander@768
   479
		 *
dvander@768
   480
		 * @return				Number of items in the menu.
dvander@768
   481
		 */
dvander@768
   482
		virtual unsigned int GetItemCount() =0;
dvander@768
   483
dvander@768
   484
		/** 
dvander@768
   485
		 * @brief Sets the menu's pagination,.
dvander@768
   486
		 *
dvander@1653
   487
		 * If pagination is set to MENU_NO_PAGINATION, and the previous 
dvander@1653
   488
		 * pagination was not MENU_NO_PAGINATION, then the MENUFLAG_BUTTON_EXIT 
dvander@1653
   489
		 * is unset.  It can be re-applied if desired.
dvander@1653
   490
		 *
dvander@768
   491
		 * @param itemsPerPage	Number of items per page, or MENU_NO_PAGINATION.
dvander@1653
   492
		 * @return				True on success, false if itemsPerPage is too 
dvander@1653
   493
		 *						large.
dvander@768
   494
		 */
dvander@768
   495
		virtual bool SetPagination(unsigned int itemsPerPage) =0;
dvander@768
   496
dvander@768
   497
		/**
dvander@768
   498
		 * @brief Returns an item's pagination.
dvander@768
   499
		 *
dvander@768
   500
		 * @return				Pagination setting.
dvander@768
   501
		 */
dvander@768
   502
		virtual unsigned int GetPagination() =0;
dvander@768
   503
dvander@768
   504
		/**
dvander@768
   505
		 * @brief Returns the menu style.
dvander@768
   506
		 * 
dvander@768
   507
		 * @return				Menu style.
dvander@768
   508
		 */
dvander@768
   509
		virtual IMenuStyle *GetDrawStyle() =0;
dvander@768
   510
dvander@768
   511
		/**
dvander@768
   512
		 * @brief Sets the menu's display title/message.
dvander@768
   513
		 *
dvander@768
   514
		 * @param message		Message (format options allowed).
dvander@768
   515
		 */
dvander@768
   516
		virtual void SetDefaultTitle(const char *message) =0;
dvander@768
   517
dvander@768
   518
		/**
dvander@768
   519
		 * @brief Returns the menu's display/title message.
dvander@768
   520
		 *
dvander@768
   521
		 * @return				Message string.
dvander@768
   522
		 */
dvander@768
   523
		virtual const char *GetDefaultTitle() =0;
dvander@768
   524
dvander@768
   525
		/**
dvander@768
   526
		 * @brief Sets an extended menu option.
dvander@768
   527
		 *
dvander@768
   528
		 * @param option		Option type.
dvander@768
   529
		 * @param valuePtr		Pointer of the type expected by the option.
dvander@768
   530
		 * @return				True on success, false if option or value is not supported.
dvander@768
   531
		 */
dvander@768
   532
		virtual bool SetExtOption(MenuOption option, const void *valuePtr) =0;
dvander@768
   533
dvander@768
   534
		/**
dvander@787
   535
		 * @brief Creates a new IMenuPanel object using extended options specific
dvander@768
   536
		 * to the IMenuStyle parent.  Titles, items, etc, are not copied.
dvander@768
   537
		 *
dvander@787
   538
		 * Note: The object should be freed with IMenuPanel::DeleteThis.
dvander@768
   539
		 *
dvander@787
   540
		 * @return				IMenuPanel pointer.
dvander@768
   541
		 */
dvander@787
   542
		virtual IMenuPanel *CreatePanel() =0;
dvander@768
   543
dvander@768
   544
		/**
dvander@768
   545
		 * @brief Sends the menu to a client.
dvander@768
   546
		 *
dvander@768
   547
		 * @param client		Client index to display to.
dvander@768
   548
		 * @param time			Time to hold menu for.
dvander@1269
   549
		 * @param alt_handler	Alternate IMenuHandler.
dvander@768
   550
		 * @return				True on success, false otherwise.
dvander@768
   551
		 */
dvander@1269
   552
		virtual bool Display(int client, unsigned int time, IMenuHandler *alt_handler=NULL) =0;
dvander@768
   553
dvander@768
   554
		/**
dvander@790
   555
		 * @brief Destroys the menu and frees all associated resources.
dvander@790
   556
		 *
dvander@790
   557
		 * @param releaseHandle	If true, the Handle will be released
dvander@790
   558
		 *						in the destructor.  This should be set
dvander@790
   559
		 *						to true except for IHandleTypeDispatch
dvander@790
   560
		 *						destructors.
dvander@768
   561
		 */
dvander@790
   562
		virtual void Destroy(bool releaseHandle=true) =0;
dvander@768
   563
dvander@768
   564
		/**
dvander@768
   565
		 * @brief Cancels the menu on all client's displays.  While the menu is
dvander@768
   566
		 * being cancelled, the menu may not be re-displayed to any clients.
dvander@884
   567
		 * If a vote menu is currently active, it will be cancelled as well.
dvander@768
   568
		 *
dvander@768
   569
		 * @return				Number of menus cancelled.
dvander@768
   570
		 */
dvander@768
   571
		virtual void Cancel() =0;
dvander@790
   572
dvander@790
   573
		/**
dvander@790
   574
		 * @brief Returns the menu's Handle.  The Handle is automatically
dvander@790
   575
		 * removed when the menu is destroyed.
dvander@790
   576
		 *
dvander@790
   577
		 * @return				Handle_t handle value.
dvander@790
   578
		 */
dvander@790
   579
		virtual Handle_t GetHandle() =0;
dvander@1259
   580
		
dvander@1259
   581
		/**
dvander@1259
   582
		 * @brief Returns menu option flags.
dvander@1259
   583
		 *
dvander@1259
   584
		 * @return				Menu option flags.
dvander@1259
   585
		 */
dvander@1259
   586
		virtual unsigned int GetMenuOptionFlags() =0;
dvander@1259
   587
dvander@1259
   588
		/**
dvander@1259
   589
		 * @brief Sets menu option flags.
dvander@1259
   590
		 *
dvander@1259
   591
		 * @param flags			Menu option flags.
dvander@1259
   592
		 */
dvander@1259
   593
		virtual void SetMenuOptionFlags(unsigned int flags) =0;
dvander@1269
   594
dvander@1269
   595
		/**
dvander@1269
   596
		 * @brief Returns the menu's handler.
dvander@1269
   597
		 *
dvander@1269
   598
		 * @return				IMenuHandler of the menu.
dvander@1269
   599
		 */
dvander@1269
   600
		virtual IMenuHandler *GetHandler() =0;
dvander@1474
   601
dvander@1474
   602
		/**
dvander@1474
   603
		 * @brief Sends the menu to a client, starting from the given item number. 
dvander@1474
   604
		 *
dvander@1474
   605
		 * Note: this API call was added in v13.
dvander@1474
   606
		 *
dvander@1474
   607
		 * @param client		Client index to display to.
dvander@1474
   608
		 * @param time			Time to hold menu for.
dvander@1474
   609
		 * @param start_item	Starting item to draw.
dvander@1474
   610
		 * @param alt_handler	Alternate IMenuHandler.
dvander@1474
   611
		 * @return				True on success, false otherwise.
dvander@1474
   612
		 */
dvander@1474
   613
		virtual bool DisplayAtItem(int client,
dvander@1474
   614
			unsigned int time,
dvander@1474
   615
			unsigned int start_item,
dvander@1474
   616
			IMenuHandler *alt_handler=NULL) =0;
dvander@1766
   617
dvander@1766
   618
		/**
dvander@1766
   619
		 * @brief For the Handle system, returns approximate memory usage.
dvander@1766
   620
		 *
dvander@1766
   621
		 * @return				Approximate number of bytes being used.
dvander@1766
   622
		 */
dvander@1766
   623
		virtual unsigned int GetApproxMemUsage() =0;
dvander@768
   624
	};
dvander@768
   625
dvander@768
   626
	/** 
dvander@768
   627
	 * @brief Contains callbacks for menu actions.
dvander@768
   628
	 */
dvander@768
   629
	class IMenuHandler
dvander@768
   630
	{
dvander@768
   631
	public:
dvander@768
   632
		/**
dvander@768
   633
		 * @brief Returns the menu api verison.
dvander@768
   634
		 *
dvander@768
   635
		 * @return				Menu API version.
dvander@768
   636
		 */
dvander@768
   637
		virtual unsigned int GetMenuAPIVersion2()
dvander@768
   638
		{
dvander@768
   639
			return SMINTERFACE_MENUMANAGER_VERSION;
dvander@768
   640
		}
dvander@768
   641
dvander@768
   642
		/** 
dvander@768
   643
		 * @brief A display/selection cycle has started.
dvander@768
   644
		 *
dvander@768
   645
		 * @param menu			Menu pointer.
dvander@768
   646
		 */
dvander@768
   647
		virtual void OnMenuStart(IBaseMenu *menu)
dvander@768
   648
		{
dvander@768
   649
		}
dvander@768
   650
dvander@768
   651
		/**
dvander@768
   652
		 * @brief Called before a menu is being displayed.  This is where
dvander@768
   653
		 * you can set an alternate title on the menu.
dvander@768
   654
		 *
dvander@768
   655
		 * @param menu			Menu pointer.
dvander@768
   656
		 * @param client		Client index.
dvander@787
   657
		 * @param display		IMenuPanel pointer.
dvander@768
   658
		 */
dvander@787
   659
		virtual void OnMenuDisplay(IBaseMenu *menu, int client, IMenuPanel *display)
dvander@768
   660
		{
dvander@768
   661
		}
dvander@768
   662
dvander@768
   663
		/**
dvander@768
   664
		 * @brief Called when an item is selected.
dvander@768
   665
		 *
dvander@768
   666
		 * @param menu			Menu pointer.
dvander@768
   667
		 * @param client		Client that selected the item.
dvander@768
   668
		 * @param item			Item number.
dvander@768
   669
		 */
dvander@768
   670
		virtual void OnMenuSelect(IBaseMenu *menu, int client, unsigned int item)
dvander@768
   671
		{
dvander@768
   672
		}
dvander@768
   673
dvander@768
   674
		/**
dvander@768
   675
		 * @brief An active menu display was dropped from a client.
dvander@768
   676
		 *
dvander@768
   677
		 * @param menu			Menu pointer.
dvander@768
   678
		 * @param client		Client that had the menu.
dvander@768
   679
		 * @param reason		Menu cancellation reason.
dvander@768
   680
		 */
dvander@768
   681
		virtual void OnMenuCancel(IBaseMenu *menu, int client, MenuCancelReason reason)
dvander@768
   682
		{
dvander@768
   683
		}
dvander@768
   684
dvander@768
   685
		/**
dvander@768
   686
		 * @brief A display/selection cycle has ended.
dvander@768
   687
		 *
dvander@768
   688
		 * @param menu			Menu pointer.
dvander@1678
   689
		 * @param reason		MenuEndReason reason.
dvander@768
   690
		 */
dvander@997
   691
		virtual void OnMenuEnd(IBaseMenu *menu, MenuEndReason reason)
dvander@768
   692
		{
dvander@768
   693
		}
dvander@768
   694
dvander@768
   695
		/**
dvander@790
   696
		 * @brief Called when the menu object is destroyed.
dvander@790
   697
		 *
dvander@790
   698
		 * @param menu			Menu pointer.
dvander@790
   699
		 */
dvander@790
   700
		virtual void OnMenuDestroy(IBaseMenu *menu)
dvander@790
   701
		{
dvander@790
   702
		}
dvander@790
   703
dvander@790
   704
		/**
dvander@768
   705
		 * @brief Called when requesting how to render an item.
dvander@768
   706
		 *
dvander@768
   707
		 * @param menu			Menu pointer.
dvander@768
   708
		 * @param client		Client index receiving the menu.
dvander@768
   709
		 * @param item			Item number in the menu.
dvander@768
   710
		 * @param style			ITEMSTYLE flags, by reference for modification.
dvander@768
   711
		 */
dvander@768
   712
		virtual void OnMenuDrawItem(IBaseMenu *menu, int client, unsigned int item, unsigned int &style)
dvander@768
   713
		{
dvander@768
   714
		}
dvander@768
   715
dvander@768
   716
		/**
dvander@1163
   717
		 * @brief Called when drawing item text.
dvander@768
   718
		 *
dvander@768
   719
		 * @param menu			Menu pointer.
dvander@768
   720
		 * @param client		Client index receiving the menu.
dvander@1163
   721
		 * @param panel			Panel being used to draw the menu.
dvander@768
   722
		 * @param item			Item number in the menu.
dvander@1163
   723
		 * @param dr			Item draw information.
dvander@1163
   724
		 * @return				0 to let the render algorithm decide how to draw, otherwise,
dvander@1163
   725
		 *						the return value from panel->DrawItem should be returned.
dvander@768
   726
		 */
dvander@1163
   727
		virtual unsigned int OnMenuDisplayItem(IBaseMenu *menu, 
dvander@1163
   728
											   int client, 
dvander@1163
   729
											   IMenuPanel *panel,
dvander@1163
   730
											   unsigned int item, 
dvander@1163
   731
											   const ItemDrawInfo &dr)
dvander@768
   732
		{
dvander@1163
   733
			return 0;
dvander@768
   734
		}
dvander@768
   735
dvander@768
   736
		/**
dvander@877
   737
		 * @brief Called when a vote has been started and displayed to 
dvander@877
   738
		 * clients.  This is called after OnMenuStart() and OnMenuDisplay(),
dvander@877
   739
		 * but before OnMenuSelect().
dvander@877
   740
		 *
dvander@877
   741
		 * @param menu			Menu pointer.
dvander@877
   742
		 */
dvander@877
   743
		virtual void OnMenuVoteStart(IBaseMenu *menu)
dvander@877
   744
		{
dvander@877
   745
		}
dvander@877
   746
dvander@877
   747
		/**
dvander@877
   748
		 * @brief Called when a vote ends.  This is automatically called by the 
dvander@884
   749
		 * wrapper, and never needs to called from a style implementation.  
dvander@884
   750
		 *
dvander@884
   751
		 * This function does not replace OnMenuEnd(), nor does it have the 
dvander@884
   752
		 * same meaning as OnMenuEnd(), meaning you should not destroy a menu
dvander@884
   753
		 * while it is in this function.
dvander@768
   754
		 *
dvander@768
   755
		 * @param menu			Menu pointer.
dvander@1269
   756
		 * @param results		Menu vote results.
dvander@768
   757
		 */
dvander@1269
   758
		virtual void OnMenuVoteResults(IBaseMenu *menu, const menu_vote_result_t *results)
dvander@877
   759
		{
dvander@877
   760
		}
dvander@884
   761
dvander@884
   762
		/**
dvander@884
   763
		 * @brief Called when a vote is cancelled.  If this is called, then 
dvander@1269
   764
		 * OnMenuVoteResults() will not be called.  In both cases, OnMenuEnd will 
dvander@884
   765
		 * always be called.
dvander@884
   766
		 *
dvander@884
   767
		 * @param menu			Menu pointer.
dvander@1678
   768
		 * @param reason		VoteCancelReason reason.
dvander@884
   769
		 */
dvander@1296
   770
		virtual void OnMenuVoteCancel(IBaseMenu *menu, VoteCancelReason reason)
dvander@884
   771
		{
dvander@884
   772
		}
dvander@877
   773
dvander@877
   774
		/**
dvander@1269
   775
		 * @brief Call to set private handler stuff.
dvander@877
   776
		 *
dvander@1269
   777
		 * @param option		Option name.
dvander@1269
   778
		 * @param data			Private data.
dvander@1269
   779
		 * @return				True if set, false if invalid or unrecognized.
dvander@877
   780
		 */
dvander@1269
   781
		virtual bool OnSetHandlerOption(const char *option, const void *data)
dvander@1269
   782
		{
dvander@1269
   783
			return false;
dvander@1269
   784
		}
dvander@1474
   785
dvander@1474
   786
		/**
dvander@1474
   787
		 * @brief Called when an item is selected.
dvander@1474
   788
		 *
dvander@1474
   789
		 * Note: This callback was added in v13.  It is called after OnMenuSelect().
dvander@1474
   790
		 *
dvander@1474
   791
		 * @param menu			Menu pointer.
dvander@1474
   792
		 * @param client		Client that selected the item.
dvander@1474
   793
		 * @param item			Item number.
dvander@1474
   794
		 * @param item_on_page	The first item on the page the player was last 
dvander@1474
   795
		 *						viewing.
dvander@1474
   796
		 */
dvander@1474
   797
		virtual void OnMenuSelect2(IBaseMenu *menu,
dvander@1474
   798
			int client,
dvander@1474
   799
			unsigned int item,
dvander@1474
   800
			unsigned int item_on_page)
dvander@1474
   801
		{
dvander@1474
   802
		}
dvander@768
   803
	};
dvander@768
   804
dvander@768
   805
	/**
dvander@768
   806
	 * @brief Manages menu creation and displaying.
dvander@768
   807
	 */
dvander@768
   808
	class IMenuManager : public SMInterface
dvander@768
   809
	{
dvander@768
   810
	public:
dvander@768
   811
		virtual const char *GetInterfaceName()
dvander@768
   812
		{
dvander@768
   813
			return SMINTERFACE_MENUMANAGER_NAME;
dvander@768
   814
		}
dvander@768
   815
		virtual unsigned int GetInterfaceVersion()
dvander@768
   816
		{
dvander@768
   817
			return SMINTERFACE_MENUMANAGER_VERSION;
dvander@768
   818
		}
dvander@960
   819
		virtual bool IsVersionCompatible(unsigned int version)
dvander@960
   820
		{
dvander@1296
   821
			if (version < 11 || version > GetInterfaceVersion())
dvander@960
   822
			{
dvander@960
   823
				return false;
dvander@960
   824
			}
dvander@960
   825
			return true;
dvander@960
   826
		}
dvander@768
   827
	public:
dvander@768
   828
		/**
dvander@768
   829
		 * @brief Finds a style by name.
dvander@768
   830
		 *
dvander@768
   831
		 * @param name			Name of the style (case insensitive).
dvander@768
   832
		 * @return				IMenuStyle pointer, or NULL if not found.
dvander@768
   833
		 */
dvander@768
   834
		virtual IMenuStyle *FindStyleByName(const char *name) =0;
dvander@768
   835
dvander@768
   836
		/**
dvander@768
   837
		 * @brief Returns the default draw style Core is using.
dvander@768
   838
		 *
dvander@768
   839
		 * @return				Menu style pointer.
dvander@768
   840
		 */
dvander@768
   841
		virtual IMenuStyle *GetDefaultStyle() =0;
dvander@768
   842
dvander@768
   843
		/**
dvander@1269
   844
		 * @brief Given a set of menu states, converts it to an IMenuPanel object.
dvander@768
   845
		 *
dvander@768
   846
		 * The state parameter is both INPUT and OUTPUT.
dvander@768
   847
		 * INPUT: menu, mh, firstItem, lastItem
dvander@768
   848
		 * OUTPUT: display, firstItem, lastItem, slots
dvander@768
   849
		 *
dvander@768
   850
		 * @param client		Client index.
dvander@768
   851
		 * @param states		Menu states.
dvander@1679
   852
		 * @param order			Order to search for items.
dvander@1269
   853
		 * @return				IMenuPanel pointer, or NULL if no items could be 
dvander@768
   854
		 *						found in the IBaseMenu pointer, or NULL if any
dvander@768
   855
		 *						other error occurred.  Any valid pointer must
dvander@787
   856
		 *						be freed using IMenuPanel::DeleteThis.
dvander@768
   857
		 */
dvander@787
   858
		virtual IMenuPanel *RenderMenu(int client, menu_states_t &states, ItemOrder order) =0;
dvander@877
   859
dvander@877
   860
		/**
dvander@1269
   861
		 * @brief Cancels a menu.  Calls IBaseMenu::Cancel() after doing some preparatory 
dvander@1269
   862
		 * work.  This should always be used instead of directly calling Cancel().
dvander@877
   863
		 *
dvander@1269
   864
		 * @param menu			IBaseMenu pointer.
dvander@877
   865
		 */
dvander@1269
   866
		virtual void CancelMenu(IBaseMenu *menu) =0;
dvander@877
   867
dvander@877
   868
		/**
dvander@1269
   869
		 * @brief Displays a menu as a vote.
dvander@877
   870
		 *
dvander@1269
   871
		 * @param menu			IBaseMenu pointer.
dvander@1269
   872
		 * @param num_clients	Number of clients to display to.
dvander@1269
   873
		 * @param clients		Client index array.
dvander@1269
   874
		 * @param max_time		Maximum time to hold menu for.
dvander@2737
   875
		 * @param flags			Vote flags.
dvander@1269
   876
		 * @return				True on success, false if a vote is in progress.
dvander@877
   877
		 */
dvander@1269
   878
		virtual bool StartVote(IBaseMenu *menu,
dvander@1269
   879
								unsigned int num_clients,
dvander@1269
   880
								int clients[],
dvander@1269
   881
								unsigned int max_time,
dvander@1269
   882
								unsigned int flags=0) =0;
dvander@1269
   883
dvander@1269
   884
		/**
dvander@1269
   885
		 * @brief Returns whether or not a vote is in progress.
dvander@1269
   886
		 *
dvander@1269
   887
		 * @return				True if a vote is in progress, false otherwise.
dvander@1269
   888
		 */
dvander@1269
   889
		virtual bool IsVoteInProgress() =0;
dvander@1269
   890
dvander@1269
   891
		/**
dvander@1269
   892
		 * @brief Cancels the vote in progress.  This calls IBaseMenu::Cancel().
dvander@1269
   893
		 */
dvander@1269
   894
		virtual void CancelVoting() =0;
dvander@1291
   895
dvander@1291
   896
		/**
dvander@1291
   897
		 * @brief Returns the remaining vote delay from the last menu.  This delay is 
dvander@1291
   898
		 * a suggestion for all public votes, and is not enforced.
dvander@1291
   899
		 *
dvander@1291
   900
		 * @return				Number of seconds to wait.
dvander@1291
   901
		 */
dvander@1291
   902
		virtual unsigned int GetRemainingVoteDelay() =0;
dvander@2056
   903
dvander@2056
   904
		/**
dvander@2056
   905
		 * @brief Returns whether a client is in the "allowed to vote" pool determined 
dvander@2056
   906
		 * by the initial call to StartVote().
dvander@2056
   907
		 *
dvander@2056
   908
		 * @param client		Client index.
dvander@2056
   909
		 * @return				True if client is allowed to vote, false on failure.
dvander@2056
   910
		 */
dvander@2056
   911
		virtual bool IsClientInVotePool(int client) =0;
dvander@2056
   912
dvander@2056
   913
		/**
dvander@2056
   914
		 * @brief Redraws the current vote menu to a client in the voting pool.
dvander@2056
   915
		 *
dvander@2056
   916
		 * @param client		Client index.
dvander@2056
   917
		 * @return				True on success, false if client is not allowed to vote.
dvander@2056
   918
		 */
dvander@2056
   919
		virtual bool RedrawClientVoteMenu(int client) =0;
dvander@2737
   920
dvander@2737
   921
		/**
dvander@2737
   922
		 * @brief Redraws the current vote menu to a client in the voting pool.
dvander@2737
   923
		 *
dvander@2737
   924
		 * @param client		Client index.
dvander@2737
   925
		 * @param revotes		True to allow revotes, false otherwise.
dvander@2737
   926
		 * @return				True on success, false if client is not allowed to vote.
dvander@2737
   927
		 */
dvander@2737
   928
		virtual bool RedrawClientVoteMenu2(int client, bool revotes) =0;
dvander@768
   929
	};
dvander@768
   930
}
dvander@768
   931
dvander@768
   932
#endif //_INCLUDE_SOURCEMOD_MENU_SYSTEM_H_
dvander@2737
   933