sources/interface.cpp

Sun, 14 Dec 2014 20:20:43 +0200

author
Teemu Piippo <crimsondusk64@gmail.com>
date
Sun, 14 Dec 2014 20:20:43 +0200
changeset 20
5f8cdc8febbb
parent 17
50341dec533e
child 23
f7221183a994
permissions
-rw-r--r--

- now in color! (titlebar at least anyway)

14
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
1 /*
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
2 Copyright 2014 Teemu Piippo
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
3 All rights reserved.
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
4
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
5 Redistribution and use in source and binary forms, with or without
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
6 modification, are permitted provided that the following conditions
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
7 are met:
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
8
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
9 1. Redistributions of source code must retain the above copyright
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
10 notice, this list of conditions and the following disclaimer.
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
11 2. Redistributions in binary form must reproduce the above copyright
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
12 notice, this list of conditions and the following disclaimer in the
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
13 documentation and/or other materials provided with the distribution.
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
14 3. Neither the name of the copyright holder nor the names of its
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
15 contributors may be used to endorse or promote products derived from
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
16 this software without specific prior written permission.
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
17
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
18 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
19 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
20 TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
21 PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
22 OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
23 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
24 PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
25 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
26 LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
27 NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
28 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
29 */
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
30
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
31 #include <string.h>
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
32 #include "interface.h"
17
50341dec533e - added command sending
Teemu Piippo <crimsondusk64@gmail.com>
parents: 16
diff changeset
33 #include "network/rconsession.h"
14
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
34
16
33bac54867bf - added backlog scrolling
Teemu Piippo <crimsondusk64@gmail.com>
parents: 15
diff changeset
35 enum { PAGE_SIZE = 10 };
33bac54867bf - added backlog scrolling
Teemu Piippo <crimsondusk64@gmail.com>
parents: 15
diff changeset
36
14
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
37 static String g_input;
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
38 static int g_cursor = 0;
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
39 static int g_pan = 0;
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
40 static bool g_needRefresh = false;
15
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
41 static bool g_needStatusBarRender = false;
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
42 static bool g_needInputRender = false;
17
50341dec533e - added command sending
Teemu Piippo <crimsondusk64@gmail.com>
parents: 16
diff changeset
43 static bool g_needOutputRender = false;
15
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
44 static String g_statusBarText;
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
45 static struct { char ch; int x; } g_cursorChar;
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
46 static Vector<String> g_output = {""};
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
47 static int g_outputScroll = 0;
14
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
48
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
49 // -------------------------------------------------------------------------------------------------
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
50 //
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
51 static FUNCTION
20
5f8cdc8febbb - now in color! (titlebar at least anyway)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 17
diff changeset
52 interface_color_pair (Color fg, Color bg) -> int
5f8cdc8febbb - now in color! (titlebar at least anyway)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 17
diff changeset
53 {
5f8cdc8febbb - now in color! (titlebar at least anyway)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 17
diff changeset
54 return COLOR_PAIR ((int (fg) * NUM_COLORS) + int (bg));
5f8cdc8febbb - now in color! (titlebar at least anyway)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 17
diff changeset
55 }
5f8cdc8febbb - now in color! (titlebar at least anyway)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 17
diff changeset
56
5f8cdc8febbb - now in color! (titlebar at least anyway)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 17
diff changeset
57 // -------------------------------------------------------------------------------------------------
5f8cdc8febbb - now in color! (titlebar at least anyway)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 17
diff changeset
58 //
5f8cdc8febbb - now in color! (titlebar at least anyway)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 17
diff changeset
59 FUNCTION
5f8cdc8febbb - now in color! (titlebar at least anyway)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 17
diff changeset
60 Interface::initialize() -> void
5f8cdc8febbb - now in color! (titlebar at least anyway)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 17
diff changeset
61 {
5f8cdc8febbb - now in color! (titlebar at least anyway)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 17
diff changeset
62 ::initscr();
5f8cdc8febbb - now in color! (titlebar at least anyway)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 17
diff changeset
63 ::start_color();
5f8cdc8febbb - now in color! (titlebar at least anyway)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 17
diff changeset
64 ::raw();
5f8cdc8febbb - now in color! (titlebar at least anyway)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 17
diff changeset
65 ::keypad (stdscr, true);
5f8cdc8febbb - now in color! (titlebar at least anyway)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 17
diff changeset
66 ::noecho();
5f8cdc8febbb - now in color! (titlebar at least anyway)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 17
diff changeset
67 ::refresh();
5f8cdc8febbb - now in color! (titlebar at least anyway)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 17
diff changeset
68 ::timeout (0);
5f8cdc8febbb - now in color! (titlebar at least anyway)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 17
diff changeset
69
5f8cdc8febbb - now in color! (titlebar at least anyway)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 17
diff changeset
70 for (int i = 0; i < NUM_COLORS; ++i)
5f8cdc8febbb - now in color! (titlebar at least anyway)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 17
diff changeset
71 for (int j = 0; j < NUM_COLORS; ++j)
5f8cdc8febbb - now in color! (titlebar at least anyway)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 17
diff changeset
72 {
5f8cdc8febbb - now in color! (titlebar at least anyway)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 17
diff changeset
73 init_pair ((i * NUM_COLORS + j),
5f8cdc8febbb - now in color! (titlebar at least anyway)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 17
diff changeset
74 (i == DEFAULT) ? -1 : i,
5f8cdc8febbb - now in color! (titlebar at least anyway)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 17
diff changeset
75 (j == DEFAULT) ? -1 : j);
5f8cdc8febbb - now in color! (titlebar at least anyway)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 17
diff changeset
76 }
5f8cdc8febbb - now in color! (titlebar at least anyway)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 17
diff changeset
77
5f8cdc8febbb - now in color! (titlebar at least anyway)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 17
diff changeset
78 render_full();
5f8cdc8febbb - now in color! (titlebar at least anyway)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 17
diff changeset
79 refresh();
5f8cdc8febbb - now in color! (titlebar at least anyway)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 17
diff changeset
80 g_needRefresh = false;
5f8cdc8febbb - now in color! (titlebar at least anyway)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 17
diff changeset
81 print ("Interface initialized.\n");
5f8cdc8febbb - now in color! (titlebar at least anyway)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 17
diff changeset
82 }
5f8cdc8febbb - now in color! (titlebar at least anyway)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 17
diff changeset
83 // -------------------------------------------------------------------------------------------------
5f8cdc8febbb - now in color! (titlebar at least anyway)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 17
diff changeset
84 //
5f8cdc8febbb - now in color! (titlebar at least anyway)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 17
diff changeset
85 static FUNCTION
14
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
86 interface_sessions_width() -> int
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
87 {
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
88 return COLS / 3;
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
89 }
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
90
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
91 // -------------------------------------------------------------------------------------------------
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
92 //
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
93 static FUNCTION
20
5f8cdc8febbb - now in color! (titlebar at least anyway)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 17
diff changeset
94 interface_clear_titlebar() -> void
5f8cdc8febbb - now in color! (titlebar at least anyway)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 17
diff changeset
95 {
5f8cdc8febbb - now in color! (titlebar at least anyway)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 17
diff changeset
96 int pair = interface_color_pair (WHITE, BLUE);
5f8cdc8febbb - now in color! (titlebar at least anyway)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 17
diff changeset
97 attron (pair);
5f8cdc8febbb - now in color! (titlebar at least anyway)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 17
diff changeset
98 mvhline (0, 0, ' ', COLS);
5f8cdc8febbb - now in color! (titlebar at least anyway)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 17
diff changeset
99 attroff (pair);
5f8cdc8febbb - now in color! (titlebar at least anyway)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 17
diff changeset
100 }
5f8cdc8febbb - now in color! (titlebar at least anyway)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 17
diff changeset
101
5f8cdc8febbb - now in color! (titlebar at least anyway)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 17
diff changeset
102 // -------------------------------------------------------------------------------------------------
5f8cdc8febbb - now in color! (titlebar at least anyway)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 17
diff changeset
103 //
5f8cdc8febbb - now in color! (titlebar at least anyway)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 17
diff changeset
104 static FUNCTION
14
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
105 interface_render_titlebar() -> void
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
106 {
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
107 String versionText = format (APPNAME " %1 (%2)",
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
108 full_version_string(), changeset_date_string());
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
109
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
110 if (versionText.length() <= COLS)
20
5f8cdc8febbb - now in color! (titlebar at least anyway)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 17
diff changeset
111 {
5f8cdc8febbb - now in color! (titlebar at least anyway)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 17
diff changeset
112 int pair = interface_color_pair (WHITE, BLUE);
5f8cdc8febbb - now in color! (titlebar at least anyway)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 17
diff changeset
113 attron (pair);
14
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
114 mvprintw (0, (COLS - versionText.length()) / 2, "%s", versionText.chars());
20
5f8cdc8febbb - now in color! (titlebar at least anyway)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 17
diff changeset
115 attroff (pair);
5f8cdc8febbb - now in color! (titlebar at least anyway)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 17
diff changeset
116 }
14
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
117 }
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
118
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
119 // -------------------------------------------------------------------------------------------------
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
120 //
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
121 static FUNCTION
17
50341dec533e - added command sending
Teemu Piippo <crimsondusk64@gmail.com>
parents: 16
diff changeset
122 interface_render_output() -> void
14
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
123 {
15
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
124 int height = LINES - 3;
16
33bac54867bf - added backlog scrolling
Teemu Piippo <crimsondusk64@gmail.com>
parents: 15
diff changeset
125
33bac54867bf - added backlog scrolling
Teemu Piippo <crimsondusk64@gmail.com>
parents: 15
diff changeset
126 // ensure we're within bounds
33bac54867bf - added backlog scrolling
Teemu Piippo <crimsondusk64@gmail.com>
parents: 15
diff changeset
127 if (g_outputScroll + height >= g_output.size())
33bac54867bf - added backlog scrolling
Teemu Piippo <crimsondusk64@gmail.com>
parents: 15
diff changeset
128 g_outputScroll = g_output.size() - height - 1;
33bac54867bf - added backlog scrolling
Teemu Piippo <crimsondusk64@gmail.com>
parents: 15
diff changeset
129 else if (g_outputScroll < 0)
33bac54867bf - added backlog scrolling
Teemu Piippo <crimsondusk64@gmail.com>
parents: 15
diff changeset
130 g_outputScroll = 0;
33bac54867bf - added backlog scrolling
Teemu Piippo <crimsondusk64@gmail.com>
parents: 15
diff changeset
131
33bac54867bf - added backlog scrolling
Teemu Piippo <crimsondusk64@gmail.com>
parents: 15
diff changeset
132 int start = max (0, g_output.size() - height - 1 - g_outputScroll);
15
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
133 int end = min (g_output.size(), start + height);
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
134 int y = 1;
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
135 assert (end - start <= height);
14
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
136
15
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
137 for (int i = start; i < end; ++i)
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
138 {
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
139 mvhline (y, 0, ' ', COLS);
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
140 mvprintw (y++, 0, "%s", g_output[i].chars());
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
141 }
17
50341dec533e - added command sending
Teemu Piippo <crimsondusk64@gmail.com>
parents: 16
diff changeset
142
50341dec533e - added command sending
Teemu Piippo <crimsondusk64@gmail.com>
parents: 16
diff changeset
143 g_needRefresh = true;
14
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
144 }
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
145
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
146 // -------------------------------------------------------------------------------------------------
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
147 //
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
148 static FUNCTION
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
149 interface_render_input() -> void
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
150 {
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
151 static char prompt[] = "> ";
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
152 int displaylength = COLS - strlen (prompt) - 1;
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
153 int y = LINES - 2;
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
154
17
50341dec533e - added command sending
Teemu Piippo <crimsondusk64@gmail.com>
parents: 16
diff changeset
155 // Ensure the cursor is within bounds
50341dec533e - added command sending
Teemu Piippo <crimsondusk64@gmail.com>
parents: 16
diff changeset
156 g_cursor = clamp (g_cursor, 0, g_input.length());
50341dec533e - added command sending
Teemu Piippo <crimsondusk64@gmail.com>
parents: 16
diff changeset
157
14
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
158 // Ensure that the cursor is always in view, adjust panning if this is not the case
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
159 if (g_cursor > g_pan + displaylength)
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
160 g_pan = g_cursor - displaylength; // cursor went too far right
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
161 else if (g_cursor < g_pan)
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
162 g_pan = g_cursor; // cursor went past the pan value to the left
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
163
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
164 int start = g_pan;
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
165 int end = min<int> (g_input.length(), start + displaylength);
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
166 assert (g_cursor >= start and g_cursor <= end);
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
167 String displayTextBegin = g_input.mid (start, g_cursor);
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
168 String displayTextEnd = g_input.mid (g_cursor, end);
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
169
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
170 // Clear, but only as much as is necessary. I want to avoid clearing the entire line to save
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
171 // bandwidth over SSH connections. Perhaps needlessly? I'm paranoid.
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
172 int renderLength = strlen (prompt) + displayTextBegin.length() + displayTextEnd.length();
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
173 static int lastRenderLength = 0;
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
174
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
175 if (lastRenderLength > renderLength)
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
176 mvhline (y, renderLength, ' ', lastRenderLength - renderLength);
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
177
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
178 lastRenderLength = renderLength;
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
179
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
180 // Render the input line, with the part of the input string that's before the cursor written
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
181 // AFTER the part that comes afterwards. This is to ensure that the cursor is placed at the
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
182 // position where our cursor is. It looks nice like that. :)
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
183 mvprintw (y, 0, "%s", prompt);
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
184 mvprintw (y, strlen (prompt) + displayTextBegin.length(), "%s", displayTextEnd.chars());
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
185 mvprintw (y, strlen (prompt), "%s", displayTextBegin.chars());
15
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
186 g_cursorChar.ch = g_cursor != 0 ? g_input[g_cursor - 1] : '\0';
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
187 g_cursorChar.x = strlen (prompt) + displayTextBegin.length() - 1;
14
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
188 g_needRefresh = true;
15
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
189 g_needInputRender = false;
14
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
190 }
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
191
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
192 // -------------------------------------------------------------------------------------------------
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
193 //
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
194 static FUNCTION
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
195 interface_render_statusbar() -> void
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
196 {
15
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
197 int y = LINES - 1;
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
198 mvhline (y, 0, ' ', COLS);
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
199 mvprintw (y, 0, "%s", g_statusBarText.chars());
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
200 g_needRefresh = true;
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
201 g_needStatusBarRender = false;
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
202 }
14
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
203
15
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
204 // -------------------------------------------------------------------------------------------------
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
205 //
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
206 static FUNCTION
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
207 set_statusbar_text (const String& a) -> void
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
208 {
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
209 g_statusBarText = a;
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
210 g_needStatusBarRender = true;
14
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
211 }
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
212
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
213 // -------------------------------------------------------------------------------------------------
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
214 //
20
5f8cdc8febbb - now in color! (titlebar at least anyway)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 17
diff changeset
215 FUNCTION
5f8cdc8febbb - now in color! (titlebar at least anyway)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 17
diff changeset
216 Interface::render_full() -> void
14
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
217 {
20
5f8cdc8febbb - now in color! (titlebar at least anyway)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 17
diff changeset
218 interface_clear_titlebar();
14
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
219 interface_render_titlebar();
17
50341dec533e - added command sending
Teemu Piippo <crimsondusk64@gmail.com>
parents: 16
diff changeset
220 interface_render_output();
14
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
221 interface_render_statusbar();
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
222 interface_render_input();
15
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
223 }
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
224
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
225 // -------------------------------------------------------------------------------------------------
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
226 //
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
227 static FUNCTION
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
228 interface_position_cursor() -> void
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
229 {
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
230 int y = LINES - 2;
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
231
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
232 if (g_cursorChar.ch != '\0')
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
233 mvprintw (y, g_cursorChar.x, "%c", g_cursorChar.ch);
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
234 else
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
235 mvprintw (y, 1, " ");
14
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
236 }
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
237
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
238 // -------------------------------------------------------------------------------------------------
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
239 //
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
240 FUNCTION
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
241 Interface::handle_input() -> void
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
242 {
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
243 int ch = ::getch();
15
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
244 set_statusbar_text (String::from_number (ch));
14
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
245
15
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
246 if (ch >= 0x20 and ch <= 0x7E)
14
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
247 {
15
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
248 g_input.insert (g_cursor++, char (ch));
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
249 g_needInputRender = true;
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
250 }
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
251 else switch (ch)
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
252 {
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
253 case KEY_F(1):
14
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
254 endwin();
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
255 exit (EXIT_SUCCESS);
15
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
256 break;
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
257
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
258 case KEY_LEFT:
14
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
259 if (g_cursor > 0)
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
260 {
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
261 g_cursor--;
15
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
262 g_needInputRender = true;
14
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
263 }
15
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
264 break;
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
265
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
266 case KEY_RIGHT:
14
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
267 if (g_cursor < g_input.length())
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
268 {
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
269 g_cursor++;
15
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
270 g_needInputRender = true;
14
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
271 }
15
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
272 break;
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
273
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
274 case KEY_HOME:
14
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
275 if (g_cursor != 0)
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
276 {
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
277 g_cursor = 0;
15
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
278 g_needInputRender = true;
14
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
279 }
15
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
280 break;
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
281
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
282 case KEY_END:
14
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
283 if (g_cursor != g_input.length())
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
284 {
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
285 g_cursor = g_input.length();
15
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
286 g_needInputRender = true;
14
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
287 }
15
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
288 break;
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
289
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
290 case KEY_BACKSPACE:
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
291 if (g_cursor > 0)
14
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
292 {
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
293 g_input.remove_at (--g_cursor);
15
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
294 g_needInputRender = true;
14
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
295 }
15
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
296 break;
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
297
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
298 case KEY_DC:
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
299 if (g_cursor < g_input.length())
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
300 {
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
301 g_input.remove_at (g_cursor);
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
302 g_needInputRender = true;
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
303 }
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
304 break;
16
33bac54867bf - added backlog scrolling
Teemu Piippo <crimsondusk64@gmail.com>
parents: 15
diff changeset
305
33bac54867bf - added backlog scrolling
Teemu Piippo <crimsondusk64@gmail.com>
parents: 15
diff changeset
306 case KEY_PPAGE:
33bac54867bf - added backlog scrolling
Teemu Piippo <crimsondusk64@gmail.com>
parents: 15
diff changeset
307 g_outputScroll += PAGE_SIZE;
17
50341dec533e - added command sending
Teemu Piippo <crimsondusk64@gmail.com>
parents: 16
diff changeset
308 g_needOutputRender = true;
16
33bac54867bf - added backlog scrolling
Teemu Piippo <crimsondusk64@gmail.com>
parents: 15
diff changeset
309 break;
33bac54867bf - added backlog scrolling
Teemu Piippo <crimsondusk64@gmail.com>
parents: 15
diff changeset
310
33bac54867bf - added backlog scrolling
Teemu Piippo <crimsondusk64@gmail.com>
parents: 15
diff changeset
311 case KEY_NPAGE:
33bac54867bf - added backlog scrolling
Teemu Piippo <crimsondusk64@gmail.com>
parents: 15
diff changeset
312 g_outputScroll -= PAGE_SIZE;
17
50341dec533e - added command sending
Teemu Piippo <crimsondusk64@gmail.com>
parents: 16
diff changeset
313 g_needOutputRender = true;
50341dec533e - added command sending
Teemu Piippo <crimsondusk64@gmail.com>
parents: 16
diff changeset
314 break;
50341dec533e - added command sending
Teemu Piippo <crimsondusk64@gmail.com>
parents: 16
diff changeset
315
50341dec533e - added command sending
Teemu Piippo <crimsondusk64@gmail.com>
parents: 16
diff changeset
316 case '\n':
50341dec533e - added command sending
Teemu Piippo <crimsondusk64@gmail.com>
parents: 16
diff changeset
317 case KEY_ENTER:
50341dec533e - added command sending
Teemu Piippo <crimsondusk64@gmail.com>
parents: 16
diff changeset
318 if (RCONSession::get_session()->send_command (g_input))
50341dec533e - added command sending
Teemu Piippo <crimsondusk64@gmail.com>
parents: 16
diff changeset
319 {
50341dec533e - added command sending
Teemu Piippo <crimsondusk64@gmail.com>
parents: 16
diff changeset
320 g_input.clear();
50341dec533e - added command sending
Teemu Piippo <crimsondusk64@gmail.com>
parents: 16
diff changeset
321 g_needInputRender = true;
50341dec533e - added command sending
Teemu Piippo <crimsondusk64@gmail.com>
parents: 16
diff changeset
322 }
16
33bac54867bf - added backlog scrolling
Teemu Piippo <crimsondusk64@gmail.com>
parents: 15
diff changeset
323 break;
14
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
324 }
17
50341dec533e - added command sending
Teemu Piippo <crimsondusk64@gmail.com>
parents: 16
diff changeset
325 }
14
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
326
17
50341dec533e - added command sending
Teemu Piippo <crimsondusk64@gmail.com>
parents: 16
diff changeset
327 // -------------------------------------------------------------------------------------------------
50341dec533e - added command sending
Teemu Piippo <crimsondusk64@gmail.com>
parents: 16
diff changeset
328 //
50341dec533e - added command sending
Teemu Piippo <crimsondusk64@gmail.com>
parents: 16
diff changeset
329 FUNCTION
50341dec533e - added command sending
Teemu Piippo <crimsondusk64@gmail.com>
parents: 16
diff changeset
330 Interface::render() -> void
50341dec533e - added command sending
Teemu Piippo <crimsondusk64@gmail.com>
parents: 16
diff changeset
331 {
15
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
332 if (g_needStatusBarRender) interface_render_statusbar();
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
333 if (g_needInputRender) interface_render_input();
17
50341dec533e - added command sending
Teemu Piippo <crimsondusk64@gmail.com>
parents: 16
diff changeset
334 if (g_needOutputRender) interface_render_output();
15
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
335
14
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
336 if (g_needRefresh)
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
337 {
15
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
338 interface_position_cursor();
14
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
339 refresh();
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
340 g_needRefresh = false;
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
341 }
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
342 }
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
343
17
50341dec533e - added command sending
Teemu Piippo <crimsondusk64@gmail.com>
parents: 16
diff changeset
344 // -------------------------------------------------------------------------------------------------
50341dec533e - added command sending
Teemu Piippo <crimsondusk64@gmail.com>
parents: 16
diff changeset
345 //
14
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
346 FUNCTION print_to_console (const String& a) -> void
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
347 {
15
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
348 for (char ch : a)
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
349 {
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
350 if (ch == '\n')
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
351 {
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
352 g_output << "";
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
353 continue;
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
354 }
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
355
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
356 g_output[g_output.size() - 1] += ch;
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
357 }
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
358
17
50341dec533e - added command sending
Teemu Piippo <crimsondusk64@gmail.com>
parents: 16
diff changeset
359 g_needOutputRender = true;
14
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
360 }

mercurial