Wed, 27 Jan 2021 12:42:22 +0200
merge commit
14
33b8f428bacb
- begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
1 | /* |
109 | 2 | Copyright 2014 - 2016 Teemu Piippo |
14
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 | #pragma once |
33b8f428bacb
- begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
32 | #include "main.h" |
72 | 33 | #include "network/ipaddress.h" |
34 | #include "coloredline.h" | |
35 | #include "network/rconsession.h" | |
89
777b2a10b835
Add support for standard pdcurses, thanks to Leonard for pointing out the solutions to a few mysteries.
Teemu Piippo <tsapii@utu.fi>
parents:
88
diff
changeset
|
36 | #include "coloredline.h" |
777b2a10b835
Add support for standard pdcurses, thanks to Leonard for pointing out the solutions to a few mysteries.
Teemu Piippo <tsapii@utu.fi>
parents:
88
diff
changeset
|
37 | |
88
08ccaf26cffd
Now works with MSVC 2010/pdcurses-win32a
Teemu Piippo <tsapii@utu.fi>
parents:
83
diff
changeset
|
38 | BEGIN_ZFC_NAMESPACE |
14
33b8f428bacb
- begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
39 | |
72 | 40 | class Interface |
14
33b8f428bacb
- begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
41 | { |
72 | 42 | public: |
43 | enum InputState | |
44 | { | |
45 | INPUTSTATE_NORMAL, | |
46 | INPUTSTATE_ADDRESS, | |
47 | INPUTSTATE_PASSWORD, | |
48 | INPUTSTATE_CONFIRM_DISCONNECTION, | |
49 | }; | |
50 | ||
51 | Interface(); | |
138
c909c38ca886
Restyled Interface's public method names
Teemu Piippo <teemu@compsta2.com>
parents:
132
diff
changeset
|
52 | void connect(String address, String password); |
c909c38ca886
Restyled Interface's public method names
Teemu Piippo <teemu@compsta2.com>
parents:
132
diff
changeset
|
53 | void disconnected(); |
c909c38ca886
Restyled Interface's public method names
Teemu Piippo <teemu@compsta2.com>
parents:
132
diff
changeset
|
54 | RCONSession* getSession() { return &m_session; } |
c909c38ca886
Restyled Interface's public method names
Teemu Piippo <teemu@compsta2.com>
parents:
132
diff
changeset
|
55 | void handleCommand(const String& input); |
c909c38ca886
Restyled Interface's public method names
Teemu Piippo <teemu@compsta2.com>
parents:
132
diff
changeset
|
56 | void handleInput(); |
c909c38ca886
Restyled Interface's public method names
Teemu Piippo <teemu@compsta2.com>
parents:
132
diff
changeset
|
57 | void needRefresh(); |
c909c38ca886
Restyled Interface's public method names
Teemu Piippo <teemu@compsta2.com>
parents:
132
diff
changeset
|
58 | void __cdecl print(const char* fmtstr, ...); |
c909c38ca886
Restyled Interface's public method names
Teemu Piippo <teemu@compsta2.com>
parents:
132
diff
changeset
|
59 | void __cdecl printWarning(const char* fmtstr, ...); |
c909c38ca886
Restyled Interface's public method names
Teemu Piippo <teemu@compsta2.com>
parents:
132
diff
changeset
|
60 | void __cdecl printError(const char* fmtstr, ...); |
c909c38ca886
Restyled Interface's public method names
Teemu Piippo <teemu@compsta2.com>
parents:
132
diff
changeset
|
61 | void __cdecl printText(const char* fmtstr, ...); |
72 | 62 | void render(); |
138
c909c38ca886
Restyled Interface's public method names
Teemu Piippo <teemu@compsta2.com>
parents:
132
diff
changeset
|
63 | void renderFull(); |
c909c38ca886
Restyled Interface's public method names
Teemu Piippo <teemu@compsta2.com>
parents:
132
diff
changeset
|
64 | void setPlayerNames(const StringList& names); |
c909c38ca886
Restyled Interface's public method names
Teemu Piippo <teemu@compsta2.com>
parents:
132
diff
changeset
|
65 | void setTitle(const String& message); |
c909c38ca886
Restyled Interface's public method names
Teemu Piippo <teemu@compsta2.com>
parents:
132
diff
changeset
|
66 | void tabComplete(const String& part, String complete); |
c909c38ca886
Restyled Interface's public method names
Teemu Piippo <teemu@compsta2.com>
parents:
132
diff
changeset
|
67 | void updateStatusBar(); |
c909c38ca886
Restyled Interface's public method names
Teemu Piippo <teemu@compsta2.com>
parents:
132
diff
changeset
|
68 | void vprint(const char* fmtstr, va_list args); |
72 | 69 | |
70 | private: | |
127
6610b8b29848
Restyled the names of Interface's private members
Teemu Piippo <crimsondusk64@gmail.com>
parents:
116
diff
changeset
|
71 | StringList m_inputHistory; |
6610b8b29848
Restyled the names of Interface's private members
Teemu Piippo <crimsondusk64@gmail.com>
parents:
116
diff
changeset
|
72 | int m_inputCursor; |
6610b8b29848
Restyled the names of Interface's private members
Teemu Piippo <crimsondusk64@gmail.com>
parents:
116
diff
changeset
|
73 | int m_cursorPosition; |
6610b8b29848
Restyled the names of Interface's private members
Teemu Piippo <crimsondusk64@gmail.com>
parents:
116
diff
changeset
|
74 | int m_inputPanning; |
6610b8b29848
Restyled the names of Interface's private members
Teemu Piippo <crimsondusk64@gmail.com>
parents:
116
diff
changeset
|
75 | bool m_needRefresh; |
6610b8b29848
Restyled the names of Interface's private members
Teemu Piippo <crimsondusk64@gmail.com>
parents:
116
diff
changeset
|
76 | bool m_needStatusBarRender; |
6610b8b29848
Restyled the names of Interface's private members
Teemu Piippo <crimsondusk64@gmail.com>
parents:
116
diff
changeset
|
77 | bool m_needInputRender; |
6610b8b29848
Restyled the names of Interface's private members
Teemu Piippo <crimsondusk64@gmail.com>
parents:
116
diff
changeset
|
78 | bool m_needOutputRender; |
6610b8b29848
Restyled the names of Interface's private members
Teemu Piippo <crimsondusk64@gmail.com>
parents:
116
diff
changeset
|
79 | bool m_needNicklistRender; |
6610b8b29848
Restyled the names of Interface's private members
Teemu Piippo <crimsondusk64@gmail.com>
parents:
116
diff
changeset
|
80 | struct { char ch; int x; } m_cursorCharacter; |
6610b8b29848
Restyled the names of Interface's private members
Teemu Piippo <crimsondusk64@gmail.com>
parents:
116
diff
changeset
|
81 | Vector<ColoredLine> m_outputLines; |
6610b8b29848
Restyled the names of Interface's private members
Teemu Piippo <crimsondusk64@gmail.com>
parents:
116
diff
changeset
|
82 | int m_outputScroll; |
6610b8b29848
Restyled the names of Interface's private members
Teemu Piippo <crimsondusk64@gmail.com>
parents:
116
diff
changeset
|
83 | String m_title; |
6610b8b29848
Restyled the names of Interface's private members
Teemu Piippo <crimsondusk64@gmail.com>
parents:
116
diff
changeset
|
84 | InputState m_inputState; |
6610b8b29848
Restyled the names of Interface's private members
Teemu Piippo <crimsondusk64@gmail.com>
parents:
116
diff
changeset
|
85 | std::function<void(bool)> m_disconnectCallback; |
6610b8b29848
Restyled the names of Interface's private members
Teemu Piippo <crimsondusk64@gmail.com>
parents:
116
diff
changeset
|
86 | IPAddress m_remoteAddress; |
6610b8b29848
Restyled the names of Interface's private members
Teemu Piippo <crimsondusk64@gmail.com>
parents:
116
diff
changeset
|
87 | String m_statusBarText; |
132
8a4690db252e
Added support for colored nicknames
Teemu Piippo <crimsondusk64@gmail.com>
parents:
127
diff
changeset
|
88 | List<ColoredLine> m_playerNames; |
127
6610b8b29848
Restyled the names of Interface's private members
Teemu Piippo <crimsondusk64@gmail.com>
parents:
116
diff
changeset
|
89 | String m_pasteBuffer; |
6610b8b29848
Restyled the names of Interface's private members
Teemu Piippo <crimsondusk64@gmail.com>
parents:
116
diff
changeset
|
90 | RCONSession m_session; |
72 | 91 | |
139
da7d5a8e608f
Restyled the names of the private methods of Interface
Teemu Piippo <teemu@compsta2.com>
parents:
138
diff
changeset
|
92 | void detachInput(); |
da7d5a8e608f
Restyled the names of the private methods of Interface
Teemu Piippo <teemu@compsta2.com>
parents:
138
diff
changeset
|
93 | int findNextWord(); |
da7d5a8e608f
Restyled the names of the private methods of Interface
Teemu Piippo <teemu@compsta2.com>
parents:
138
diff
changeset
|
94 | int findPreviousWord(); |
da7d5a8e608f
Restyled the names of the private methods of Interface
Teemu Piippo <teemu@compsta2.com>
parents:
138
diff
changeset
|
95 | void flushInput(); |
da7d5a8e608f
Restyled the names of the private methods of Interface
Teemu Piippo <teemu@compsta2.com>
parents:
138
diff
changeset
|
96 | chtype getColorPair(Color fg, Color bg); |
da7d5a8e608f
Restyled the names of the private methods of Interface
Teemu Piippo <teemu@compsta2.com>
parents:
138
diff
changeset
|
97 | const String& getCurrentInput(); |
da7d5a8e608f
Restyled the names of the private methods of Interface
Teemu Piippo <teemu@compsta2.com>
parents:
138
diff
changeset
|
98 | String& getEditableInput(); |
da7d5a8e608f
Restyled the names of the private methods of Interface
Teemu Piippo <teemu@compsta2.com>
parents:
138
diff
changeset
|
99 | String getPromptString(); |
da7d5a8e608f
Restyled the names of the private methods of Interface
Teemu Piippo <teemu@compsta2.com>
parents:
138
diff
changeset
|
100 | void moveInputCursor(int delta); |
da7d5a8e608f
Restyled the names of the private methods of Interface
Teemu Piippo <teemu@compsta2.com>
parents:
138
diff
changeset
|
101 | int nicklistWidth(); |
da7d5a8e608f
Restyled the names of the private methods of Interface
Teemu Piippo <teemu@compsta2.com>
parents:
138
diff
changeset
|
102 | void positionCursor(); |
da7d5a8e608f
Restyled the names of the private methods of Interface
Teemu Piippo <teemu@compsta2.com>
parents:
138
diff
changeset
|
103 | void printToConsole(String message); |
da7d5a8e608f
Restyled the names of the private methods of Interface
Teemu Piippo <teemu@compsta2.com>
parents:
138
diff
changeset
|
104 | int renderColorline(int y, int x0, int width, const ColoredLine& line, bool allowWrap); |
da7d5a8e608f
Restyled the names of the private methods of Interface
Teemu Piippo <teemu@compsta2.com>
parents:
138
diff
changeset
|
105 | void renderInput(); |
da7d5a8e608f
Restyled the names of the private methods of Interface
Teemu Piippo <teemu@compsta2.com>
parents:
138
diff
changeset
|
106 | void renderNicklist(); |
da7d5a8e608f
Restyled the names of the private methods of Interface
Teemu Piippo <teemu@compsta2.com>
parents:
138
diff
changeset
|
107 | void renderOutput(); |
da7d5a8e608f
Restyled the names of the private methods of Interface
Teemu Piippo <teemu@compsta2.com>
parents:
138
diff
changeset
|
108 | void renderStatusBar(); |
da7d5a8e608f
Restyled the names of the private methods of Interface
Teemu Piippo <teemu@compsta2.com>
parents:
138
diff
changeset
|
109 | void renderTitlebar(); |
da7d5a8e608f
Restyled the names of the private methods of Interface
Teemu Piippo <teemu@compsta2.com>
parents:
138
diff
changeset
|
110 | void resetTitle(); |
da7d5a8e608f
Restyled the names of the private methods of Interface
Teemu Piippo <teemu@compsta2.com>
parents:
138
diff
changeset
|
111 | void safeDisconnect(std::function<void(bool)> afterwards); |
da7d5a8e608f
Restyled the names of the private methods of Interface
Teemu Piippo <teemu@compsta2.com>
parents:
138
diff
changeset
|
112 | void setInputState(InputState newstate); |
da7d5a8e608f
Restyled the names of the private methods of Interface
Teemu Piippo <teemu@compsta2.com>
parents:
138
diff
changeset
|
113 | void yank(int a, int b); |
14
33b8f428bacb
- begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
114 | }; |
88
08ccaf26cffd
Now works with MSVC 2010/pdcurses-win32a
Teemu Piippo <tsapii@utu.fi>
parents:
83
diff
changeset
|
115 | |
08ccaf26cffd
Now works with MSVC 2010/pdcurses-win32a
Teemu Piippo <tsapii@utu.fi>
parents:
83
diff
changeset
|
116 | END_ZFC_NAMESPACE |