sources/interface.h

changeset 72
1b9c53e0c846
parent 71
4f7c2c944637
child 73
07dda51a7a8e
--- a/sources/interface.h	Fri May 15 18:36:22 2015 +0300
+++ b/sources/interface.h	Fri May 15 20:03:35 2015 +0300
@@ -30,17 +30,91 @@
 
 #pragma once
 #include "main.h"
+#include "network/ipaddress.h"
+#include "coloredline.h"
+#include "network/rconsession.h"
 
-namespace Interface
+class Interface
 {
-	FUNCTION initialize() -> void;
-	FUNCTION handle_input() -> void;
-	FUNCTION render() -> void;
-	FUNCTION render_full() -> void;
-	FUNCTION set_title (const String& message) -> void;
-	FUNCTION update_statusbar() -> void;
-	FUNCTION connect (String address, String password) -> void;
-	FUNCTION set_player_names (const StringList& names) -> void;
-	FUNCTION need_refresh() -> void;
-	FUNCTION tab_complete (const String& part, String complete) -> void;
+public:
+	enum InputState
+	{
+		INPUTSTATE_NORMAL,
+		INPUTSTATE_ADDRESS,
+		INPUTSTATE_PASSWORD,
+		INPUTSTATE_CONFIRM_DISCONNECTION,
+	};
+
+	Interface();
+	void handle_input();
+	void render();
+	void render_full();
+	void set_title (const String& message);
+	void update_statusbar();
+	void connect (String address, String password);
+	void set_player_names (const StringList& names);
+	void need_refresh();
+	void tab_complete (const String& part, String complete);
+	RCONSession* get_session() { return &Session; }
+
+	template<typename... argtypes>
+	void print (const String& fmtstr, const argtypes&... args)
+	{
+		print_to_console (format (fmtstr, args...));
+	}
+
+	template<typename... argtypes>
+	void print_warning (const String& fmtstr, const argtypes&... args)
+	{
+		print_to_console (TEXTCOLOR_BrightYellow "-!- " + format (fmtstr, args...) + TEXTCOLOR_Reset);
+	}
+
+	template<typename... argtypes>
+	void print_error (const String& fmtstr, const argtypes&... args)
+	{
+		print_to_console (TEXTCOLOR_BrightRed "!!! " + format (fmtstr, args...) + TEXTCOLOR_Reset);
+	}
+
+private:
+	StringList InputHistory;
+	int InputCursor = 0;
+	int CursorPosition = 0;
+	int InputPanning = 0;
+	bool NeedRefresh = false;
+	bool NeedStatusBarRender = false;
+	bool NeedInputRender = false;
+	bool NeedOutputRender = false;
+	bool NeedNicklistRender = false;
+	struct { char ch; int x; } CursorCharacter;
+	Vector<ColoredLine> OutputLines;
+	int OutputScroll = 0;
+	String Title;
+	InputState CurrentInputState = INPUTSTATE_NORMAL;
+	Function<void (void)> DisconnectConfirmFunction = nullptr;
+	IPAddress CurrentAddress;
+	String StatusBarText;
+	StringList PlayerNames;
+	String PasteBuffer;
+	RCONSession Session;
+
+	void render_titlebar();
+	void safe_disconnect (Function<void()> afterwards);
+	int render_colorline (int y, int x0, int width, const ColoredLine& line, bool allowWrap);
+	int nicklist_width();
+	void render_output();
+	void render_nicklist();
+	void render_input();
+	void render_statusbar();
+	void position_cursor();
+	int color_pair (Color fg, Color bg);
+	const String& current_input();
+	void detach_input();
+	String& mutable_current_input();
+	void move_input_cursor (int delta);
+	String prompt_string();
+	void set_input_state (InputState newstate);
+	void print_to_console (String a);
+	void yank (int a, int b);
+	int find_previous_word();
+	int find_next_word();
 };

mercurial