00001
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include "MyGUI_Precompiled.h"
00024 #include "MyGUI_Tab.h"
00025 #include "MyGUI_ControllerManager.h"
00026 #include "MyGUI_WidgetManager.h"
00027 #include "MyGUI_Button.h"
00028 #include "MyGUI_TabItem.h"
00029 #include "MyGUI_ResourceSkin.h"
00030
00031 namespace MyGUI
00032 {
00033
00034 const float TAB_SPEED_FADE_COEF = 5.0f;
00035
00036 Tab::Tab() :
00037 mOffsetTab(0),
00038 mButtonShow(false),
00039 mWidthBar(0),
00040 mWidgetBar(nullptr),
00041 mButtonLeft(nullptr),
00042 mButtonRight(nullptr),
00043 mButtonList(nullptr),
00044 mButtonDecor(nullptr),
00045 mEmptyBarWidget(nullptr),
00046 mItemTemplate(nullptr),
00047 mStartIndex(0),
00048 mIndexSelect(ITEM_NONE),
00049 mButtonDefaultWidth(1),
00050 mSmoothShow(true),
00051 mButtonAutoWidth(true),
00052 mShutdown(false)
00053 {
00054 }
00055
00056 void Tab::_initialise(WidgetStyle _style, const IntCoord& _coord, Align _align, ResourceSkin* _info, Widget* _parent, ICroppedRectangle * _croppedParent, IWidgetCreator * _creator, const std::string& _name)
00057 {
00058 Base::_initialise(_style, _coord, _align, _info, _parent, _croppedParent, _creator, _name);
00059
00060 initialiseWidgetSkin(_info);
00061 }
00062
00063 Tab::~Tab()
00064 {
00065 mShutdown = true;
00066 shutdownWidgetSkin();
00067 }
00068
00069 void Tab::baseChangeWidgetSkin(ResourceSkin* _info)
00070 {
00071 shutdownWidgetSkin();
00072 Base::baseChangeWidgetSkin(_info);
00073 initialiseWidgetSkin(_info);
00074 }
00075
00076 void Tab::initialiseWidgetSkin(ResourceSkin* _info)
00077 {
00078
00079 const MapString& properties = _info->getProperties();
00080 if (!properties.empty())
00081 {
00082 MapString::const_iterator iter = properties.find("OffsetBar");
00083 if (iter != properties.end()) mOffsetTab = utility::parseInt(iter->second);
00084
00085 iter = properties.find("ButtonSkin");
00086 if (iter != properties.end()) mButtonSkinName = iter->second;
00087 iter = properties.find("EmptyBarSkin");
00088 if (iter != properties.end()) mEmptySkinName = iter->second;
00089 }
00090
00091 for (VectorWidgetPtr::iterator iter=mWidgetChildSkin.begin(); iter!=mWidgetChildSkin.end(); ++iter)
00092 {
00093 if (*(*iter)->_getInternalData<std::string>() == "Bar")
00094 {
00095 MYGUI_DEBUG_ASSERT( ! mWidgetBar, "widget already assigned");
00096 mWidgetBar = (*iter);
00097 }
00098 else if (*(*iter)->_getInternalData<std::string>() == "Left")
00099 {
00100 MYGUI_DEBUG_ASSERT( ! mButtonLeft, "widget already assigned");
00101 mButtonLeft = (*iter)->castType<Button>();
00102 mButtonLeft->setVisible(false);
00103 mButtonLeft->eventMouseButtonClick = newDelegate(this, &Tab::notifyPressedButtonEvent);
00104 }
00105 else if (*(*iter)->_getInternalData<std::string>() == "Right")
00106 {
00107 MYGUI_DEBUG_ASSERT( ! mButtonRight, "widget already assigned");
00108 mButtonRight = (*iter)->castType<Button>();
00109 mButtonRight->setVisible(false);
00110 mButtonRight->eventMouseButtonClick = newDelegate(this, &Tab::notifyPressedButtonEvent);
00111 }
00112 else if (*(*iter)->_getInternalData<std::string>() == "List")
00113 {
00114 MYGUI_DEBUG_ASSERT( ! mButtonList, "widget already assigned");
00115 mButtonList = (*iter)->castType<Button>();
00116 mButtonList->setVisible(false);
00117 mButtonList->eventMouseButtonClick = newDelegate(this, &Tab::notifyPressedButtonEvent);
00118 }
00119 else if (*(*iter)->_getInternalData<std::string>() == "ButtonDecor")
00120 {
00121 MYGUI_DEBUG_ASSERT( ! mButtonDecor, "widget already assigned");
00122 mButtonDecor = *iter;
00123 mButtonDecor->setVisible(false);
00124 }
00125 else if (*(*iter)->_getInternalData<std::string>() == "ShowPatch")
00126 {
00127 mWidgetsPatch.push_back((*iter));
00128 (*iter)->setVisible(false);
00129 }
00130 else if ((*(*iter)->_getInternalData<std::string>() == "Sheet") || (*(*iter)->_getInternalData<std::string>() == "TabItem"))
00131 {
00132 MYGUI_DEBUG_ASSERT( ! mItemTemplate, "widget already assigned");
00133 mItemTemplate = (*iter);
00134 mItemTemplate->setVisible(false);
00135 }
00136 }
00137
00138
00139
00140
00141 mEmptyBarWidget = _getWidgetBar()->createWidget<Widget>(mEmptySkinName, IntCoord(), Align::Left | Align::Top);
00142
00143 updateBar();
00144 }
00145
00146 void Tab::shutdownWidgetSkin()
00147 {
00148 mWidgetsPatch.clear();
00149 mWidgetBar = nullptr;
00150 mButtonLeft = nullptr;
00151 mButtonRight = nullptr;
00152 mButtonList = nullptr;
00153 mButtonDecor = nullptr;
00154 mItemTemplate = nullptr;
00155 mEmptyBarWidget = nullptr;
00156 }
00157
00158
00159
00160 Widget* Tab::baseCreateWidget(WidgetStyle _style, const std::string& _type, const std::string& _skin, const IntCoord& _coord, Align _align, const std::string& _layer, const std::string& _name)
00161 {
00162 if ((TabItem::getClassTypeName() == _type) || ("Sheet" == _type))
00163 {
00164 TabItem* sheet = static_cast<TabItem*>(Base::baseCreateWidget(_style, TabItem::getClassTypeName(), "Default", _getWidgetTemplate()->getCoord(), _getWidgetTemplate()->getAlign(), "", _name));
00165 _insertItem(ITEM_NONE, _name, sheet, Any::Null);
00166
00167 return sheet;
00168 }
00169 return Base::baseCreateWidget(_style, _type, _skin, _coord, _align, _layer, _name);
00170 }
00171
00172 TabItem* Tab::insertItemAt(size_t _index, const UString& _name, Any _data)
00173 {
00174 MYGUI_ASSERT_RANGE_INSERT(_index, mItemsInfo.size(), "Tab::insertItem");
00175
00176 TabItem* sheet = static_cast<TabItem*>(Base::baseCreateWidget(WidgetStyle::Child, TabItem::getClassTypeName(), "Default", _getWidgetTemplate()->getCoord(), _getWidgetTemplate()->getAlign(), "", ""));
00177 _insertItem(_index, _name, sheet, _data);
00178
00179 return sheet;
00180 }
00181
00182 void Tab::setPosition(const IntPoint& _point)
00183 {
00184 Base::setPosition(_point);
00185
00186 updateBar();
00187 }
00188
00189 void Tab::setSize(const IntSize& _size)
00190 {
00191 Base::setSize(_size);
00192
00193 updateBar();
00194 }
00195
00196 void Tab::setCoord(const IntCoord& _coord)
00197 {
00198 Base::setCoord(_coord);
00199
00200 updateBar();
00201 }
00202
00203 void Tab::updateBar()
00204 {
00205
00206 if (_getWidgetBar()->getWidth() < 1) return;
00207
00208 if ((_getWidgetBar()->getWidth() < mWidthBar) && (1 < mItemsInfo.size()))
00209 {
00210 if (!mButtonShow)
00211 {
00212 mButtonShow = true;
00213 if (nullptr != mButtonLeft) mButtonLeft->setVisible(true);
00214 if (nullptr != mButtonRight) mButtonRight->setVisible(true);
00215 if (nullptr != mButtonList) mButtonList->setVisible(true);
00216 if (nullptr != mButtonDecor) mButtonDecor->setVisible(true);
00217 for (VectorWidgetPtr::iterator iter=mWidgetsPatch.begin(); iter!=mWidgetsPatch.end(); ++iter) (*iter)->setVisible(true);
00218 if (mWidgetBar != nullptr)
00219 mWidgetBar->setSize(mWidgetBar->getWidth() - mOffsetTab, mWidgetBar->getHeight());
00220 }
00221 }
00222 else
00223 {
00224 if (mButtonShow)
00225 {
00226 mButtonShow = false;
00227 if (nullptr != mButtonLeft) mButtonLeft->setVisible(false);
00228 if (nullptr != mButtonRight) mButtonRight->setVisible(false);
00229 if (nullptr != mButtonList) mButtonList->setVisible(false);
00230 if (nullptr != mButtonDecor) mButtonDecor->setVisible(false);
00231 for (VectorWidgetPtr::iterator iter=mWidgetsPatch.begin(); iter!=mWidgetsPatch.end(); ++iter) (*iter)->setVisible(false);
00232 if (mWidgetBar != nullptr)
00233 mWidgetBar->setSize(mWidgetBar->getWidth() + mOffsetTab, mWidgetBar->getHeight());
00234 }
00235 }
00236
00237
00238 if (mStartIndex > 0)
00239 {
00240
00241 int width = 0;
00242 for (size_t pos=mStartIndex; pos<mItemsInfo.size(); pos++) width += mItemsInfo[pos].width;
00243
00244
00245 while ((mStartIndex > 0) && ((width + mItemsInfo[mStartIndex-1].width) <= _getWidgetBar()->getWidth()))
00246 {
00247 mStartIndex--;
00248 width += mItemsInfo[mStartIndex].width;
00249 }
00250 }
00251
00252
00253 int width = 0;
00254 size_t count = 0;
00255 size_t pos=mStartIndex;
00256 for (; pos<mItemsInfo.size(); pos++)
00257 {
00258
00259 if (width > _getWidgetBar()->getWidth()) break;
00260
00261
00262 TabItemInfo& info = mItemsInfo[pos];
00263 if ((width + info.width) > _getWidgetBar()->getWidth())
00264 {
00265 break;
00266 }
00267
00268
00269 if (count >= mItemButton.size()) _createItemButton();
00270
00271
00272 Button* button = mItemButton[count]->castType<Button>();
00273 button->setVisible(true);
00274
00275
00276 button->setButtonPressed(pos == mIndexSelect);
00277
00278 if (button->getCaption() != info.name)
00279 button->setCaption(info.name);
00280
00281 IntCoord coord(width, 0, info.width, _getWidgetBar()->getHeight());
00282 if (coord != button->getCoord())
00283 button->setCoord(coord);
00284
00285 width += info.width;
00286 count ++;
00287 }
00288
00289
00290 while (count < mItemButton.size())
00291 {
00292 mItemButton[count]->setVisible(false);
00293 count ++;
00294 }
00295
00296 bool right = true;
00297 if (pos == mItemsInfo.size()) right = false;
00298
00299
00300 if (width < _getWidgetBar()->getWidth())
00301 {
00302 mEmptyBarWidget->setVisible(true);
00303 mEmptyBarWidget->setCoord(width, 0, _getWidgetBar()->getWidth() - width, _getWidgetBar()->getHeight());
00304 }
00305 else
00306 {
00307 mEmptyBarWidget->setVisible(false);
00308 }
00309
00310
00311 if (mStartIndex == 0)
00312 {
00313 if (nullptr != mButtonLeft) mButtonLeft->setEnabled(false);
00314 }
00315 else
00316 {
00317 if (nullptr != mButtonLeft) mButtonLeft->setEnabled(true);
00318 }
00319
00320 if (right)
00321 {
00322 if (nullptr != mButtonRight) mButtonRight->setEnabled(true);
00323 }
00324 else
00325 {
00326 if (nullptr != mButtonRight) mButtonRight->setEnabled(false);
00327 }
00328
00329 }
00330
00331 void Tab::notifyPressedButtonEvent(MyGUI::Widget* _sender)
00332 {
00333 if (_sender == mButtonLeft)
00334 {
00335 if (mStartIndex > 0)
00336 {
00337 mStartIndex --;
00338 updateBar();
00339 }
00340 }
00341 else if (_sender == mButtonRight)
00342 {
00343 if ((mStartIndex+1) < mItemsInfo.size())
00344 {
00345 mStartIndex ++;
00346
00347 updateBar();
00348 }
00349 }
00350 else if (_sender == mButtonList)
00351 {
00352 }
00353 }
00354
00355 void Tab::notifyPressedBarButtonEvent(MyGUI::Widget* _sender)
00356 {
00357 size_t select = *_sender->_getInternalData<size_t>() + mStartIndex;
00358
00359 if (select == mIndexSelect)
00360 {
00361
00362 beginToItemSelected();
00363 return;
00364 }
00365 size_t old = mIndexSelect;
00366 mIndexSelect = select;
00367
00368 size_t count = 0;
00369 for (size_t pos=0; pos<mItemButton.size(); pos++)
00370 {
00371 Button* button = mItemButton[count]->castType<Button>();
00372 if (button->isVisible())
00373 {
00374
00375 button->setButtonPressed((pos + mStartIndex) == mIndexSelect);
00376 }
00377 count ++;
00378 }
00379
00380
00381 beginToItemSelected();
00382
00383
00384 _forcePeek(mItemsInfo[mIndexSelect].item);
00385
00386 _showItem(mItemsInfo[mIndexSelect].item, true, mSmoothShow);
00387 _showItem(mItemsInfo[old].item, false, mSmoothShow);
00388
00389 eventTabChangeSelect(this, mIndexSelect);
00390 }
00391
00392 void Tab::beginToItemAt(size_t _index)
00393 {
00394 MYGUI_ASSERT_RANGE(_index, mItemsInfo.size(), "Tab::beginToItemAt");
00395
00396
00397 if (_getWidgetBar()->getWidth() < 1) return;
00398
00399 if (_index == mStartIndex) return;
00400 else if (_index < mStartIndex)
00401 {
00402 mStartIndex = _index;
00403 updateBar();
00404 }
00405 else
00406 {
00407
00408 int width = 0;
00409 for (size_t pos=mStartIndex; pos<=_index; pos++)
00410 {
00411 width += mItemsInfo[pos].width;
00412 }
00413
00414
00415 bool change = false;
00416 while ((mStartIndex < _index) && (width > _getWidgetBar()->getWidth()))
00417 {
00418 width -= mItemsInfo[mStartIndex].width;
00419 mStartIndex ++;
00420 change = true;
00421 }
00422 if (change) updateBar();
00423
00424 }
00425 }
00426
00427 void Tab::setButtonDefaultWidth(int _width)
00428 {
00429 mButtonDefaultWidth = _width;
00430 if (mButtonDefaultWidth < 1) mButtonDefaultWidth = 1;
00431 setButtonAutoWidth(false);
00432 }
00433
00434 void Tab::setButtonAutoWidth(bool _auto)
00435 {
00436 mButtonAutoWidth = _auto;
00437
00438 for (size_t pos=0; pos<mItemsInfo.size(); pos++)
00439 {
00440 int width;
00441 if (mButtonAutoWidth) width = _getTextWidth(mItemsInfo[pos].name);
00442 else width = mButtonDefaultWidth;
00443
00444 mWidthBar += width - mItemsInfo[pos].width;
00445 mItemsInfo[pos].width = width;
00446 }
00447
00448 updateBar();
00449 }
00450
00451 void Tab::setButtonWidthAt(size_t _index, int _width)
00452 {
00453 MYGUI_ASSERT_RANGE(_index, mItemsInfo.size(), "Tab::setButtonWidthAt");
00454
00455 if (_width <= 0)
00456 {
00457 if (mButtonAutoWidth) _width = _getTextWidth(mItemsInfo[_index].name);
00458 else _width = mButtonDefaultWidth;
00459 }
00460
00461 mWidthBar += _width - mItemsInfo[_index].width;
00462 mItemsInfo[_index].width = _width;
00463
00464 updateBar();
00465 }
00466
00467 void Tab::setItemNameAt(size_t _index, const UString& _name)
00468 {
00469 MYGUI_ASSERT_RANGE(_index, mItemsInfo.size(), "Tab::setItemNameAt");
00470 mItemsInfo[_index].name = _name;
00471
00472 int width;
00473 if (mButtonAutoWidth) width = _getTextWidth(_name);
00474 else width = mButtonDefaultWidth;
00475
00476 mWidthBar += width - mItemsInfo[_index].width;
00477 mItemsInfo[_index].width = width;
00478
00479 updateBar();
00480 }
00481
00482 void Tab::setIndexSelected(size_t _index)
00483 {
00484 MYGUI_ASSERT_RANGE(_index, mItemsInfo.size(), "Tab::setIndexSelected");
00485 if (mIndexSelect == _index) return;
00486 size_t old = mIndexSelect;
00487 mIndexSelect = _index;
00488 updateBar();
00489
00490
00491 if (mSmoothShow) _forcePeek(mItemsInfo[mIndexSelect].item);
00492
00493 _showItem(mItemsInfo[mIndexSelect].item, true, mSmoothShow);
00494 _showItem(mItemsInfo[old].item, false, mSmoothShow);
00495
00496 beginToItemSelected();
00497 }
00498
00499 void Tab::actionWidgetHide(Widget* _widget)
00500 {
00501 _widget->setVisible(false);
00502 _widget->setEnabled(true);
00503 }
00504
00505 void Tab::_showItem(TabItem* _item, bool _show, bool _smooth)
00506 {
00507 if (!_smooth)
00508 {
00509 ControllerManager::getInstance().removeItem(_item);
00510 _item->setAlpha(ALPHA_MAX);
00511
00512 _item->setVisible(_show);
00513
00514 return;
00515 }
00516
00517 if (_show)
00518 {
00519 ControllerFadeAlpha* controller = createControllerFadeAlpha(ALPHA_MAX, TAB_SPEED_FADE_COEF, true);
00520 ControllerManager::getInstance().addItem(_item, controller);
00521 }
00522 else
00523 {
00524 ControllerFadeAlpha* controller = createControllerFadeAlpha(ALPHA_MIN, TAB_SPEED_FADE_COEF, false);
00525 controller->eventPostAction = newDelegate(this, &Tab::actionWidgetHide);
00526 ControllerManager::getInstance().addItem(_item, controller);
00527 }
00528 }
00529
00530 void Tab::_createItemButton()
00531 {
00532 Button* button = _getWidgetBar()->createWidget<Button>(mButtonSkinName, IntCoord(), Align::Left | Align::Top);
00533 button->eventMouseButtonClick = newDelegate(this, &Tab::notifyPressedBarButtonEvent);
00534 button->_setInternalData(mItemButton.size());
00535 mItemButton.push_back(button);
00536 }
00537
00538 int Tab::_getTextWidth(const UString& _text)
00539 {
00540 if (0 == mItemButton.size()) _createItemButton();
00541
00542 UString save = mItemButton[0]->getCaption();
00543 mItemButton[0]->setCaption(_text);
00544
00545 ISubWidgetText* text = mItemButton[0]->getSubWidgetText();
00546 const IntSize& size = text ? text->getTextSize() : IntSize();
00547 const IntCoord& coord = text ? text->getCoord() : IntCoord();
00548
00549 mItemButton[0]->setCaption(save);
00550
00551 return size.width + mItemButton[0]->getWidth() - coord.width;
00552 }
00553
00554 void Tab::_notifyDeleteItem(TabItem* _sheet)
00555 {
00556
00557 if (mShutdown) return;
00558
00559 size_t index = getItemIndex(_sheet);
00560
00561 mWidthBar -= mItemsInfo[index].width;
00562 mItemsInfo.erase(mItemsInfo.begin() + index);
00563
00564 if (0 == mItemsInfo.size()) mIndexSelect = ITEM_NONE;
00565 else
00566 {
00567 if (index < mIndexSelect) mIndexSelect --;
00568 else if (index == mIndexSelect)
00569 {
00570 if (mIndexSelect == mItemsInfo.size()) mIndexSelect --;
00571 mItemsInfo[mIndexSelect].item->setVisible(true);
00572 mItemsInfo[mIndexSelect].item->setAlpha(ALPHA_MAX);
00573 }
00574 }
00575
00576 updateBar();
00577 }
00578
00579 void Tab::_insertItem(size_t _index, const UString& _name, TabItem* _sheet, Any _data)
00580 {
00581 if (_index == ITEM_NONE) _index = mItemsInfo.size();
00582
00583
00584 int width = (mButtonAutoWidth ? _getTextWidth(_name) : mButtonDefaultWidth);
00585 mWidthBar += width;
00586
00587 mItemsInfo.insert(mItemsInfo.begin() + _index, TabItemInfo(width, _name, _sheet, _data));
00588
00589
00590 if (1 == mItemsInfo.size()) mIndexSelect = 0;
00591 else
00592 {
00593 _sheet->setVisible(false);
00594 if (_index <= mIndexSelect) mIndexSelect ++;
00595 }
00596
00597 updateBar();
00598 }
00599
00600 void Tab::setItemDataAt(size_t _index, Any _data)
00601 {
00602 MYGUI_ASSERT_RANGE(_index, mItemsInfo.size(), "Tab::setItemDataAt");
00603 mItemsInfo[_index].data = _data;
00604 }
00605
00606 int Tab::getButtonWidthAt(size_t _index)
00607 {
00608 MYGUI_ASSERT_RANGE(_index, mItemsInfo.size(), "Tab::getButtonWidthAt");
00609 return mItemsInfo[_index].width;
00610 }
00611
00612 const UString& Tab::getItemNameAt(size_t _index)
00613 {
00614 MYGUI_ASSERT_RANGE(_index, mItemsInfo.size(), "Tab::getItemNameAt");
00615 return mItemsInfo[_index].name;
00616 }
00617
00618 TabItem* Tab::getItemAt(size_t _index)
00619 {
00620 MYGUI_ASSERT_RANGE(_index, mItemsInfo.size(), "Tab::getItemAt");
00621 return mItemsInfo[_index].item;
00622 }
00623
00624 void Tab::removeItemAt(size_t _index)
00625 {
00626 MYGUI_ASSERT_RANGE(_index, mItemsInfo.size(), "Tab::removeItemAt");
00627 this->_destroyChildWidget(mItemsInfo[_index].item);
00628 }
00629
00630 void Tab::removeAllItems()
00631 {
00632 while (mItemsInfo.size() > 0)
00633 {
00634 this->_destroyChildWidget(mItemsInfo.back().item);
00635 }
00636 }
00637
00638 ControllerFadeAlpha* Tab::createControllerFadeAlpha(float _alpha, float _coef, bool _enable)
00639 {
00640 ControllerItem* item = ControllerManager::getInstance().createItem(ControllerFadeAlpha::getClassTypeName());
00641 ControllerFadeAlpha* controller = item->castType<ControllerFadeAlpha>();
00642
00643 controller->setAlpha(_alpha);
00644 controller->setCoef(_coef);
00645 controller->setEnabled(_enable);
00646
00647 return controller;
00648 }
00649
00650 size_t Tab::getItemIndex(TabItem* _item)
00651 {
00652 for (size_t pos=0; pos<mItemsInfo.size(); pos++)
00653 {
00654 if (mItemsInfo[pos].item == _item) return pos;
00655 }
00656 MYGUI_EXCEPT("item (" << _item << ") not found, source 'Tab::getItemIndex'");
00657 }
00658
00659 size_t Tab::findItemIndex(TabItem* _item)
00660 {
00661 for (size_t pos=0; pos<mItemsInfo.size(); pos++)
00662 {
00663 if (mItemsInfo[pos].item == _item) return pos;
00664 }
00665 return ITEM_NONE;
00666 }
00667
00668 size_t Tab::findItemIndexWith(const UString& _name)
00669 {
00670 for (size_t pos=0; pos<mItemsInfo.size(); pos++)
00671 {
00672 if (mItemsInfo[pos].name == _name) return pos;
00673 }
00674 return ITEM_NONE;
00675 }
00676
00677 TabItem* Tab::findItemWith(const UString& _name)
00678 {
00679 for (size_t pos=0; pos<mItemsInfo.size(); pos++)
00680 {
00681 if (mItemsInfo[pos].name == _name) return mItemsInfo[pos].item;
00682 }
00683 return nullptr;
00684 }
00685
00686 TabItem* Tab::getItemSelected()
00687 {
00688 return getIndexSelected() != ITEM_NONE ? getItemAt(getIndexSelected()) : nullptr;
00689 }
00690
00691 void Tab::setProperty(const std::string& _key, const std::string& _value)
00692 {
00693 if (_key == "Tab_ButtonWidth") setButtonDefaultWidth(utility::parseValue<int>(_value));
00694 else if (_key == "Tab_ButtonAutoWidth") setButtonAutoWidth(utility::parseValue<bool>(_value));
00695 else if (_key == "Tab_SmoothShow") setSmoothShow(utility::parseValue<bool>(_value));
00696 else if (_key == "Tab_AddItem") addItem(_value);
00697 else if (_key == "Tab_SelectItem") setIndexSelected(utility::parseValue<size_t>(_value));
00698
00699 #ifndef MYGUI_DONT_USE_OBSOLETE
00700 else if (_key == "Tab_AddSheet")
00701 {
00702 MYGUI_LOG(Warning, "Tab_AddSheet is obsolete, use Tab_AddItem");
00703 addItem(_value);
00704 }
00705 else if (_key == "Tab_SelectSheet")
00706 {
00707 MYGUI_LOG(Warning, "Tab_SelectSheet is obsolete, use Tab_SelectItem");
00708 setIndexSelected(utility::parseValue<size_t>(_value));
00709 }
00710 #endif // MYGUI_DONT_USE_OBSOLETE
00711
00712 else
00713 {
00714 Base::setProperty(_key, _value);
00715 return;
00716 }
00717 eventChangeProperty(this, _key, _value);
00718 }
00719
00720 Widget* Tab::_getWidgetTemplate()
00721 {
00722 return mItemTemplate == nullptr ? this : mItemTemplate;
00723 }
00724
00725 Widget* Tab::_getWidgetBar()
00726 {
00727 return mWidgetBar == nullptr ? this : mWidgetBar;
00728 }
00729
00730 }