Various minor things done to project files Updated sample extension project file and updated makefile to the new unified version (more changes likely on the way) Updated regex project file and makefile --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401971
		
			
				
	
	
		
			318 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			318 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /**
 | |
|  * vim: set ts=4 :
 | |
|  * =============================================================================
 | |
|  * SourceMod
 | |
|  * Copyright (C) 2004-2008 AlliedModders LLC.  All rights reserved.
 | |
|  * =============================================================================
 | |
|  *
 | |
|  * This program is free software; you can redistribute it and/or modify it under
 | |
|  * the terms of the GNU General Public License, version 3.0, as published by the
 | |
|  * Free Software Foundation.
 | |
|  * 
 | |
|  * This program is distributed in the hope that it will be useful, but WITHOUT
 | |
|  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 | |
|  * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
 | |
|  * details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU General Public License along with
 | |
|  * this program.  If not, see <http://www.gnu.org/licenses/>.
 | |
|  *
 | |
|  * As a special exception, AlliedModders LLC gives you permission to link the
 | |
|  * code of this program (as well as its derivative works) to "Half-Life 2," the
 | |
|  * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
 | |
|  * by the Valve Corporation.  You must obey the GNU General Public License in
 | |
|  * all respects for all other code used.  Additionally, AlliedModders LLC grants
 | |
|  * this exception to all derivative works.  AlliedModders LLC defines further
 | |
|  * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
 | |
|  * or <http://www.sourcemod.net/license.php>.
 | |
|  *
 | |
|  * Version: $Id$
 | |
|  */
 | |
| 
 | |
| #ifndef _INCLUDE_SOURCEMOD_MAIN_MENU_INTERFACE_H_
 | |
| #define _INCLUDE_SOURCEMOD_MAIN_MENU_INTERFACE_H_
 | |
| 
 | |
| #include <IShareSys.h>
 | |
| #include <ILibrarySys.h>
 | |
| #include <IAdminSystem.h>
 | |
| #include <IMenuManager.h>
 | |
| 
 | |
| /**
 | |
|  * @file ITopMenus.h
 | |
|  * @brief Interface header for creating and managing top-level menus.
 | |
|  */
 | |
| 
 | |
| #define SMINTERFACE_TOPMENUS_NAME		"ITopMenus"
 | |
| #define SMINTERFACE_TOPMENUS_VERSION	4
 | |
| 
 | |
| namespace SourceMod
 | |
