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
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        std::vector<std::string> getLoadedGUIs();
110
111        void loadGUI(const std::string& name);
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);
114        static void hideGUI(const std::string& name);
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
117        void keyESC();
118        void setBackgroundImage(const std::string& imageSet, const std::string imageName); // tolua_export
119        void setBackgroundImage(const std::string& image);
120
121        static bool preloadMenuSheets() { return GUIManager::getInstance().bPreloadMenuSheets_; } // tolua_export
122        static bool inDevMode(void); // tolua_export
123
124        //! Creates a new InputState to be used with a GUI Sheet
125        const std::string& createInputState(const std::string& name, tribool showCursor = tribool(true), tribool useKeyboard = tribool(true), bool bBlockJoyStick = false); // tolua_export
126        LuaState* getLuaState(void)
127            { return this->luaState_; }
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
134        void setCamera(Ogre::Camera* camera);
135        Ogre::Camera* getCamera() { return this->camera_; }
136
137        inline void setPlayer(const std::string& guiname, PlayerInfo* player)
138            { this->players_[guiname] = player; }
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
140
141        // TODO: Temporary hack because the tolua exported CEGUI method does not seem to work
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
146
147        static GUIManager& getInstance() { return Singleton<GUIManager>::getInstance(); } // tolua_export
148
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
155    private:
156        GUIManager(const GUIManager& instance); //!< private and undefined copy c'tor (this is a singleton class)
157
158        void executeCode(const std::string& str);
159
160        template <typename FunctionType, typename ObjectType>
161        bool protectedCall(FunctionType function, ObjectType object);
162
163        template <typename FunctionType>
164        bool protectedCeguiSystemCall(FunctionType function);
165
166#if CEGUI_VERSION >= 0x000800
167        template <typename FunctionType>
168        bool protectedCeguiContextCall(FunctionType function);
169#endif
170
171        void changedCeguiOutputLevel();
172
173        // keyHandler functions
174        void buttonPressed (const KeyEvent& evt);
175        void buttonReleased(const KeyEvent& evt);
176
177        // mouseHandler functions
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);
182        void mouseLeft     ();
183
184        // window event handler
185        virtual void windowResized(unsigned int newWidth, unsigned int newHeight);
186        virtual void windowFocusChanged(bool bFocus);
187
188#ifdef ORXONOX_OLD_CEGUI
189        CEGUI::OgreCEGUIRenderer*            guiRenderer_;          //!< CEGUI's interface to the Ogre Engine
190        CEGUI::ResourceProvider*             resourceProvider_;     //!< CEGUI's resource provider
191#else
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
195        CEGUI::OgreImageCodec*               imageCodec_;
196#endif
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
208
209        /// Helper object that executes the surrogate destructor destroy()
210        DestructionHelper<GUIManager>        destructionHelper_;
211
212        static GUIManager*                   singletonPtr_s;        //!< Singleton reference to GUIManager
213
214        // The used CEGUI scheme.
215        static const std::string defaultScheme_;
216        std::string guiScheme_;
217        bool oldCEGUI_;
218
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
221
222    }; // tolua_export
223} // tolua_export
224
225#endif /* _GUIManager_H__ */
Note: See TracBrowser for help on using the repository browser.