MyGUI
3.0.3
|
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_WIDGET_MANAGER_H__ 00024 #define __MYGUI_WIDGET_MANAGER_H__ 00025 00026 #include "MyGUI_Prerequest.h" 00027 #include "MyGUI_Instance.h" 00028 #include "MyGUI_IWidgetCreator.h" 00029 #include "MyGUI_IUnlinkWidget.h" 00030 #include "MyGUI_ICroppedRectangle.h" 00031 #include "MyGUI_Widget.h" 00032 #include <set> 00033 00034 namespace MyGUI 00035 { 00036 00037 //OBSOLETE 00038 typedef delegates::CDelegate3<Widget*, const std::string &, const std::string &> ParseDelegate; 00039 00040 class MYGUI_EXPORT WidgetManager 00041 { 00042 MYGUI_INSTANCE_HEADER( WidgetManager ) 00043 00044 public: 00045 //OBSOLETE 00046 typedef std::map<std::string, ParseDelegate> MapDelegate; 00047 //OBSOLETE 00048 typedef std::set<IWidgetFactory*> SetWidgetFactory; 00049 00050 public: 00051 void initialise(); 00052 void shutdown(); 00053 00054 Widget* createWidget(WidgetStyle _style, const std::string& _type, const std::string& _skin, const IntCoord& _coord, Align _align, Widget* _parent, ICroppedRectangle * _cropeedParent, IWidgetCreator * _creator, const std::string& _name); 00055 00057 void destroyWidget(Widget* _widget); 00059 void destroyWidgets(const VectorWidgetPtr &_widgets); 00061 void destroyWidgets(EnumeratorWidgetPtr _widgets); 00062 00064 void registerUnlinker(IUnlinkWidget * _unlink); 00066 void unregisterUnlinker(IUnlinkWidget * _unlink); 00068 void unlinkFromUnlinkers(Widget* _widget); 00069 00070 // добавляет виджет в список для анлинка 00071 void addWidgetToUnlink(Widget* _widget); 00072 00073 // проверяет, и если надо обнуляет виджет из списка анликнутых 00074 void removeWidgetFromUnlink(Widget*& _widget); 00075 00076 bool isFactoryExist(const std::string& _type); 00077 00078 /*internal:*/ 00079 void _oldParse(Widget* _widget, const std::string &_key, const std::string &_value); 00080 00081 /*obsolete:*/ 00082 #ifndef MYGUI_DONT_USE_OBSOLETE 00083 00084 MYGUI_OBSOLETE("use : void WidgetManager::destroyWidgets(VectorWidgetPtr &_widgets)") 00085 void destroyWidgetsVector(VectorWidgetPtr &_widgets) { destroyWidgets(_widgets); } 00086 MYGUI_OBSOLETE("") 00087 Widget* findWidgetT(const std::string& _name, bool _throw = true); 00088 MYGUI_OBSOLETE("") 00089 Widget* findWidgetT(const std::string& _name, const std::string& _prefix, bool _throw = true); 00090 MYGUI_OBSOLETE("") 00091 void registerFactory(IWidgetFactory * _factory); 00092 MYGUI_OBSOLETE("") 00093 void unregisterFactory(IWidgetFactory * _factory); 00094 MYGUI_OBSOLETE("use : void Widget::setProperty(const std::string &_key, const std::string &_value)") 00095 void parse(Widget* _widget, const std::string &_key, const std::string &_value); 00096 MYGUI_OBSOLETE("") 00097 ParseDelegate& registerDelegate(const std::string& _key); 00098 MYGUI_OBSOLETE("") 00099 void unregisterDelegate(const std::string& _key); 00100 00101 template <typename T> 00102 MYGUI_OBSOLETE("") 00103 T* findWidget(const std::string& _name, bool _throw = true) 00104 { 00105 Widget* widget = findWidgetT(_name, _throw); 00106 if (nullptr == widget) return nullptr; 00107 return widget->castType<T>(_throw); 00108 } 00109 00110 template <typename T> 00111 MYGUI_OBSOLETE("") 00112 T* findWidget(const std::string& _name, const std::string& _prefix, bool _throw = true) 00113 { 00114 return findWidget<T>(_prefix + _name, _throw); 00115 } 00116 00117 #endif // MYGUI_DONT_USE_OBSOLETE 00118 00119 protected: 00120 SetWidgetFactory mFactoryList; 00121 //MapWidgetPtr mWidgets; 00122 MapDelegate mDelegates; 00123 00124 // список менеджеров для отписки при удалении 00125 VectorIUnlinkWidget mVectorIUnlinkWidget; 00126 00127 // список виджетов для отписки 00128 VectorWidgetPtr mUnlinkWidgets; 00129 }; 00130 00131 } // namespace MyGUI 00132 00133 #endif // __MYGUI_WIDGET_MANAGER_H__