| {
 | |
| 	/**
 | |
| 	 * @brief Top menu object types.
 | |
| 	 */
 | |
| 	enum TopMenuObjectType
 | |
| 	{
 | |
| 		TopMenuObject_Category = 0,			/**< Category (sub-menu branching from root) */
 | |
| 		TopMenuObject_Item = 1				/**< Item on a sub-menu */
 | |
| 	};
 | |
| 	
 | |
| 	/**
 | |
| 	 * @brief Top menu starting positions for display.
 | |
| 	 */
 | |
| 	enum TopMenuPosition
 | |
| 	{
 | |
| 		TopMenuPosition_Start = 0,			/**< Start/root of the menu */
 | |
| 		TopMenuPosition_LastRoot = 1,		/**< Last position in the root menu */
 | |
| 		TopMenuPosition_LastCategory = 3,	/**< Last position in their last category */
 | |
| 	};
 | |
| 
 | |
| 	class ITopMenu;
 | |
| 
 | |
| 	/**
 | |
| 	 * @brief Top Menu callbacks for rendering/drawing.
 | |
| 	 */
 | |
| 	class ITopMenuObjectCallbacks
 | |
| 	{
 | |
| 	public:
 | |
| 		/**
 | |
| 		 * @brief Must return the topmenu API version.
 | |
| 		 *
 | |
| 		 * @return				Top Menu API version.
 | |
| 		 */
 | |
| 		virtual unsigned int GetTopMenuAPIVersion1()
 | |
| 		{
 | |
| 			return SMINTERFACE_TOPMENUS_VERSION;
 | |
| 		}
 | |
| 
 | |
| 		/**
 | |
| 		 * @brief Requests how the given item should be drawn for a client.
 | |
| 		 *
 | |
| 		 * Unlike the other callbacks, this is only called in determining 
 | |
| 		 * whether to enable, disable, or ignore an item on a client's menu.
 | |
| 		 *
 | |
| 		 * @param menu			A pointer to the parent ITopMenu.
 | |
| 		 * @param client		Client index.
 | |
| 		 * @param object_id		Object ID returned from ITopMenu::AddToMenu().
 | |
| 		 * @return				ITEMDRAW flags to disable or not draw the 
 | |
| 		 *						option for this operation.
 | |
| 		 */
 | |
| 		virtual unsigned int OnTopMenuDrawOption(ITopMenu *menu,
 | |
| 			int client, 
 | |
| 			unsigned int object_id)
 | |
| 		{ 
 | |
| 			return ITEMDRAW_DEFAULT;
 | |
| 		}
 | |
| 
 | |
| 		/**
 | |
| 		 * @brief Requests how the given item should be displayed for a client.
 | |
| 		 *
 | |
| 		 * This can be called either while drawing a menu or to decide how to 
 | |
| 		 * sort a menu for a player.
 | |
| 		 *
 | |
| 		 * @param menu			A pointer to the parent ITopMenu.
 | |
| 		 * @param client		Client index.
 | |
| 		 * @param object_id		Object ID returned from ITopMenu::AddToMenu().
 | |
| 		 * @param buffer		Buffer to store rendered text.
 | |
| 		 * @param maxlength		Maximum length of the rendering buffer.
 | |
| 		 */
 | |
| 		virtual void OnTopMenuDisplayOption(ITopMenu *menu,
 | |
| 			int client, 
 | |
| 			unsigned int object_id,
 | |
| 			char buffer[], 
 | |
| 			size_t maxlength) =0;
 | |
| 
 | |
| 		/**
 | |
| 		 * @brief Requests how the given item's title should be displayed for
 | |
| 		 * a client.  This is called on any object_id that is a category.
 | |
| 		 *
 | |
| 		 * @param menu			A pointer to the parent ITopMenu.
 | |
| 		 * @param client		Client index.
 | |
| 		 * @param object_id		Object ID returned from ITopMenu::AddToMenu(), 
 | |
| 		 *						or 0 if the title is the root menu title.
 | |
| 		 * @param buffer		Buffer to store rendered text.
 | |
| 		 * @param maxlength		Maximum length of the rendering buffer.
 | |
| 		 */
 | |
| 		virtual void OnTopMenuDisplayTitle(ITopMenu *menu,
 | |
| 			int client,
 | |
| 			unsigned int object_id,
 | |
| 			char buffer[],
 | |
| 			size_t maxlength) =0;
 | |
| 
 | |
| 		/**
 | |
| 		 * @brief Notifies the listener that the menu option has been selected.
 | |
| 		 *
 | |
| 		 * @param menu			A pointer to the parent ITopMenu.
 | |
| 		 * @param client		Client index.
 | |
| 		 * @param object_id		Object ID returned from ITopMenu::AddToMenu().
 | |
| 		 */
 | |
| 		virtual void OnTopMenuSelectOption(ITopMenu *menu, 
 | |
| 			int client, 
 | |
| 			unsigned int object_id) =0;
 | |
| 
 | |
| 		/**
 | |
| 		 * @brief Notified when the given item is removed.
 | |
| 		 * 
 | |
| 		 * @param menu			A pointer to the parent ITopMenu.
 | |
| 		 * @param object_id		Object ID returned from ITopMenu::AddToMenu(), 
 | |
| 		 *						or 0 if the title callbacks are being removed.
 | |
| 		 */
 | |
| 		virtual void OnTopMenuObjectRemoved(ITopMenu *menu, unsigned int object_id) =0;
 | |
| 	};
 | |
| 
 | |
| 	/**
 | |
| 	 * @brief "Top menu" interface, for managing top-level categorized menus.
 | |
| 	 */
 | |
| 	class ITopMenu
 | |
| 	{
 | |
| 	public:
 | |
| 		/**
 | |
| 		 * @brief Creates and adds an object type type to the top menu.
 | |
| 		 *
 | |
| 		 * @param name			Unique, string name to give the object.
 | |
| 		 * @param type			Object type.
 | |
| 		 * @param callbacks		ITopMenuObjectCallbacks pointer.
 | |
| 		 * @param owner			IdentityToken_t owner of the object.
 | |
| 		 * @param cmdname		Command name used for override access checks.
 | |
| 		 *						If NULL or empty, access will not be Checked.
 | |
| 		 * @param flags			Default flag(s) to use for access checks.
 | |
| 		 * @param parent		Parent object, or 0 if none.
 | |
| 		 *						Currently, categories cannot have a parent,
 | |
| 		 *						and items must have a category parent.
 | |
| 		 * @return				An object ID, or 0 on failure.
 | |
| 		 */
 | |
| 		virtual unsigned int AddToMenu(const char *name,
 | |
| 			TopMenuObjectType type,
 | |
| 			ITopMenuObjectCallbacks *callbacks,
 | |
| 			IdentityToken_t *owner,
 | |
| 			const char *cmdname,
 | |
| 			FlagBits flags,
 | |
| 			unsigned int parent) =0;
 | |
| 
 | |
| 		/**
 | |
| 		 * @brief Removes an object from a menu.  If the object has any 
 | |
| 		 * children, those will be removed.
 | |
| 		 *
 | |
| 		 * @param object_id		Object ID returned from AddToMenu.
 | |
| 		 */
 | |
| 		virtual void RemoveFromMenu(unsigned int object_id) =0;
 | |
| 
 | |
| 		/**
 | |
| 		 * @brief Sends the main menu to a given client.
 | |
| 		 *
 | |
| 		 * Once the menu is drawn to a client, the drawing order is cached. 
 | |
| 		 * If text on the menu is rendered differently for the client's next 
 | |
| 		 * viewing, the text will render properly, but its order will not
 | |
| 		 * change.  The menu is sorted by its configuration.  Remaining items 
 | |
| 		 * are sorted in alphabetical order using the initial display text.
 | |
| 		 *
 | |
| 		 * @param client		Client index.
 | |
| 		 * @param hold_time		Time to hold the menu on the screen for.
 | |
| 		 * @param position		TopMenuPosition enumeration value.
 | |
| 		 * @return				True on success, false if nothing displayed.
 | |
| 		 */
 | |
| 		virtual bool DisplayMenu(int client, unsigned int hold_time, TopMenuPosition position) =0;
 | |
| 
 | |
| 		/**
 | |
| 		 * @brief Loads a configuration file for organizing the menu.  This 
 | |
| 		 * forces all known categories to be re-sorted.  
 | |
| 		 *
 | |
| 		 * Only one configuration can be active at a time.  Loading a new one 
 | |
| 		 * will cause the old sorting to disappear.
 | |
| 		 *
 | |
| 		 * @param file			File path.
 | |
| 		 * @param error			Error buffer.
 | |
| 		 * @param maxlength		Maximum length of the error buffer.
 | |
| 		 * @return				True on success, false on failure.
 | |
| 		 */
 | |
| 		virtual bool LoadConfiguration(const char *file, char *error, size_t maxlength) =0;
 | |
| 
 | |
| 		/**
 | |
| 		 * @brief Finds a category's ID by name.
 | |
| 		 *
 | |
| 		 * @param name			Category's name.
 | |
| 		 * @return				Object ID of the category, or 0 if none.
 | |
| 		 */
 | |
| 		virtual unsigned int FindCategory(const char *name) =0;
 | |
| 
 | |
| 		/**
 | |
| 		 * @brief Creates and adds an object type type to the top menu.
 | |
| 		 *
 | |
| 		 * @param name			Unique, string name to give the object.
 | |
| 		 * @param type			Object type.
 | |
| 		 * @param callbacks		ITopMenuObjectCallbacks pointer.
 | |
| 		 * @param owner			IdentityToken_t owner of the object.
 | |
| 		 * @param cmdname		Command name used for override access checks.
 | |
| 		 *						If NULL or empty, access will not be Checked.
 | |
| 		 * @param flags			Default flag(s) to use for access checks.
 | |
| 		 * @param parent		Parent object, or 0 if none.
 | |
| 		 *						Currently, categories cannot have a parent,
 | |
| 		 *						and items must have a category parent.
 | |
| 		 * @param info_string	Optional info string to attach to the object.
 | |
| 		 *						Only 255 bytes of the string (including null 
 | |
| 		 *						terminator) will be stored.
 | |
| 		 * @return				An object ID, or 0 on failure.
 | |
| 		 */
 | |
| 		virtual unsigned int AddToMenu2(const char *name,
 | |
| 			TopMenuObjectType type,
 | |
| 			ITopMenuObjectCallbacks *callbacks,
 | |
| 			IdentityToken_t *owner,
 | |
| 			const char *cmdname,
 | |
| 			FlagBits flags,
 | |
| 			unsigned int parent,
 | |
| 			const char *info_string) =0;
 | |
| 
 | |
| 		/**
 | |
| 		 * @brief Returns an object's info string.
 | |
| 		 *
 | |
| 		 * @param object_id		Object ID.
 | |
| 		 * @return				Object's info string, or NULL if none.
 | |
| 		 */
 | |
| 		virtual const char *GetObjectInfoString(unsigned int object_id) =0;
 | |
| 
 | |
| 		/**
 | |
| 		 * @brief Returns an object's name string.
 | |
| 		 *
 | |
| 		 * @param object_id		Object ID.
 | |
| 		 * @return				Object's name string, or NULL if none.
 | |
| 		 */
 | |
| 		virtual const char *GetObjectName(unsigned int object_id) =0;
 | |
| 	};
 | |
| 
 | |
| 	/**
 | |
| 	 * @brief Top menu manager.
 | |
| 	 */
 | |
| 	class ITopMenuManager : public SMInterface
 | |
| 	{
 | |
| 	public:
 | |
| 		virtual const char *GetInterfaceName() =0;
 | |
| 		virtual unsigned int GetInterfaceVersion() =0;
 | |
| 		virtual bool IsVersionCompatible(unsigned int version)
 | |
| 		{
 | |
| 			if (version < 2)
 | |
| 			{
 | |
| 				return false;
 | |
| 			}
 | |
| 			return SMInterface::IsVersionCompatible(version);
 | |
| 		}
 | |
| 	public:
 | |
| 		/**
 | |
| 		 * @brief Creates a new top-level menu.
 | |
| 		 * 
 | |
| 		 * @param callbacks		Callbacks for the title text.
 | |
| 		 *						The object_id for the title will always be 0.
 | |
| 		 * @return				A new ITopMenu pointer.
 | |
| 		 */
 | |
| 		virtual ITopMenu *CreateTopMenu(ITopMenuObjectCallbacks *callbacks) =0;
 | |
| 
 | |
| 		/**
 | |
| 		 * @brief Destroys a top-level menu.
 | |
| 		 *
 | |
| 		 * @param topmenu		Pointer to an ITopMenu.
 | |
| 		 */
 | |
| 		virtual void DestroyTopMenu(ITopMenu *topmenu) =0;
 | |
| 	};
 | |
| }
 | |
| 
 | |
| #endif //_INCLUDE_SOURCEMOD_MAIN_MENU_INTERFACE_H_
 | |
| 
 |