MyGUI  3.2.0
MyGUI_TabControl.h
Go to the documentation of this file.
00001 
00006 /*
00007     This file is part of MyGUI.
00008 
00009     MyGUI is free software: you can redistribute it and/or modify
00010     it under the terms of the GNU Lesser General Public License as published by
00011     the Free Software Foundation, either version 3 of the License, or
00012     (at your option) any later version.
00013 
00014     MyGUI is distributed in the hope that it will be useful,
00015     but WITHOUT ANY WARRANTY; without even the implied warranty of
00016     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00017     GNU Lesser General Public License for more details.
00018 
00019     You should have received a copy of the GNU Lesser General Public License
00020     along with MyGUI.  If not, see <http://www.gnu.org/licenses/>.
00021 */
00022 #ifndef __MYGUI_TAB_CONTROL_H__
00023 #define __MYGUI_TAB_CONTROL_H__
00024 
00025 #include "MyGUI_Prerequest.h"
00026 #include "MyGUI_Widget.h"
00027 #include "MyGUI_Any.h"
00028 #include "MyGUI_EventPair.h"
00029 #include "MyGUI_ControllerFadeAlpha.h"
00030 #include "MyGUI_IItem.h"
00031 #include "MyGUI_IItemContainer.h"
00032 
00033 namespace MyGUI
00034 {
00035 
00036     typedef delegates::CMultiDelegate2<TabControl*, size_t> EventHandle_TabPtrSizeT;
00037 
00038     class MYGUI_EXPORT TabControl :
00039         public Widget,
00040         public IItemContainer,
00041         public MemberObsolete<TabControl>
00042     {
00043         // для уведобления об удалении
00044         //FIXME
00045         friend class TabItem;
00046 
00047         MYGUI_RTTI_DERIVED( TabControl )
00048 
00049     public:
00050         TabControl();
00051 
00052         struct TabItemInfo
00053         {
00054             TabItemInfo(int _width, const UString& _name, TabItem* _item, Any _data) :
00055                 width(_width),
00056                 name(_name),
00057                 item(_item),
00058                 data(_data)
00059             {
00060             }
00061 
00062             int width;
00063             UString name;
00064             TabItem* item;
00065             Any data;
00066         };
00067 
00068         typedef std::vector<TabItemInfo> VectorTabItemInfo;
00069 
00071         virtual void setPosition(const IntPoint& _value);
00073         virtual void setSize(const IntSize& _value);
00075         virtual void setCoord(const IntCoord& _value);
00076 
00078         void setPosition(int _left, int _top);
00080         void setSize(int _width, int _height);
00082         void setCoord(int _left, int _top, int _width, int _height);
00083 
00084         //------------------------------------------------------------------------------//
00085         // манипуляции айтемами
00086 
00088         size_t getItemCount() const;
00089 
00091         TabItem* insertItemAt(size_t _index, const UString& _name, Any _data = Any::Null);
00093         TabItem* insertItem(TabItem* _to, const UString& _name, Any _data = Any::Null);
00094 
00096         TabItem* addItem(const UString& _name, Any _data = Any::Null);
00097 
00099         void removeItemAt(size_t _index);
00101         void removeItem(TabItem* _item);
00102 
00104         void removeAllItems();
00105 
00106 
00108         TabItem* getItemAt(size_t _index);
00109 
00111         size_t getItemIndex(TabItem* _item);
00112 
00114         size_t findItemIndex(TabItem* _item);
00115 
00117         size_t findItemIndexWith(const UString& _name);
00118 
00120         TabItem* findItemWith(const UString& _name);
00121 
00122         void swapItems(size_t _index1, size_t _index2);
00123 
00124         //------------------------------------------------------------------------------//
00125         // манипуляции выделениями
00126 
00128         size_t getIndexSelected() const;
00129 
00131         TabItem* getItemSelected();
00132 
00134         void setIndexSelected(size_t _index);
00135 
00137         void setItemSelected(TabItem* _item);
00138 
00139 
00140         //------------------------------------------------------------------------------//
00141         // манипуляции данными
00142 
00144         void setItemDataAt(size_t _index, Any _data);
00146         void setItemData(TabItem* _item, Any _data);
00147 
00149         void clearItemDataAt(size_t _index);
00151         void clearItemData(TabItem* _item);
00152 
00154         template <typename ValueType>
00155         ValueType* getItemDataAt(size_t _index, bool _throw = true)
00156         {
00157             MYGUI_ASSERT_RANGE(_index, mItemsInfo.size(), "TabControl::getItemDataAt");
00158             return mItemsInfo[_index].data.castType<ValueType>(_throw);
00159         }
00161         template <typename ValueType>
00162         ValueType* getItemData(TabItem* _item, bool _throw = true)
00163         {
00164             return getItemDataAt<ValueType>(getItemIndex(_item), _throw);
00165         }
00166 
00167 
00168         //------------------------------------------------------------------------------//
00169         // манипуляции отображением
00170 
00172         void setItemNameAt(size_t _index, const UString& _name);
00173 
00175         void setItemName(TabItem* _item, const UString& _name);
00176 
00178         const UString& getItemNameAt(size_t _index);
00179 
00181         const UString& getItemName(TabItem* _item);
00182 
00183 
00184         //------------------------------------------------------------------------------//
00185         // манипуляции выдимостью
00186 
00188         void beginToItemAt(size_t _index);
00189 
00191         void beginToItem(TabItem* _item);
00193         void beginToItemFirst();
00195         void beginToItemLast();
00197         void beginToItemSelected();
00198 
00199 
00200         //------------------------------------------------------------------------------//
00201         // остальные манипуляции
00202 
00204         void setButtonWidthAt(size_t _index, int _width = DEFAULT);
00206         void setButtonWidth(TabItem* _item, int _width = DEFAULT);
00207 
00209         int getButtonWidthAt(size_t _index);
00211         int getButtonWidth(TabItem* _item);
00212 
00213         //------------------------------------------------------------------------------//
00214 
00216         void setButtonDefaultWidth(int _value);
00218         int getButtonDefaultWidth() const;
00219 
00221         void setButtonAutoWidth(bool _value);
00223         bool getButtonAutoWidth() const;
00224 
00226         void setSmoothShow(bool _value);
00228         bool getSmoothShow() const;
00229 
00230     /*events:*/
00236         EventPair<EventHandle_WidgetSizeT, EventHandle_TabPtrSizeT>
00237             eventTabChangeSelect;
00238 
00239     /*internal:*/
00240         // IItemContainer impl
00241         virtual size_t _getItemCount();
00242         virtual void _addItem(const MyGUI::UString& _name);
00243         virtual void _removeItemAt(size_t _index);
00244         virtual Widget* _getItemAt(size_t _index);
00245         virtual void _setItemNameAt(size_t _index, const UString& _name);
00246         virtual const UString& _getItemNameAt(size_t _index);
00247 
00248     protected:
00249         virtual void initialiseOverride();
00250         virtual void shutdownOverride();
00251 
00252         void updateBar();
00253 
00254         void notifyPressedButtonEvent(MyGUI::Widget* _sender);
00255         void notifyPressedBarButtonEvent(MyGUI::Widget* _sender);
00256 
00257         int _getTextWidth(const UString& _text);
00258 
00259         void _showItem(TabItem* _sheet, bool _show, bool _smooth);
00260 
00261         void _createItemButton();
00262 
00263         void _insertItem(size_t _index, const UString& _name, TabItem* _sheet, Any _data);
00264 
00265         // вкладка при удалении уведомляет таб
00266         void _notifyDeleteItem(TabItem* _item);
00267 
00268         virtual void onWidgetCreated(Widget* _widget);
00269 
00270         virtual void setPropertyOverride(const std::string& _key, const std::string& _value);
00271 
00272     private:
00273         void actionWidgetHide(Widget* _widget);
00274 
00275         ControllerFadeAlpha* createControllerFadeAlpha(float _alpha, float _coef, bool _enable);
00276 
00277         Widget* _getWidgetTemplate();
00278         Widget* _getWidgetBar();
00279 
00280         Button* createButton();
00281         void updateBarOld();
00282         void updateBarNew();
00283 
00284     private:
00285         int mOffsetTab; // смещение бара при показе кнопок
00286         bool mButtonShow;
00287         int mWidthBar; // ширина в которую помещаються все кнопки
00288         std::vector<Button*> mItemButton; // список кнопок, не должно равно списку страниц
00289         std::string mButtonSkinName;
00290         std::string mEmptySkinName;
00291 
00292         Widget* mWidgetBar;
00293         Button* mButtonLeft;
00294         Button* mButtonRight;
00295         Widget* mButtonDecor;
00296         VectorWidgetPtr mWidgetsPatch; // список виджетов которые нужно показать при показе кнопки
00297         Widget* mEmptyBarWidget;
00298         Widget* mItemTemplate;
00299 
00300         // информация о вкладках
00301         VectorTabItemInfo mItemsInfo;
00302         size_t mStartIndex;
00303         size_t mIndexSelect;
00304 
00305         int mButtonDefaultWidth;
00306         bool mSmoothShow;
00307         bool mButtonAutoWidth;
00308 
00309         // флаг, чтобы отсеч уведомления от вкладок, при общем шутдауне виджета
00310         bool mShutdown;
00311 
00312         Widget* mHeaderPlace;
00313         Widget* mControls;
00314         Widget* mEmpty;
00315     };
00316 
00317 } // namespace MyGUI
00318 
00319 #endif // __MYGUI_TAB_CONTROL_H__