00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef _CEGUITabControl_h_
00027 #define _CEGUITabControl_h_
00028
00029 #include "CEGUIBase.h"
00030 #include "CEGUIWindow.h"
00031 #include "elements/CEGUITabControlProperties.h"
00032 #include "elements/CEGUITabPane.h"
00033 #include <vector>
00034
00035
00036 #if defined(_MSC_VER)
00037 # pragma warning(push)
00038 # pragma warning(disable : 4251)
00039 #endif
00040
00041
00042
00043 namespace CEGUI
00044 {
00045
00046
00047 class TabButton;
00048
00053 class CEGUIEXPORT TabControl : public Window
00054 {
00055 public:
00056 static const String EventNamespace;
00057
00058
00059
00060
00061
00062
00063 static const String EventSelectionChanged;
00064
00065
00066
00067
00068
00076 uint getTabCount(void) const;
00077
00078
00084 void setSelectedTab(const String &name);
00085
00091 void setSelectedTab(uint ID);
00092
00098 void setSelectedTabAtIndex(uint index);
00099
00112 Window* getTabContentsAtIndex(uint index) const;
00113
00126 Window* getTabContents(const String& name) const;
00127
00140 Window* getTabContents(uint ID) const;
00141
00154 bool isTabContentsSelected(Window* wnd) const;
00155
00163 uint getSelectedTabIndex() const;
00164
00169 float getRelativeTabHeight(void) const { return d_rel_tabHeight; }
00174 float getAbsoluteTabHeight(void) const { return d_abs_tabHeight; }
00179 float getTabHeight(void) const;
00185 float getTabTextPadding(void) const;
00190 float getRelativeTabTextPadding(void) const { return d_rel_tabPadding; }
00195 float getAbsoluteTabTextPadding(void) const { return d_abs_tabPadding; }
00196
00197
00198
00199
00200
00211 virtual void initialise(void);
00212
00217 void setRelativeTabHeight(float height);
00222 void setAbsoluteTabHeight(float height);
00227 void setTabHeight(float height);
00228
00234 void setTabTextPadding(float);
00239 void setRelativeTabTextPadding(float);
00244 void setAbsoluteTabTextPadding(float);
00253 void addTab(Window* wnd);
00260 void removeTab(const String& name);
00267 void removeTab(uint ID);
00268
00269
00270
00271
00272
00277 TabControl(const String& type, const String& name);
00278
00279
00284 virtual ~TabControl(void);
00285
00286
00287 protected:
00288
00289
00290
00291
00302 virtual void drawSelf(float z) { }
00303
00308 void addTabControlEvents(void);
00309
00314 virtual void addButtonForTabContent(Window* wnd);
00319 virtual void removeButtonForTabContent(Window* wnd);
00325 TabButton* getButtonForTabContents(Window* wnd) const;
00330 String makeButtonName(Window* wnd);
00331
00338 virtual void selectTab_impl(Window* wnd);
00339
00340
00351 virtual bool testClassName_impl(const String& class_name) const
00352 {
00353 if (class_name==(const utf8*)"TabControl") return true;
00354 return Window::testClassName_impl(class_name);
00355 }
00356
00357 void performChildWindowLayout();
00358 int writeChildWindowsXML(OutStream& out_stream) const;
00359
00360
00361
00362
00363
00368 virtual void onSelectionChanged(WindowEventArgs& e);
00369
00378 virtual void onFontChanged(WindowEventArgs& e);
00379
00380
00381
00382
00383 Window* d_tabButtonPane;
00384 TabPane* d_tabContentPane;
00385 float d_abs_tabHeight;
00386 float d_rel_tabHeight;
00387 float d_abs_tabPadding;
00388 float d_rel_tabPadding;
00389 uint d_nextTabIndex;
00390 typedef std::map<uint, TabButton*> TabButtonIndexMap;
00391 TabButtonIndexMap d_tabButtonIndexMap;
00392
00393
00394
00405 virtual TabPane* createTabContentPane(const String& name) const = 0;
00406
00417 virtual Window* createTabButtonPane(const String& name) const;
00418
00427 virtual TabButton* createTabButton(const String& name) const = 0;
00428
00440 void calculateTabButtonSizePosition(TabButton* btn, uint targetIndex);
00441
00442 protected:
00443
00444
00445
00446 static TabControlProperties::TabHeight d_tabHeightProperty;
00447 static TabControlProperties::AbsoluteTabHeight d_absoluteTabHeightProperty;
00448 static TabControlProperties::RelativeTabHeight d_relativeTabHeightProperty;
00449
00450 static TabControlProperties::TabTextPadding d_tabTextPaddingProperty;
00451 static TabControlProperties::AbsoluteTabTextPadding d_absoluteTabTextPaddingProperty;
00452 static TabControlProperties::RelativeTabTextPadding d_relativeTabTextPaddingProperty;
00453
00454
00455
00456 void addTabControlProperties(void);
00457
00462 void addChild_impl(Window* wnd);
00463
00464
00465
00466
00467 bool handleContentWindowTextChanged(const EventArgs& args);
00468 bool handleTabButtonClicked(const EventArgs& args);
00469 };
00470
00471
00472
00473 }
00474
00475
00476 #if defined(_MSC_VER)
00477 # pragma warning(pop)
00478 #endif
00479
00480 #endif // end of guard _CEGUITabControl_h_