sources/interface.h

Sat, 23 Jul 2016 12:32:23 +0300

author
Teemu Piippo <teemu@compsta2.com>
date
Sat, 23 Jul 2016 12:32:23 +0300
changeset 168
96ffd13c08a2
parent 139
da7d5a8e608f
child 141
d9073c13dc98
child 179
7fc34735178e
permissions
-rw-r--r--

Reduce delta to protocol5 branch by importing the change to RCONSessoin::handlePacket's signature

14
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
1 /*
109
e4966d7e615d Happy new year 2016
Teemu Piippo <crimsondusk64@gmail.com>
parents: 105
diff changeset
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
1b9c53e0c846 Massive refactor
Teemu Piippo <crimsondusk64@gmail.com>
parents: 71
diff changeset
33 #include "network/ipaddress.h"
1b9c53e0c846 Massive refactor
Teemu Piippo <crimsondusk64@gmail.com>
parents: 71
diff changeset
34 #include "coloredline.h"
1b9c53e0c846 Massive refactor
Teemu Piippo <crimsondusk64@gmail.com>
parents: 71
diff changeset
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
1b9c53e0c846 Massive refactor
Teemu Piippo <crimsondusk64@gmail.com>
parents: 71
diff changeset
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
1b9c53e0c846 Massive refactor
Teemu Piippo <crimsondusk64@gmail.com>
parents: 71
diff changeset
42 public:
1b9c53e0c846 Massive refactor
Teemu Piippo <crimsondusk64@gmail.com>
parents: 71
diff changeset
43 enum InputState
1b9c53e0c846 Massive refactor
Teemu Piippo <crimsondusk64@gmail.com>
parents: 71
diff changeset
44 {
1b9c53e0c846 Massive refactor
Teemu Piippo <crimsondusk64@gmail.com>
parents: 71
diff changeset
45 INPUTSTATE_NORMAL,
1b9c53e0c846 Massive refactor
Teemu Piippo <crimsondusk64@gmail.com>
parents: 71
diff changeset
46 INPUTSTATE_ADDRESS,
1b9c53e0c846 Massive refactor
Teemu Piippo <crimsondusk64@gmail.com>
parents: 71
diff changeset
47 INPUTSTATE_PASSWORD,
1b9c53e0c846 Massive refactor
Teemu Piippo <crimsondusk64@gmail.com>
parents: 71
diff changeset
48 INPUTSTATE_CONFIRM_DISCONNECTION,
1b9c53e0c846 Massive refactor
Teemu Piippo <crimsondusk64@gmail.com>
parents: 71
diff changeset
49 };
1b9c53e0c846 Massive refactor
Teemu Piippo <crimsondusk64@gmail.com>
parents: 71
diff changeset
50
1b9c53e0c846 Massive refactor
Teemu Piippo <crimsondusk64@gmail.com>
parents: 71
diff changeset
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
1b9c53e0c846 Massive refactor
Teemu Piippo <crimsondusk64@gmail.com>
parents: 71
diff changeset
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
1b9c53e0c846 Massive refactor
Teemu Piippo <crimsondusk64@gmail.com>
parents: 71
diff changeset
69
1b9c53e0c846 Massive refactor
Teemu Piippo <crimsondusk64@gmail.com>
parents: 71
diff changeset
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
1b9c53e0c846 Massive refactor
Teemu Piippo <crimsondusk64@gmail.com>
parents: 71
diff changeset
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

mercurial