Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/cpp11_v2/src/libraries/core/GUIManager.h @ 10981

Last change on this file since 10981 was 10845, checked in by landauf, 10 years ago

always use 'virtual' in the declaration of virtual functions even if they are inherited

  • Property svn:eol-style set to native
File size: 9.5 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 *      Reto Grieder
24 *      Benjamin Knecht
25 *   Co-authors:
26 *      ...
27 *
28 */
29
30/**
31    @file
32    @ingroup Graphics
33*/
34
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
63namespace 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
81    /**
82    @class GUIManager
83    @brief
84        Provides a simple interface to CEGUI with tolua methods and console commands. It also acts as a key and mouse handler.
85
86        The GUIManager is a singleton and can be called anywhere when access on the GUI is needed.
87
88        Since the GUI needs user input, the GUIManager implements the functions needed to act as a key and/or mouse handler.
89        Those input events are then injected into CEGUI in Lua.
90    */
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
98        //! Leave empty and use cleanup() instead
99        ~GUIManager() {}
100        /// Destructor that also executes when object fails to construct
101        void destroy();
102
103        void setConfigValues(void);
104        void changedGUIScheme(void);
105
106        void preUpdate(const Clock& time);
107
108        void loadGUI(const std::string& name);
109        static void showGUI(const std::string& name, bool bHidePrevious = false, bool bNoInput = false);
110        void showGUIExtra(const std::string& name, const std::string& ptr, bool bHidePrevious = false, bool bNoInput = false);
111        static void hideGUI(const std::string& name);
112        static void toggleGUI(const std::string& name, bool bHidePrevious = false, bool bNoInput = false);
113        void toggleGUIHelper(const std::string& name, bool bHidePrevious, bool bNoInput, bool show); // tolua_export
114        void keyESC();
115        void setBackgroundImage(const std::string& imageSet, const std::string imageName); // tolua_export
116        void setBackgroundImage(const std::string& image);
117
118        static bool preloadMenuSheets() { return GUIManager::getInstance().bPreloadMenuSheets_; } // tolua_export
119        static bool inDevMode(void); // tolua_export
120
121        //! Creates a new InputState to be used with a GUI Sheet
122        const std::string& createInputState(const std::string& name, tribool showCursor = tribool(true), tribool useKeyboard = tribool(true), bool bBlockJoyStick = false); // tolua_export
123        LuaState* getLuaState(void)
124            { return this->luaState_; }
125
126        //! Returns the root window for all menu sheets
127        CEGUI::Window* getMenuRootWindow() { return this->menuRootWindow_; } // tolua_export
128        //! Returns the root window for all HUD sheets
129        CEGUI::Window* getHUDRootWindow() { return this->hudRootWindow_; } // tolua_export
130
131        void setCamera(Ogre::Camera* camera);
132        Ogre::Camera* getCamera() { return this->camera_; }
133
134        inline void setPlayer(const std::string& guiname, PlayerInfo* player)
135            { this->players_[guiname] = player; }
136        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
137
138        // TODO: Temporary hack because the tolua exported CEGUI method does not seem to work
139        static void subscribeEventHelper(CEGUI::Window* window, const std::string& event, const std::string& function); // tolua_export
140        static void setTooltipTextHelper(CEGUI::ListboxItem* item, const std::string& toooltip); // tolua_export
141        static void setItemTooltipsEnabledHelper(CEGUI::Listbox* listbox, bool enabled); // tolua_export
142        static void addFontHelper(const std::string& name, int size, const std::string& fontName); // tolua_export
143
144        static GUIManager& getInstance() { return Singleton<GUIManager>::getInstance(); } // tolua_export
145
146        /**
147        @brief Check whether CEGUI is version < 0.7.
148        @return Returns true if the CEGUI version is < 0.7. False otherwise.
149        */
150        inline bool usingOldCEGUI(void) { return this->oldCEGUI_; } // tolua_export
151
152    private:
153        GUIManager(const GUIManager& instance); //!< private and undefined copy c'tor (this is a singleton class)
154
155        void executeCode(const std::string& str);
156
157        template <typename FunctionType, typename ObjectType>
158        bool protectedCall(FunctionType function, ObjectType object);
159
160        template <typename FunctionType>
161        bool protectedCeguiSystemCall(FunctionType function);
162
163#if CEGUI_VERSION >= 0x000800
164        template <typename FunctionType>
165        bool protectedCeguiContextCall(FunctionType function);
166#endif
167
168        void changedCeguiOutputLevel();
169
170        // keyHandler functions
171        virtual void buttonPressed (const KeyEvent& evt) override;
172        virtual void buttonReleased(const KeyEvent& evt) override;
173
174        // mouseHandler functions
175        virtual void buttonPressed (MouseButtonCode::ByEnum id) override;
176        virtual void buttonReleased(MouseButtonCode::ByEnum id) override;
177        virtual void mouseMoved    (IntVector2 abs, IntVector2 rel, IntVector2 clippingSize) override;
178        virtual void mouseScrolled (int abs, int rel) override;
179        void mouseLeft     ();
180
181        // window event handler
182        virtual void windowResized(unsigned int newWidth, unsigned int newHeight) override;
183        virtual void windowFocusChanged(bool bFocus) override;
184
185#ifdef ORXONOX_OLD_CEGUI
186        CEGUI::OgreCEGUIRenderer*            guiRenderer_;          //!< CEGUI's interface to the Ogre Engine
187        CEGUI::ResourceProvider*             resourceProvider_;     //!< CEGUI's resource provider
188#else
189        CEGUI::OgreRenderer*                 guiRenderer_;          //!< CEGUI's interface to the Ogre Engine
190        CEGUI::OgreResourceProvider*         resourceProvider_;     //!< CEGUI's resource provider
191        Ogre::RenderQueueListener*           rqListener_;           //!< RQ listener so we can draw UNDER Ogre overlays
192        CEGUI::OgreImageCodec*               imageCodec_;
193#endif
194        LuaState*                            luaState_;             //!< LuaState, access point to the Lua engine
195        CEGUI::LuaScriptModule*              scriptModule_;         //!< CEGUI's script module to use Lua
196        CEGUI::System*                       guiSystem_;            //!< CEGUI's main system
197        std::shared_ptr<ResourceInfo>        rootFileInfo_;         //!< Resource information about the root script
198        CEGUI::Logger*                       ceguiLogger_;          //!< CEGUI's logger to be able to log CEGUI errors in our log
199        int                                  outputLevelCeguiLog_;  //!< CEGUI's log level
200        CEGUI::Window*                       rootWindow_;           //!< Root node for all windows
201        CEGUI::Window*                       hudRootWindow_;        //!< Root node for the HUD sheets
202        CEGUI::Window*                       menuRootWindow_;       //!< Root node for the menu sheets (used by Lua)
203        std::map<std::string, PlayerInfo*>   players_;              //!< Stores the player (owner) for each GUI
204        Ogre::Camera*                        camera_;               //!< Camera used to render the scene with the GUI
205
206        /// Helper object that executes the surrogate destructor destroy()
207        DestructionHelper<GUIManager>        destructionHelper_;
208
209        static GUIManager*                   singletonPtr_s;        //!< Singleton reference to GUIManager
210
211        // The used CEGUI scheme.
212        static const std::string defaultScheme_;
213        std::string guiScheme_;
214        bool oldCEGUI_;
215
216        int numScrollLines_;        ///< How many lines to scroll in a list if the scroll wheel is used
217        bool bPreloadMenuSheets_;   ///< If true, menu sheets are pre-loaded during startup
218
219    }; // tolua_export
220} // tolua_export
221
222#endif /* _GUIManager_H__ */
Note: See TracBrowser for help on using the repository browser.