about summary refs log tree commit diff
path: root/src/game/client/components/menus.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/game/client/components/menus.h')
-rw-r--r--src/game/client/components/menus.h223
1 files changed, 223 insertions, 0 deletions
diff --git a/src/game/client/components/menus.h b/src/game/client/components/menus.h
new file mode 100644
index 00000000..3055e661
--- /dev/null
+++ b/src/game/client/components/menus.h
@@ -0,0 +1,223 @@
+#ifndef GAME_CLIENT_COMPONENTS_MENUS_H
+#define GAME_CLIENT_COMPONENTS_MENUS_H
+
+#include <base/vmath.h>
+#include <base/tl/sorted_array.h>
+
+#include <game/client/component.h>
+#include <game/client/ui.h>
+
+
+// compnent to fetch keypresses, override all other input
+class CMenusKeyBinder : public CComponent
+{
+public:
+	bool m_TakeKey;
+	bool m_GotKey;
+	IInput::CEvent m_Key;
+	CMenusKeyBinder();
+	virtual bool OnInput(IInput::CEvent Event);
+};
+
+class CMenus : public CComponent
+{	
+	static vec4 ms_GuiColor;
+	static vec4 ms_ColorTabbarInactiveOutgame;
+	static vec4 ms_ColorTabbarActiveOutgame;
+	static vec4 ms_ColorTabbarInactiveIngame;
+	static vec4 ms_ColorTabbarActiveIngame;
+	static vec4 ms_ColorTabbarInactive;
+	static vec4 ms_ColorTabbarActive;
+	
+	vec4 ButtonColorMul(const void *pID);
+
+
+	int DoButton_DemoPlayer(const void *pID, const char *pText, int Checked, const CUIRect *pRect);
+	int DoButton_Menu(const void *pID, const char *pText, int Checked, const CUIRect *pRect);
+	int DoButton_MenuTab(const void *pID, const char *pText, int Checked, const CUIRect *pRect, int Corners);
+	int DoButton_SettingsTab(const void *pID, const char *pText, int Checked, const CUIRect *pRect);
+
+	int DoButton_CheckBox_Common(const void *pID, const char *pText, const char *pBoxText, const CUIRect *pRect);
+	int DoButton_CheckBox(const void *pID, const char *pText, int Checked, const CUIRect *pRect);
+	int DoButton_CheckBox_Number(const void *pID, const char *pText, int Checked, const CUIRect *pRect);
+
+	/*static void ui_draw_menu_button(const void *id, const char *text, int checked, const CUIRect *r, const void *extra);
+	static void ui_draw_keyselect_button(const void *id, const char *text, int checked, const CUIRect *r, const void *extra);
+	static void ui_draw_menu_tab_button(const void *id, const char *text, int checked, const CUIRect *r, const void *extra);
+	static void ui_draw_settings_tab_button(const void *id, const char *text, int checked, const CUIRect *r, const void *extra);
+	*/
+
+	int DoButton_BrowseIcon(int Checked, const CUIRect *pRect);
+	int DoButton_GridHeader(const void *pID, const char *pText, int Checked, const CUIRect *pRect);
+	int DoButton_ListRow(const void *pID, const char *pText, int Checked, const CUIRect *pRect);
+
+	//static void ui_draw_browse_icon(int what, const CUIRect *r);
+	//static void ui_draw_grid_header(const void *id, const char *text, int checked, const CUIRect *r, const void *extra);
+	
+	/*static void ui_draw_checkbox_common(const void *id, const char *text, const char *boxtext, const CUIRect *r, const void *extra);
+	static void ui_draw_checkbox(const void *id, const char *text, int checked, const CUIRect *r, const void *extra);
+	static void ui_draw_checkbox_number(const void *id, const char *text, int checked, const CUIRect *r, const void *extra);
+	*/
+	int DoEditBox(void *pID, const CUIRect *pRect, char *pStr, unsigned StrSize, float FontSize, bool Hidden=false, int Corners=CUI::CORNER_ALL);
+	//static int ui_do_edit_box(void *id, const CUIRect *rect, char *str, unsigned str_size, float font_size, bool hidden=false);
+
+	float DoScrollbarV(const void *pID, const CUIRect *pRect, float Current);
+	float DoScrollbarH(const void *pID, const CUIRect *pRect, float Current);
+	void DoButton_KeySelect(const void *pID, const char *pText, int Checked, const CUIRect *pRect);
+	int DoKeyReader(void *pID, const CUIRect *pRect, int Key);
+
+	//static int ui_do_key_reader(void *id, const CUIRect *rect, int key);
+	void UiDoGetButtons(int Start, int Stop, CUIRect View);
+
+	struct CListboxItem
+	{
+		int m_Visible;
+		int m_Selected;
+		CUIRect m_Rect;
+		CUIRect m_HitRect;
+	};
+	
+	void UiDoListboxStart(void *pId, const CUIRect *pRect, float RowHeight, const char *pTitle, const char *pBottomText, int NumItems,
+						  int ItemsPerRow, int SelectedIndex, float ScrollValue);
+	CListboxItem UiDoListboxNextItem(void *pID, bool Selected = false);
+	static CListboxItem UiDoListboxNextRow();
+	int UiDoListboxEnd(float *pScrollValue, bool *pItemActivated);
+	
+	//static void demolist_listdir_callback(const char *name, int is_dir, void *user);
+	//static void demolist_list_callback(const CUIRect *rect, int index, void *user);
+
+	enum
+	{
+		POPUP_NONE=0,
+		POPUP_FIRST_LAUNCH,
+		POPUP_CONNECTING,
+		POPUP_MESSAGE,
+		POPUP_DISCONNECTED,
+		POPUP_PURE,
+		POPUP_PASSWORD,
+		POPUP_QUIT, 
+	};
+
+	enum
+	{
+		PAGE_NEWS=1,
+		PAGE_GAME,
+		PAGE_SERVER_INFO,
+		PAGE_CALLVOTE,
+		PAGE_INTERNET,
+		PAGE_LAN,
+		PAGE_FAVORITES,
+		PAGE_DEMOS,
+		PAGE_SETTINGS,
+		PAGE_SYSTEM,
+	};
+
+	int m_GamePage;
+	int m_Popup;
+	int m_ActivePage;
+	bool m_MenuActive;
+	bool m_UseMouseButtons;
+	vec2 m_MousePos;
+	
+	int64 m_LastInput;
+	
+	//
+	char m_aMessageTopic[512];
+	char m_aMessageBody[512];
+	char m_aMessageButton[512];
+	
+	void PopupMessage(const char *pTopic, const char *pBody, const char *pButton);
+
+	// TODO: this is a bit ugly but.. well.. yeah	
+	enum { MAX_INPUTEVENTS = 32 };
+	static IInput::CEvent m_aInputEvents[MAX_INPUTEVENTS];
+	static int m_NumInputEvents;
+	
+	// some settings
+	static float ms_ButtonHeight;
+	static float ms_ListheaderHeight;
+	static float ms_FontmodHeight;
+	
+	// for graphic settings
+	bool m_NeedRestart;
+	bool m_NeedSendinfo;
+	
+	//
+	bool m_EscapePressed;
+	bool m_EnterPressed;
+	
+	// for call vote
+	int m_CallvoteSelectedOption;
+	int m_CallvoteSelectedPlayer;
+	
+	// demo
+	struct CDemoItem
+	{
+		char m_aFilename[512];
+		char m_aName[256];
+		
+		bool operator<(const CDemoItem &Other) { return str_comp(m_aName, Other.m_aName) < 0; } 
+	};
+	
+	sorted_array<CDemoItem> m_lDemos;
+		
+	void DemolistPopulate();
+	static void DemolistCountCallback(const char *pName, int IsDir, void *pUser);
+	static void DemolistFetchCallback(const char *pName, int IsDir, void *pUser);
+
+	// found in menus.cpp
+	int Render();
+	//void render_background();
+	//void render_loading(float percent);
+	int RenderMenubar(CUIRect r);
+	void RenderNews(CUIRect MainView);
+	
+	// found in menus_demo.cpp
+	void RenderDemoPlayer(CUIRect MainView);
+	void RenderDemoList(CUIRect MainView);
+	
+	// found in menus_ingame.cpp
+	void RenderGame(CUIRect MainView);
+	void RenderServerInfo(CUIRect MainView);
+	void RenderServerControl(CUIRect MainView);
+	void RenderServerControlKick(CUIRect MainView);
+	void RenderServerControlServer(CUIRect MainView);
+	
+	// found in menus_browser.cpp
+	int m_SelectedIndex;
+	void RenderServerbrowserServerList(CUIRect View);
+	void RenderServerbrowserServerDetail(CUIRect View);
+	void RenderServerbrowserFilters(CUIRect View);
+	void RenderServerbrowser(CUIRect MainView);
+	
+	// found in menus_settings.cpp
+	void RenderSettingsGeneral(CUIRect MainView);
+	void RenderSettingsPlayer(CUIRect MainView);
+	void RenderSettingsControls(CUIRect MainView);
+	void RenderSettingsGraphics(CUIRect MainView);
+	void RenderSettingsSound(CUIRect MainView);
+	void RenderSettings(CUIRect MainView);
+	
+	void SetActive(bool Active);
+public:
+	void RenderBackground();
+
+	void UseMouseButtons(bool Use) { m_UseMouseButtons = Use; }
+
+	static CMenusKeyBinder m_Binder;
+	
+	CMenus();
+
+	void RenderLoading(float Percent);
+
+	bool IsActive() const { return m_MenuActive; }
+
+	virtual void OnInit();
+
+	virtual void OnStateChange(int NewState, int OldState);
+	virtual void OnReset();
+	virtual void OnRender();
+	virtual bool OnInput(IInput::CEvent Event);
+	virtual bool OnMouseMove(float x, float y);
+};
+#endif