MyGUI  3.4.0
MyGUI_Widget.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_Widget.h"
9 #include "MyGUI_Gui.h"
10 #include "MyGUI_InputManager.h"
11 #include "MyGUI_SkinManager.h"
12 #include "MyGUI_SubWidgetManager.h"
13 #include "MyGUI_WidgetManager.h"
14 #include "MyGUI_ResourceSkin.h"
15 #include "MyGUI_WidgetDefines.h"
16 #include "MyGUI_LayerItem.h"
17 #include "MyGUI_LayerManager.h"
18 #include "MyGUI_RenderItem.h"
19 #include "MyGUI_ISubWidget.h"
20 #include "MyGUI_ISubWidgetText.h"
21 #include "MyGUI_TextBox.h"
22 #include "MyGUI_FactoryManager.h"
23 #include "MyGUI_CoordConverter.h"
24 #include "MyGUI_RenderManager.h"
25 #include "MyGUI_ToolTipManager.h"
26 #include "MyGUI_LayoutManager.h"
27 
28 namespace MyGUI
29 {
30 
32  mWidgetClient(nullptr),
33  mEnabled(true),
34  mInheritsEnabled(true),
35  mInheritsVisible(true),
36  mAlpha(ALPHA_MAX),
37  mRealAlpha(ALPHA_MAX),
38  mInheritsAlpha(true),
39  mParent(nullptr),
40  mWidgetStyle(WidgetStyle::Child),
41  mContainer(nullptr),
42  mAlign(Align::Default),
43  mVisible(true),
44  mDepth(0)
45  {
46  }
47 
48  void Widget::_initialise(WidgetStyle _style, const IntCoord& _coord, const std::string& _skinName, Widget* _parent, ICroppedRectangle* _croppedParent, const std::string& _name)
49  {
50  ResourceSkin* skinInfo = nullptr;
51  ResourceLayout* templateInfo = nullptr;
52 
53  if (LayoutManager::getInstance().isExist(_skinName))
54  templateInfo = LayoutManager::getInstance().getByName(_skinName);
55  else
56  skinInfo = SkinManager::getInstance().getByName(_skinName);
57 
58  mCoord = _coord;
59 
60  mAlign = Align::Default;
61  mWidgetStyle = _style;
62  mName = _name;
63 
64  mCroppedParent = _croppedParent;
65  mParent = _parent;
66 
67 
68 #if MYGUI_DEBUG_MODE == 1
69  // проверяем соответсвие входных данных
70  if (mWidgetStyle == WidgetStyle::Child)
71  {
72  MYGUI_ASSERT(mCroppedParent, "must be cropped");
73  MYGUI_ASSERT(mParent, "must be parent");
74  }
75  else if (mWidgetStyle == WidgetStyle::Overlapped)
76  {
77  MYGUI_ASSERT((mParent == nullptr) == (mCroppedParent == nullptr), "error cropped");
78  }
79  else if (mWidgetStyle == WidgetStyle::Popup)
80  {
81  MYGUI_ASSERT(!mCroppedParent, "cropped must be nullptr");
82  MYGUI_ASSERT(mParent, "must be parent");
83  }
84 #endif
85 
86  // корректируем абсолютные координаты
87  mAbsolutePosition = _coord.point();
88 
89  if (nullptr != mCroppedParent)
91 
92  const WidgetInfo* root = initialiseWidgetSkinBase(skinInfo, templateInfo);
93 
94  // дочернее окно обыкновенное
95  if (mWidgetStyle == WidgetStyle::Child)
96  {
97  if (mParent)
98  mParent->addChildItem(this);
99  }
100  // дочернее нуно перекрывающееся
101  else if (mWidgetStyle == WidgetStyle::Overlapped)
102  {
103  // дочернее перекрывающееся
104  if (mParent)
105  mParent->addChildNode(this);
106  }
107 
108  // витр метод для наследников
110 
111  if (skinInfo != nullptr)
112  setSkinProperty(skinInfo);
113 
114  if (root != nullptr)
115  {
116  for (VectorStringPairs::const_iterator iter = root->properties.begin(); iter != root->properties.end(); ++iter)
117  {
118  setProperty(iter->first, iter->second);
119  }
120  }
121  }
122 
124  {
126 
127  // витр метод для наследников
129 
130  shutdownWidgetSkinBase();
131 
133 
134  // дочернее окно обыкновенное
135  if (mWidgetStyle == WidgetStyle::Child)
136  {
137  if (mParent)
138  mParent->removeChildItem(this);
139  }
140  // дочернее нуно перекрывающееся
141  else if (mWidgetStyle == WidgetStyle::Overlapped)
142  {
143  // дочернее перекрывающееся
144  if (mParent)
145  mParent->removeChildNode(this);
146  }
147 
148  mParent = nullptr;
149  mCroppedParent = nullptr;
150  }
151 
152  void Widget::changeWidgetSkin(const std::string& _skinName)
153  {
154  ResourceSkin* skinInfo = nullptr;
155  ResourceLayout* templateInfo = nullptr;
156 
157  if (LayoutManager::getInstance().isExist(_skinName))
158  templateInfo = LayoutManager::getInstance().getByName(_skinName);
159  else
160  skinInfo = SkinManager::getInstance().getByName(_skinName);
161 
163 
164  saveLayerItem();
165 
166  shutdownWidgetSkinBase();
167  const WidgetInfo* root = initialiseWidgetSkinBase(skinInfo, templateInfo);
168 
170 
172 
173  if (skinInfo != nullptr)
174  setSkinProperty(skinInfo);
175 
176  if (root != nullptr)
177  {
178  for (VectorStringPairs::const_iterator iter = root->properties.begin(); iter != root->properties.end(); ++iter)
179  {
180  setProperty(iter->first, iter->second);
181  }
182  }
183  }
184 
185  const WidgetInfo* Widget::initialiseWidgetSkinBase(ResourceSkin* _skinInfo, ResourceLayout* _templateInfo)
186  {
187  const WidgetInfo* root = nullptr;
188  bool skinOnly = false;
189 
190  if (_skinInfo == nullptr)
191  {
192  skinOnly = true;
193  std::string skinName;
194 
195  const VectorWidgetInfo& data = _templateInfo->getLayoutData();
196  for (VectorWidgetInfo::const_iterator item = data.begin(); item != data.end(); ++item)
197  {
198  if ((*item).name == "Root")
199  {
200  skinName = (*item).skin;
201  root = &(*item);
202  break;
203  }
204  }
205 
206  _skinInfo = SkinManager::getInstance().getByName(skinName);
207  }
208 
209  //SAVE
210  const IntSize& _size = mCoord.size();
211 
212  if (_skinInfo != nullptr)
213  {
214  //FIXME - явный вызов
215  Widget::setSize(_skinInfo->getSize());
216 
217  _createSkinItem(_skinInfo);
218  }
219 
220  // выставляем альфу, корректировка по отцу автоматически
221  _updateAlpha();
222  _updateEnabled();
223  _updateVisible();
224 
225  if (!skinOnly)
226  {
227  const MapString& properties = _skinInfo->getProperties();
228  for (MapString::const_iterator item = properties.begin(); item != properties.end(); ++item)
229  {
230  if (BackwardCompatibility::isIgnoreProperty((*item).first))
231  setUserString((*item).first, (*item).second);
232  }
233 
234  // создаем детей скина
235  const VectorChildSkinInfo& child = _skinInfo->getChild();
236  for (VectorChildSkinInfo::const_iterator iter = child.begin(); iter != child.end(); ++iter)
237  {
238  Widget* widget = baseCreateWidget(iter->style, iter->type, iter->skin, iter->coord, iter->align, iter->layer, iter->name, true);
239  // заполняем UserString пропертями
240  for (MapString::const_iterator prop = iter->params.begin(); prop != iter->params.end(); ++prop)
241  widget->setUserString(prop->first, prop->second);
242  }
243  }
244 
245  if (root != nullptr)
246  {
247  //FIXME - явный вызов
248  Widget::setSize(root->intCoord.size());
249 
250  for (MapString::const_iterator iter = root->userStrings.begin(); iter != root->userStrings.end(); ++iter)
251  {
252  setUserString(iter->first, iter->second);
253  }
254 
255  for (VectorWidgetInfo::const_iterator iter = root->childWidgetsInfo.begin(); iter != root->childWidgetsInfo.end(); ++iter)
256  {
257  _templateInfo->createWidget(*iter, "", this, true);
258  }
259  }
260 
261  //FIXME - явный вызов
262  Widget::setSize(_size);
263 
264  return root;
265  }
266 
267  void Widget::shutdownWidgetSkinBase()
268  {
269  setMaskPick("");
270 
271  _deleteSkinItem();
272 
273  // удаляем виджеты чтобы ли в скине
274  for (VectorWidgetPtr::iterator iter = mWidgetChildSkin.begin(); iter != mWidgetChildSkin.end(); ++iter)
275  {
276  // Добавляем себя чтобы удалилось
277  mWidgetChild.push_back(*iter);
278  _destroyChildWidget(*iter);
279  }
280  mWidgetChildSkin.clear();
281 
282  mWidgetClient = nullptr;
283  }
284 
285  Widget* 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)
286  {
287  Widget* widget = nullptr;
288 
289  if (_template)
290  {
291  widget = WidgetManager::getInstance().createWidget(_style, _type, _skin, _coord, this, _style == WidgetStyle::Popup ? nullptr : this, _name);
292  mWidgetChildSkin.push_back(widget);
293  }
294  else
295  {
296  if (mWidgetClient != nullptr)
297  {
298  widget = mWidgetClient->baseCreateWidget(_style, _type, _skin, _coord, _align, _layer, _name, _template);
299  onWidgetCreated(widget);
300  return widget;
301  }
302  else
303  {
304  widget = WidgetManager::getInstance().createWidget(_style, _type, _skin, _coord, this, _style == WidgetStyle::Popup ? nullptr : this, _name);
305  addWidget(widget);
306  }
307  }
308 
309  widget->setAlign(_align);
310 
311  // присоединяем виджет с уровню
312  if (!_layer.empty() && widget->isRootWidget())
314 
315  onWidgetCreated(widget);
316 
317  return widget;
318  }
319 
320  Widget* Widget::createWidgetRealT(const std::string& _type, const std::string& _skin, const FloatCoord& _coord, Align _align, const std::string& _name)
321  {
322  return createWidgetT(_type, _skin, CoordConverter::convertFromRelative(_coord, getSize()), _align, _name);
323  }
324 
326  {
327  bool margin = mCroppedParent ? _checkMargin() : false;
328 
329  // вьюпорт стал битым
330  if (margin)
331  {
332  // проверка на полный выход за границу
333  if (_checkOutside())
334  {
335  // запоминаем текущее состояние
336  mIsMargin = margin;
337 
338  // скрываем
339  _setSubSkinVisible(false);
340 
341  // вся иерархия должна быть проверенна
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();
346 
347  return;
348  }
349  }
350  // мы не обрезаны и были нормальные
351  else if (!mIsMargin)
352  {
354  return;
355  }
356 
357  // запоминаем текущее состояние
358  mIsMargin = margin;
359 
360  // если скин был скрыт, то покажем
361  _setSubSkinVisible(true);
362 
363  // обновляем наших детей, а они уже решат обновлять ли своих детей
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();
368 
370  }
371 
372  bool Widget::_setWidgetState(const std::string& _state)
373  {
374  return _setSkinItemState(_state);
375  }
376 
378  {
379  MYGUI_ASSERT(nullptr != _widget, "invalid widget pointer");
380 
381  if (mParent != nullptr && mParent->getClientWidget() == this)
382  mParent->onWidgetDestroy(_widget);
383 
384  onWidgetDestroy(_widget);
385 
386  VectorWidgetPtr::iterator iter = std::find(mWidgetChild.begin(), mWidgetChild.end(), _widget);
387  if (iter != mWidgetChild.end())
388  {
389  // сохраняем указатель
390  MyGUI::Widget* widget = *iter;
391 
392  // удаляем из списка
393  mWidgetChild.erase(iter);
394 
395  // отписываем от всех
397 
398  // непосредственное удаление
400  }
401  else
402  {
403  MYGUI_EXCEPT("Widget '" << _widget->getName() << "' not found");
404  }
405  }
406 
407  // удаляет всех детей
409  {
411  while (!mWidgetChild.empty())
412  {
413  // сразу себя отписывем, иначе вложенной удаление убивает все
414  Widget* widget = mWidgetChild.back();
415  mWidgetChild.pop_back();
416 
417  // отписываем от всех
418  manager.unlinkFromUnlinkers(widget);
419 
420  // и сами удалим, так как его больше в списке нет
422  }
423  }
424 
426  {
427  if (mWidgetClient != nullptr)
428  return mWidgetClient->getCoord();
429  return IntCoord(0, 0, mCoord.width, mCoord.height);
430  }
431 
432  void Widget::setAlpha(float _alpha)
433  {
434  if (mAlpha == _alpha)
435  return;
436  mAlpha = _alpha;
437 
438  _updateAlpha();
439  }
440 
441  void Widget::_updateAlpha()
442  {
443  if (nullptr != mParent)
444  mRealAlpha = mAlpha * (mInheritsAlpha ? mParent->_getRealAlpha() : ALPHA_MAX);
445  else
446  mRealAlpha = mAlpha;
447 
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();
452 
453  _setSkinItemAlpha(mRealAlpha);
454  }
455 
456  void Widget::setInheritsAlpha(bool _inherits)
457  {
458  mInheritsAlpha = _inherits;
459  _updateAlpha();
460  }
461 
462  ILayerItem* Widget::getLayerItemByPoint(int _left, int _top) const
463  {
464  // проверяем попадание
465  if (!mEnabled
466  || !mVisible
467  || (!getNeedMouseFocus() && !getInheritsPick())
468  || !_checkPoint(_left, _top)
469  // если есть маска, проверяем еще и по маске
470  || !isMaskPickInside(IntPoint(_left - mCoord.left, _top - mCoord.top), mCoord)
471  )
472  return nullptr;
473 
474  // спрашиваем у детишек
475  for (VectorWidgetPtr::const_reverse_iterator widget = mWidgetChild.rbegin(); widget != mWidgetChild.rend(); ++widget)
476  {
477  // общаемся только с послушными детьми
478  if ((*widget)->mWidgetStyle == WidgetStyle::Popup)
479  continue;
480 
481  ILayerItem* item = (*widget)->getLayerItemByPoint(_left - mCoord.left, _top - mCoord.top);
482  if (item != nullptr)
483  return item;
484  }
485  // спрашиваем у детишек скина
486  for (VectorWidgetPtr::const_reverse_iterator widget = mWidgetChildSkin.rbegin(); widget != mWidgetChildSkin.rend(); ++widget)
487  {
488  ILayerItem* item = (*widget)->getLayerItemByPoint(_left - mCoord.left, _top - mCoord.top);
489  if (item != nullptr)
490  return item;
491  }
492 
493  // непослушные дети
494  return getInheritsPick() ? nullptr : const_cast<Widget*>(this);
495  }
496 
497  void Widget::_updateAbsolutePoint()
498  {
499  // мы рут, нам не надо
500  if (!mCroppedParent)
501  return;
502 
504 
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();
509 
511  }
512 
513  void Widget::_forcePick(Widget* _widget)
514  {
515  if (mWidgetClient != nullptr)
516  {
517  mWidgetClient->_forcePick(_widget);
518  return;
519  }
520 
521  VectorWidgetPtr::iterator iter = std::find(mWidgetChild.begin(), mWidgetChild.end(), _widget);
522  if (iter == mWidgetChild.end())
523  return;
524 
525  VectorWidgetPtr copy = mWidgetChild;
526  for (VectorWidgetPtr::iterator widget = copy.begin(); widget != copy.end(); ++widget)
527  {
528  if ((*widget) == _widget)
529  (*widget)->setDepth(-1);
530  else if ((*widget)->getDepth() == -1)
531  (*widget)->setDepth(0);
532  }
533  }
534 
535  Widget* Widget::findWidget(const std::string& _name)
536  {
537  if (_name == mName)
538  return this;
539  if (mWidgetClient != nullptr)
540  return mWidgetClient->findWidget(_name);
541 
542  for (VectorWidgetPtr::iterator widget = mWidgetChild.begin(); widget != mWidgetChild.end(); ++widget)
543  {
544  Widget* find = (*widget)->findWidget(_name);
545  if (nullptr != find)
546  return find;
547  }
548  return nullptr;
549  }
550 
552  {
554  }
555 
556  void Widget::setRealSize(const FloatSize& _size)
557  {
559  }
560 
561  void Widget::setRealCoord(const FloatCoord& _coord)
562  {
564  }
565 
566  void Widget::_setAlign(const IntSize& _oldsize, const IntSize& _newSize)
567  {
568  const IntSize& size = _newSize;//getParentSize();
569 
570  bool need_move = false;
571  bool need_size = false;
572  IntCoord coord = mCoord;
573 
574  // первоначальное выравнивание
575  if (mAlign.isHStretch())
576  {
577  // растягиваем
578  coord.width = mCoord.width + (size.width - _oldsize.width);
579  need_size = true;
580  }
581  else if (mAlign.isRight())
582  {
583  // двигаем по правому краю
584  coord.left = mCoord.left + (size.width - _oldsize.width);
585  need_move = true;
586  }
587  else if (mAlign.isHCenter())
588  {
589  // выравнивание по горизонтали без растяжения
590  coord.left = (size.width - mCoord.width) / 2;
591  need_move = true;
592  }
593 
594  if (mAlign.isVStretch())
595  {
596  // растягиваем
597  coord.height = mCoord.height + (size.height - _oldsize.height);
598  need_size = true;
599  }
600  else if (mAlign.isBottom())
601  {
602  // двигаем по нижнему краю
603  coord.top = mCoord.top + (size.height - _oldsize.height);
604  need_move = true;
605  }
606  else if (mAlign.isVCenter())
607  {
608  // выравнивание по вертикали без растяжения
609  coord.top = (size.height - mCoord.height) / 2;
610  need_move = true;
611  }
612 
613  if (need_move)
614  {
615  if (need_size)
616  setCoord(coord);
617  else
618  setPosition(coord.point());
619  }
620  else if (need_size)
621  {
622  setSize(coord.size());
623  }
624  else
625  {
626  _updateView(); // только если не вызвано передвижение и сайз
627  }
628  }
629 
630  void Widget::setPosition(const IntPoint& _point)
631  {
632  // обновляем абсолютные координаты
633  mAbsolutePosition += _point - mCoord.point();
634 
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();
639 
640  mCoord = _point;
641 
642  _updateView();
643 
644  eventChangeCoord(this);
645  }
646 
647  void Widget::setSize(const IntSize& _size)
648  {
649  // устанавливаем новую координату а старую пускаем в расчеты
650  IntSize old = mCoord.size();
651  mCoord = _size;
652 
653  bool visible = true;
654 
655  // обновляем выравнивание
656  bool margin = mCroppedParent ? _checkMargin() : false;
657 
658  if (margin)
659  {
660  // проверка на полный выход за границу
661  if (_checkOutside())
662  {
663  // скрываем
664  visible = false;
665  }
666  }
667 
668  _setSubSkinVisible(visible);
669 
670  // передаем старую координату , до вызова, текущая координата отца должна быть новой
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());
675 
676  _setSkinItemAlign(old);
677 
678  // запоминаем текущее состояние
679  mIsMargin = margin;
680 
681  eventChangeCoord(this);
682  }
683 
684  void Widget::setCoord(const IntCoord& _coord)
685  {
686  // обновляем абсолютные координаты
687  mAbsolutePosition += _coord.point() - mCoord.point();
688 
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();
693 
694  // устанавливаем новую координату а старую пускаем в расчеты
695  IntCoord old = mCoord;
696  mCoord = _coord;
697 
698  bool visible = true;
699 
700  // обновляем выравнивание
701  bool margin = mCroppedParent ? _checkMargin() : false;
702 
703  if (margin)
704  {
705  // проверка на полный выход за границу
706  if (_checkOutside())
707  {
708  // скрываем
709  visible = false;
710  }
711  }
712 
713  _setSubSkinVisible(visible);
714 
715  // передаем старую координату , до вызова, текущая координата отца должна быть новой
716  for (VectorWidgetPtr::iterator widget = mWidgetChild.begin(); widget != mWidgetChild.end(); ++widget)
717  (*widget)->_setAlign(old.size(), getSize());
718  for (VectorWidgetPtr::iterator widget = mWidgetChildSkin.begin(); widget != mWidgetChildSkin.end(); ++widget)
719  (*widget)->_setAlign(old.size(), getSize());
720 
721  _setSkinItemAlign(old.size());
722 
723  // запоминаем текущее состояние
724  mIsMargin = margin;
725 
726  eventChangeCoord(this);
727  }
728 
729  void Widget::setAlign(Align _value)
730  {
731  mAlign = _value;
732  }
733 
734  void Widget::detachFromWidget(const std::string& _layer)
735  {
736  std::string oldlayer = getLayer() != nullptr ? getLayer()->getName() : "";
737 
738  Widget* parent = getParent();
739  if (parent)
740  {
741  // отдетачиваемся от лееров
742  if ( ! isRootWidget() )
743  {
745 
746  if (mWidgetStyle == WidgetStyle::Child)
747  {
748  mParent->removeChildItem(this);
749  }
750  else if (mWidgetStyle == WidgetStyle::Overlapped)
751  {
752  mParent->removeChildNode(this);
753  }
754 
755  mWidgetStyle = WidgetStyle::Overlapped;
756 
757  mCroppedParent = nullptr;
758 
759  // обновляем координаты
761 
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();
766 
767  // сбрасываем обрезку
768  mMargin.clear();
769 
770  _updateView();
771  }
772 
773  // нам нужен самый рутовый парент
774  while (parent->getParent())
775  parent = parent->getParent();
776 
777  //mIWidgetCreator = parent->mIWidgetCreator;
778  //mIWidgetCreator->_linkChildWidget(this);
780  mParent->_unlinkChildWidget(this);
781  mParent = nullptr;
782  }
783 
784  if (!_layer.empty())
785  {
787  }
788  else if (!oldlayer.empty())
789  {
791  }
792 
793  _updateAlpha();
794  }
795 
796  void Widget::attachToWidget(Widget* _parent, WidgetStyle _style, const std::string& _layer)
797  {
798  MYGUI_ASSERT(_parent, "parent must be valid");
799  MYGUI_ASSERT(_parent != this, "cyclic attach (attaching to self)");
800 
801  // attach to client if widget have it
802  if (_parent->getClientWidget())
803  _parent = _parent->getClientWidget();
804 
805  // проверяем на цикличность атача
806  Widget* parent = _parent;
807  while (parent->getParent())
808  {
809  MYGUI_ASSERT(parent != this, "cyclic attach");
810  parent = parent->getParent();
811  }
812 
813  // отдетачиваемся от всего
815 
816  mWidgetStyle = _style;
817 
818  if (_style == WidgetStyle::Popup)
819  {
820  //mIWidgetCreator->_unlinkChildWidget(this);
821  //mIWidgetCreator = _parent;
822  if (mParent == nullptr)
824  else
825  mParent->_unlinkChildWidget(this);
826 
827  mParent = _parent;
828  mParent->_linkChildWidget(this);
829 
830  mCroppedParent = nullptr;
831 
832  if (!_layer.empty())
833  {
835  }
836  }
837  else if (_style == WidgetStyle::Child)
838  {
840 
841  //mIWidgetCreator->_unlinkChildWidget(this);
842  //mIWidgetCreator = _parent;
843  if (mParent == nullptr)
845  else
846  mParent->_unlinkChildWidget(this);
847 
848  mParent = _parent;
849  mParent->_linkChildWidget(this);
850 
851  mCroppedParent = _parent;
853 
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();
858 
859  mParent->addChildItem(this);
860 
861  _updateView();
862  }
863  else if (_style == WidgetStyle::Overlapped)
864  {
866 
867  //mIWidgetCreator->_unlinkChildWidget(this);
868  //mIWidgetCreator = _parent;
869  if (mParent == nullptr)
871  else
872  mParent->_unlinkChildWidget(this);
873 
874  mParent = _parent;
875  mParent->_linkChildWidget(this);
876 
877  mCroppedParent = _parent;
879 
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();
884 
885  mParent->addChildNode(this);
886 
887  _updateView();
888  }
889 
890  _updateAlpha();
891  }
892 
893  void Widget::setWidgetStyle(WidgetStyle _style, const std::string& _layer)
894  {
895  if (_style == mWidgetStyle)
896  return;
897  if (nullptr == getParent())
898  return;
899 
900  Widget* parent = mParent;
901 
903  attachToWidget(parent, _style, _layer);
904  // ищем леер к которому мы присоедененны
905  }
906 
907  Widget* Widget::createWidgetT(const std::string& _type, const std::string& _skin, const IntCoord& _coord, Align _align, const std::string& _name)
908  {
909  return baseCreateWidget(WidgetStyle::Child, _type, _skin, _coord, _align, "", _name, false);
910  }
911 
912  Widget* Widget::createWidgetT(const std::string& _type, const std::string& _skin, int _left, int _top, int _width, int _height, Align _align, const std::string& _name)
913  {
914  return createWidgetT(_type, _skin, IntCoord(_left, _top, _width, _height), _align, _name);
915  }
916 
917  Widget* Widget::createWidgetRealT(const std::string& _type, const std::string& _skin, float _left, float _top, float _width, float _height, Align _align, const std::string& _name)
918  {
919  return createWidgetRealT(_type, _skin, FloatCoord(_left, _top, _width, _height), _align, _name);
920  }
921 
922  Widget* 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)
923  {
924  return baseCreateWidget(_style, _type, _skin, _coord, _align, _layer, _name, false);
925  }
926 
928  {
929  if (mWidgetClient != nullptr)
930  return mWidgetClient->getEnumerator();
931  return Enumerator<VectorWidgetPtr>(mWidgetChild.begin(), mWidgetChild.end());
932  }
933 
935  {
936  if (mWidgetClient != nullptr)
937  return mWidgetClient->getChildCount();
938  return mWidgetChild.size();
939  }
940 
941  Widget* Widget::getChildAt(size_t _index)
942  {
943  if (mWidgetClient != nullptr)
944  return mWidgetClient->getChildAt(_index);
945  MYGUI_ASSERT_RANGE(_index, mWidgetChild.size(), "Widget::getChildAt");
946  return mWidgetChild[_index];
947  }
948 
950  {
951  if (getInheritedEnabled())
952  _setWidgetState("normal");
953  else
954  _setWidgetState("disabled");
955  }
956 
957  void Widget::setVisible(bool _value)
958  {
959  if (mVisible == _value)
960  return;
961  mVisible = _value;
962 
963  _updateVisible();
964  }
965 
966  void Widget::_updateVisible()
967  {
968  mInheritsVisible = mParent == nullptr || (mParent->getVisible() && mParent->getInheritedVisible());
969  bool value = mVisible && mInheritsVisible;
970 
971  _setSkinItemVisible(value);
972 
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();
977 
978  if (!value && InputManager::getInstance().getMouseFocusWidget() == this)
980  if (!value && InputManager::getInstance().getKeyFocusWidget() == this)
982  }
983 
984  void Widget::setEnabled(bool _value)
985  {
986  if (mEnabled == _value)
987  return;
988  mEnabled = _value;
989 
990  _updateEnabled();
991  }
992 
993  void Widget::_updateEnabled()
994  {
995  mInheritsEnabled = mParent == nullptr || (mParent->getInheritedEnabled());
996  mInheritsEnabled = mInheritsEnabled && mEnabled;
997 
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();
1002 
1003  baseUpdateEnable();
1004 
1005  if (!mInheritsEnabled)
1007  }
1008 
1009  void Widget::setColour(const Colour& _value)
1010  {
1011  _setSkinItemColour(_value);
1012 
1013  for (VectorWidgetPtr::iterator widget = mWidgetChildSkin.begin(); widget != mWidgetChildSkin.end(); ++widget)
1014  (*widget)->setColour(_value);
1015  }
1016 
1018  {
1019  if (mCroppedParent)
1020  return static_cast<Widget*>(mCroppedParent)->getSize();
1021  if (getLayer())
1022  return getLayer()->getSize();
1023 
1025  }
1026 
1027  void Widget::_resetContainer(bool _updateOnly)
1028  {
1029  if (getNeedToolTip())
1031  }
1032 
1033  bool Widget::_checkPoint(int _left, int _top) const
1034  {
1035  return ! ((_getViewLeft() > _left) || (_getViewTop() > _top) || (_getViewRight() < _left) || (_getViewBottom() < _top));
1036  }
1037 
1038  void Widget::_linkChildWidget(Widget* _widget)
1039  {
1040  VectorWidgetPtr::iterator iter = std::find(mWidgetChild.begin(), mWidgetChild.end(), _widget);
1041  MYGUI_ASSERT(iter == mWidgetChild.end(), "widget already exist");
1042  addWidget(_widget);
1043  }
1044 
1045  void Widget::_unlinkChildWidget(Widget* _widget)
1046  {
1047  VectorWidgetPtr::iterator iter = std::remove(mWidgetChild.begin(), mWidgetChild.end(), _widget);
1048  MYGUI_ASSERT(iter != mWidgetChild.end(), "widget not found");
1049  mWidgetChild.erase(iter);
1050  }
1051 
1053  {
1054  }
1055 
1057  {
1059  assignWidget(mWidgetClient, "Client");
1060  }
1061 
1062  void Widget::setSkinProperty(ResourceSkin* _info)
1063  {
1064  const MapString& properties = _info->getProperties();
1065  for (MapString::const_iterator item = properties.begin(); item != properties.end(); ++item)
1066  setProperty((*item).first, (*item).second);
1067  }
1068 
1069  void Widget::setProperty(const std::string& _key, const std::string& _value)
1070  {
1071  std::string key = _key;
1072  std::string value = _value;
1073 
1074  if (BackwardCompatibility::checkProperty(this, key, value))
1075  {
1076  size_t index = key.find("_");
1077  if (index != std::string::npos)
1078  {
1079  MYGUI_LOG(Warning, "Widget property '" << key << "' have type prefix - use '" << key.substr(index + 1) << "' instead [" << LayoutManager::getInstance().getCurrentLayout() << "]");
1080  key = key.substr(index + 1);
1081  }
1082 
1083  setPropertyOverride(key, value);
1084  }
1085  }
1086 
1088  {
1089  VectorWidgetPtr result;
1090 
1091  for (VectorWidgetPtr::iterator iter = mWidgetChildSkin.begin(); iter != mWidgetChildSkin.end(); ++iter)
1092  (*iter)->findWidgets(_name, result);
1093 
1094  return result;
1095  }
1096 
1097  void Widget::findWidgets(const std::string& _name, VectorWidgetPtr& _result)
1098  {
1099  if (_name == mName)
1100  _result.push_back(this);
1101 
1102  if (mWidgetClient != nullptr)
1103  {
1104  mWidgetClient->findWidgets(_name, _result);
1105  }
1106  else
1107  {
1108  for (VectorWidgetPtr::iterator widget = mWidgetChild.begin(); widget != mWidgetChild.end(); ++widget)
1109  (*widget)->findWidgets(_name, _result);
1110  }
1111  }
1112 
1114  {
1115  mWidgetChild.push_back(_widget);
1117  }
1118 
1120  {
1121  }
1122 
1124  {
1125  }
1126 
1128  {
1129  MYGUI_ASSERT(mWidgetClient != this, "mWidgetClient can not be this widget");
1130  mWidgetClient = _widget;
1131  }
1132 
1134  {
1135  return getClientWidget() == nullptr ? this : getClientWidget();
1136  }
1137 
1138  Widget* 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)
1139  {
1140  return baseCreateWidget(_style, _type, _skin, _coord, _align, _layer, _name, true);
1141  }
1142 
1143  void Widget::setPropertyOverride(const std::string& _key, const std::string& _value)
1144  {
1146  if (_key == "Position")
1147  setPosition(utility::parseValue<IntPoint>(_value));
1148 
1150  else if (_key == "Size")
1151  setSize(utility::parseValue<IntSize>(_value));
1152 
1154  else if (_key == "Coord")
1155  setCoord(utility::parseValue<IntCoord>(_value));
1156 
1158  else if (_key == "Visible")
1159  setVisible(utility::parseValue<bool>(_value));
1160 
1162  else if (_key == "Depth")
1163  setDepth(utility::parseValue<int>(_value));
1164 
1166  else if (_key == "Alpha")
1167  setAlpha(utility::parseValue<float>(_value));
1168 
1170  else if (_key == "Colour")
1171  setColour(utility::parseValue<Colour>(_value));
1172 
1174  else if (_key == "InheritsAlpha")
1175  setInheritsAlpha(utility::parseValue<bool>(_value));
1176 
1178  else if (_key == "InheritsPick")
1179  setInheritsPick(utility::parseValue<bool>(_value));
1180 
1182  else if (_key == "MaskPick")
1183  setMaskPick(_value);
1184 
1186  else if (_key == "NeedKey")
1187  setNeedKeyFocus(utility::parseValue<bool>(_value));
1188 
1190  else if (_key == "NeedMouse")
1191  setNeedMouseFocus(utility::parseValue<bool>(_value));
1192 
1194  else if (_key == "Enabled")
1195  setEnabled(utility::parseValue<bool>(_value));
1196 
1198  else if (_key == "NeedToolTip")
1199  setNeedToolTip(utility::parseValue<bool>(_value));
1200 
1202  else if (_key == "Pointer")
1203  setPointer(_value);
1204 
1205  else
1206  {
1207  MYGUI_LOG(Warning, "Widget '" << getName() << "|" << getTypeName() << "' have unknown property '" << _key << "' " << " [" << LayoutManager::getInstance().getCurrentLayout() << "]");
1208  return;
1209  }
1210 
1211  eventChangeProperty(this, _key, _value);
1212  }
1213 
1214  void Widget::setPosition(int _left, int _top)
1215  {
1216  setPosition(IntPoint(_left, _top));
1217  }
1218 
1219  void Widget::setSize(int _width, int _height)
1220  {
1221  setSize(IntSize(_width, _height));
1222  }
1223 
1224  void Widget::setCoord(int _left, int _top, int _width, int _height)
1225  {
1226  setCoord(IntCoord(_left, _top, _width, _height));
1227  }
1228 
1229  void Widget::setRealPosition(float _left, float _top)
1230  {
1231  setRealPosition(FloatPoint(_left, _top));
1232  }
1233 
1234  void Widget::setRealSize(float _width, float _height)
1235  {
1236  setRealSize(FloatSize(_width, _height));
1237  }
1238 
1239  void Widget::setRealCoord(float _left, float _top, float _width, float _height)
1240  {
1241  setRealCoord(FloatCoord(_left, _top, _width, _height));
1242  }
1243 
1244  const std::string& Widget::getName() const
1245  {
1246  return mName;
1247  }
1248 
1249  bool Widget::getVisible() const
1250  {
1251  return mVisible;
1252  }
1253 
1255  {
1256  return mAlign;
1257  }
1258 
1259  float Widget::getAlpha() const
1260  {
1261  return mAlpha;
1262  }
1263 
1265  {
1266  return mInheritsAlpha;
1267  }
1268 
1270  {
1271  return nullptr == mCroppedParent;
1272  }
1273 
1275  {
1276  return mParent;
1277  }
1278 
1279  void Widget::setEnabledSilent(bool _value)
1280  {
1281  mEnabled = _value;
1282  }
1283 
1284  bool Widget::getEnabled() const
1285  {
1286  return mEnabled;
1287  }
1288 
1290  {
1291  return mWidgetClient;
1292  }
1293 
1295  {
1296  return mWidgetClient;
1297  }
1298 
1300  {
1301  return mWidgetStyle;
1302  }
1303 
1305  {
1306  return ITEM_NONE;
1307  }
1308 
1310  {
1311  mContainer = _value;
1312  }
1313 
1315  {
1316  return mContainer;
1317  }
1318 
1319  size_t Widget::_getContainerIndex(const IntPoint& _point)
1320  {
1321  return ITEM_NONE;
1322  }
1323 
1325  {
1326  return mCoord;
1327  }
1328 
1329  float Widget::_getRealAlpha() const
1330  {
1331  return mRealAlpha;
1332  }
1333 
1335  {
1336  return mInheritsEnabled;
1337  }
1338 
1340  {
1341  return mInheritsVisible;
1342  }
1343 
1344  void Widget::resizeLayerItemView(const IntSize& _oldView, const IntSize& _newView)
1345  {
1346  _setAlign(_oldView, _newView);
1347  }
1348 
1349  void Widget::setDepth(int _value)
1350  {
1351  if (mDepth == _value)
1352  return;
1353 
1354  mDepth = _value;
1355 
1356  if (mParent != nullptr)
1357  {
1358  mParent->_unlinkChildWidget(this);
1359  mParent->_linkChildWidget(this);
1360  mParent->_updateChilds();
1361  }
1362  }
1363 
1364  int Widget::getDepth() const
1365  {
1366  return mDepth;
1367  }
1368 
1369  void Widget::addWidget(Widget* _widget)
1370  {
1371  // сортировка глубины от большого к меньшему
1372 
1373  int depth = _widget->getDepth();
1374 
1375  for (size_t index = 0; index < mWidgetChild.size(); ++index)
1376  {
1377  Widget* widget = mWidgetChild[index];
1378  if (widget->getDepth() < depth)
1379  {
1380  mWidgetChild.insert(mWidgetChild.begin() + index, _widget);
1381  _updateChilds();
1382  return;
1383  }
1384  }
1385 
1386  mWidgetChild.push_back(_widget);
1387  }
1388 
1390  {
1391  for (VectorWidgetPtr::iterator widget = mWidgetChild.begin(); widget != mWidgetChild.end(); ++widget)
1392  {
1393  if ((*widget)->getWidgetStyle() == WidgetStyle::Child)
1394  {
1395  (*widget)->detachFromLayerItemNode(true);
1396  removeChildItem((*widget));
1397  }
1398  }
1399 
1400  for (VectorWidgetPtr::iterator widget = mWidgetChild.begin(); widget != mWidgetChild.end(); ++widget)
1401  {
1402  if ((*widget)->getWidgetStyle() == WidgetStyle::Child)
1403  {
1404  addChildItem((*widget));
1405  (*widget)->_updateView();
1406  }
1407  }
1408  }
1409 
1410 } // namespace MyGUI
MyGUI::WidgetInput::setNeedKeyFocus
void setNeedKeyFocus(bool _value)
Definition: MyGUI_WidgetInput.cpp:152
MyGUI::Widget::setEnabled
virtual void setEnabled(bool _value)
Definition: MyGUI_Widget.cpp:984
MyGUI::Widget::getEnumerator
EnumeratorWidgetPtr getEnumerator() const
Definition: MyGUI_Widget.cpp:927
MyGUI::ResourceSkin::getChild
const VectorChildSkinInfo & getChild() const
Definition: MyGUI_ResourceSkin.cpp:290
MyGUI::Widget::getClientCoord
IntCoord getClientCoord()
Definition: MyGUI_Widget.cpp:425
MyGUI::Singleton< LayoutManager >::getInstance
static LayoutManager & getInstance()
Definition: MyGUI_Singleton.h:44
MyGUI::Widget::_createSkinWidget
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="")
Definition: MyGUI_Widget.cpp:1138
MyGUI::ILayerItem::getLayerItemByPoint
virtual ILayerItem * getLayerItemByPoint(int _left, int _top) const =0
MyGUI::ResourceSkin::getSize
const IntSize & getSize() const
Definition: MyGUI_ResourceSkin.cpp:265
MyGUI::Widget::getParent
Widget * getParent() const
Definition: MyGUI_Widget.cpp:1274
MyGUI::ICroppedRectangle::_getViewTop
int _getViewTop() const
Definition: MyGUI_ICroppedRectangle.h:141
MyGUI::WidgetInput::setInheritsPick
void setInheritsPick(bool _value)
Definition: MyGUI_WidgetInput.cpp:172
MyGUI::BackwardCompatibility::checkProperty
static bool checkProperty(Widget *_owner, std::string &_key, std::string &_value)
Definition: MyGUI_BackwardCompatibility.cpp:1082
MyGUI::Align::isHCenter
bool isHCenter() const
Definition: MyGUI_Align.h:44
MyGUI::Widget::_setAlign
void _setAlign(const IntSize &_oldsize, const IntSize &_newSize)
Definition: MyGUI_Widget.cpp:566
MyGUI::InputManager::_resetMouseFocusWidget
void _resetMouseFocusWidget()
Definition: MyGUI_InputManager.cpp:444
MyGUI_Gui.h
MyGUI::Widget::getInheritedVisible
bool getInheritedVisible() const
Definition: MyGUI_Widget.cpp:1339
MyGUI::types::TSize::height
T height
Definition: MyGUI_TSize.h:21
MyGUI::Widget::getInheritedEnabled
bool getInheritedEnabled() const
Definition: MyGUI_Widget.cpp:1334
MyGUI::WidgetInfo::intCoord
IntCoord intCoord
Definition: MyGUI_LayoutData.h:47
MyGUI::LayerItem::getLayer
ILayer * getLayer() const
Definition: MyGUI_LayerItem.cpp:206
MyGUI::Widget::getLayerItemByPoint
ILayerItem * getLayerItemByPoint(int _left, int _top) const override
Definition: MyGUI_Widget.cpp:462
MyGUI::Widget::_initialise
void _initialise(WidgetStyle _style, const IntCoord &_coord, const std::string &_skinName, Widget *_parent, ICroppedRectangle *_croppedParent, const std::string &_name)
Definition: MyGUI_Widget.cpp:48
MyGUI::WidgetManager::_deleteWidget
void _deleteWidget(Widget *_widget)
Definition: MyGUI_WidgetManager.cpp:169
MyGUI::Widget::setPosition
void setPosition(const IntPoint &_value) override
Definition: MyGUI_Widget.cpp:630
MyGUI::WidgetManager
Definition: MyGUI_WidgetManager.h:23
MyGUI::types::TCoord::left
T left
Definition: MyGUI_TCoord.h:22
MyGUI::ICroppedRectangle::mIsMargin
bool mIsMargin
Definition: MyGUI_ICroppedRectangle.h:248
MyGUI::SkinItem::_setSubSkinVisible
void _setSubSkinVisible(bool _visible)
Definition: MyGUI_SkinItem.cpp:146
MyGUI::ICroppedRectangle::getAbsolutePosition
const IntPoint & getAbsolutePosition() const
Definition: MyGUI_ICroppedRectangle.h:67
MyGUI_Widget.h
MyGUI::ResourceLayout::getLayoutData
const VectorWidgetInfo & getLayoutData() const
Definition: MyGUI_ResourceLayout.cpp:185
MyGUI::Widget::_shutdown
void _shutdown()
Definition: MyGUI_Widget.cpp:123
MyGUI::Widget::setEnabledSilent
void setEnabledSilent(bool _value)
Definition: MyGUI_Widget.cpp:1279
MyGUI::Widget::onWidgetCreated
virtual void onWidgetCreated(Widget *_widget)
Definition: MyGUI_Widget.cpp:1119
MyGUI::types::TCoord::top
T top
Definition: MyGUI_TCoord.h:23
MyGUI::Widget::setDepth
void setDepth(int _value)
Definition: MyGUI_Widget.cpp:1349
MyGUI::Widget::Widget
Widget()
Definition: MyGUI_Widget.cpp:31
MyGUI::Widget::baseCreateWidget
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)
Definition: MyGUI_Widget.cpp:285
MyGUI::SkinItem::_updateSkinItemView
void _updateSkinItemView()
Definition: MyGUI_SkinItem.cpp:58
MyGUI::WidgetInfo
Definition: MyGUI_LayoutData.h:23
MyGUI::WidgetInput::getNeedMouseFocus
bool getNeedMouseFocus() const
Definition: MyGUI_WidgetInput.cpp:167
MyGUI::UserData::setUserString
void setUserString(const std::string &_key, const std::string &_value)
Definition: MyGUI_WidgetUserData.cpp:14
MyGUI::types::TRect::clear
void clear()
Definition: MyGUI_TRect.h:116
MYGUI_ASSERT_RANGE
#define MYGUI_ASSERT_RANGE(index, size, owner)
Definition: MyGUI_Diagnostic.h:45
MyGUI::ResourceSkin
Definition: MyGUI_ResourceSkin.h:23
MyGUI::Widget::getSkinWidgetsByName
VectorWidgetPtr getSkinWidgetsByName(const std::string &_name)
Definition: MyGUI_Widget.cpp:1087
MyGUI::Widget::eventChangeProperty
EventHandle_WidgetStringString eventChangeProperty
Definition: MyGUI_Widget.h:267
MyGUI::WidgetStyle::Popup
@ Popup
Definition: MyGUI_WidgetStyle.h:23
MyGUI::SkinItem::_setSkinItemAlpha
void _setSkinItemAlpha(float _value)
Definition: MyGUI_SkinItem.cpp:46
MyGUI::ALPHA_MAX
const float ALPHA_MAX
Definition: MyGUI_Macros.h:19
MyGUI::CoordConverter::convertFromRelative
static IntCoord convertFromRelative(const FloatCoord &_coord, const IntSize &_view)
Definition: MyGUI_CoordConverter.h:33
MyGUI::Widget::detachFromWidget
void detachFromWidget(const std::string &_layer="")
Definition: MyGUI_Widget.cpp:734
MyGUI::Widget::eventChangeCoord
EventHandle_WidgetVoid eventChangeCoord
Definition: MyGUI_Widget.h:273
MyGUI::WidgetManager::createWidget
Widget * createWidget(WidgetStyle _style, const std::string &_type, const std::string &_skin, const IntCoord &_coord, Widget *_parent, ICroppedRectangle *_cropeedParent, const std::string &_name)
Definition: MyGUI_WidgetManager.cpp:104
MyGUI::LayoutManager::getByName
ResourceLayout * getByName(const std::string &_name, bool _throw=true) const
Definition: MyGUI_LayoutManager.cpp:86
MyGUI::Widget::setColour
void setColour(const Colour &_value)
Definition: MyGUI_Widget.cpp:1009
MyGUI::IntCoord
types::TCoord< int > IntCoord
Definition: MyGUI_Types.h:35
MyGUI::Widget::_destroyAllChildWidget
void _destroyAllChildWidget()
Definition: MyGUI_Widget.cpp:408
MyGUI::Widget::createWidgetT
Widget * createWidgetT(const std::string &_type, const std::string &_skin, const IntCoord &_coord, Align _align, const std::string &_name="")
Definition: MyGUI_Widget.cpp:907
MyGUI::Widget
Widget properties. Skin childs. Widget widget description should be here.
Definition: MyGUI_Widget.h:37
MyGUI_LayerItem.h
MyGUI::WidgetInfo::properties
VectorStringPairs properties
Definition: MyGUI_LayoutData.h:35
MyGUI::ITEM_NONE
const size_t ITEM_NONE
Definition: MyGUI_Macros.h:17
MyGUI::Widget::getWidgetStyle
WidgetStyle getWidgetStyle() const
Definition: MyGUI_Widget.cpp:1299
MyGUI::ICroppedRectangle::mMargin
IntRect mMargin
Definition: MyGUI_ICroppedRectangle.h:244
MyGUI::SkinItem::_correctSkinItemView
void _correctSkinItemView()
Definition: MyGUI_SkinItem.cpp:52
MyGUI::Align::isVCenter
bool isVCenter() const
Definition: MyGUI_Align.h:49
MyGUI::types::TPoint< float >
MyGUI::Widget::setProperty
void setProperty(const std::string &_key, const std::string &_value)
Definition: MyGUI_Widget.cpp:1069
MyGUI::Widget::baseUpdateEnable
virtual void baseUpdateEnable()
Definition: MyGUI_Widget.cpp:949
MyGUI::LayerItem::addChildItem
void addChildItem(LayerItem *_item)
Definition: MyGUI_LayerItem.cpp:22
MyGUI_ISubWidgetText.h
MyGUI::InputManager::unlinkWidget
void unlinkWidget(Widget *_widget)
Definition: MyGUI_InputManager.cpp:681
MyGUI::types::TSize::width
T width
Definition: MyGUI_TSize.h:20
MyGUI::Widget::setAlign
virtual void setAlign(Align _value)
Definition: MyGUI_Widget.cpp:729
MyGUI::VectorChildSkinInfo
std::vector< ChildSkinInfo > VectorChildSkinInfo
Definition: MyGUI_ChildSkinInfo.h:33
MyGUI::Widget::getEnabled
bool getEnabled() const
Definition: MyGUI_Widget.cpp:1284
MyGUI::ResourceLayout::createWidget
Widget * createWidget(const WidgetInfo &_widgetInfo, const std::string &_prefix="", Widget *_parent=nullptr, bool _template=false)
Definition: MyGUI_ResourceLayout.cpp:114
MyGUI::Align
Definition: MyGUI_Align.h:20
MyGUI::Gui::_unlinkChildWidget
void _unlinkChildWidget(Widget *_widget)
Definition: MyGUI_Gui.cpp:277
MyGUI_CoordConverter.h
MyGUI::Widget::getParentSize
IntSize getParentSize() const
Definition: MyGUI_Widget.cpp:1017
MyGUI::WidgetInput::isMaskPickInside
bool isMaskPickInside(const IntPoint &_point, const IntCoord &_coord) const
Definition: MyGUI_WidgetInput.cpp:37
MyGUI::Widget::_getItemIndex
virtual size_t _getItemIndex(Widget *_item)
Definition: MyGUI_Widget.cpp:1304
MyGUI::LayoutManager::getCurrentLayout
const std::string & getCurrentLayout() const
Definition: MyGUI_LayoutManager.cpp:105
MyGUI::WidgetInput::setNeedToolTip
void setNeedToolTip(bool _value)
Definition: MyGUI_WidgetInput.cpp:132
MyGUI::Widget::setRealSize
void setRealSize(const FloatSize &_value)
Definition: MyGUI_Widget.cpp:556
MyGUI::Widget::setAlpha
void setAlpha(float _value)
Definition: MyGUI_Widget.cpp:432
MyGUI::ResourceLayout
Definition: MyGUI_ResourceLayout.h:20
MyGUI_Precompiled.h
MyGUI::ICroppedRectangle::_checkOutside
bool _checkOutside() const
Definition: MyGUI_ICroppedRectangle.h:235
MyGUI::Widget::setPropertyOverride
virtual void setPropertyOverride(const std::string &_key, const std::string &_value)
Definition: MyGUI_Widget.cpp:1143
MyGUI::Align::Default
@ Default
Definition: MyGUI_Align.h:36
MyGUI::FloatSize
types::TSize< float > FloatSize
Definition: MyGUI_Types.h:30
MyGUI::WidgetInput::getInheritsPick
bool getInheritsPick() const
Definition: MyGUI_WidgetInput.cpp:177
MyGUI::Widget::_forcePick
void _forcePick(Widget *_widget)
Definition: MyGUI_Widget.cpp:513
MyGUI::VectorWidgetInfo
std::vector< WidgetInfo > VectorWidgetInfo
Definition: MyGUI_LayoutData.h:51
MyGUI::LayerItem::removeChildItem
void removeChildItem(LayerItem *_item)
Definition: MyGUI_LayerItem.cpp:31
MyGUI::WidgetInput::setPointer
void setPointer(const std::string &_value)
Definition: MyGUI_WidgetInput.cpp:142
MyGUI::WidgetInfo::userStrings
MapString userStrings
Definition: MyGUI_LayoutData.h:36
MyGUI::ICroppedRectangle::mCroppedParent
ICroppedRectangle * mCroppedParent
Definition: MyGUI_ICroppedRectangle.h:249
MyGUI::Widget::_resetContainer
virtual void _resetContainer(bool _update)
Definition: MyGUI_Widget.cpp:1027
MyGUI::ICroppedRectangle::mCoord
IntCoord mCoord
Definition: MyGUI_ICroppedRectangle.h:245
MyGUI::ResourceSkin::getProperties
const MapString & getProperties() const
Definition: MyGUI_ResourceSkin.cpp:285
MyGUI_InputManager.h
MyGUI::SkinItem::_setSkinItemState
bool _setSkinItemState(const std::string &_state)
Definition: MyGUI_SkinItem.cpp:64
MYGUI_EXCEPT
#define MYGUI_EXCEPT(dest)
Definition: MyGUI_Diagnostic.h:26
MyGUI_ISubWidget.h
MyGUI::Widget::shutdownOverride
virtual void shutdownOverride()
Definition: MyGUI_Widget.cpp:1052
MyGUI::Widget::setVisible
virtual void setVisible(bool _value)
Definition: MyGUI_Widget.cpp:957
MyGUI::ILayer::getSize
virtual const IntSize & getSize() const =0
MyGUI_LayerManager.h
MyGUI::SkinItem::_setSkinItemColour
void _setSkinItemColour(const Colour &_value)
Definition: MyGUI_SkinItem.cpp:36
MyGUI::LayerItem::restoreLayerItem
void restoreLayerItem()
Definition: MyGUI_LayerItem.cpp:87
MyGUI::ICroppedRectangle::getCoord
const IntCoord & getCoord() const
Definition: MyGUI_ICroppedRectangle.h:61
MyGUI::Widget::setSize
void setSize(const IntSize &_value) override
Definition: MyGUI_Widget.cpp:647
MyGUI::WidgetInput::getNeedToolTip
bool getNeedToolTip() const
Definition: MyGUI_WidgetInput.cpp:137
MyGUI::Widget::changeWidgetSkin
void changeWidgetSkin(const std::string &_skinName)
Definition: MyGUI_Widget.cpp:152
MyGUI::WidgetStyle::Overlapped
@ Overlapped
Definition: MyGUI_WidgetStyle.h:24
MYGUI_ASSERT
#define MYGUI_ASSERT(exp, dest)
Definition: MyGUI_Diagnostic.h:34
MyGUI_WidgetManager.h
MyGUI::Widget::_checkPoint
bool _checkPoint(int _left, int _top) const
Definition: MyGUI_Widget.cpp:1033
MyGUI::LayerManager::attachToLayerNode
void attachToLayerNode(const std::string &_name, Widget *_item)
Definition: MyGUI_LayerManager.cpp:124
MyGUI::Widget::_getContainerIndex
virtual size_t _getContainerIndex(const IntPoint &_point)
Definition: MyGUI_Widget.cpp:1319
MyGUI::Widget::_updateView
void _updateView()
Definition: MyGUI_Widget.cpp:325
MyGUI::ICroppedRectangle::_getViewLeft
int _getViewLeft() const
Definition: MyGUI_ICroppedRectangle.h:133
MyGUI::Widget::getAlpha
float getAlpha() const
Definition: MyGUI_Widget.cpp:1259
MyGUI::Align::isVStretch
bool isVStretch() const
Definition: MyGUI_Align.h:84
MyGUI::Widget::setWidgetStyle
void setWidgetStyle(WidgetStyle _style, const std::string &_layer="")
Definition: MyGUI_Widget.cpp:893
MyGUI::LayerManager::detachFromLayer
void detachFromLayer(Widget *_item)
Definition: MyGUI_LayerManager.cpp:147
MyGUI::SkinItem::_createSkinItem
void _createSkinItem(ResourceSkin *_info)
Definition: MyGUI_SkinItem.cpp:80
MyGUI::WidgetInput::setMaskPick
void setMaskPick(const std::string &_filename)
Definition: MyGUI_WidgetInput.cpp:24
MyGUI::LayerItem::saveLayerItem
void saveLayerItem()
Definition: MyGUI_LayerItem.cpp:82
MyGUI::SkinItem::_setSkinItemVisible
void _setSkinItemVisible(bool _value)
Definition: MyGUI_SkinItem.cpp:30
MyGUI::ICroppedRectangle::_getViewRight
int _getViewRight() const
Definition: MyGUI_ICroppedRectangle.h:137
MyGUI::LayerItem::removeChildNode
void removeChildNode(LayerItem *_item)
Definition: MyGUI_LayerItem.cpp:49
MYGUI_LOG
#define MYGUI_LOG(level, text)
Definition: MyGUI_Diagnostic.h:22
MyGUI::Enumerator
Definition: MyGUI_Enumerator.h:49
MyGUI::Widget::_getClientWidget
Widget * _getClientWidget()
If there is client widget return it, otherwise return this.
Definition: MyGUI_Widget.cpp:1133
MyGUI::Widget::getChildAt
Widget * getChildAt(size_t _index)
Definition: MyGUI_Widget.cpp:941
MyGUI::types::TSize
Definition: MyGUI_TSize.h:19
MyGUI::Widget::setCoord
void setCoord(const IntCoord &_value) override
Definition: MyGUI_Widget.cpp:684
MyGUI::Widget::destroySkinWidget
void destroySkinWidget(Widget *_widget)
Definition: MyGUI_Widget.cpp:1113
MyGUI::FloatPoint
types::TPoint< float > FloatPoint
Definition: MyGUI_Types.h:27
MyGUI::LayerItem::addChildNode
void addChildNode(LayerItem *_item)
Definition: MyGUI_LayerItem.cpp:38
MyGUI::ICroppedRectangle
Definition: MyGUI_ICroppedRectangle.h:17
MyGUI::WidgetStyle
Definition: MyGUI_WidgetStyle.h:19
MyGUI::Widget::getAlign
Align getAlign() const
Definition: MyGUI_Widget.cpp:1254
MyGUI_RenderItem.h
MyGUI::Widget::setRealCoord
void setRealCoord(const FloatCoord &_value)
Definition: MyGUI_Widget.cpp:561
MyGUI::Widget::assignWidget
void assignWidget(T *&_widget, const std::string &_name)
Definition: MyGUI_Widget.h:329
MyGUI::Align::isRight
bool isRight() const
Definition: MyGUI_Align.h:64
MyGUI::types::TCoord::point
TPoint< T > point() const
Definition: MyGUI_TCoord.h:185
MyGUI::Colour
Definition: MyGUI_Colour.h:17
MyGUI::Widget::initialiseOverride
virtual void initialiseOverride()
Definition: MyGUI_Widget.cpp:1056
MyGUI::Widget::setInheritsAlpha
void setInheritsAlpha(bool _value)
Definition: MyGUI_Widget.cpp:456
MyGUI_WidgetDefines.h
MyGUI_RenderManager.h
MyGUI::Align::isBottom
bool isBottom() const
Definition: MyGUI_Align.h:79
MyGUI::RenderManager::getViewSize
virtual const IntSize & getViewSize() const =0
MyGUI::types::TCoord::width
T width
Definition: MyGUI_TCoord.h:24
MyGUI_SkinManager.h
MyGUI::ICroppedRectangle::mAbsolutePosition
IntPoint mAbsolutePosition
Definition: MyGUI_ICroppedRectangle.h:246
MyGUI::Widget::getClientWidget
Widget * getClientWidget()
Definition: MyGUI_Widget.cpp:1289
MyGUI::SkinItem::_deleteSkinItem
void _deleteSkinItem()
Definition: MyGUI_SkinItem.cpp:117
MyGUI::WidgetInfo::childWidgetsInfo
std::vector< WidgetInfo > childWidgetsInfo
Definition: MyGUI_LayoutData.h:33
MyGUI::Widget::getName
const std::string & getName() const
Get name of widget.
Definition: MyGUI_Widget.cpp:1244
MyGUI::ICroppedRectangle::_checkMargin
bool _checkMargin()
Definition: MyGUI_ICroppedRectangle.h:185
MyGUI::WidgetManager::destroyWidget
void destroyWidget(Widget *_widget)
Definition: MyGUI_WidgetManager.cpp:118
MyGUI::IntSize
types::TSize< int > IntSize
Definition: MyGUI_Types.h:29
MyGUI::Widget::getVisible
bool getVisible() const
Definition: MyGUI_Widget.cpp:1249
MyGUI::LayerItem::detachFromLayerItemNode
void detachFromLayerItemNode(bool _deep)
Definition: MyGUI_LayerItem.cpp:166
MyGUI::Widget::getTypeName
virtual const std::string & getTypeName() const override
Definition: MyGUI_Widget.h:41
MyGUI::ICroppedRectangle::_getViewBottom
int _getViewBottom() const
Definition: MyGUI_ICroppedRectangle.h:145
MyGUI::Widget::findWidgets
void findWidgets(const std::string &_name, VectorWidgetPtr &_result)
Definition: MyGUI_Widget.cpp:1097
MyGUI::IntPoint
types::TPoint< int > IntPoint
Definition: MyGUI_Types.h:26
MyGUI::InputManager::resetKeyFocusWidget
void resetKeyFocusWidget(Widget *_widget)
Definition: MyGUI_InputManager.cpp:596
MyGUI::MapString
std::map< std::string, std::string > MapString
Definition: MyGUI_Types.h:39
MyGUI::FloatCoord
types::TCoord< float > FloatCoord
Definition: MyGUI_Types.h:36
MyGUI::WidgetStyle::Child
@ Child
Definition: MyGUI_WidgetStyle.h:22
MyGUI::Widget::_setWidgetState
bool _setWidgetState(const std::string &_value)
Definition: MyGUI_Widget.cpp:372
MyGUI::Widget::setRealPosition
void setRealPosition(const FloatPoint &_value)
Definition: MyGUI_Widget.cpp:551
MyGUI::Gui::_linkChildWidget
void _linkChildWidget(Widget *_widget)
Definition: MyGUI_Gui.cpp:270
MyGUI::types::TCoord< int >
MyGUI::SkinItem::_setSkinItemAlign
void _setSkinItemAlign(const IntSize &_size)
Definition: MyGUI_SkinItem.cpp:24
MyGUI::Widget::findWidget
Widget * findWidget(const std::string &_name)
Definition: MyGUI_Widget.cpp:535
MyGUI::WidgetManager::unlinkFromUnlinkers
void unlinkFromUnlinkers(Widget *_widget)
Definition: MyGUI_WidgetManager.cpp:146
MyGUI::Widget::_setContainer
void _setContainer(Widget *_value)
Definition: MyGUI_Widget.cpp:1309
MyGUI::Widget::attachToWidget
void attachToWidget(Widget *_parent, WidgetStyle _style=WidgetStyle::Child, const std::string &_layer="")
Definition: MyGUI_Widget.cpp:796
MyGUI_LayoutManager.h
MyGUI::Widget::getInheritsAlpha
bool getInheritsAlpha() const
Definition: MyGUI_Widget.cpp:1264
MyGUI_ToolTipManager.h
MyGUI::Widget::isRootWidget
bool isRootWidget() const
Definition: MyGUI_Widget.cpp:1269
MyGUI::Any::Null
static AnyEmpty Null
Definition: MyGUI_Any.h:67
MyGUI::Widget::createWidgetRealT
Widget * createWidgetRealT(const std::string &_type, const std::string &_skin, const FloatCoord &_coord, Align _align, const std::string &_name="")
Definition: MyGUI_Widget.cpp:320
MyGUI::types::TCoord::height
T height
Definition: MyGUI_TCoord.h:25
MyGUI
Definition: MyGUI_ActionController.h:15
MyGUI::SkinManager::getByName
ResourceSkin * getByName(const std::string &_name) const
Definition: MyGUI_SkinManager.cpp:80
MyGUI::Widget::_updateChilds
void _updateChilds()
Definition: MyGUI_Widget.cpp:1389
MyGUI::Align::isHStretch
bool isHStretch() const
Definition: MyGUI_Align.h:69
MyGUI::Widget::_getContainer
Widget * _getContainer()
Definition: MyGUI_Widget.cpp:1314
MyGUI::Widget::onWidgetDestroy
virtual void onWidgetDestroy(Widget *_widget)
Definition: MyGUI_Widget.cpp:1123
MyGUI_TextBox.h
MyGUI::ILayerItem
Definition: MyGUI_ILayerItem.h:20
MyGUI::BackwardCompatibility::isIgnoreProperty
static bool isIgnoreProperty(const std::string &_key)
Definition: MyGUI_BackwardCompatibility.cpp:1073
MyGUI::Widget::getLayerItemCoord
const IntCoord & getLayerItemCoord() const override
Definition: MyGUI_Widget.cpp:1324
MyGUI::VectorWidgetPtr
std::vector< Widget * > VectorWidgetPtr
Definition: MyGUI_WidgetDefines.h:20
MyGUI::ILayer::getName
const std::string & getName() const
Definition: MyGUI_ILayer.h:29
MyGUI_SubWidgetManager.h
MyGUI::Widget::_destroyChildWidget
void _destroyChildWidget(Widget *_widget)
Definition: MyGUI_Widget.cpp:377
MyGUI::types::TCoord::size
TSize< T > size() const
Definition: MyGUI_TCoord.h:190
MyGUI::UserData::setUserData
void setUserData(Any _data)
Definition: MyGUI_WidgetUserData.cpp:54
MyGUI::Widget::getDepth
int getDepth() const
Definition: MyGUI_Widget.cpp:1364
MyGUI::ICroppedRectangle::getSize
IntSize getSize() const
Definition: MyGUI_ICroppedRectangle.h:56
MyGUI_FactoryManager.h
MyGUI_ResourceSkin.h
MyGUI::WidgetInput::setNeedMouseFocus
void setNeedMouseFocus(bool _value)
Definition: MyGUI_WidgetInput.cpp:162
MyGUI::ToolTipManager::_unlinkWidget
void _unlinkWidget(Widget *_widget)
Definition: MyGUI_ToolTipManager.cpp:141
MyGUI::Widget::setWidgetClient
void setWidgetClient(Widget *_widget)
Definition: MyGUI_Widget.cpp:1127
MyGUI::Widget::getChildCount
size_t getChildCount()
Definition: MyGUI_Widget.cpp:934