49 mInheritsEnabled(true),
50 mInheritsVisible(true),
57 mAlign(
Align::Default),
79 mWidgetStyle = _style;
86 #if MYGUI_DEBUG_MODE == 1
110 const WidgetInfo* root = initialiseWidgetSkinBase(skinInfo, templateInfo);
129 if (skinInfo !=
nullptr)
130 setSkinProperty(skinInfo);
134 for (VectorStringPairs::const_iterator iter = root->
properties.begin(); iter != root->
properties.end(); ++iter)
146 shutdownWidgetSkinBase();
182 shutdownWidgetSkinBase();
183 const WidgetInfo* root = initialiseWidgetSkinBase(skinInfo, templateInfo);
189 if (skinInfo !=
nullptr)
190 setSkinProperty(skinInfo);
194 for (VectorStringPairs::const_iterator iter = root->
properties.begin(); iter != root->
properties.end(); ++iter)
204 bool skinOnly =
false;
206 if (_skinInfo ==
nullptr)
209 std::string skinName;
212 for (VectorWidgetInfo::const_iterator item = data.begin(); item != data.end(); ++item)
214 if ((*item).name ==
"Root")
216 skinName = (*item).skin;
228 if (_skinInfo !=
nullptr)
244 for (MapString::const_iterator item = properties.begin(); item != properties.end(); ++item)
252 for (VectorChildSkinInfo::const_iterator iter = child.begin(); iter != child.end(); ++iter)
254 Widget* widget =
baseCreateWidget(iter->style, iter->type, iter->skin, iter->coord, iter->align, iter->layer, iter->name,
true);
256 for (MapString::const_iterator prop = iter->params.begin(); prop != iter->params.end(); ++prop)
257 widget->setUserString(prop->first, prop->second);
283 void Widget::shutdownWidgetSkinBase()
290 for (VectorWidgetPtr::iterator iter = mWidgetChildSkin.begin(); iter != mWidgetChildSkin.end(); ++iter)
293 mWidgetChild.push_back(*iter);
296 mWidgetChildSkin.clear();
298 mWidgetClient =
nullptr;
308 mWidgetChildSkin.push_back(widget);
312 if (mWidgetClient !=
nullptr)
314 widget = mWidgetClient->
baseCreateWidget(_style, _type, _skin, _coord, _align, _layer, _name, _template);
321 mWidgetChild.push_back(widget);
358 for (VectorWidgetPtr::iterator widget = mWidgetChild.begin(); widget != mWidgetChild.end(); ++widget)
359 (*widget)->_updateView();
360 for (VectorWidgetPtr::iterator widget = mWidgetChildSkin.begin(); widget != mWidgetChildSkin.end(); ++widget)
361 (*widget)->_updateView();
381 for (VectorWidgetPtr::iterator widget = mWidgetChild.begin(); widget != mWidgetChild.end(); ++widget)
382 (*widget)->_updateView();
383 for (VectorWidgetPtr::iterator widget = mWidgetChildSkin.begin(); widget != mWidgetChildSkin.end(); ++widget)
384 (*widget)->_updateView();
396 MYGUI_ASSERT(
nullptr != _widget,
"invalid widget pointer");
403 VectorWidgetPtr::iterator iter = std::find(mWidgetChild.begin(), mWidgetChild.end(), _widget);
404 if (iter != mWidgetChild.end())
410 mWidgetChild.erase(iter);
428 while (!mWidgetChild.empty())
431 Widget* widget = mWidgetChild.back();
432 mWidgetChild.pop_back();
444 MYGUI_ASSERT(mWidgetClient !=
this,
"mWidgetClient can not be this widget");
445 if (mWidgetClient !=
nullptr)
452 if (mAlpha == _alpha)
459 void Widget::_updateAlpha()
461 if (
nullptr != mParent)
462 mRealAlpha = mAlpha * (mInheritsAlpha ? mParent->_getRealAlpha() :
ALPHA_MAX);
466 for (VectorWidgetPtr::iterator widget = mWidgetChild.begin(); widget != mWidgetChild.end(); ++widget)
467 (*widget)->_updateAlpha();
468 for (VectorWidgetPtr::iterator widget = mWidgetChildSkin.begin(); widget != mWidgetChildSkin.end(); ++widget)
469 (*widget)->_updateAlpha();
476 mInheritsAlpha = _inherits;
493 for (VectorWidgetPtr::const_reverse_iterator widget = mWidgetChild.rbegin(); widget != mWidgetChild.rend(); ++widget)
504 for (VectorWidgetPtr::const_reverse_iterator widget = mWidgetChildSkin.rbegin(); widget != mWidgetChildSkin.rend(); ++widget)
515 void Widget::_updateAbsolutePoint()
523 for (VectorWidgetPtr::iterator widget = mWidgetChild.begin(); widget != mWidgetChild.end(); ++widget)
524 (*widget)->_updateAbsolutePoint();
525 for (VectorWidgetPtr::iterator widget = mWidgetChildSkin.begin(); widget != mWidgetChildSkin.end(); ++widget)
526 (*widget)->_updateAbsolutePoint();
533 MYGUI_ASSERT(mWidgetClient !=
this,
"mWidgetClient can not be this widget");
534 if (mWidgetClient !=
nullptr)
537 VectorWidgetPtr::iterator item = std::remove(mWidgetChild.begin(), mWidgetChild.end(), _widget);
538 if (item != mWidgetChild.end())
540 mWidgetChild.erase(item);
541 mWidgetChild.insert(mWidgetChild.begin(), _widget);
549 MYGUI_ASSERT(mWidgetClient !=
this,
"mWidgetClient can not be this widget");
550 if (mWidgetClient !=
nullptr)
553 for (VectorWidgetPtr::iterator widget = mWidgetChild.begin(); widget != mWidgetChild.end(); ++widget)
579 const IntSize& size = _newSize;
581 bool need_move =
false;
582 bool need_size =
false;
646 for (VectorWidgetPtr::iterator widget = mWidgetChild.begin(); widget != mWidgetChild.end(); ++widget)
647 (*widget)->_updateAbsolutePoint();
648 for (VectorWidgetPtr::iterator widget = mWidgetChildSkin.begin(); widget != mWidgetChildSkin.end(); ++widget)
649 (*widget)->_updateAbsolutePoint();
680 for (VectorWidgetPtr::iterator widget = mWidgetChild.begin(); widget != mWidgetChild.end(); ++widget)
681 (*widget)->_setAlign(old,
getSize());
682 for (VectorWidgetPtr::iterator widget = mWidgetChildSkin.begin(); widget != mWidgetChildSkin.end(); ++widget)
683 (*widget)->_setAlign(old,
getSize());
696 for (VectorWidgetPtr::iterator widget = mWidgetChild.begin(); widget != mWidgetChild.end(); ++widget)
697 (*widget)->_updateAbsolutePoint();
698 for (VectorWidgetPtr::iterator widget = mWidgetChildSkin.begin(); widget != mWidgetChildSkin.end(); ++widget)
699 (*widget)->_updateAbsolutePoint();
723 for (VectorWidgetPtr::iterator widget = mWidgetChild.begin(); widget != mWidgetChild.end(); ++widget)
725 for (VectorWidgetPtr::iterator widget = mWidgetChildSkin.begin(); widget != mWidgetChildSkin.end(); ++widget)
767 for (VectorWidgetPtr::iterator widget = mWidgetChild.begin(); widget != mWidgetChild.end(); ++widget)
768 (*widget)->_updateAbsolutePoint();
769 for (VectorWidgetPtr::iterator widget = mWidgetChildSkin.begin(); widget != mWidgetChildSkin.end(); ++widget)
770 (*widget)->_updateAbsolutePoint();
785 mParent->_unlinkChildWidget(
this);
793 else if (!oldlayer.empty())
804 MYGUI_ASSERT(_parent !=
this,
"cyclic attach (attaching to self)");
821 mWidgetStyle = _style;
827 if (mParent ==
nullptr)
830 mParent->_unlinkChildWidget(
this);
833 mParent->_linkChildWidget(
this);
848 if (mParent ==
nullptr)
851 mParent->_unlinkChildWidget(
this);
854 mParent->_linkChildWidget(
this);
859 for (VectorWidgetPtr::iterator widget = mWidgetChild.begin(); widget != mWidgetChild.end(); ++widget)
860 (*widget)->_updateAbsolutePoint();
861 for (VectorWidgetPtr::iterator widget = mWidgetChildSkin.begin(); widget != mWidgetChildSkin.end(); ++widget)
862 (*widget)->_updateAbsolutePoint();
874 if (mParent ==
nullptr)
877 mParent->_unlinkChildWidget(
this);
880 mParent->_linkChildWidget(
this);
885 for (VectorWidgetPtr::iterator widget = mWidgetChild.begin(); widget != mWidgetChild.end(); ++widget)
886 (*widget)->_updateAbsolutePoint();
887 for (VectorWidgetPtr::iterator widget = mWidgetChildSkin.begin(); widget != mWidgetChildSkin.end(); ++widget)
888 (*widget)->_updateAbsolutePoint();
900 if (_style == mWidgetStyle)
929 return baseCreateWidget(_style, _type, _skin, _coord, _align, _layer, _name,
false);
934 MYGUI_ASSERT(mWidgetClient !=
this,
"mWidgetClient can not be this widget");
935 if (mWidgetClient !=
nullptr)
942 MYGUI_ASSERT(mWidgetClient !=
this,
"mWidgetClient can not be this widget");
943 if (mWidgetClient !=
nullptr)
945 return mWidgetChild.size();
950 MYGUI_ASSERT(mWidgetClient !=
this,
"mWidgetClient can not be this widget");
951 if (mWidgetClient !=
nullptr)
954 return mWidgetChild[_index];
967 if (mVisible == _value)
974 void Widget::_updateVisible()
977 bool value = mVisible && mInheritsVisible;
981 for (VectorWidgetPtr::iterator widget = mWidgetChild.begin(); widget != mWidgetChild.end(); ++widget)
982 (*widget)->_updateVisible();
983 for (VectorWidgetPtr::iterator widget = mWidgetChildSkin.begin(); widget != mWidgetChildSkin.end(); ++widget)
984 (*widget)->_updateVisible();
992 if (mEnabled == _value)
999 void Widget::_updateEnabled()
1002 bool value = mEnabled && mInheritsEnabled;
1004 for (VectorWidgetPtr::iterator iter = mWidgetChild.begin(); iter != mWidgetChild.end(); ++iter)
1005 (*iter)->_updateEnabled();
1006 for (VectorWidgetPtr::iterator iter = mWidgetChildSkin.begin(); iter != mWidgetChildSkin.end(); ++iter)
1007 (*iter)->_updateEnabled();
1019 for (VectorWidgetPtr::iterator widget = mWidgetChildSkin.begin(); widget != mWidgetChildSkin.end(); ++widget)
1020 (*widget)->setColour(_value);
1044 void Widget::_linkChildWidget(
Widget* _widget)
1046 VectorWidgetPtr::iterator iter = std::find(mWidgetChild.begin(), mWidgetChild.end(), _widget);
1047 MYGUI_ASSERT(iter == mWidgetChild.end(),
"widget already exist");
1048 mWidgetChild.push_back(_widget);
1051 void Widget::_unlinkChildWidget(Widget* _widget)
1053 VectorWidgetPtr::iterator iter = std::remove(mWidgetChild.begin(), mWidgetChild.end(), _widget);
1054 MYGUI_ASSERT(iter != mWidgetChild.end(),
"widget not found");
1055 mWidgetChild.erase(iter);
1069 for (MapString::const_iterator item = properties.begin(); item != properties.end(); ++item)
1075 std::string key = _key;
1076 std::string value = _value;
1080 size_t index = key.find(
"_");
1081 if (index != std::string::npos)
1084 key = key.substr(index + 1);
1095 for (VectorWidgetPtr::iterator iter = mWidgetChildSkin.begin(); iter != mWidgetChildSkin.end(); ++iter)
1096 (*iter)->findWidgets(_name, result);
1104 _result.push_back(
this);
1106 MYGUI_ASSERT(mWidgetClient !=
this,
"mWidgetClient can not be this widget");
1107 if (mWidgetClient !=
nullptr)
1113 for (VectorWidgetPtr::iterator widget = mWidgetChild.begin(); widget != mWidgetChild.end(); ++widget)
1114 (*widget)->findWidgets(_name, _result);
1120 mWidgetChild.push_back(_widget);
1134 mWidgetClient = _widget;
1139 return baseCreateWidget(_style, _type, _skin, _coord, _align, _layer, _name,
true);
1145 if (_key ==
"Position")
1146 setPosition(utility::parseValue<IntPoint>(_value));
1148 else if (_key ==
"Size")
1149 setSize(utility::parseValue<IntSize>(_value));
1151 else if (_key ==
"Coord")
1152 setCoord(utility::parseValue<IntCoord>(_value));
1154 else if (_key ==
"Visible")
1155 setVisible(utility::parseValue<bool>(_value));
1156 else if (_key ==
"Alpha")
1157 setAlpha(utility::parseValue<float>(_value));
1158 else if (_key ==
"Colour")
1159 setColour(utility::parseValue<Colour>(_value));
1160 else if (_key ==
"InheritsAlpha")
1162 else if (_key ==
"InheritsPick")
1164 else if (_key ==
"MaskPick")
1166 else if (_key ==
"NeedKey")
1168 else if (_key ==
"NeedMouse")
1170 else if (_key ==
"Enabled")
1171 setEnabled(utility::parseValue<bool>(_value));
1172 else if (_key ==
"NeedToolTip")
1174 else if (_key ==
"Pointer")
1237 return mInheritsAlpha;
1262 return mWidgetClient;
1267 return mWidgetStyle;
1277 mContainer = _value;
1295 float Widget::_getRealAlpha()
const
1302 return mInheritsEnabled;
1307 return mInheritsVisible;
1310 void Widget::resizeLayerItemView(
const IntSize& _oldView,
const IntSize& _newView)
void addChildNode(LayerItem *_item)
void addChildItem(LayerItem *_item)
void _setSkinItemVisible(bool _value)
virtual ILayerItem * getLayerItemByPoint(int _left, int _top) const =0
const std::string & getName() const
const IntCoord & getCoord() const
types::TSize< int > IntSize
void detachFromLayerItemNode(bool _deep)
const MapString & getProperties() const
virtual const IntSize & getSize() const =0
void setUserString(const std::string &_key, const std::string &_value)
IntPoint mAbsolutePosition
static LayoutManager & getInstance()
void _setSkinItemAlpha(float _value)
void _unlinkChildWidget(Widget *_widget)
ICroppedRectangle * mCroppedParent
const VectorChildSkinInfo & getChild() const
ResourceLayout * getByName(const std::string &_name, bool _throw=true) const
const IntSize & getSize() const
static IntCoord convertFromRelative(const FloatCoord &_coord, const IntSize &_view)
types::TCoord< float > FloatCoord
virtual const IntSize & getViewSize() const =0
ResourceSkin * getByName(const std::string &_name) const
void removeChildNode(LayerItem *_item)
types::TCoord< int > IntCoord
void _updateSkinItemView()
#define MYGUI_LOG(level, text)
static bool checkProperty(Widget *_owner, std::string &_key, std::string &_value)
#define MYGUI_EXCEPT(dest)
const IntPoint & getAbsolutePosition() const
void detachFromLayer(Widget *_item)
bool _checkOutside() const
std::vector< Widget * > VectorWidgetPtr
#define MYGUI_ASSERT(exp, dest)
std::map< std::string, std::string > MapString
void attachToLayerNode(const std::string &_name, Widget *_item)
int _getViewBottom() const
void _setSubSkinVisible(bool _visible)
static bool isIgnoreProperty(const std::string &_key)
const VectorWidgetInfo & getLayoutData() const
void _createSkinItem(ResourceSkin *_info)
#define MYGUI_ASSERT_RANGE(index, size, owner)
void removeChildItem(LayerItem *_item)
types::TPoint< float > FloatPoint
void _setSkinItemAlign(const IntSize &_size)
ILayer * getLayer() const
const std::string & getCurrentLayout() const
std::vector< ChildSkinInfo > VectorChildSkinInfo
int _getViewRight() const
std::vector< WidgetInfo > VectorWidgetInfo
bool _setSkinItemState(const std::string &_state)
types::TSize< float > FloatSize
void _correctSkinItemView()
TPoint< T > point() const
Widget * createWidget(const WidgetInfo &_widgetInfo, const std::string &_prefix="", Widget *_parent=0, bool _template=false)
void _setSkinItemColour(const Colour &_value)
void _linkChildWidget(Widget *_widget)
types::TPoint< int > IntPoint