MyGUI  3.4.1
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 
42 
44  mIsInitialise(false),
45  mCategoryName("Widget"),
46  mSingletonHolder(this)
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
#define MYGUI_ASSERT(exp, dest)
#define MYGUI_EXCEPT(dest)
#define MYGUI_LOG(level, text)
widget description should be here.
Definition: MyGUI_Button.h:22
wrapper over Texture - shows the texture. Implemented: resizing of texture (see TextureResizeMode); r...
Definition: MyGUI_Canvas.h:24
widget description should be here.
widget description should be here.
widget description should be here.
Definition: MyGUI_EditBox.h:29
void unregisterFactory(const std::string &_category, const std::string &_type)
void registerFactory(const std::string &_category, const std::string &_type, Delegate::IDelegate *_delegate)
IObject * createObject(const std::string &_category, const std::string &_type)
static FactoryManager & getInstance()
void destroyWidget(Widget *_widget)
Definition: MyGUI_Gui.cpp:242
void destroyWidgets(const VectorWidgetPtr &_widgets)
Definition: MyGUI_Gui.cpp:251
static Gui & getInstance()
EventHandle_FrameEventDelegate eventFrameStart
Definition: MyGUI_Gui.h:150
Type * castType(bool _throw=true)
Definition: MyGUI_IObject.h:18
widget description should be here.
widget description should be here.
Definition: MyGUI_ItemBox.h:33
widget description should be here.
Definition: MyGUI_ListBox.h:31
widget description should be here.
Definition: MyGUI_MenuBar.h:21
widget description should be here.
widget description should be here.
widget description should be here.
widget description should be here.
widget description should be here.
widget description should be here.
widget description should be here.
widget description should be here.
widget description should be here.
widget description should be here.
Definition: MyGUI_TabItem.h:22
widget description should be here.
Definition: MyGUI_TextBox.h:21
widget description should be here.
Definition: MyGUI_Widget.h:37
void _initialise(WidgetStyle _style, const IntCoord &_coord, const std::string &_skinName, Widget *_parent, ICroppedRectangle *_croppedParent, const std::string &_name)
void unregisterUnlinker(IUnlinkWidget *_unlink)
const std::string & getCategoryName() const
Widget * createWidget(WidgetStyle _style, const std::string &_type, const std::string &_skin, const IntCoord &_coord, Widget *_parent, ICroppedRectangle *_cropeedParent, const std::string &_name)
void destroyWidgets(const VectorWidgetPtr &_widgets)
void _deleteWidget(Widget *_widget)
void unlinkFromUnlinkers(Widget *_widget)
void registerUnlinker(IUnlinkWidget *_unlink)
void destroyWidget(Widget *_widget)
static const char * getClassTypeName()
bool isFactoryExist(const std::string &_type)
widget description should be here.
Definition: MyGUI_Window.h:30
delegates::DelegateFunction< Args... > * newDelegate(void(*_func)(Args... args))
std::vector< Widget * > VectorWidgetPtr
MYGUI_SINGLETON_DEFINITION(ClipboardManager)