MenuBar::MenuBar(const IntCoord& _coord, Align _align, const WidgetSkinInfoPtr _info, CroppedRectanglePtr _parent, WidgetCreator * _creator, const Ogre::String & _name) : Widget(_coord, _align, _info, _parent, _creator, _name), mDistanceButton(0), mIndexSelect(ITEM_NONE) { for (VectorWidgetPtr::iterator iter=mWidgetChild.begin(); iter!=mWidgetChild.end(); ++iter) { if ((*iter)->_getInternalString() == "Client") { mWidgetClient = (*iter); //mWidgetClient->eventMouseWheel = newDelegate(this, &ItemBox::notifyMouseWheel); //mWidgetClient->eventMouseButtonPressed = newDelegate(this, &ItemBox::notifyMouseButtonPressed); } } // парсим свойства const MapString & param = _info->getParams(); if (false == param.empty()) { MapString::const_iterator iter = param.find("DistanceButton"); if (iter != param.end()) mDistanceButton = utility::parseInt(iter->second); iter = param.find("SkinButton"); if (iter != param.end()) mButtonSkinName = iter->second; } if (mWidgetClient == null) mWidgetClient= this; }
void Button::initialiseWidgetSkin(WidgetSkinInfoPtr _info) { // парсим свойства const MapString & properties = _info->getProperties(); if (!properties.empty()) { MapString::const_iterator iter = properties.find("ButtonPressed"); if (iter != properties.end()) setButtonPressed(utility::parseBool(iter->second)); iter = properties.find("StateCheck"); if (iter != properties.end()) setStateCheck(utility::parseBool(iter->second)); } for (VectorWidgetPtr::iterator iter=mWidgetChildSkin.begin(); iter!=mWidgetChildSkin.end(); ++iter) { if (*(*iter)->_getInternalData<std::string>() == "Image") { MYGUI_DEBUG_ASSERT( ! mImage, "widget already assigned"); mImage = (*iter)->castType<StaticImage>(); } } }
void ComboBox::initialiseWidgetSkin(WidgetSkinInfoPtr _info) { // парсим свойства const MapString & properties = _info->getProperties(); MapString::const_iterator iter = properties.find("HeightList"); if (iter != properties.end()) mMaxHeight = utility::parseSizeT(iter->second); iter = properties.find("ListSmoothShow"); if (iter != properties.end()) setSmoothShow(utility::parseBool(iter->second)); // парсим кнопку for (VectorWidgetPtr::iterator iter=mWidgetChildSkin.begin(); iter!=mWidgetChildSkin.end(); ++iter) { if (*(*iter)->_getInternalData<std::string>() == "Button") { MYGUI_DEBUG_ASSERT( ! mButton, "widget already assigned"); mButton = (*iter)->castType<Button>(); mButton->eventMouseButtonPressed = newDelegate(this, &ComboBox::notifyButtonPressed); } else if (*(*iter)->_getInternalData<std::string>() == "List") { MYGUI_DEBUG_ASSERT( ! mList, "widget already assigned"); mList = (*iter)->castType<List>(); mList->setVisible(false); mList->eventKeyLostFocus = newDelegate(this, &ComboBox::notifyListLostFocus); mList->eventListSelectAccept = newDelegate(this, &ComboBox::notifyListSelectAccept); mList->eventListMouseItemActivate = newDelegate(this, &ComboBox::notifyListMouseItemActivate); mList->eventListChangePosition = newDelegate(this, &ComboBox::notifyListChangePosition); } } //OBSOLETE MYGUI_ASSERT(nullptr != mButton, "Child Button not found in skin (combobox must have Button)"); //MYGUI_ASSERT(nullptr != mList, "Child List not found in skin (combobox must have List)"); mManualList = mList == nullptr; if (mList == nullptr) { std::string list_skin; iter = properties.find("ListSkin"); if (iter != properties.end()) list_skin = iter->second; std::string list_layer; iter = properties.find("ListLayer"); if (iter != properties.end()) list_layer = iter->second; mList = createWidget<MyGUI::List>(WidgetStyle::Popup, list_skin, IntCoord(), Align::Default, list_layer); mWidgetChild.pop_back(); mList->setVisible(false); mList->eventKeyLostFocus = newDelegate(this, &ComboBox::notifyListLostFocus); mList->eventListSelectAccept = newDelegate(this, &ComboBox::notifyListSelectAccept); mList->eventListMouseItemActivate = newDelegate(this, &ComboBox::notifyListMouseItemActivate); mList->eventListChangePosition = newDelegate(this, &ComboBox::notifyListChangePosition); } // корректируем высоту списка //if (mMaxHeight < mList->getFontHeight()) mMaxHeight = mList->getFontHeight(); // подписываем дочерние классы на скролл mWidgetClient->eventMouseWheel = newDelegate(this, &ComboBox::notifyMouseWheel); mWidgetClient->eventMouseButtonPressed = newDelegate(this, &ComboBox::notifyMousePressed); // подписываемся на изменения текста eventEditTextChange = newDelegate(this, &ComboBox::notifyEditTextChange); }
Widget::Widget(const IntCoord& _coord, Align _align, const WidgetSkinInfoPtr _info, CroppedRectanglePtr _parent, const Ogre::String & _name) : CroppedRectangleInterface(IntCoord(_coord.point(), _info->getSize()), _align, _parent), // размер по скину mOwner(static_cast<Widget*>(_parent)), UserData(), mStateInfo(_info->getStateInfo()), mMaskPeekInfo(_info->getMask()), mText(null), mEnabled(true), mVisible(true), mAlpha(ALPHA_MIN), mColour(Ogre::ColourValue::White), mName(_name), mCountSharedOverlay(0) { // имя отсылателя сообщений mWidgetEventSender = this; // подсчитаываем колличество оверлеев для объединения for (VectorSubWidgetInfo::const_iterator iter =_info->getBasisInfo().begin(); iter!=_info->getBasisInfo().end(); iter ++) { if (SubWidgetManager::getInstance().isSharedOverlay(*iter)) mCountSharedOverlay++; } // загружаем кирпичики виджета size_t id = 0; for (VectorSubWidgetInfo::const_iterator iter =_info->getBasisInfo().begin(); iter!=_info->getBasisInfo().end(); iter ++) { addSubSkin(*iter, _info->getMaterial(), id); } // парсим свойства const MapString & param = _info->getParams(); if (false == param.empty()) { MapString::const_iterator iter = param.find("FontName"); if (iter != param.end()) setFontName(iter->second); iter = param.find("FontHeight"); if (iter != param.end()) setFontHeight(utility::parseInt(iter->second)); iter = param.find("NeedKey"); if (iter != param.end()) setNeedKeyFocus(iter->second == "true"); iter = param.find("AlignText"); if (iter != param.end()) setTextAlign(SkinManager::getInstance().parseAlign(iter->second)); iter = param.find("Colour"); if (iter != param.end()) setColour(utility::parseColour(iter->second)); iter = param.find("Pointer"); if (iter != param.end()) mPointer = iter->second; iter = param.find("Show"); if (iter != param.end()) { if (utility::parseBool(iter->second)) show(); else hide(); } } // этот стиль есть всегда, даже если создатель не хотел его setState("normal"); setAlpha(ALPHA_MAX); // альфа отца //if ( (mParent != null) && (static_cast<WidgetPtr>(mParent)->getAlpha() != ALPHA_MAX) ) setAlpha(static_cast<WidgetPtr>(mParent)->getAlpha()); // создаем детей const VectorChildSkinInfo& child = _info->getChild(); for (VectorChildSkinInfo::const_iterator iter=child.begin(); iter!=child.end(); ++iter) { WidgetPtr widget = createWidgetT(iter->type, iter->skin, iter->coord, iter->align); widget->_setInternalString(iter->name); // заполняем UserString пропертями for (MapString::const_iterator prop=iter->params.begin(); prop!=iter->params.end(); ++prop) { widget->setUserString(prop->first, prop->second); } } // а вот теперь нормальный размер setSize(_coord.size()); }
Widget::Widget(const IntCoord& _coord, Align _align, const WidgetSkinInfoPtr _info, CroppedRectanglePtr _parent, WidgetCreator * _creator, const Ogre::String & _name) : CroppedRectangleInterface(IntCoord(_coord.point(), _info->getSize()), _align, _parent), // размер по скину mOwner(static_cast<Widget*>(_parent)), UserData(), LayerItem(), mStateInfo(_info->getStateInfo()), mMaskPeekInfo(_info->getMask()), mText(null), mEnabled(true), mVisible(true), mInheritedShow(true), mAlpha(ALPHA_MIN), mName(_name), mTexture(_info->getTextureName()), mMainSkin(null), mWidgetCreator(_creator), mInheritsAlpha(true), mNeedKeyFocus(false), mNeedMouseFocus(true), mNeedDragDrop(false), mWidgetClient(null) { // корректируем абсолютные координаты mAbsolutePosition = _coord.point(); if (null != mParent) mAbsolutePosition += mParent->getAbsolutePosition(); // имя отсылателя сообщений mWidgetEventSender = this; // загружаем кирпичики виджета SubWidgetManager & manager = SubWidgetManager::getInstance(); for (VectorSubWidgetInfo::const_iterator iter =_info->getBasisInfo().begin(); iter!=_info->getBasisInfo().end(); ++iter) { CroppedRectangleInterface * sub = manager.createSubWidget(*iter, this); mSubSkinChild.push_back(sub); if (sub->_isText()) mText = static_cast<SubWidgetTextInterfacePtr>(sub); else if (null == mMainSkin) mMainSkin = sub; } if (false == isRootWidget()) { // если отец уже приаттачен, то и мы аттачимся ??? проверить что уже аттачиться при сет текстуре if ((null != getParent()->getLayerItemKeeper())) _attachToLayerItemKeeper(getParent()->getLayerItemKeeper()); // проверяем наследуемую скрытость if ((!mParent->isShow()) || (!getParent()->_isInheritedShow())) { mInheritedShow = false; // скрываем только саб скины, детей у нас еще нет for (VectorCroppedRectanglePtr::iterator skin = mSubSkinChild.begin(); skin != mSubSkinChild.end(); ++skin) (*skin)->hide(); } } // этот стиль есть всегда, даже если создатель не хотел его setState("normal"); // парсим свойства const MapString & param = _info->getParams(); if (false == param.empty()) { MapString::const_iterator iter = param.find("FontName"); if (iter != param.end()) setFontName(iter->second); iter = param.find("FontHeight"); if (iter != param.end()) setFontHeight(utility::parseInt(iter->second)); iter = param.find("NeedKey"); if (iter != param.end()) setNeedKeyFocus(iter->second == "true"); iter = param.find("NeedMouse"); if (iter != param.end()) setNeedMouseFocus(iter->second == "true"); iter = param.find("AlignText"); if (iter != param.end()) setTextAlign(SkinManager::parseAlign(iter->second)); iter = param.find("Colour"); if (iter != param.end()) setColour(utility::parseColour(iter->second)); iter = param.find("Pointer"); if (iter != param.end()) mPointer = iter->second; iter = param.find("Show"); if (iter != param.end()) { if (utility::parseBool(iter->second)) show(); else hide(); } } // выставляем альфу, корректировка по отцу автоматически setAlpha(ALPHA_MAX); // создаем детей const VectorChildSkinInfo& child = _info->getChild(); for (VectorChildSkinInfo::const_iterator iter=child.begin(); iter!=child.end(); ++iter) { WidgetPtr widget = createWidgetT(iter->type, iter->skin, iter->coord, iter->align); widget->_setInternalString(iter->name); // заполняем UserString пропертями for (MapString::const_iterator prop=iter->params.begin(); prop!=iter->params.end(); ++prop) { widget->setUserString(prop->first, prop->second); } } // а вот теперь нормальный размер setSize(_coord.size()); }