32 mWidgetClient(nullptr),
34 mInheritsEnabled(true),
35 mInheritsVisible(true),
42 mAlign(
Align::Default),
61 mWidgetStyle = _style;
68 #if MYGUI_DEBUG_MODE == 1
92 const WidgetInfo* root = initialiseWidgetSkinBase(skinInfo, templateInfo);
111 if (skinInfo !=
nullptr)
112 setSkinProperty(skinInfo);
116 for (VectorStringPairs::const_iterator iter = root->
properties.begin(); iter != root->
properties.end(); ++iter)
130 shutdownWidgetSkinBase();
166 shutdownWidgetSkinBase();
167 const WidgetInfo* root = initialiseWidgetSkinBase(skinInfo, templateInfo);
173 if (skinInfo !=
nullptr)
174 setSkinProperty(skinInfo);
178 for (VectorStringPairs::const_iterator iter = root->
properties.begin(); iter != root->
properties.end(); ++iter)
188 bool skinOnly =
false;
190 if (_skinInfo ==
nullptr)
193 std::string skinName;
196 for (VectorWidgetInfo::const_iterator item = data.begin(); item != data.end(); ++item)
198 if ((*item).name ==
"Root")
200 skinName = (*item).skin;
212 if (_skinInfo !=
nullptr)
228 for (MapString::const_iterator item = properties.begin(); item != properties.end(); ++item)
236 for (VectorChildSkinInfo::const_iterator iter = child.begin(); iter != child.end(); ++iter)
238 Widget* widget =
baseCreateWidget(iter->style, iter->type, iter->skin, iter->coord, iter->align, iter->layer, iter->name,
true);
240 for (MapString::const_iterator prop = iter->params.begin(); prop != iter->params.end(); ++prop)
241 widget->setUserString(prop->first, prop->second);
267 void Widget::shutdownWidgetSkinBase()
274 for (VectorWidgetPtr::iterator iter = mWidgetChildSkin.begin(); iter != mWidgetChildSkin.end(); ++iter)
277 mWidgetChild.push_back(*iter);
280 mWidgetChildSkin.clear();
282 mWidgetClient =
nullptr;
292 mWidgetChildSkin.push_back(widget);
296 if (mWidgetClient !=
nullptr)
298 widget = mWidgetClient->
baseCreateWidget(_style, _type, _skin, _coord, _align, _layer, _name, _template);
342 for (VectorWidgetPtr::iterator widget = mWidgetChild.begin(); widget != mWidgetChild.end(); ++widget)
343 (*widget)->_updateView();
344 for (VectorWidgetPtr::iterator widget = mWidgetChildSkin.begin(); widget != mWidgetChildSkin.end(); ++widget)
345 (*widget)->_updateView();
364 for (VectorWidgetPtr::iterator widget = mWidgetChild.begin(); widget != mWidgetChild.end(); ++widget)
365 (*widget)->_updateView();
366 for (VectorWidgetPtr::iterator widget = mWidgetChildSkin.begin(); widget != mWidgetChildSkin.end(); ++widget)
367 (*widget)->_updateView();
379 MYGUI_ASSERT(
nullptr != _widget,
"invalid widget pointer");
386 VectorWidgetPtr::iterator iter = std::find(mWidgetChild.begin(), mWidgetChild.end(), _widget);
387 if (iter != mWidgetChild.end())
393 mWidgetChild.erase(iter);
411 while (!mWidgetChild.empty())
414 Widget* widget = mWidgetChild.back();
415 mWidgetChild.pop_back();
427 if (mWidgetClient !=
nullptr)
434 if (mAlpha == _alpha)
441 void Widget::_updateAlpha()
443 if (
nullptr != mParent)
444 mRealAlpha = mAlpha * (mInheritsAlpha ? mParent->_getRealAlpha() :
ALPHA_MAX);
448 for (VectorWidgetPtr::iterator widget = mWidgetChild.begin(); widget != mWidgetChild.end(); ++widget)
449 (*widget)->_updateAlpha();
450 for (VectorWidgetPtr::iterator widget = mWidgetChildSkin.begin(); widget != mWidgetChildSkin.end(); ++widget)
451 (*widget)->_updateAlpha();
458 mInheritsAlpha = _inherits;
475 for (VectorWidgetPtr::const_reverse_iterator widget = mWidgetChild.rbegin(); widget != mWidgetChild.rend(); ++widget)
486 for (VectorWidgetPtr::const_reverse_iterator widget = mWidgetChildSkin.rbegin(); widget != mWidgetChildSkin.rend(); ++widget)
497 void Widget::_updateAbsolutePoint()
505 for (VectorWidgetPtr::iterator widget = mWidgetChild.begin(); widget != mWidgetChild.end(); ++widget)
506 (*widget)->_updateAbsolutePoint();
507 for (VectorWidgetPtr::iterator widget = mWidgetChildSkin.begin(); widget != mWidgetChildSkin.end(); ++widget)
508 (*widget)->_updateAbsolutePoint();
515 if (mWidgetClient !=
nullptr)
521 VectorWidgetPtr::iterator iter = std::find(mWidgetChild.begin(), mWidgetChild.end(), _widget);
522 if (iter == mWidgetChild.end())
526 for (VectorWidgetPtr::iterator widget = copy.begin(); widget != copy.end(); ++widget)
528 if ((*widget) == _widget)
529 (*widget)->setDepth(-1);
530 else if ((*widget)->getDepth() == -1)
531 (*widget)->setDepth(0);
539 if (mWidgetClient !=
nullptr)
542 for (VectorWidgetPtr::iterator widget = mWidgetChild.begin(); widget != mWidgetChild.end(); ++widget)
568 const IntSize& size = _newSize;
570 bool need_move =
false;
571 bool need_size =
false;
635 for (VectorWidgetPtr::iterator widget = mWidgetChild.begin(); widget != mWidgetChild.end(); ++widget)
636 (*widget)->_updateAbsolutePoint();
637 for (VectorWidgetPtr::iterator widget = mWidgetChildSkin.begin(); widget != mWidgetChildSkin.end(); ++widget)
638 (*widget)->_updateAbsolutePoint();
671 for (VectorWidgetPtr::iterator widget = mWidgetChild.begin(); widget != mWidgetChild.end(); ++widget)
672 (*widget)->_setAlign(old,
getSize());
673 for (VectorWidgetPtr::iterator widget = mWidgetChildSkin.begin(); widget != mWidgetChildSkin.end(); ++widget)
674 (*widget)->_setAlign(old,
getSize());
689 for (VectorWidgetPtr::iterator widget = mWidgetChild.begin(); widget != mWidgetChild.end(); ++widget)
690 (*widget)->_updateAbsolutePoint();
691 for (VectorWidgetPtr::iterator widget = mWidgetChildSkin.begin(); widget != mWidgetChildSkin.end(); ++widget)
692 (*widget)->_updateAbsolutePoint();
716 for (VectorWidgetPtr::iterator widget = mWidgetChild.begin(); widget != mWidgetChild.end(); ++widget)
718 for (VectorWidgetPtr::iterator widget = mWidgetChildSkin.begin(); widget != mWidgetChildSkin.end(); ++widget)
762 for (VectorWidgetPtr::iterator widget = mWidgetChild.begin(); widget != mWidgetChild.end(); ++widget)
763 (*widget)->_updateAbsolutePoint();
764 for (VectorWidgetPtr::iterator widget = mWidgetChildSkin.begin(); widget != mWidgetChildSkin.end(); ++widget)
765 (*widget)->_updateAbsolutePoint();
780 mParent->_unlinkChildWidget(
this);
788 else if (!oldlayer.empty())
799 MYGUI_ASSERT(_parent !=
this,
"cyclic attach (attaching to self)");
816 mWidgetStyle = _style;
822 if (mParent ==
nullptr)
825 mParent->_unlinkChildWidget(
this);
828 mParent->_linkChildWidget(
this);
843 if (mParent ==
nullptr)
846 mParent->_unlinkChildWidget(
this);
849 mParent->_linkChildWidget(
this);
854 for (VectorWidgetPtr::iterator widget = mWidgetChild.begin(); widget != mWidgetChild.end(); ++widget)
855 (*widget)->_updateAbsolutePoint();
856 for (VectorWidgetPtr::iterator widget = mWidgetChildSkin.begin(); widget != mWidgetChildSkin.end(); ++widget)
857 (*widget)->_updateAbsolutePoint();
869 if (mParent ==
nullptr)
872 mParent->_unlinkChildWidget(
this);
875 mParent->_linkChildWidget(
this);
880 for (VectorWidgetPtr::iterator widget = mWidgetChild.begin(); widget != mWidgetChild.end(); ++widget)
881 (*widget)->_updateAbsolutePoint();
882 for (VectorWidgetPtr::iterator widget = mWidgetChildSkin.begin(); widget != mWidgetChildSkin.end(); ++widget)
883 (*widget)->_updateAbsolutePoint();
895 if (_style == mWidgetStyle)
924 return baseCreateWidget(_style, _type, _skin, _coord, _align, _layer, _name,
false);
929 if (mWidgetClient !=
nullptr)
936 if (mWidgetClient !=
nullptr)
938 return mWidgetChild.size();
943 if (mWidgetClient !=
nullptr)
946 return mWidgetChild[_index];
959 if (mVisible == _value)
966 void Widget::_updateVisible()
969 bool value = mVisible && mInheritsVisible;
973 for (VectorWidgetPtr::iterator widget = mWidgetChild.begin(); widget != mWidgetChild.end(); ++widget)
974 (*widget)->_updateVisible();
975 for (VectorWidgetPtr::iterator widget = mWidgetChildSkin.begin(); widget != mWidgetChildSkin.end(); ++widget)
976 (*widget)->_updateVisible();
986 if (mEnabled == _value)
993 void Widget::_updateEnabled()
996 mInheritsEnabled = mInheritsEnabled && mEnabled;
998 for (VectorWidgetPtr::iterator iter = mWidgetChild.begin(); iter != mWidgetChild.end(); ++iter)
999 (*iter)->_updateEnabled();
1000 for (VectorWidgetPtr::iterator iter = mWidgetChildSkin.begin(); iter != mWidgetChildSkin.end(); ++iter)
1001 (*iter)->_updateEnabled();
1005 if (!mInheritsEnabled)
1013 for (VectorWidgetPtr::iterator widget = mWidgetChildSkin.begin(); widget != mWidgetChildSkin.end(); ++widget)
1014 (*widget)->setColour(_value);
1038 void Widget::_linkChildWidget(
Widget* _widget)
1040 VectorWidgetPtr::iterator iter = std::find(mWidgetChild.begin(), mWidgetChild.end(), _widget);
1041 MYGUI_ASSERT(iter == mWidgetChild.end(),
"widget already exist");
1045 void Widget::_unlinkChildWidget(Widget* _widget)
1047 VectorWidgetPtr::iterator iter = std::remove(mWidgetChild.begin(), mWidgetChild.end(), _widget);
1048 MYGUI_ASSERT(iter != mWidgetChild.end(),
"widget not found");
1049 mWidgetChild.erase(iter);
1065 for (MapString::const_iterator item = properties.begin(); item != properties.end(); ++item)
1071 std::string key = _key;
1072 std::string value = _value;
1076 size_t index = key.find(
"_");
1077 if (index != std::string::npos)
1080 key = key.substr(index + 1);
1091 for (VectorWidgetPtr::iterator iter = mWidgetChildSkin.begin(); iter != mWidgetChildSkin.end(); ++iter)
1092 (*iter)->findWidgets(_name, result);
1100 _result.push_back(
this);
1102 if (mWidgetClient !=
nullptr)
1108 for (VectorWidgetPtr::iterator widget = mWidgetChild.begin(); widget != mWidgetChild.end(); ++widget)
1109 (*widget)->findWidgets(_name, _result);
1115 mWidgetChild.push_back(_widget);
1129 MYGUI_ASSERT(mWidgetClient !=
this,
"mWidgetClient can not be this widget");
1130 mWidgetClient = _widget;
1140 return baseCreateWidget(_style, _type, _skin, _coord, _align, _layer, _name,
true);
1146 if (_key ==
"Position")
1147 setPosition(utility::parseValue<IntPoint>(_value));
1150 else if (_key ==
"Size")
1151 setSize(utility::parseValue<IntSize>(_value));
1154 else if (_key ==
"Coord")
1155 setCoord(utility::parseValue<IntCoord>(_value));
1158 else if (_key ==
"Visible")
1159 setVisible(utility::parseValue<bool>(_value));
1162 else if (_key ==
"Depth")
1163 setDepth(utility::parseValue<int>(_value));
1166 else if (_key ==
"Alpha")
1167 setAlpha(utility::parseValue<float>(_value));
1170 else if (_key ==
"Colour")
1171 setColour(utility::parseValue<Colour>(_value));
1174 else if (_key ==
"InheritsAlpha")
1178 else if (_key ==
"InheritsPick")
1182 else if (_key ==
"MaskPick")
1186 else if (_key ==
"NeedKey")
1190 else if (_key ==
"NeedMouse")
1194 else if (_key ==
"Enabled")
1195 setEnabled(utility::parseValue<bool>(_value));
1198 else if (_key ==
"NeedToolTip")
1202 else if (_key ==
"Pointer")
1266 return mInheritsAlpha;
1291 return mWidgetClient;
1296 return mWidgetClient;
1301 return mWidgetStyle;
1311 mContainer = _value;
1329 float Widget::_getRealAlpha()
const
1336 return mInheritsEnabled;
1341 return mInheritsVisible;
1344 void Widget::resizeLayerItemView(
const IntSize& _oldView,
const IntSize& _newView)
1351 if (mDepth == _value)
1356 if (mParent !=
nullptr)
1358 mParent->_unlinkChildWidget(
this);
1359 mParent->_linkChildWidget(
this);
1369 void Widget::addWidget(
Widget* _widget)
1375 for (
size_t index = 0; index < mWidgetChild.size(); ++index)
1377 Widget* widget = mWidgetChild[index];
1380 mWidgetChild.insert(mWidgetChild.begin() + index, _widget);
1386 mWidgetChild.push_back(_widget);
1391 for (VectorWidgetPtr::iterator widget = mWidgetChild.begin(); widget != mWidgetChild.end(); ++widget)
1395 (*widget)->detachFromLayerItemNode(
true);
1400 for (VectorWidgetPtr::iterator widget = mWidgetChild.begin(); widget != mWidgetChild.end(); ++widget)
1405 (*widget)->_updateView();