Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/presentationHS15/src/libraries/core/GUIManager.h @ 11046

Last change on this file since 11046 was 11046, checked in by landauf, 8 years ago

added argument completion function for active gui sheets.
TODO

a) there should be a better way to read back values from lua (i.e. by using LuaState instead of plain lua.h functions)
b) it shouldn't be necessary to call lua anyway to get the active gui sheets. the GUIManager should always know this.

  • Property svn:eol-style set to native
File size: 9.5 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
[11046]109        std::vector<std::string> getLoadedGUIs();
110
[6746]111        void loadGUI(const std::string& name);
[7403]112        static void showGUI(const std::string& name, bool bHidePrevious = false, bool bNoInput = false);
113        void showGUIExtra(const std::string& name, const std::string& ptr, bool bHidePrevious = false, bool bNoInput = false);
[6417]114        static void hideGUI(const std::string& name);
[8079]115        static void toggleGUI(const std::string& name, bool bHidePrevious = false, bool bNoInput = false);
116        void toggleGUIHelper(const std::string& name, bool bHidePrevious, bool bNoInput, bool show); // tolua_export
[6417]117        void keyESC();
[6746]118        void setBackgroundImage(const std::string& imageSet, const std::string imageName); // tolua_export
119        void setBackgroundImage(const std::string& image);
[1638]120
[8862]121        static bool preloadMenuSheets() { return GUIManager::getInstance().bPreloadMenuSheets_; } // tolua_export
[8729]122        static bool inDevMode(void); // tolua_export
[8079]123
[6746]124        //! Creates a new InputState to be used with a GUI Sheet
[8729]125        const std::string& createInputState(const std::string& name, tribool showCursor = tribool(true), tribool useKeyboard = tribool(true), bool bBlockJoyStick = false); // tolua_export
[7163]126        LuaState* getLuaState(void)
[8351]127            { return this->luaState_; }
[6746]128
129        //! Returns the root window for all menu sheets
130        CEGUI::Window* getMenuRootWindow() { return this->menuRootWindow_; } // tolua_export
131        //! Returns the root window for all HUD sheets
132        CEGUI::Window* getHUDRootWindow() { return this->hudRootWindow_; } // tolua_export
133
[2896]134        void setCamera(Ogre::Camera* camera);
[5929]135        Ogre::Camera* getCamera() { return this->camera_; }
[2896]136
[5693]137        inline void setPlayer(const std::string& guiname, PlayerInfo* player)
138            { this->players_[guiname] = player; }
[7163]139        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]140
[6417]141        // TODO: Temporary hack because the tolua exported CEGUI method does not seem to work
[8706]142        static void subscribeEventHelper(CEGUI::Window* window, const std::string& event, const std::string& function); // tolua_export
143        static void setTooltipTextHelper(CEGUI::ListboxItem* item, const std::string& toooltip); // tolua_export
144        static void setItemTooltipsEnabledHelper(CEGUI::Listbox* listbox, bool enabled); // tolua_export
145        static void addFontHelper(const std::string& name, int size, const std::string& fontName); // tolua_export
[6417]146
[6746]147        static GUIManager& getInstance() { return Singleton<GUIManager>::getInstance(); } // tolua_export
148
[8706]149        /**
150        @brief Check whether CEGUI is version < 0.7.
151        @return Returns true if the CEGUI version is < 0.7. False otherwise.
152        */
153        inline bool usingOldCEGUI(void) { return this->oldCEGUI_; } // tolua_export
154
[1638]155    private:
[3339]156        GUIManager(const GUIManager& instance); //!< private and undefined copy c'tor (this is a singleton class)
[8351]157
[7163]158        void executeCode(const std::string& str);
[1638]159
[9675]160        template <typename FunctionType, typename ObjectType>
161        bool protectedCall(FunctionType function, ObjectType object);
162
[6746]163        template <typename FunctionType>
[9675]164        bool protectedCeguiSystemCall(FunctionType function);
[6746]165
[9675]166#if CEGUI_VERSION >= 0x000800
167        template <typename FunctionType>
168        bool protectedCeguiContextCall(FunctionType function);
169#endif
170
[8858]171        void changedCeguiOutputLevel();
172
[2896]173        // keyHandler functions
[7163]174        void buttonPressed (const KeyEvent& evt);
175        void buttonReleased(const KeyEvent& evt);
[1638]176
[2896]177        // mouseHandler functions
[3327]178        void buttonPressed (MouseButtonCode::ByEnum id);
179        void buttonReleased(MouseButtonCode::ByEnum id);
180        void mouseMoved    (IntVector2 abs, IntVector2 rel, IntVector2 clippingSize);
181        void mouseScrolled (int abs, int rel);
[7874]182        void mouseLeft     ();
[6749]183
[7873]184        // window event handler
185        virtual void windowResized(unsigned int newWidth, unsigned int newHeight);
[7874]186        virtual void windowFocusChanged(bool bFocus);
[7873]187
[8351]188#ifdef ORXONOX_OLD_CEGUI
[8858]189        CEGUI::OgreCEGUIRenderer*            guiRenderer_;          //!< CEGUI's interface to the Ogre Engine
190        CEGUI::ResourceProvider*             resourceProvider_;     //!< CEGUI's resource provider
[8351]191#else
[8858]192        CEGUI::OgreRenderer*                 guiRenderer_;          //!< CEGUI's interface to the Ogre Engine
193        CEGUI::OgreResourceProvider*         resourceProvider_;     //!< CEGUI's resource provider
194        Ogre::RenderQueueListener*           rqListener_;           //!< RQ listener so we can draw UNDER Ogre overlays
[8351]195        CEGUI::OgreImageCodec*               imageCodec_;
196#endif
[8858]197        LuaState*                            luaState_;             //!< LuaState, access point to the Lua engine
198        CEGUI::LuaScriptModule*              scriptModule_;         //!< CEGUI's script module to use Lua
199        CEGUI::System*                       guiSystem_;            //!< CEGUI's main system
200        shared_ptr<ResourceInfo>             rootFileInfo_;         //!< Resource information about the root script
201        CEGUI::Logger*                       ceguiLogger_;          //!< CEGUI's logger to be able to log CEGUI errors in our log
202        int                                  outputLevelCeguiLog_;  //!< CEGUI's log level
203        CEGUI::Window*                       rootWindow_;           //!< Root node for all windows
204        CEGUI::Window*                       hudRootWindow_;        //!< Root node for the HUD sheets
205        CEGUI::Window*                       menuRootWindow_;       //!< Root node for the menu sheets (used by Lua)
206        std::map<std::string, PlayerInfo*>   players_;              //!< Stores the player (owner) for each GUI
207        Ogre::Camera*                        camera_;               //!< Camera used to render the scene with the GUI
[1638]208
[8423]209        /// Helper object that executes the surrogate destructor destroy()
210        DestructionHelper<GUIManager>        destructionHelper_;
211
[8858]212        static GUIManager*                   singletonPtr_s;        //!< Singleton reference to GUIManager
[1638]213
[7801]214        // The used CEGUI scheme.
215        static const std::string defaultScheme_;
216        std::string guiScheme_;
[8706]217        bool oldCEGUI_;
[8858]218
[8862]219        int numScrollLines_;        ///< How many lines to scroll in a list if the scroll wheel is used
220        bool bPreloadMenuSheets_;   ///< If true, menu sheets are pre-loaded during startup
[8530]221
[6417]222    }; // tolua_export
223} // tolua_export
[1638]224
225#endif /* _GUIManager_H__ */
Note: See TracBrowser for help on using the repository browser.