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"
9#include "MyGUI_Gui.h"
10#include "MyGUI_Widget.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
38namespace 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 {
121 }
122
124 {
126 }
127
129 {
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)
static FactoryManager & getInstance()
void registerFactory(const std::string &_category, const std::string &_type, Delegate::IDelegate *_delegate)
IObject * createObject(const std::string &_category, const std::string &_type)
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)
static const char * getClassTypeName()
void _deleteWidget(Widget *_widget)
void unlinkFromUnlinkers(Widget *_widget)
void registerUnlinker(IUnlinkWidget *_unlink)
void destroyWidget(Widget *_widget)
bool isFactoryExist(const std::string &_type)
widget description should be here.
Definition: MyGUI_Window.h:30
std::vector< Widget * > VectorWidgetPtr
delegates::DelegateFunction< Args... > * newDelegate(void(*_func)(Args... args))
MYGUI_SINGLETON_DEFINITION(ClipboardManager)