void TabControl::setIndexSelected(size_t _index) { MYGUI_ASSERT_RANGE(_index, mItemsInfo.size(), "TabControl::setIndexSelected"); if (mIndexSelect == _index) return; size_t old = mIndexSelect; mIndexSelect = _index; updateBar(); // поднимаем страницу для пикинга if (mSmoothShow) _forcePeek(mItemsInfo[mIndexSelect].item); _showItem(mItemsInfo[mIndexSelect].item, true, mSmoothShow); _showItem(mItemsInfo[old].item, false, mSmoothShow); beginToItemSelected(); }
void VScroll::updateTrack() { if (mWidgetTrack == nullptr) return; _forcePeek(mWidgetTrack); // размер диапазана в пикселях int pos = getLineSize(); // скрываем если диапазан маленький или места мало if ((mScrollRange < 2) || (pos <= mWidgetTrack->getHeight())) { mWidgetTrack->setVisible(false); if ( nullptr != mWidgetFirstPart ) mWidgetFirstPart->setSize(mWidgetFirstPart->getWidth(), pos / 2); if ( nullptr != mWidgetSecondPart ) mWidgetSecondPart->setCoord(mWidgetSecondPart->getLeft(), pos / 2 + (int)mSkinRangeStart, mWidgetSecondPart->getWidth(), pos - pos / 2); return; } // если скрыт то покажем if (!mWidgetTrack->getVisible()) { mWidgetTrack->setVisible(true); } // и обновляем позицию pos = (int)(((size_t)(pos - getTrackSize()) * mScrollPosition) / (mScrollRange - 1) + mSkinRangeStart); mWidgetTrack->setPosition(mWidgetTrack->getLeft(), pos); if ( nullptr != mWidgetFirstPart ) { int height = pos + mWidgetTrack->getHeight() / 2 - mWidgetFirstPart->getTop(); mWidgetFirstPart->setSize(mWidgetFirstPart->getWidth(), height); } if ( nullptr != mWidgetSecondPart ) { int top = pos + mWidgetTrack->getHeight() / 2; int height = mWidgetSecondPart->getHeight() + mWidgetSecondPart->getTop() - top; mWidgetSecondPart->setCoord(mWidgetSecondPart->getLeft(), top, mWidgetSecondPart->getWidth(), height); } }
void TabControl::notifyPressedBarButtonEvent(MyGUI::Widget* _sender) { size_t select = *_sender->_getInternalData<size_t>() + mStartIndex; // щелкнули по той же кнопке if (select == mIndexSelect) { // стараемся показать выделенную кнопку beginToItemSelected(); return; } size_t old = mIndexSelect; mIndexSelect = select; size_t count = 0; for (size_t pos = 0; pos < mItemButton.size(); pos++) { Button* button = mItemButton[count]->castType<Button>(); if (button->getVisible()) { // корректируем нажатость кнопки button->setStateSelected((pos + mStartIndex) == mIndexSelect); } count ++; } // стараемся показать выделенную кнопку beginToItemSelected(); // поднимаем страницу для пикинга _forcePeek(mItemsInfo[mIndexSelect].item); _showItem(mItemsInfo[mIndexSelect].item, true, mSmoothShow); _showItem(mItemsInfo[old].item, false, mSmoothShow); eventTabChangeSelect(this, mIndexSelect); }