00001
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef __MYGUI_TAB_H__
00024 #define __MYGUI_TAB_H__
00025
00026 #include "MyGUI_Prerequest.h"
00027 #include "MyGUI_Widget.h"
00028 #include "MyGUI_Any.h"
00029 #include "MyGUI_EventPair.h"
00030 #include "MyGUI_ControllerFadeAlpha.h"
00031
00032 namespace MyGUI
00033 {
00034
00035 typedef delegates::CDelegate2<TabPtr, size_t> EventHandle_TabPtrSizeT;
00036
00037 class MYGUI_EXPORT Tab :
00038 public Widget
00039 {
00040
00041
00042 friend class TabItem;
00043
00044 MYGUI_RTTI_DERIVED( Tab );
00045
00046 public:
00047 Tab();
00048
00049 struct TabItemInfo
00050 {
00051 TabItemInfo(int _width, const UString& _name, TabItemPtr _item, Any _data) :
00052 width(_width),
00053 name(_name),
00054 item(_item),
00055 data(_data)
00056 {
00057 }
00058
00059 int width;
00060 UString name;
00061 TabItemPtr item;
00062 Any data;
00063 };
00064
00065 typedef std::vector<TabItemInfo> VectorTabItemInfo;
00066
00068 virtual void setPosition(const IntPoint& _value);
00070 virtual void setSize(const IntSize& _value);
00072 virtual void setCoord(const IntCoord& _value);
00073
00075 void setPosition(int _left, int _top) { setPosition(IntPoint(_left, _top)); }
00077 void setSize(int _width, int _height) { setSize(IntSize(_width, _height)); }
00079 void setCoord(int _left, int _top, int _width, int _height) { setCoord(IntCoord(_left, _top, _width, _height)); }
00080
00081
00082
00083
00085 size_t getItemCount() { return mItemsInfo.size(); }
00086
00088 TabItemPtr insertItemAt(size_t _index, const UString& _name, Any _data = Any::Null);
00090 TabItemPtr insertItem(TabItemPtr _to, const UString& _name, Any _data = Any::Null)
00091 {
00092 return insertItemAt(getItemIndex(_to), _name, _data);
00093 }
00094
00096 TabItemPtr addItem(const UString& _name, Any _data = Any::Null)
00097 {
00098 return insertItemAt(ITEM_NONE, _name, _data);
00099 }
00100
00102 void removeItemAt(size_t _index);
00104 void removeItem(TabItemPtr _item) { removeItemAt(getItemIndex(_item)); }
00105
00107 void removeAllItems();
00108
00109
00111 TabItemPtr getItemAt(size_t _index);
00112
00114 size_t getItemIndex(TabItemPtr _item);
00115
00117 size_t findItemIndex(TabItemPtr _item);
00118
00120 size_t findItemIndexWith(const UString& _name);
00121
00123 TabItemPtr findItemWith(const UString& _name);
00124
00125
00126
00127
00128
00130 size_t getIndexSelected() { return mIndexSelect; }
00131
00133 TabItemPtr getItemSelected();
00134
00136 void setIndexSelected(size_t _index);
00137
00139 void setItemSelected(TabItemPtr _item) { setIndexSelected(getItemIndex(_item)); }
00140
00141
00142
00143
00144
00146 void setItemDataAt(size_t _index, Any _data);
00148 void setItemData(TabItemPtr _item, Any _data) { setItemDataAt(getItemIndex(_item), _data); }
00149
00151 void clearItemDataAt(size_t _index) { setItemDataAt(_index, Any::Null); }
00153 void clearItemData(TabItemPtr _item) { clearItemDataAt(getItemIndex(_item)); }
00154
00156 template <typename ValueType>
00157 ValueType * getItemDataAt(size_t _index, bool _throw = true)
00158 {
00159 MYGUI_ASSERT_RANGE(_index, mItemsInfo.size(), "Tab::getItemDataAt");
00160 return mItemsInfo[_index].data.castType<ValueType>(_throw);
00161 }
00163 template <typename ValueType>
00164 ValueType * getItemData(TabItemPtr _item, bool _throw = true)
00165 {
00166 return getItemDataAt<ValueType>(getItemIndex(_item), _throw);
00167 }
00168
00169
00170
00171
00172
00174 void setItemNameAt(size_t _index, const UString& _name);
00175
00177 void setItemName(TabItemPtr _item, const UString& _name) { setItemNameAt(getItemIndex(_item), _name); }
00178
00180 const UString& getItemNameAt(size_t _index);
00181
00183 const UString& getItemName(TabItemPtr _item) { return getItemNameAt(getItemIndex(_item)); }
00184
00185
00186
00187
00188
00190 void beginToItemAt(size_t _index);
00191
00193 void beginToItem(TabItemPtr _item) { beginToItemAt(getItemIndex(_item)); }
00194
00196 void beginToItemFirst() { if (getItemCount()) beginToItemAt(0); }
00197
00199 void beginToItemLast() { if (getItemCount()) beginToItemAt(getItemCount() - 1); }
00200
00202 void beginToItemSelected() { if (getIndexSelected() != ITEM_NONE) beginToItemAt(getIndexSelected()); }
00203
00204
00205
00206
00207
00209 void setButtonWidthAt(size_t _index, int _width = DEFAULT);
00211 void setButtonWidth(TabItemPtr _item, int _width = DEFAULT) { setButtonWidthAt(getItemIndex(_item), _width); }
00212
00214 int getButtonWidthAt(size_t _index);
00216 int getButtonWidth(TabItemPtr _item) { return getButtonWidthAt(getItemIndex(_item)); }
00217
00218
00219
00221 void setButtonDefaultWidth(int _value);
00223 int getButtonDefaultWidth() { return mButtonDefaultWidth; }
00224
00226 void setButtonAutoWidth(bool _value);
00228 bool getButtonAutoWidth() { return mButtonAutoWidth; }
00229
00231 void setSmoothShow(bool _value) { mSmoothShow = _value; }
00233 bool getSmoothShow() { return mSmoothShow; }
00234
00236 virtual void setProperty(const std::string& _key, const std::string& _value);
00237
00238
00244 EventPair<EventHandle_WidgetSizeT, EventHandle_TabPtrSizeT> eventTabChangeSelect;
00245
00246
00247 virtual void _initialise(WidgetStyle _style, const IntCoord& _coord, Align _align, ResourceSkin* _info, WidgetPtr _parent, ICroppedRectangle * _croppedParent, IWidgetCreator * _creator, const std::string& _name);
00248
00249
00250 #ifndef MYGUI_DONT_USE_OBSOLETE
00251
00252 MYGUI_OBSOLETE("use : void Widget::setCoord(const IntCoord& _coord)")
00253 void setPosition(const IntCoord& _coord) { setCoord(_coord); }
00254 MYGUI_OBSOLETE("use : void Widget::setCoord(int _left, int _top, int _width, int _height)")
00255 void setPosition(int _left, int _top, int _width, int _height) { setCoord(_left, _top, _width, _height); }
00256
00257 MYGUI_OBSOLETE("use : int Tab::getButtonWidthAt(size_t _index)")
00258 int getSheetButtonWidthIndex(size_t _index) { return getButtonWidthAt(_index); }
00259 MYGUI_OBSOLETE("use : int Tab::getButtonWidth(TabItemPtr _item)")
00260 int getSheetButtonWidth(TabItemPtr _sheet) { return getButtonWidth(_sheet); }
00261 MYGUI_OBSOLETE("use : void Tab::setButtonWidthAt(size_t _index, int _width)")
00262 void setSheetButtonWidthIndex(size_t _index, int _width = DEFAULT) { setButtonWidthAt(_index, _width); }
00263 MYGUI_OBSOLETE("use : void Tab::setButtonWidth(TabItemPtr _item, int _width)")
00264 void setSheetButtonWidth(TabItemPtr _sheet, int _width = DEFAULT) { setButtonWidth(_sheet, _width); }
00265 MYGUI_OBSOLETE("use : void Tab::beginToItemAt(size_t _index)")
00266 void showBarButton(size_t _index) { beginToItemAt(_index); }
00267 MYGUI_OBSOLETE("use : void Tab::beginToItemSelected()")
00268 void showBarSelectButton() { beginToItemSelected(); }
00269 MYGUI_OBSOLETE("use : size_t Tab::getItemCount()")
00270 size_t getSheetCount() { return getItemCount(); }
00271 MYGUI_OBSOLETE("use : const UString& Tab::getItemName(TabItemPtr _item)")
00272 const UString& getSheetName(TabItemPtr _sheet) { return getItemName(_sheet); }
00273 MYGUI_OBSOLETE("use : const UString& Tab::getItemNameAt(size_t _index)")
00274 const UString& getSheetNameIndex(size_t _index) { return getItemNameAt(_index); }
00275 MYGUI_OBSOLETE("use : TabItemPtr Tab::getItemAt(size_t _index)")
00276 TabItemPtr getSheet(size_t _index) { return getItemAt(_index); }
00277 MYGUI_OBSOLETE("use : void Tab::setItemNameAt(size_t _index, const UString& _name)")
00278 void setSheetNameIndex(size_t _index, const UString& _name, int _width = DEFAULT) { setItemNameAt(_index, _name); }
00279 MYGUI_OBSOLETE("use : void Tab::setItemName(TabItemPtr _item, const UString& _name)")
00280 void setSheetName(TabItemPtr _sheet, const UString& _name, int _width = DEFAULT) { setItemName(_sheet, _name); }
00281 MYGUI_OBSOLETE("use : TabItemPtr Tab::addItem(const UString& _name, Any _data)")
00282 TabItemPtr addSheet(const UString& _name, int _width = DEFAULT) { return addItem(_name, _width); }
00283 MYGUI_OBSOLETE("use : TabItemPtr Tab::insertItemAt(size_t _index, const UString& _name, Any _data)")
00284 TabItemPtr insertSheet(size_t _index, const UString& _name, int _width = DEFAULT) { return insertItemAt(_index, _name); }
00285 MYGUI_OBSOLETE("use : void Tab::removeItemAt(size_t _index)")
00286 void removeSheetIndex(size_t _index) { removeItemAt(_index); }
00287 MYGUI_OBSOLETE("use : void Tab::removeItem(TabItemPtr _item)")
00288 void removeSheet(TabItemPtr _sheet) { removeItem(_sheet); }
00289 MYGUI_OBSOLETE("use : void Tab::setIndexSelected(size_t _index)")
00290 void selectSheetIndex(size_t _index, bool _smooth = true) { setIndexSelected(_index); }
00291 MYGUI_OBSOLETE("use : void Tab::setItemSelected(TabItemPtr _item)")
00292 void selectSheet(TabItemPtr _sheet, bool _smooth = true) { setItemSelected(_sheet); }
00293 MYGUI_OBSOLETE("use : size_t Tab::getIndexSelected()")
00294 size_t getSelectSheetIndex() { return getIndexSelected(); }
00295
00296 MYGUI_OBSOLETE("use : size_t Widget::getIndexSelected()")
00297 size_t getItemIndexSelected() { return getIndexSelected(); }
00298 MYGUI_OBSOLETE("use : void Widget::setIndexSelected(size_t _index)")
00299 void setItemSelectedAt(size_t _index) { setIndexSelected(_index); }
00300
00301 #endif // MYGUI_DONT_USE_OBSOLETE
00302
00303 protected:
00304 virtual ~Tab();
00305
00306 void baseChangeWidgetSkin(ResourceSkin* _info);
00307
00308
00309 virtual WidgetPtr baseCreateWidget(WidgetStyle _style, const std::string& _type, const std::string& _skin, const IntCoord& _coord, Align _align, const std::string& _layer, const std::string& _name);
00310
00311 void updateBar();
00312
00313 void notifyPressedButtonEvent(MyGUI::WidgetPtr _sender);
00314 void notifyPressedBarButtonEvent(MyGUI::WidgetPtr _sender);
00315
00316 int _getTextWidth(const UString& _text);
00317
00318 void _showItem(TabItemPtr _sheet, bool _show, bool _smooth);
00319
00320 void _createItemButton();
00321
00322 void _insertItem(size_t _index, const UString& _name, TabItemPtr _sheet, Any _data);
00323
00324
00325 void _notifyDeleteItem(TabItemPtr _item);
00326
00327 private:
00328 void initialiseWidgetSkin(ResourceSkin* _info);
00329 void shutdownWidgetSkin();
00330 void actionWidgetHide(WidgetPtr _widget);
00331
00332 ControllerFadeAlpha* createControllerFadeAlpha(float _alpha, float _coef, bool _enable);
00333
00334 private:
00335 int mOffsetTab;
00336 bool mButtonShow;
00337 int mWidthBar;
00338 VectorWidgetPtr mItemButton;
00339 std::string mButtonSkinName, mEmptySkinName;
00340
00341 WidgetPtr mWidgetBar;
00342 ButtonPtr mButtonLeft, mButtonRight, mButtonList;
00343 WidgetPtr mButtonDecor;
00344 VectorWidgetPtr mWidgetsPatch;
00345 WidgetPtr mEmptyBarWidget;
00346 WidgetPtr mItemTemplate;
00347
00348
00349 VectorTabItemInfo mItemsInfo;
00350 size_t mStartIndex;
00351 size_t mIndexSelect;
00352
00353 int mButtonDefaultWidth;
00354 bool mSmoothShow;
00355 bool mButtonAutoWidth;
00356
00357
00358 bool mShutdown;
00359
00360 };
00361
00362 }
00363
00364 #endif // __MYGUI_TAB_H__
00365