MyGUI 3.0.1

MyGUI_Gui.h

Go to the documentation of this file.
00001 
00007 /*
00008     This file is part of MyGUI.
00009 
00010     MyGUI is free software: you can redistribute it and/or modify
00011     it under the terms of the GNU Lesser General Public License as published by
00012     the Free Software Foundation, either version 3 of the License, or
00013     (at your option) any later version.
00014 
00015     MyGUI is distributed in the hope that it will be useful,
00016     but WITHOUT ANY WARRANTY; without even the implied warranty of
00017     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00018     GNU Lesser General Public License for more details.
00019 
00020     You should have received a copy of the GNU Lesser General Public License
00021     along with MyGUI.  If not, see <http://www.gnu.org/licenses/>.
00022 */
00023 #ifndef __MYGUI_GUI_H__
00024 #define __MYGUI_GUI_H__
00025 
00026 #include "MyGUI_Prerequest.h"
00027 #include "MyGUI_Types.h"
00028 #include "MyGUI_Instance.h"
00029 #include "MyGUI_XmlDocument.h"
00030 #include "MyGUI_IWidgetCreator.h"
00031 #include "MyGUI_IUnlinkWidget.h"
00032 #include "MyGUI_Widget.h"
00033 
00034 namespace MyGUI
00035 {
00036 
00037     typedef delegates::CMultiDelegate1<float> FrameEventDelegate;
00038 
00039     class MYGUI_EXPORT Gui : public IWidgetCreator, public IUnlinkWidget
00040     {
00041         friend class WidgetManager;
00042         MYGUI_INSTANCE_HEADER( Gui )
00043 
00044     public:
00051         void initialise(const std::string& _core = "core.xml", const std::string& _logFileName = MYGUI_LOG_FILENAME);
00052 
00054         void shutdown();
00055 
00056         // methods for creating widgets
00066         Widget* createWidgetT(const std::string& _type, const std::string& _skin, const IntCoord& _coord, Align _align, const std::string& _layer, const std::string& _name = "")
00067         {
00068             return baseCreateWidget(WidgetStyle::Overlapped, _type, _skin, _coord, _align, _layer, _name);
00069         }
00071         Widget* createWidgetT(const std::string& _type, const std::string& _skin, int _left, int _top, int _width, int _height, Align _align, const std::string& _layer, const std::string& _name = "")
00072         {
00073             return createWidgetT(_type, _skin, IntCoord(_left, _top, _width, _height), _align, _layer, _name);
00074         }
00076         Widget* createWidgetRealT(const std::string& _type, const std::string& _skin, const FloatCoord& _coord, Align _align, const std::string& _layer, const std::string& _name = "")
00077         {
00078             return createWidgetT(_type, _skin, IntCoord((int)(_coord.left*mViewSize.width), (int)(_coord.top*mViewSize.height), (int)(_coord.width*mViewSize.width), (int)(_coord.height*mViewSize.height)), _align, _layer, _name);
00079         }
00081         Widget* createWidgetRealT(const std::string& _type, const std::string& _skin, float _left, float _top, float _width, float _height, Align _align, const std::string& _layer, const std::string& _name = "")
00082         {
00083             return createWidgetT(_type, _skin, IntCoord((int)(_left*mViewSize.width), (int)(_top*mViewSize.height), (int)(_width*mViewSize.width), (int)(_height*mViewSize.height)), _align, _layer, _name);
00084         }
00085 
00086         // templates for creating widgets by type
00088         template <typename T>
00089         T* createWidget(const std::string& _skin, const IntCoord& _coord, Align _align, const std::string& _layer, const std::string& _name = "")
00090         {
00091             return static_cast<T*>(createWidgetT(T::getClassTypeName(), _skin, _coord, _align, _layer, _name));
00092         }
00094         template <typename T>
00095         T* createWidget(const std::string& _skin, int _left, int _top, int _width, int _height, Align _align, const std::string& _layer, const std::string& _name = "")
00096         {
00097             return static_cast<T*>(createWidgetT(T::getClassTypeName(), _skin, IntCoord(_left, _top, _width, _height), _align, _layer, _name));
00098         }
00100         template <typename T>
00101         T* createWidgetReal(const std::string& _skin, const FloatCoord& _coord, Align _align, const std::string& _layer, const std::string& _name = "")
00102         {
00103             return static_cast<T*>(createWidgetRealT(T::getClassTypeName(), _skin, _coord, _align, _layer, _name));
00104         }
00106         template <typename T>
00107         T* createWidgetReal(const std::string& _skin, float _left, float _top, float _width, float _height, Align _align, const std::string& _layer, const std::string& _name = "")
00108         {
00109             return static_cast<T*>(createWidgetRealT(T::getClassTypeName(), _skin, _left, _top, _width, _height, _align, _layer, _name));
00110         }
00111 
00113         const IntSize& getViewSize() const { return mViewSize; }
00114 
00115         int getViewWidth() { return mViewSize.width; }
00116         int getViewHeight() { return mViewSize.height; }
00117 
00118         // mirror of InputManager methods
00122         bool injectMouseMove(int _absx, int _absy, int _absz);
00126         bool injectMousePress(int _absx, int _absy, MouseButton _id);
00130         bool injectMouseRelease(int _absx, int _absy, MouseButton _id);
00131 
00135         bool injectKeyPress(KeyCode _key, Char _text = 0);
00139         bool injectKeyRelease(KeyCode _key);
00140 
00142         void destroyWidget(Widget* _widget);
00143 
00145         void destroyWidgets(VectorWidgetPtr& _widgets);
00146 
00148         void destroyWidgets(EnumeratorWidgetPtr& _widgets);
00149 
00153         Widget* findWidgetT(const std::string& _name, bool _throw = true);
00154 
00158         Widget* findWidgetT(const std::string& _name, const std::string& _prefix, bool _throw = true)
00159         {
00160             return findWidgetT(_prefix + _name, _throw);
00161         }
00162 
00163         // mirror WidgetManager
00167         template <typename T>
00168         T* findWidget(const std::string& _name, bool _throw = true)
00169         {
00170             Widget* widget = findWidgetT(_name, _throw);
00171             if (nullptr == widget) return nullptr;
00172             return widget->castType<T>(_throw);
00173         }
00174 
00178         template <typename T>
00179         T* findWidget(const std::string& _name, const std::string& _prefix, bool _throw = true)
00180         {
00181             return findWidget<T>(_prefix + _name, _throw);
00182         }
00183 
00184 
00186         void setVisiblePointer(bool _visible);
00188         bool isVisiblePointer();
00189 
00190 
00191         // mirror ResourceManager
00193         bool load(const std::string& _file);
00194 
00195         void resizeWindow(const IntSize& _size);
00196 
00198         void destroyChildWidget(Widget* _widget) { _destroyChildWidget(_widget); }
00199 
00201         void destroyAllChildWidget() { _destroyAllChildWidget(); }
00202 
00204         //static const std::string& getResourceGroup();
00205 
00207         EnumeratorWidgetPtr getEnumerator() { return EnumeratorWidgetPtr(mWidgetChild); }
00208 
00209     /*internal:*/
00210 
00214         void _injectFrameEntered(float _time);
00215 
00216     /*event:*/
00221         FrameEventDelegate eventFrameStart;
00222 
00223     /*obsolete:*/
00224 #ifndef MYGUI_DONT_USE_OBSOLETE
00225 
00226         MYGUI_OBSOLETE("use : void Gui::destroyWidgets(VectorWidgetPtr &_widgets)")
00227         void destroyWidgetsVector(VectorWidgetPtr& _widgets) { destroyWidgets(_widgets); }
00228 
00229         MYGUI_OBSOLETE("use : void Gui::setVisiblePointer(bool _value)")
00230         void hidePointer() { setVisiblePointer(false); }
00231         MYGUI_OBSOLETE("use : void Gui::setVisiblePointer(bool _value)")
00232         void showPointer() { setVisiblePointer(true); }
00233         MYGUI_OBSOLETE("use : bool Gui::isVisiblePointer()")
00234         bool isShowPointer() { return isVisiblePointer(); }
00235         MYGUI_OBSOLETE("called be renderer, do not call it manually")
00236         void injectFrameEntered(float _time) { }
00237 
00238 #endif // MYGUI_DONT_USE_OBSOLETE
00239 
00240     private:
00241         // создает виджет
00242         virtual Widget* baseCreateWidget(WidgetStyle _style, const std::string& _type, const std::string& _skin, const IntCoord& _coord, Align _align, const std::string& _layer, const std::string& _name);
00243 
00244         // удяляет неудачника
00245         void _destroyChildWidget(Widget* _widget);
00246 
00247         // удаляет всех детей
00248         void _destroyAllChildWidget();
00249 
00250         virtual void _unlinkWidget(Widget* _widget);
00251 
00252         // добавляет в список виджет
00253         virtual void _linkChildWidget(Widget* _widget);
00254 
00255         // удаляет из списка
00256         virtual void _unlinkChildWidget(Widget* _widget);
00257 
00258 
00259     private:
00260         // вектор всех детей виджетов
00261         VectorWidgetPtr mWidgetChild;
00262 
00263         // размеры экрана
00264         IntSize mViewSize;
00265 
00266         // синглтоны гуя
00267         InputManager * mInputManager;
00268         SubWidgetManager * mSubWidgetManager;
00269         LayerManager* mLayerManager;
00270         SkinManager* mSkinManager;
00271         WidgetManager* mWidgetManager;
00272         FontManager* mFontManager;
00273         ControllerManager* mControllerManager;
00274         PointerManager* mPointerManager;
00275         ClipboardManager* mClipboardManager;
00276         LayoutManager* mLayoutManager;
00277         DynLibManager* mDynLibManager;
00278         PluginManager* mPluginManager;
00279         LanguageManager* mLanguageManager;
00280         ResourceManager* mResourceManager;
00281         FactoryManager* mFactoryManager;
00282 
00283     };
00284 
00285 } // namespace MyGUI
00286 
00287 #endif // __MYGUI_GUI_H__
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines