Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/trunk/src/libraries/core/GUIManager.h @ 10944

Last change on this file since 10944 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
RevLine 
[1638]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
[3196]24 *      Benjamin Knecht
[1638]25 *   Co-authors:
[3196]26 *      ...
[1638]27 *
28 */
29
[7401]30/**
31    @file
32    @ingroup Graphics
33*/
34
[1638]35#ifndef _GUIManager_H__
36#define _GUIManager_H__
37
[3346]38#include "CorePrereqs.h"
[3196]39
40#include <map>
41#include <string>
[9675]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
[5695]51#include <boost/shared_ptr.hpp>
[3196]52
[8423]53#include "util/DestructionHelper.h"
[3196]54#include "util/OgreForwardRefs.h"
[8729]55#include "util/tribool.h"
[3366]56#include "util/Singleton.h"
[3346]57#include "input/InputHandler.h"
[7873]58#include "WindowEventListener.h"
[1638]59
[8351]60#if CEGUI_VERSION_MAJOR < 1 && CEGUI_VERSION_MINOR < 7
61#  define ORXONOX_OLD_CEGUI
62#endif
63
[6417]64namespace orxonox // tolua_export
65{ // tolua_export
[5693]66    class PlayerInfo; // Forward declaration
67
[8729]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
[1638]82    /**
[2896]83    @class GUIManager
[1638]84    @brief
[2896]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.
[1638]91    */
[6417]92    class _CoreExport GUIManager // tolua_export
[7873]93        : public Singleton<GUIManager>, public InputHandler, public WindowEventListener
[6417]94    { // tolua_export
[3366]95        friend class Singleton<GUIManager>;
[1638]96    public:
[6746]97        GUIManager(const std::pair<int, int>& mousePosition);
[8423]98
[8351]99        //! Leave empty and use cleanup() instead
100        ~GUIManager() {}
[8423]101        /// Destructor that also executes when object fails to construct
102        void destroy();
[1646]103
[7801]104        void setConfigValues(void);
105        void changedGUIScheme(void);
106
[6417]107        void preUpdate(const Clock& time);
[1640]108
[6746]109        void loadGUI(const std::string& name);
[7403]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);
[6417]112        static void hideGUI(const std::string& name);
[8079]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
[6417]115        void keyESC();
[6746]116        void setBackgroundImage(const std::string& imageSet, const std::string imageName); // tolua_export
117        void setBackgroundImage(const std::string& image);
[1638]118
[8862]119        static bool preloadMenuSheets() { return GUIManager::getInstance().bPreloadMenuSheets_; } // tolua_export
[8729]120        static bool inDevMode(void); // tolua_export
[8079]121
[6746]122        //! Creates a new InputState to be used with a GUI Sheet
[8729]123        const std::string& createInputState(const std::string& name, tribool showCursor = tribool(true), tribool useKeyboard = tribool(true), bool bBlockJoyStick = false); // tolua_export
[7163]124        LuaState* getLuaState(void)
[8351]125            { return this->luaState_; }
[6746]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
[2896]132        void setCamera(Ogre::Camera* camera);
[5929]133        Ogre::Camera* getCamera() { return this->camera_; }
[2896]134
[5693]135        inline void setPlayer(const std::string& guiname, PlayerInfo* player)
136            { this->players_[guiname] = player; }
[7163]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
[5693]138
[6417]139        // TODO: Temporary hack because the tolua exported CEGUI method does not seem to work
[8706]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
[6417]144
[6746]145        static GUIManager& getInstance() { return Singleton<GUIManager>::getInstance(); } // tolua_export
146
[8706]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
[1638]153    private:
[3339]154        GUIManager(const GUIManager& instance); //!< private and undefined copy c'tor (this is a singleton class)
[8351]155
[7163]156        void executeCode(const std::string& str);
[1638]157
[9675]158        template <typename FunctionType, typename ObjectType>
159        bool protectedCall(FunctionType function, ObjectType object);
160
[6746]161        template <typename FunctionType>
[9675]162        bool protectedCeguiSystemCall(FunctionType function);
[6746]163
[9675]164#if CEGUI_VERSION >= 0x000800
165        template <typename FunctionType>
166        bool protectedCeguiContextCall(FunctionType function);
167#endif
168
[8858]169        void changedCeguiOutputLevel();
170
[2896]171        // keyHandler functions
[7163]172        void buttonPressed (const KeyEvent& evt);
173        void buttonReleased(const KeyEvent& evt);
[1638]174
[2896]175        // mouseHandler functions
[3327]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);
[7874]180        void mouseLeft     ();
[6749]181
[7873]182        // window event handler
183        virtual void windowResized(unsigned int newWidth, unsigned int newHeight);
[7874]184        virtual void windowFocusChanged(bool bFocus);
[7873]185
[8351]186#ifdef ORXONOX_OLD_CEGUI
[8858]187        CEGUI::OgreCEGUIRenderer*            guiRenderer_;          //!< CEGUI's interface to the Ogre Engine
188        CEGUI::ResourceProvider*             resourceProvider_;     //!< CEGUI's resource provider
[8351]189#else
[8858]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
[8351]193        CEGUI::OgreImageCodec*               imageCodec_;
194#endif
[8858]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
[1638]206
[8423]207        /// Helper object that executes the surrogate destructor destroy()
208        DestructionHelper<GUIManager>        destructionHelper_;
209
[8858]210        static GUIManager*                   singletonPtr_s;        //!< Singleton reference to GUIManager
[1638]211
[7801]212        // The used CEGUI scheme.
213        static const std::string defaultScheme_;
214        std::string guiScheme_;
[8706]215        bool oldCEGUI_;
[8858]216
[8862]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
[8530]219
[6417]220    }; // tolua_export
221} // tolua_export
[1638]222
223#endif /* _GUIManager_H__ */
Note: See TracBrowser for help on using the repository browser.