MyGUI 3.2.2

- Main Page
- Related Pages
- Namespaces
- Data Structures
- Files
- Examples

- File List
- Globals

MyGUI_Widget.h
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 #ifndef MYGUI_WIDGET_H_
8 #define MYGUI_WIDGET_H_
9
10 #include "MyGUI_Prerequest.h"
11 #include "MyGUI_Any.h"
12 #include "MyGUI_ICroppedRectangle.h"
13 #include "MyGUI_WidgetUserData.h"
14 #include "MyGUI_WidgetInput.h"
15 #include "MyGUI_ResourceSkin.h"
16 #include "MyGUI_ResourceLayout.h"
17 #include "MyGUI_IObject.h"
18 #include "MyGUI_SkinItem.h"
19 #include "MyGUI_BackwardCompatibility.h"
20
21 namespace MyGUI
22 {
23
24 typedef delegates::CMultiDelegate3<Widget*, const std::string&, const std::string&> EventHandle_WidgetStringString;
25
29 class MYGUI_EXPORT Widget :
30 public IObject,
31 public ICroppedRectangle,
32 public UserData,
33 public WidgetInput,
34 public delegates::IDelegateUnlink,
35 public SkinItem,
36 public MemberObsolete<Widget>
37 {
38 // для вызова закрытых деструкторов
39 friend class WidgetManager;
40
41 MYGUI_RTTI_DERIVED( Widget )
42
43 public:
44 Widget();
45
53 Widget* createWidgetT(const std::string& _type, const std::string& _skin, const IntCoord& _coord, Align _align, const std::string& _name = "");
54
56 Widget* createWidgetT(const std::string& _type, const std::string& _skin, int _left, int _top, int _width, int _height, Align _align, const std::string& _name = "");
57
59 Widget* createWidgetRealT(const std::string& _type, const std::string& _skin, const FloatCoord& _coord, Align _align, const std::string& _name = "");
60
62 Widget* createWidgetRealT(const std::string& _type, const std::string& _skin, float _left, float _top, float _width, float _height, Align _align, const std::string& _name = "");
63
64 // templates for creating widgets by type
66 template <typename T>
67 T* createWidget(const std::string& _skin, const IntCoord& _coord, Align _align, const std::string& _name = "")
68 {
69 return static_cast<T*>(createWidgetT(T::getClassTypeName(), _skin, _coord, _align, _name));
70 }
71
73 template <typename T>
74 T* createWidget(const std::string& _skin, int _left, int _top, int _width, int _height, Align _align, const std::string& _name = "")
75 {
76 return static_cast<T*>(createWidgetT(T::getClassTypeName(), _skin, IntCoord(_left, _top, _width, _height), _align, _name));
77 }
78
80 template <typename T>
81 T* createWidgetReal(const std::string& _skin, const FloatCoord& _coord, Align _align, const std::string& _name = "")
82 {
83 return static_cast<T*>(createWidgetRealT(T::getClassTypeName(), _skin, _coord, _align, _name));
84 }
85
87 template <typename T>
88 T* createWidgetReal(const std::string& _skin, float _left, float _top, float _width, float _height, Align _align, const std::string& _name = "")
89 {
90 return static_cast<T*>(createWidgetRealT(T::getClassTypeName(), _skin, _left, _top, _width, _height, _align, _name));
91 }
92
102 Widget* createWidgetT(WidgetStyle _style, const std::string& _type, const std::string& _skin, const IntCoord& _coord, Align _align, const std::string& _layer = "", const std::string& _name = "");
103
105 template <typename T>
106 T* createWidget(WidgetStyle _style, const std::string& _skin, const IntCoord& _coord, Align _align, const std::string& _layer = "", const std::string& _name = "")
107 {
108 return static_cast<T*>(createWidgetT(_style, T::getClassTypeName(), _skin, _coord, _align, _layer, _name));
109 }
110
112 virtual void setPosition(const IntPoint& _value);
114 virtual void setSize(const IntSize& _value);
116 virtual void setCoord(const IntCoord& _value);
117
119 void setPosition(int _left, int _top);
121 void setSize(int _width, int _height);
123 void setCoord(int _left, int _top, int _width, int _height);
124
126 void setRealPosition(const FloatPoint& _value);
128 void setRealSize(const FloatSize& _value);
130 void setRealCoord(const FloatCoord& _value);
131
133 void setRealPosition(float _left, float _top);
135 void setRealSize(float _width, float _height);
137 void setRealCoord(float _left, float _top, float _width, float _height);
138
140 const std::string& getName() const;
141
143 virtual void setVisible(bool _value);
145 bool getVisible() const;
146
151 void setDepth(int _value);
153 int getDepth() const;
154
156 bool getInheritedVisible() const;
157
159 virtual void setAlign(Align _value);
161 Align getAlign() const;
162
164 void setAlpha(float _value);
166 float getAlpha() const;
167
178 void setInheritsAlpha(bool _value);
180 bool getInheritsAlpha() const;
181
182 void setColour(const Colour& _value);
183
184 // являемся ли мы рутовым виджетом
186 bool isRootWidget() const;
187
189 Widget* getParent() const;
190
191 IntSize getParentSize() const;
192
194 EnumeratorWidgetPtr getEnumerator() const;
195
197 size_t getChildCount();
198
200 Widget* getChildAt(size_t _index);
201
206 Widget* findWidget(const std::string& _name);
207
211 void findWidgets(const std::string& _name, VectorWidgetPtr& _result);
212
214 virtual void setEnabled(bool _value);
216 void setEnabledSilent(bool _value);
218 bool getEnabled() const;
219
221 bool getInheritedEnabled() const;
222
224 IntCoord getClientCoord();
225
227 Widget* getClientWidget();
228
232 void detachFromWidget(const std::string& _layer = "");
233
239 void attachToWidget(Widget* _parent, WidgetStyle _style = WidgetStyle::Child, const std::string& _layer = "");
240
242 void changeWidgetSkin(const std::string& _skinName);
243
249 void setWidgetStyle(WidgetStyle _style, const std::string& _layer = "");
251 WidgetStyle getWidgetStyle() const;
252
257 void setProperty(const std::string& _key, const std::string& _value);
258
259
266 EventHandle_WidgetStringString eventChangeProperty;
267
272 EventHandle_WidgetVoid eventChangeCoord;
273
274 /*internal:*/
275 // метод для запроса номера айтема и контейнера
276 virtual size_t _getItemIndex(Widget* _item);
277
278 // дает приоритет виджету при пиккинге
279 void _forcePick(Widget* _widget);
280
281 void _initialise(WidgetStyle _style, const IntCoord& _coord, const std::string& _skinName, Widget* _parent, ICroppedRectangle* _croppedParent, const std::string& _name);
282 void _shutdown();
283
284 // удяляет неудачника
285 void _destroyChildWidget(Widget* _widget);
286
287 void _setContainer(Widget* _value);
288 Widget* _getContainer();
289
290 void _setAlign(const IntSize& _oldsize, const IntSize& _newSize);
291 bool _checkPoint(int _left, int _top) const;
292
293 Widget* _createSkinWidget(WidgetStyle _style, const std::string& _type, const std::string& _skin, const IntCoord& _coord, Align _align, const std::string& _layer = "", const std::string& _name = "");
294
295 // сброс всех данных контейнера, тултипы и все остальное
296 virtual void _resetContainer(bool _update);
297
298 bool _setWidgetState(const std::string& _value);
299
300 // перерисовывает детей
301 void _updateChilds();
302
303 protected:
304 // все создание только через фабрику
305 virtual ~Widget();
306
307 virtual void shutdownOverride();
308 virtual void initialiseOverride();
309
310 void _updateView(); // обновления себя и детей
311
312 // создает виджет
313 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, bool _template);
314
315 // удаляет всех детей
316 void _destroyAllChildWidget();
317
318 // запрашиваем у конейтера айтем по позиции мыши
319 virtual size_t _getContainerIndex(const IntPoint& _point);
320
321 virtual void baseUpdateEnable();
322
323 // наследуемся он LayerInfo
324 virtual ILayerItem* getLayerItemByPoint(int _left, int _top) const;
325 virtual const IntCoord& getLayerItemCoord() const;
326
327 template <typename T>
328 void assignWidget(T*& _widget, const std::string& _name)
329 {
330 _widget = nullptr;
331 for (VectorWidgetPtr::iterator iter = mWidgetChildSkin.begin(); iter != mWidgetChildSkin.end(); ++iter)
332 {
333 Widget* find = (*iter)->findWidget(_name);
334 if (nullptr != find)
335 {
336 _widget = find->castType<T>(false);
337 break;
338 }
339 }
340 }
341
342 VectorWidgetPtr getSkinWidgetsByName(const std::string& _name);
343
344 void destroySkinWidget(Widget* _widget);
345
346 virtual void onWidgetCreated(Widget* _widget);
347 virtual void onWidgetDestroy(Widget* _widget);
348
349 void setWidgetClient(Widget* _widget);
350
351 virtual void setPropertyOverride(const std::string& _key, const std::string& _value);
352
353 private:
354 void frameEntered(float _frame);
355
356 const WidgetInfo* initialiseWidgetSkinBase(ResourceSkin* _info, ResourceLayout* _templateInfo);
357 void shutdownWidgetSkinBase();
358
359 void _updateAlpha();
360 void _updateAbsolutePoint();
361
362 // для внутреннего использования
363 void _updateVisible();
364
365 void _updateEnabled();
366
367 float _getRealAlpha() const;
368
369 void _createChildSkinWidget(ResourceSkin* _info);
370 void _destroyChildSkinWidget();
371
372 void _parseSkinProperties(ResourceSkin* _info);
373 void _checkInheristProperties();
374
375 void _linkChildWidget(Widget* _widget);
376 void _unlinkChildWidget(Widget* _widget);
377
378 void setSkinProperty(ResourceSkin* _info);
379
380 virtual void resizeLayerItemView(const IntSize& _oldView, const IntSize& _newView);
381
382 void addWidget(Widget* _widget);
383
384 private:
385 // клиентская зона окна
386 // если виджет имеет пользовательские окна не в себе
387 // то обязательно проинициализировать Client
388 Widget* mWidgetClient;
389
390 // вектор всех детей виджетов
391 VectorWidgetPtr mWidgetChild;
392
393 // вектор детей скина
394 VectorWidgetPtr mWidgetChildSkin;
395
396 // доступен ли на виджет
397 bool mEnabled;
398 bool mInheritsEnabled;
399 // для иерархического скрытия
400 bool mInheritsVisible;
401 // прозрачность и флаг наследования альфы нашего оверлея
402 float mAlpha;
403 float mRealAlpha;
404 bool mInheritsAlpha;
405 // имя виджета
406 std::string mName;
407
408 // наш отец в иерархии виджетов
409 Widget* mParent;
410
411 // поведение виджета, перекрывающийся дочерний или всплывающий
412 WidgetStyle mWidgetStyle;
413
414 Widget* mContainer;
415
416 Align mAlign;
417 bool mVisible;
418 int mDepth;
419 };
420
421 } // namespace MyGUI
422
423 #endif // MYGUI_WIDGET_H_
MyGUI::types::TCoord< int >
MyGUI_SkinItem.h
MyGUI::Widget
Widget properties. Widget_skin_childs Skin childs. Widget widget description should be here...
Definition: MyGUI_Widget.h:29
MyGUI::ResourceSkin
Definition: MyGUI_ResourceSkin.h:21
MyGUI::delegates::IDelegateUnlink
Definition: MyGUI_Delegate.h:25
MyGUI::types::TPoint< int >
MyGUI_Prerequest.h
MyGUI::types::TSize< int >
MyGUI_WidgetInput.h
MyGUI::Widget::createWidgetReal
T * createWidgetReal(const std::string &_skin, const FloatCoord &_coord, Align _align, const std::string &_name="")
Definition: MyGUI_Widget.h:81
MyGUI::Widget::assignWidget
void assignWidget(T *&_widget, const std::string &_name)
Definition: MyGUI_Widget.h:328
MyGUI::WidgetManager
Definition: MyGUI_WidgetManager.h:20
MyGUI::delegates::CMultiDelegate3< Widget *, const std::string &, const std::string & >
MyGUI::SkinItem
Definition: MyGUI_SkinItem.h:19
MyGUI::EventHandle_WidgetStringString
delegates::CMultiDelegate3< Widget *, const std::string &, const std::string & > EventHandle_WidgetStringString
Definition: MyGUI_Widget.h:24
MyGUI::IntCoord
types::TCoord< int > IntCoord
Definition: MyGUI_Types.h:35
MyGUI::WidgetInput
Definition: MyGUI_WidgetInput.h:59
MyGUI::Enumerator
Definition: MyGUI_Enumerator.h:48
MyGUI_ICroppedRectangle.h
MyGUI::ResourceLayout
Definition: MyGUI_ResourceLayout.h:18
MyGUI
Definition: MyGUI_ActionController.h:14
MyGUI::Widget::findWidget
Widget * findWidget(const std::string &_name)
Definition: MyGUI_Widget.cpp:539
MyGUI::WidgetStyle::Child
Definition: MyGUI_WidgetStyle.h:20
MYGUI_RTTI_DERIVED
#define MYGUI_RTTI_DERIVED(DerivedType)
Definition: MyGUI_RTTI.h:65
MyGUI::Widget::eventChangeProperty
EventHandle_WidgetStringString eventChangeProperty
Definition: MyGUI_Widget.h:266
MYGUI_EXPORT
#define MYGUI_EXPORT
Definition: MyGUI_Platform.h:103
MyGUI::Widget::createWidget
T * createWidget(const std::string &_skin, int _left, int _top, int _width, int _height, Align _align, const std::string &_name="")
Definition: MyGUI_Widget.h:74
MyGUI::VectorWidgetPtr
std::vector< Widget * > VectorWidgetPtr
Definition: MyGUI_WidgetDefines.h:19
MyGUI_BackwardCompatibility.h
MyGUI::Widget::createWidgetReal
T * createWidgetReal(const std::string &_skin, float _left, float _top, float _width, float _height, Align _align, const std::string &_name="")
Definition: MyGUI_Widget.h:88
MyGUI::WidgetInfo
Definition: MyGUI_LayoutData.h:22
MyGUI_ResourceSkin.h
MyGUI_Any.h
MyGUI::IObject::castType
Type * castType(bool _throw=true)
Definition: MyGUI_IObject.h:18
MyGUI_IObject.h
MyGUI_ResourceLayout.h
MyGUI::UserData
Definition: MyGUI_WidgetUserData.h:17
MyGUI::ILayerItem
Definition: MyGUI_ILayerItem.h:18
MyGUI::IObject
Definition: MyGUI_IObject.h:16
MyGUI::WidgetStyle
Definition: MyGUI_WidgetStyle.h:16
MyGUI::Widget::eventChangeCoord
EventHandle_WidgetVoid eventChangeCoord
Definition: MyGUI_Widget.h:272
MyGUI::ICroppedRectangle
Definition: MyGUI_ICroppedRectangle.h:16
MyGUI::MemberObsolete
Definition: MyGUI_DeprecatedTypes.h:13
MyGUI_WidgetUserData.h
MyGUI::Align
Definition: MyGUI_Align.h:19
MyGUI::Colour
Definition: MyGUI_Colour.h:16
MyGUI::delegates::CMultiDelegate1< Widget * >
MyGUI::Widget::createWidget
T * createWidget(WidgetStyle _style, const std::string &_skin, const IntCoord &_coord, Align _align, const std::string &_layer="", const std::string &_name="")
Definition: MyGUI_Widget.h:106