Orxonox  0.0.5 Codename: Arcturus
GUIManager.h
Go to the documentation of this file.
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  * Reto Grieder
24  * Benjamin Knecht
25  * Co-authors:
26  * ...
27  *
28  */
29 
35 #ifndef _GUIManager_H__
36 #define _GUIManager_H__
37 
38 #include "CorePrereqs.h"
39 
40 #include <map>
41 #include <string>
42 #include <memory>
43 
44 #if CEGUI_VERSION >= 0x000800
45 # include <CEGUI/ForwardRefs.h>
46 # include <CEGUI/Version.h>
47 #else
48 # include <CEGUIForwardRefs.h>
49 # include <CEGUIVersion.h>
50 #endif
51 
52 #include "util/DestructionHelper.h"
53 #include "util/OgreForwardRefs.h"
54 #include "util/tribool.h"
55 #include "util/Singleton.h"
56 #include "input/InputHandler.h"
57 #include "WindowEventListener.h"
58 
59 #if CEGUI_VERSION_MAJOR < 1 && CEGUI_VERSION_MINOR < 7
60 # define ORXONOX_OLD_CEGUI
61 #endif
62 
63 namespace orxonox // tolua_export
64 { // tolua_export
65  class PlayerInfo; // Forward declaration
66 
67  // Acquaint Tolua with tribool
68  /* tolua_begin
69  struct dontcare_keyword_t
70  {
71  dontcare_keyword_t();
72  };
73  class tribool
74  {
75  tribool(bool value);
76  tribool(dontcare_keyword_t);
77  bool operator==(tribool);
78  };
79  tolua_end */
80 
91  class _CoreExport GUIManager // tolua_export
92  : public Singleton<GUIManager>, public InputHandler, public WindowEventListener
93  { // tolua_export
94  friend class Singleton<GUIManager>;
95  public:
96  GUIManager(const std::pair<int, int>& mousePosition);
97 
99  ~GUIManager() = default;
101  void destroy();
102 
103  void setConfigValues(void);
104  void changedGUIScheme(void);
105 
106  void preUpdate(const Clock& time);
107 
108  std::vector<std::string> getLoadedGUIs();
109 
110  void loadGUI(const std::string& name);
111  static void showGUI(const std::string& name, bool bHidePrevious = false, bool bNoInput = false);
112  void showGUIExtra(const std::string& name, const std::string& ptr, bool bHidePrevious = false, bool bNoInput = false);
113  static void hideGUI(const std::string& name);
114  static void toggleGUI(const std::string& name, bool bHidePrevious = false, bool bNoInput = false);
115  void toggleGUIHelper(const std::string& name, bool bHidePrevious, bool bNoInput, bool show); // tolua_export
116  void keyESC();
117  void setBackgroundImage(const std::string& imageSet, const std::string imageName); // tolua_export
118  void setBackgroundImage(const std::string& image);
119 
120  static bool preloadMenuSheets() { return GUIManager::getInstance().bPreloadMenuSheets_; } // tolua_export
121  static bool inDevMode(void); // tolua_export
122 
124  const std::string& createInputState(const std::string& name, tribool showCursor = tribool(true), tribool useKeyboard = tribool(true), bool bBlockJoyStick = false); // tolua_export
126  { return this->luaState_; }
127 
129  CEGUI::Window* getMenuRootWindow() { return this->menuRootWindow_; } // tolua_export
131  CEGUI::Window* getHUDRootWindow() { return this->hudRootWindow_; } // tolua_export
132 
133  void setCamera(Ogre::Camera* camera);
134  Ogre::Camera* getCamera() { return this->camera_; }
135 
136  inline void setPlayer(const std::string& guiname, PlayerInfo* player)
137  { this->players_[guiname] = player; }
138  inline orxonox::PlayerInfo* getPlayer(const std::string& guiname) const { std::map<std::string, PlayerInfo*>::const_iterator it = this->players_.find(guiname); return (it != this->players_.end()) ? it->second : nullptr; } // tolua_export
139 
140  // TODO: Temporary hack because the tolua exported CEGUI method does not seem to work
141  static void subscribeEventHelper(CEGUI::Window* window, const std::string& event, const std::string& function); // tolua_export
142  static void setTooltipTextHelper(CEGUI::ListboxItem* item, const std::string& toooltip); // tolua_export
143  static void setItemTooltipsEnabledHelper(CEGUI::Listbox* listbox, bool enabled); // tolua_export
144  static void addFontHelper(const std::string& name, int size, const std::string& fontName); // tolua_export
145  static float getFontTextExtent(const CEGUI::Font* font, const std::string& text, float x_scale = 1.0f); // tolua_export
146 
147  static GUIManager& getInstance() { return Singleton<GUIManager>::getInstance(); } // tolua_export
148 
153  inline bool usingOldCEGUI(void) { return this->oldCEGUI_; } // tolua_export
154 
155  private:
156  // non-copyable:
157  GUIManager(const GUIManager&) = delete;
158  GUIManager& operator=(const GUIManager&) = delete;
159 
160  void executeCode(const std::string& str);
161 
162  template <typename FunctionType, typename ObjectType>
163  bool protectedCall(FunctionType function, ObjectType object);
164 
165  template <typename FunctionType>
166  bool protectedCeguiSystemCall(FunctionType function);
167 
168 #if CEGUI_VERSION >= 0x000800
169  template <typename FunctionType>
170  bool protectedCeguiContextCall(FunctionType function);
171 #endif
172 
173  void changedCeguiOutputLevel();
174 
175  // keyHandler functions
176  virtual void buttonPressed (const KeyEvent& evt) override;
177  virtual void buttonReleased(const KeyEvent& evt) override;
178 
179  // mouseHandler functions
180  virtual void buttonPressed (MouseButtonCode::ByEnum id) override;
181  virtual void buttonReleased(MouseButtonCode::ByEnum id) override;
182  virtual void mouseMoved (IntVector2 abs, IntVector2 rel, IntVector2 clippingSize) override;
183  virtual void mouseScrolled (int abs, int rel) override;
184  void mouseLeft ();
185 
186  // window event handler
187  virtual void windowResized(unsigned int newWidth, unsigned int newHeight) override;
188  virtual void windowFocusChanged(bool bFocus) override;
189 
190 #ifdef ORXONOX_OLD_CEGUI
192  CEGUI::ResourceProvider* resourceProvider_;
193 #else
194  CEGUI::OgreRenderer* guiRenderer_;
195  CEGUI::OgreResourceProvider* resourceProvider_;
196  Ogre::RenderQueueListener* rqListener_;
197  CEGUI::OgreImageCodec* imageCodec_;
198 #endif
200  CEGUI::LuaScriptModule* scriptModule_;
201  CEGUI::System* guiSystem_;
202  std::shared_ptr<ResourceInfo> rootFileInfo_;
203  CEGUI::Logger* ceguiLogger_;
205  CEGUI::Window* rootWindow_;
206  CEGUI::Window* hudRootWindow_;
207  CEGUI::Window* menuRootWindow_;
208  std::map<std::string, PlayerInfo*> players_;
209  Ogre::Camera* camera_;
210 
213 
215 
216  // The used CEGUI scheme.
219  bool oldCEGUI_;
220 
223 
224  }; // tolua_export
225 } // tolua_export
226 
227 #endif /* _GUIManager_H__ */
CEGUI::Window * hudRootWindow_
Root node for the HUD sheets.
Definition: GUIManager.h:206
Base class for all input handlers like KeyBinder, InputBuffer, etc.
Definition: InputHandler.h:118
CEGUI::Window * menuRootWindow_
Root node for the menu sheets (used by Lua)
Definition: GUIManager.h:207
DestructionHelper< GUIManager > destructionHelper_
Helper object that executes the surrogate destructor destroy()
Definition: GUIManager.h:212
Provides a simple interface to CEGUI with tolua methods and console commands.
Definition: GUIManager.h:91
CEGUI::System * guiSystem_
CEGUI&#39;s main system.
Definition: GUIManager.h:201
Ogre::Camera * getCamera()
Definition: GUIManager.h:134
CEGUI::ResourceProvider * resourceProvider_
CEGUI&#39;s resource provider.
Definition: GUIManager.h:192
CEGUI::Window * rootWindow_
Root node for all windows.
Definition: GUIManager.h:205
int numScrollLines_
How many lines to scroll in a list if the scroll wheel is used.
Definition: GUIManager.h:221
LuaState * getLuaState(void)
Definition: GUIManager.h:125
Shared library macros, enums, constants and forward declarations for the core library ...
::std::string string
Definition: gtest-port.h:756
Structure to describe a single event.
Definition: ScriptController.h:42
LuaState * luaState_
LuaState, access point to the Lua engine.
Definition: GUIManager.h:199
bool usingOldCEGUI(void)
Check whether CEGUI is version < 0.7.
Definition: GUIManager.h:153
Interface for receiving window events like resize, moved and focusChanged.
Definition: WindowEventListener.h:43
Representation of an interface to lua.
Definition: LuaState.h:74
bool oldCEGUI_
Definition: GUIManager.h:219
The MetaPickup destroys all the PickupCarriers&#39; Pickupables.
std::map< std::string, PlayerInfo * > players_
Stores the player (owner) for each GUI.
Definition: GUIManager.h:208
Renderer class to interface with Ogre engine.
Definition: OgreCEGUIRenderer.h:104
bool bPreloadMenuSheets_
If true, menu sheets are pre-loaded during startup.
Definition: GUIManager.h:222
static const std::string defaultScheme_
Definition: GUIManager.h:217
CEGUI::LuaScriptModule * scriptModule_
CEGUI&#39;s script module to use Lua.
Definition: GUIManager.h:200
ByEnum
Mouse button codes as enumeration.
Definition: InputPrereqs.h:311
orxonox::PlayerInfo * getPlayer(const std::string &guiname) const
Definition: GUIManager.h:138
Base for singleton classes.
Definition: Singleton.h:114
Die Wagnis Klasse hat die folgenden Aufgaben:
Definition: ApplicationPaths.cc:66
#define _CoreExport
Definition: CorePrereqs.h:61
Utility class that helps to create a special kind of destructor that also executes if the destruction...
Definition: DestructionHelper.h:75
CEGUI::OgreCEGUIRenderer * guiRenderer_
CEGUI&#39;s interface to the Ogre Engine.
Definition: GUIManager.h:191
A 3-state boolean type.
Definition: tribool.h:38
Event argument for key events.
Definition: InputHandler.h:76
CEGUI::Logger * ceguiLogger_
CEGUI&#39;s logger to be able to log CEGUI errors in our log.
Definition: GUIManager.h:203
std::string guiScheme_
Definition: GUIManager.h:218
A Vector class containing two integers x and y.
Definition: InputHandler.h:37
std::shared_ptr< ResourceInfo > rootFileInfo_
Resource information about the root script.
Definition: GUIManager.h:202
void setPlayer(const std::string &guiname, PlayerInfo *player)
Definition: GUIManager.h:136
static GUIManager * singletonPtr_s
Singleton reference to GUIManager.
Definition: GUIManager.h:214
CEGUI::Window * getHUDRootWindow()
Returns the root window for all HUD sheets.
Definition: GUIManager.h:131
Definition of the Singleton template that is used as base class for classes that allow only one insta...
Simple real time clock based on Ogre::Timer.
Definition: Clock.h:57
Definition: PlayerInfo.h:39
int outputLevelCeguiLog_
CEGUI&#39;s log level.
Definition: GUIManager.h:204
static T & getInstance()
Returns a reference to the singleton instance.
Definition: Singleton.h:118
Ogre::Camera * camera_
Camera used to render the scene with the GUI.
Definition: GUIManager.h:209
CEGUI::Window * getMenuRootWindow()
Returns the root window for all menu sheets.
Definition: GUIManager.h:129
static bool preloadMenuSheets()
Definition: GUIManager.h:120
static GUIManager & getInstance()
Definition: GUIManager.h:147