Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/output/src/libraries/core/GUIManager.h @ 8807

Last change on this file since 8807 was 8798, checked in by landauf, 13 years ago

adjusted output levels for ogre and cegui messages
added config value for cegui logfile

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