diff -r 000000000000 -r b7aa2b626807 core/MenuStyle_Base.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/core/MenuStyle_Base.h Sun Mar 30 07:00:22 2008 +0000
@@ -0,0 +1,157 @@
+/**
+ * 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 .
+ *
+ * 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 .
+ *
+ * Version: $Id$
+ */
+
+#ifndef _INCLUDE_MENUSTYLE_BASE_H
+#define _INCLUDE_MENUSTYLE_BASE_H
+
+#include
+#include
+#include
+#include
+#include "sm_memtable.h"
+#include "sm_fastlink.h"
+
+using namespace SourceMod;
+using namespace SourceHook;
+
+class CItem
+{
+public:
+ CItem()
+ {
+ infoString = -1;
+ displayString = -1;
+ style = 0;
+ access = 0;
+ }
+public:
+ int infoString;
+ int displayString;
+ unsigned int style;
+ unsigned int access;
+};
+
+class CBaseMenuPlayer
+{
+public:
+ CBaseMenuPlayer() : bInMenu(false), bAutoIgnore(false), bInExternMenu(false)
+ {
+ }
+ menu_states_t states;
+ bool bInMenu;
+ bool bAutoIgnore;
+ float menuStartTime;
+ unsigned int menuHoldTime;
+ bool bInExternMenu;
+};
+
+class CBaseMenu;
+
+class BaseMenuStyle :
+ public IMenuStyle,
+ public IClientListener
+{
+public:
+ BaseMenuStyle();
+public: //IMenuStyle
+ bool CancelClientMenu(int client, bool autoIgnore/* =false */);
+ MenuSource GetClientMenu(int client, void **object);
+ Handle_t GetHandle();
+public: //IClientListener
+ void OnClientDisconnected(int client);
+public: //what derived must implement
+ virtual CBaseMenuPlayer *GetMenuPlayer(int client) =0;
+ virtual void SendDisplay(int client, IMenuPanel *display) =0;
+public: //what derived may implement
+ virtual bool DoClientMenu(int client,
+ CBaseMenu *menu,
+ unsigned int first_item,
+ IMenuHandler *mh,
+ unsigned int time);
+ virtual bool DoClientMenu(int client, IMenuPanel *menu, IMenuHandler *mh, unsigned int time);
+ virtual void AddClientToWatch(int client);
+ virtual void RemoveClientFromWatch(int client);
+ virtual void ProcessWatchList();
+public: //helpers
+ void CancelMenu(CBaseMenu *menu);
+ void ClientPressedKey(int client, unsigned int key_press);
+protected:
+ void _CancelClientMenu(int client, MenuCancelReason reason, bool bAutoIgnore=false);
+ bool RedoClientMenu(int client, ItemOrder order);
+protected:
+ FastLink m_WatchList;
+ Handle_t m_hHandle;
+};
+
+class CBaseMenu : public IBaseMenu
+{
+public:
+ CBaseMenu(IMenuHandler *pHandler, IMenuStyle *pStyle, IdentityToken_t *pOwner);
+ virtual ~CBaseMenu();
+public:
+ virtual bool AppendItem(const char *info, const ItemDrawInfo &draw);
+ virtual bool InsertItem(unsigned int position, const char *info, const ItemDrawInfo &draw);
+ virtual bool RemoveItem(unsigned int position);
+ virtual void RemoveAllItems();
+ virtual const char *GetItemInfo(unsigned int position, ItemDrawInfo *draw=NULL);
+ virtual unsigned int GetItemCount();
+ virtual bool SetPagination(unsigned int itemsPerPage);
+ virtual unsigned int GetPagination();
+ virtual IMenuStyle *GetDrawStyle();
+ virtual void SetDefaultTitle(const char *message);
+ virtual const char *GetDefaultTitle();
+ virtual void Cancel();
+ virtual void Destroy(bool releaseHandle);
+ virtual void Cancel_Finally() =0;
+ virtual Handle_t GetHandle();
+ virtual unsigned int GetMenuOptionFlags();
+ virtual void SetMenuOptionFlags(unsigned int flags);
+ virtual IMenuHandler *GetHandler();
+ unsigned int GetBaseMemUsage();
+private:
+ void InternalDelete();
+protected:
+ String m_Title;
+ IMenuStyle *m_pStyle;
+ BaseStringTable m_Strings;
+ unsigned int m_Pagination;
+ CVector m_items;
+ bool m_bShouldDelete;
+ bool m_bCancelling;
+ IdentityToken_t *m_pOwner;
+ bool m_bDeleting;
+ bool m_bWillFreeHandle;
+ Handle_t m_hHandle;
+ IMenuHandler *m_pHandler;
+ unsigned int m_nFlags;
+};
+
+#endif //_INCLUDE_MENUSTYLE_BASE_H