MyGUI  3.2.2
MyGUI_WidgetManager.cpp
Go to the documentation of this file.
1 /*
2  * This source file is part of MyGUI. For the latest info, see http://mygui.info/
3  * Distributed under the MIT License
4  * (See accompanying file COPYING.MIT or copy at http://opensource.org/licenses/MIT)
5  */
6 
7 #include "MyGUI_Precompiled.h"
8 #include "MyGUI_WidgetManager.h"
9 #include "MyGUI_Gui.h"
10 #include "MyGUI_Widget.h"
11 #include "MyGUI_FactoryManager.h"
12 
13 #include "MyGUI_Button.h"
14 #include "MyGUI_Canvas.h"
15 #include "MyGUI_ComboBox.h"
16 #include "MyGUI_DDContainer.h"
17 #include "MyGUI_EditBox.h"
18 #include "MyGUI_ItemBox.h"
19 #include "MyGUI_ListBox.h"
20 #include "MyGUI_MenuBar.h"
21 #include "MyGUI_MenuControl.h"
22 #include "MyGUI_MenuItem.h"
23 #include "MyGUI_MultiListBox.h"
24 #include "MyGUI_MultiListItem.h"
25 #include "MyGUI_PopupMenu.h"
26 #include "MyGUI_ProgressBar.h"
27 #include "MyGUI_ScrollBar.h"
28 #include "MyGUI_ScrollView.h"
29 #include "MyGUI_ImageBox.h"
30 #include "MyGUI_TextBox.h"
31 #include "MyGUI_TabControl.h"
32 #include "MyGUI_TabItem.h"
33 #include "MyGUI_Widget.h"
34 #include "MyGUI_Window.h"
35 
37 
38 namespace MyGUI
39 {
40 
41  template <> WidgetManager* Singleton<WidgetManager>::msInstance = nullptr;
42  template <> const char* Singleton<WidgetManager>::mClassTypeName = "WidgetManager";
43 
45  mIsInitialise(false),
46  mCategoryName("Widget")
47  {
48  }
49 
51  {
52  MYGUI_ASSERT(!mIsInitialise, getClassTypeName() << " initialised twice");
53  MYGUI_LOG(Info, "* Initialise: " << getClassTypeName());
54 
56 
57  factory.registerFactory<Button>(mCategoryName);
58  factory.registerFactory<Canvas>(mCategoryName);
59  factory.registerFactory<ComboBox>(mCategoryName);
60  factory.registerFactory<DDContainer>(mCategoryName);
61  factory.registerFactory<EditBox>(mCategoryName);
62  factory.registerFactory<ItemBox>(mCategoryName);
63  factory.registerFactory<ListBox>(mCategoryName);
64  factory.registerFactory<MenuBar>(mCategoryName);
65  factory.registerFactory<MenuControl>(mCategoryName);
66  factory.registerFactory<MenuItem>(mCategoryName);
67  factory.registerFactory<MultiListBox>(mCategoryName);
68  factory.registerFactory<MultiListItem>(mCategoryName);
69  factory.registerFactory<PopupMenu>(mCategoryName);
70  factory.registerFactory<ProgressBar>(mCategoryName);
71  factory.registerFactory<ScrollBar>(mCategoryName);
72  factory.registerFactory<ScrollView>(mCategoryName);
73  factory.registerFactory<ImageBox>(mCategoryName);
74  factory.registerFactory<TextBox>(mCategoryName);
75  factory.registerFactory<TabControl>(mCategoryName);
76  factory.registerFactory<TabItem>(mCategoryName);
77  factory.registerFactory<Widget>(mCategoryName);
78  factory.registerFactory<Window>(mCategoryName);
79 
81 
82  Gui::getInstance().eventFrameStart += newDelegate(this, &WidgetManager::notifyEventFrameStart);
83 
84  MYGUI_LOG(Info, getClassTypeName() << " successfully initialized");
85  mIsInitialise = true;
86  }
87 
89  {
90  MYGUI_ASSERT(mIsInitialise, getClassTypeName() << " is not initialised");
91  MYGUI_LOG(Info, "* Shutdown: " << getClassTypeName());
92 
93  Gui::getInstance().eventFrameStart -= newDelegate(this, &WidgetManager::notifyEventFrameStart);
95 
96  mVectorIUnlinkWidget.clear();
97 
99 
100  MYGUI_LOG(Info, getClassTypeName() << " successfully shutdown");
101  mIsInitialise = false;
102  }
103 
104  Widget* WidgetManager::createWidget(WidgetStyle _style, const std::string& _type, const std::string& _skin, const IntCoord& _coord, Widget* _parent, ICroppedRectangle* _cropeedParent, const std::string& _name)
105  {
106  IObject* object = FactoryManager::getInstance().createObject(mCategoryName, _type);
107  if (object != nullptr)
108  {
109  Widget* widget = object->castType<Widget>();
110  widget->_initialise(_style, _coord, _skin, _parent, _cropeedParent, _name);
111 
112  return widget;
113  }
114 
115  MYGUI_EXCEPT("factory '" << _type << "' not found");
116  }
117 
119  {
120  Gui::getInstance().destroyWidget(_widget);
121  }
122 
124  {
125  Gui::getInstance().destroyWidgets(_widgets);
126  }
127 
129  {
130  Gui::getInstance().destroyWidgets(_widgets);
131  }
132 
134  {
135  unregisterUnlinker(_unlink);
136  mVectorIUnlinkWidget.push_back(_unlink);
137  }
138 
140  {
141  VectorIUnlinkWidget::iterator iter = std::remove(mVectorIUnlinkWidget.begin(), mVectorIUnlinkWidget.end(), _unlink);
142  if (iter != mVectorIUnlinkWidget.end())
143  mVectorIUnlinkWidget.erase(iter);
144  }
145 
147  {
148  for (VectorIUnlinkWidget::iterator iter = mVectorIUnlinkWidget.begin(); iter != mVectorIUnlinkWidget.end(); ++iter)
149  {
150  (*iter)->_unlinkWidget(_widget);
151  }
152  }
153 
154  bool WidgetManager::isFactoryExist(const std::string& _type)
155  {
156  if (FactoryManager::getInstance().isFactoryExist(mCategoryName, _type))
157  {
158  return true;
159  }
160 
161  return false;
162  }
163 
164  void WidgetManager::notifyEventFrameStart(float _time)
165  {
167  }
168 
170  {
171  _widget->_shutdown();
172 
173  for (VectorWidgetPtr::iterator entry = mDestroyWidgets.begin(); entry != mDestroyWidgets.end(); ++entry)
174  {
175  /*if ((*entry) == _widget)
176  return;*/
177  MYGUI_ASSERT((*entry) != _widget, "double delete widget");
178  }
179 
180  mDestroyWidgets.push_back(_widget);
181  }
182 
184  {
185  if (!mDestroyWidgets.empty())
186  {
187  for (VectorWidgetPtr::iterator entry = mDestroyWidgets.begin(); entry != mDestroyWidgets.end(); ++entry)
188  delete (*entry);
189  mDestroyWidgets.clear();
190  }
191  }
192 
193  const std::string& WidgetManager::getCategoryName() const
194  {
195  return mCategoryName;
196  }
197 
198 } // namespace MyGUI
Widget properties. Skin childs. Widget widget description should be here.
Definition: MyGUI_Widget.h:29
ComboBox properties. Skin childs. ComboBox widget description should be here.
void destroyWidget(Widget *_widget)
Definition: MyGUI_Gui.cpp:242
TabItem properties. Skin childs. TabItem widget description should be here.
Definition: MyGUI_TabItem.h:20
ImageBox properties. Skin childs. ImageBox widget description should be here.
EventHandle_FrameEventDelegate eventFrameStart
Definition: MyGUI_Gui.h:150
MenuControl properties. Skin childs. MenuControl widget description should be here.
bool isFactoryExist(const std::string &_type)
ItemBox properties. Skin childs. ItemBox widget description should be here.
Definition: MyGUI_ItemBox.h:29
delegates::IDelegate0 * newDelegate(void(*_func)())
static FactoryManager & getInstance()
void destroyWidget(Widget *_widget)
static const char * getClassTypeName()
ListBox properties. Skin childs. ListBox widget description should be here.
Definition: MyGUI_ListBox.h:27
void unlinkFromUnlinkers(Widget *_widget)
void destroyWidgets(const VectorWidgetPtr &_widgets)
MultiListItem properties. Skin childs. MultiListItem widget description should be here...
Button properties. Skin childs. Button widget description should be here.
Definition: MyGUI_Button.h:19
#define MYGUI_LOG(level, text)
EditBox properties. Skin childs. EditBox widget description should be here.
Definition: MyGUI_EditBox.h:25
const std::string & getCategoryName() const
#define MYGUI_EXCEPT(dest)
void destroyWidgets(const VectorWidgetPtr &_widgets)
Definition: MyGUI_Gui.cpp:251
ProgressBar properties. Skin childs. ProgressBar widget description should be here.
PopupMenu properties. Skin childs. PopupMenu widget description should be here.
ScrollView properties. Skin childs. ScrollView widget description should be here. ...
std::vector< Widget * > VectorWidgetPtr
#define MYGUI_ASSERT(exp, dest)
void _deleteWidget(Widget *_widget)
DDContainer properties. Skin childs. DDContainer widget description should be here.
Type * castType(bool _throw=true)
Definition: MyGUI_IObject.h:18
void registerUnlinker(IUnlinkWidget *_unlink)
MenuBar properties. Skin childs. MenuBar widget description should be here.
Definition: MyGUI_MenuBar.h:19
void unregisterFactory(const std::string &_category, const std::string &_type)
Widget * createWidget(WidgetStyle _style, const std::string &_type, const std::string &_skin, const IntCoord &_coord, Widget *_parent, ICroppedRectangle *_cropeedParent, const std::string &_name)
void registerFactory(const std::string &_category, const std::string &_type, Delegate::IDelegate *_delegate)
MultiListBox properties. Skin childs. MultiListBox widget description should be here.
TextBox properties. Skin childs. TextBox widget description should be here.
Definition: MyGUI_TextBox.h:19
Canvas properties. Skin childs. Widget wrapper over Texture - shows the texture. Implemented: resizin...
Definition: MyGUI_Canvas.h:21
Window properties. Skin childs. Window widget description should be here.
Definition: MyGUI_Window.h:27
void _initialise(WidgetStyle _style, const IntCoord &_coord, const std::string &_skinName, Widget *_parent, ICroppedRectangle *_croppedParent, const std::string &_name)
MenuItem properties. Skin childs. MenuItem widget description should be here.
TabControl properties. Skin childs. TabControl widget description should be here. ...
ScrollBar properties. Skin childs. ScrollBar widget description should be here.
IObject * createObject(const std::string &_category, const std::string &_type)
void unregisterUnlinker(IUnlinkWidget *_unlink)