void ScrollView::initialiseOverride() { Base::initialiseOverride(); // FIXME нам нужен фокус клавы setNeedKeyFocus(true); assignWidget(mClient, "Client"); if (mClient != nullptr) { mClient->eventMouseWheel += newDelegate(this, &ScrollView::notifyMouseWheel); // создаем холcт, реальный владелец детей mRealClient = mClient->createWidget<Widget>("Default", IntCoord(), Align::Default); mRealClient->eventMouseWheel += newDelegate(this, &ScrollView::notifyMouseWheel); setWidgetClient(mRealClient); } assignWidget(mVScroll, "VScroll"); if (mVScroll != nullptr) { mVScroll->eventScrollChangePosition += newDelegate(this, &ScrollView::notifyScrollChangePosition); } assignWidget(mHScroll, "HScroll"); if (mHScroll != nullptr) { mHScroll->eventScrollChangePosition += newDelegate(this, &ScrollView::notifyScrollChangePosition); } updateView(); }
void MenuItem::initialiseOverride() { Base::initialiseOverride(); // FIXME проверить смену скина ибо должно один раз вызываться Widget* parent = getParent(); MYGUI_ASSERT(parent, "MenuItem must have parent MenuControl"); if (!parent->isType<MenuControl>()) { Widget* client = parent; parent = client->getParent(); MYGUI_ASSERT(parent, "MenuItem must have parent MenuControl"); MYGUI_ASSERT(parent->getClientWidget() == client, "MenuItem must have parent MenuControl"); MYGUI_ASSERT(parent->isType<MenuControl>(), "MenuItem must have parent MenuControl"); } mOwner = parent->castType<MenuControl>(); assignWidget(mCheck, "Check"); //if (isUserString("MinSize")) //mMinSize = IntSize::parse(getUserString("MinSize")); //FIXME нам нуженфокус клавы setNeedKeyFocus(true); updateCheck(); }
void MenuControl::initialiseOverride() { Base::initialiseOverride(); // инициализируем овнера Widget* parent = getParent(); if (parent) { mOwner = parent->castType<MenuItem>(false); if (!mOwner) { Widget* client = parent; parent = client->getParent(); if (parent && parent->getClientWidget()) { mOwner = parent->castType<MenuItem>(false); } } } // FIXME нам нужен фокус клавы setNeedKeyFocus(true); ///@wskin_child{MenuControl, Widget, Client} Клиентская зона. assignWidget(mClient, "Client"); if (mClient != nullptr) { setWidgetClient(mClient); } //OBSOLETE if (isUserString("SkinLine")) { mItemNormalSkin = getUserString("SkinLine"); mItemPopupSkin = mItemNormalSkin; } if (isUserString("SeparatorSkin")) mItemSeparatorSkin = getUserString("SeparatorSkin"); if (isUserString("NormalSkin")) mItemNormalSkin = getUserString("NormalSkin"); if (isUserString("PopupSkin")) mItemPopupSkin = getUserString("PopupSkin"); if (isUserString("DistanceButton")) mDistanceButton = utility::parseValue<int>(getUserString("DistanceButton")); if (isUserString("SubMenuSkin")) mSubMenuSkin = getUserString("SubMenuSkin"); if (isUserString("SubMenuLayer")) mSubMenuLayer = getUserString("SubMenuLayer"); // FIXME добавленно, так как шетдаун вызывается и при смене скина mShutdown = false; }
void ItemBox::initialiseOverride() { Base::initialiseOverride(); // FIXME нам нужен фокус клавы setNeedKeyFocus(true); mDragLayer = "DragAndDrop"; if (isUserString("DragLayer")) mDragLayer = getUserString("DragLayer"); ///@wskin_child{ItemBox, Widget, Client} Клиентская зона. assignWidget(mClient, "Client"); if (mClient != nullptr) { mClient->eventMouseWheel += newDelegate(this, &ItemBox::notifyMouseWheel); mClient->eventMouseButtonPressed += newDelegate(this, &ItemBox::notifyMouseButtonPressed); mClient->eventMouseButtonReleased += newDelegate(this, &ItemBox::notifyMouseButtonReleased); setWidgetClient(mClient); } ///@wskin_child{ItemBox, ScrollBar, VScroll} Вертикальная полоса прокрутки. assignWidget(mVScroll, "VScroll"); if (mVScroll != nullptr) { mVScroll->eventScrollChangePosition += newDelegate(this, &ItemBox::notifyScrollChangePosition); } ///@wskin_child{ItemBox, ScrollBar, HScroll} Горизонтальная полоса прокрутки. assignWidget(mHScroll, "HScroll"); if (mHScroll != nullptr) { mHScroll->eventScrollChangePosition += newDelegate(this, &ItemBox::notifyScrollChangePosition); } // подписываем клиент для драгэндропа if (mClient != nullptr) mClient->_setContainer(this); requestItemSize(); updateScrollSize(); updateScrollPosition(); }
void ScrollView::initialiseOverride() { Base::initialiseOverride(); // FIXME нам нужен фокус клавы setNeedKeyFocus(true); ///@wskin_child{ScrollView, Widget, Client} Клиентская зона. assignWidget(mClient, "Client"); MyGUI::Widget* realClientOwner = this; if (mClient != nullptr) { mClient->eventMouseWheel += newDelegate(this, &ScrollView::notifyMouseWheel); realClientOwner = mClient; } // создаем холcт, реальный владелец детей mRealClient = realClientOwner->createWidget<Widget>("Default", IntCoord(), Align::Default); mRealClient->eventMouseWheel += newDelegate(this, &ScrollView::notifyMouseWheel); setWidgetClient(mRealClient); ///@wskin_child{ScrollView, ScrollBar, VScroll} Вертикальная полоса прокрутки. assignWidget(mVScroll, "VScroll"); if (mVScroll != nullptr) { mVScroll->eventScrollChangePosition += newDelegate(this, &ScrollView::notifyScrollChangePosition); } ///@wskin_child{ScrollView, ScrollBar, HScroll} Горизонтальная полоса прокрутки. assignWidget(mHScroll, "HScroll"); if (mHScroll != nullptr) { mHScroll->eventScrollChangePosition += newDelegate(this, &ScrollView::notifyScrollChangePosition); } updateView(); }
void ListCtrl::initialiseOverride() { Base::initialiseOverride(); // FIXME нам нужен фокус клавы setNeedKeyFocus(true); mDragLayer = "DragAndDrop"; if (isUserString("DragLayer")) mDragLayer = getUserString("DragLayer"); assignWidget(mClient, "Client"); if (mClient != nullptr) { mClient->eventMouseWheel += newDelegate(this, &ListCtrl::notifyMouseWheel); mClient->eventMouseButtonPressed += newDelegate(this, &ListCtrl::notifyMouseButtonPressed); setWidgetClient(mClient); } assignWidget(mVScroll, "VScroll"); if (mVScroll != nullptr) { mVScroll->eventScrollChangePosition += newDelegate(this, &ListCtrl::notifyScrollChangePosition); } assignWidget(mHScroll, "HScroll"); if (mHScroll != nullptr) { mHScroll->eventScrollChangePosition += newDelegate(this, &ListCtrl::notifyScrollChangePosition); } // подписываем клиент для драгэндропа _getClientWidget()->_setContainer(this); updateFromResize(); }
void BerkeliumWidget::initialiseOverride() { Base::initialiseOverride(); // FIXME нам нужен фокус клавы setNeedKeyFocus(true); updateSize(); createTexture(mOldWidth, mOldHeight, TRM_PT_VIEW_REQUESTED); requestUpdateCanvas = newDelegate(this, &BerkeliumWidget::notifyUpdateCanvas); Berkelium::Context *context = Berkelium::Context::create(); mWindow = Berkelium::Window::create(context); updateSize(); mBuffer.resize(mOldWidth, mOldHeight); mWindow->resize(mOldWidth, mOldHeight); mWindowDelegate = new BerkeliumDelegate(); setWindowDelegate(mWindowDelegate); MyGUI::Gui::getInstance().eventFrameStart += MyGUI::newDelegate(this, &BerkeliumWidget::notifyFrameStart); }
void ListBox::initialiseOverride() { Base::initialiseOverride(); // FIXME нам нужен фокус клавы setNeedKeyFocus(true); // парсим свойства if (isUserString("SkinLine")) mSkinLine = getUserString("SkinLine"); if (isUserString("HeightLine")) mHeightLine = utility::parseInt(getUserString("HeightLine")); if (mHeightLine < 1) mHeightLine = 1; assignWidget(mClient, "Client"); if (mClient != nullptr) { mClient->eventMouseButtonPressed += newDelegate(this, &ListBox::notifyMousePressed); setWidgetClient(mClient); } assignWidget(mWidgetScroll, "VScroll"); if (mWidgetScroll != nullptr) { mWidgetScroll->eventScrollChangePosition += newDelegate(this, &ListBox::notifyScrollChangePosition); mWidgetScroll->eventMouseButtonPressed += newDelegate(this, &ListBox::notifyMousePressed); mWidgetScroll->setScrollPage((size_t)mHeightLine); mWidgetScroll->setScrollViewPage((size_t)mHeightLine); } updateScroll(); updateLine(); }
void Window::initialiseOverride() { Base::initialiseOverride(); // FIXME нам нужен фокус клавы setNeedKeyFocus(true); // дефолтные размеры mMinmax.set( (std::numeric_limits<int>::min)(), (std::numeric_limits<int>::min)(), (std::numeric_limits<int>::max)(), (std::numeric_limits<int>::max)()); bool main_move = false; if (isUserString("MainMove")) { setUserString("Scale", "1 1 0 0"); main_move = true; } ///@wskin_child{Window, Widget, Client} Клиентская зона. assignWidget(mClient, "Client"); if (mClient != nullptr) { if (main_move) { mClient->setUserString("Scale", "1 1 0 0"); mClient->eventMouseButtonPressed += newDelegate(this, &Window::notifyMousePressed); mClient->eventMouseButtonReleased += newDelegate(this, &Window::notifyMouseReleased); mClient->eventMouseDrag += newDelegate(this, &Window::notifyMouseDrag); } setWidgetClient(mClient); } ///@wskin_child{Window, TextBox, Caption} Caption for window. assignWidget(mWidgetCaption, "Caption"); if (mWidgetCaption != nullptr) { mWidgetCaption->setUserString("Scale", "1 1 0 0"); mWidgetCaption->eventMouseButtonPressed += newDelegate(this, &Window::notifyMousePressed); mWidgetCaption->eventMouseButtonReleased += newDelegate(this, &Window::notifyMouseReleased); mWidgetCaption->eventMouseDrag += newDelegate(this, &Window::notifyMouseDrag); } VectorWidgetPtr buttons = getSkinWidgetsByName("Button"); for (VectorWidgetPtr::iterator iter = buttons.begin(); iter != buttons.end(); ++iter) { (*iter)->eventMouseButtonClick += newDelegate(this, &Window::notifyPressedButtonEvent); } VectorWidgetPtr actions = getSkinWidgetsByName("Action"); for (VectorWidgetPtr::iterator iter = actions.begin(); iter != actions.end(); ++iter) { (*iter)->eventMouseButtonPressed += newDelegate(this, &Window::notifyMousePressed); (*iter)->eventMouseButtonReleased += newDelegate(this, &Window::notifyMouseReleased); (*iter)->eventMouseDrag += newDelegate(this, &Window::notifyMouseDrag); (*iter)->eventMouseWheel += newDelegate(this, &Window::notifyMouseWheel); } const size_t countNames = 8; const char* resizers[2][countNames] = { {"ResizeLeftTop", "ResizeTop", "ResizeRightTop", "ResizeRight", "ResizeRightBottom", "ResizeBottom", "ResizeLeftBottom", "ResizeLeft"}, {"Left Top", "Top", "Right Top", "Right", "Right Bottom", "Bottom", "Left Bottom", "Left"} }; for (size_t index = 0; index < countNames; ++ index) { Widget* widget = nullptr; assignWidget(widget, resizers[0][index]); if (widget != nullptr) { widget->eventMouseButtonPressed += newDelegate(this, &Window::notifyMousePressed); widget->eventMouseButtonReleased += newDelegate(this, &Window::notifyMouseReleased); widget->eventMouseDrag += newDelegate(this, &Window::notifyMouseDrag); widget->eventMouseWheel += newDelegate(this, &Window::notifyMouseWheel); widget->setUserString("Action", resizers[1][index]); } } }
VideoWidget::VideoWidget() { mPlayer.reset(new Video::VideoPlayer()); setNeedKeyFocus(true); }
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()); }