Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/input/src/core/Shell.h @ 1637

Last change on this file since 1637 was 1637, checked in by rgrieder, 16 years ago

Finally! The InputManager is now working like I imagined it to. And it's even easier to use it as well.
A little explanation: Every time you change something about the input distribution, it is a change of 'state' represented by the class 'InputState'.
That can be for instance: "console", "game", "gui", etc. Every state has a name and a priority which describes who comes first. Now if one state doesn't handle mouse input or instance, then the one with the next lower priority gets it. To prevent that, you can add the 'EmptyHandler' to the state with setMouseHandler.
InputState is just an abstract base class. There are two classes implementing it: SimpleInputState and ExtendedInputState. The latter allows for multiple input handlers for one single device.

Basically, what you need to know is what you see in Orxonox.cc, InGameConsole.cc and Shell.cc.

  • Property svn:eol-style set to native
File size: 4.4 KB
Line 
1/*
2 *   ORXONOX - the hottest 3D action shooter ever to exist
3 *                    > www.orxonox.net <
4 *
5 *
6 *   License notice:
7 *
8 *   This program is free software; you can redistribute it and/or
9 *   modify it under the terms of the GNU General Public License
10 *   as published by the Free Software Foundation; either version 2
11 *   of the License, or (at your option) any later version.
12 *
13 *   This program is distributed in the hope that it will be useful,
14 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
15 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 *   GNU General Public License for more details.
17 *
18 *   You should have received a copy of the GNU General Public License
19 *   along with this program; if not, write to the Free Software
20 *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
21 *
22 *   Author:
23 *      Fabian 'x3n' Landau
24 *   Co-authors:
25 *      ...
26 *
27 */
28
29#ifndef _Shell_H__
30#define _Shell_H__
31
32#include <list>
33#include <vector>
34
35#include "CorePrereqs.h"
36
37#include "OrxonoxClass.h"
38#include "input/InputBuffer.h"
39#include "OutputBuffer.h"
40
41namespace orxonox
42{
43    class _CoreExport ShellListener
44    {
45        friend class Shell;
46
47        public:
48            virtual ~ShellListener() {}
49
50        private:
51            virtual void linesChanged() {}
52            virtual void onlyLastLineChanged() {}
53            virtual void lineAdded() {}
54            virtual void inputChanged() {}
55            virtual void cursorChanged() {}
56            virtual void exit() {}
57    };
58
59    class _CoreExport Shell : virtual public OrxonoxClass, public OutputBufferListener
60    {
61        public:
62            static Shell& getInstance();
63            static Shell& createShell();
64
65            static void clearShell();
66            static void history();
67
68            virtual void setConfigValues();
69
70            void registerListener(ShellListener* listener);
71            void unregisterListener(ShellListener* listener);
72
73            inline InputBuffer& getInputBuffer()
74                { return (*this->inputBuffer_); }
75            inline OutputBuffer& getOutputBuffer()
76                { return this->outputBuffer_; }
77
78            void setCursorPosition(unsigned int cursor);
79            inline unsigned int getCursorPosition() const
80                { return this->inputBuffer_->getCursorPosition(); }
81
82            void setInput(const std::string& input);
83
84            inline void clearInput()
85                { this->setInput(""); }
86            inline std::string getInput() const
87                { return this->inputBuffer_->get(); }
88
89            std::list<std::string>::const_iterator getNewestLineIterator() const;
90            std::list<std::string>::const_iterator getEndIterator() const;
91
92            void addLine(const std::string& line, int level = 0);
93            void clearLines();
94
95            inline unsigned int getNumLines() const
96                { return this->lines_.size(); }
97            inline unsigned int getScrollPosition() const
98                { return this->scrollPosition_; }
99
100            inline void addOutputLevel(bool bAddOutputLevel)
101                { this->bAddOutputLevel_ = bAddOutputLevel; }
102
103        private:
104            Shell();
105            Shell(const Shell& other);
106            virtual ~Shell();
107
108            void configureInputBuffer();
109
110            void addToHistory(const std::string& command);
111            std::string getFromHistory() const;
112
113            virtual void outputChanged();
114            void inputChanged();
115            void execute();
116            void hintandcomplete();
117            void backspace();
118            void deletechar();
119            void clear();
120            void cursor_right();
121            void cursor_left();
122            void cursor_end();
123            void cursor_home();
124            void history_up();
125            void history_down();
126            void scroll_up();
127            void scroll_down();
128            void exit();
129
130            std::list<ShellListener*> listeners_;
131            InputBuffer* inputBuffer_;
132            OutputBuffer outputBuffer_;
133            bool finishedLastLine_;
134            std::list<std::string> lines_;
135            std::list<std::string>::const_iterator scrollIterator_;
136            unsigned int scrollPosition_;
137            std::vector<std::string> commandHistory_;
138            unsigned int maxHistoryLength_;
139            unsigned int historyPosition_;
140            unsigned int historyOffset_;
141            bool bAddOutputLevel_;
142    };
143}
144
145#endif /* _Shell_H__ */
Note: See TracBrowser for help on using the repository browser.