Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/sfxThilo/src/libraries/core/GUIManager.h @ 10073

Last change on this file since 10073 was 9675, checked in by landauf, 11 years ago

merged branch 'libs' back to trunk. orxonox now compiles and runs with ogre 1.8 and it compiles (but doesn't run) with cegui 0.8

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