// Created: 01/02/97
// RCS-ID: $Id$
// Copyright: (c)
-// Licence: wxWindows licence
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifndef __TABGH_G__
#define __TABGH_G__
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
#pragma interface "tabg.h"
#endif
#define WXTAB_VERSION 1.1
-#include "wx/hash.h"
+#include "wx/hashmap.h"
#include "wx/string.h"
+#include "wx/dialog.h"
+#include "wx/panel.h"
+#include "wx/list.h"
-class wxTabView;
+class WXDLLEXPORT wxTabView;
/*
* A wxTabControl is the internal and visual representation
* of the tab.
*/
-
-class wxTabControl: public wxObject
+
+class WXDLLEXPORT wxTabControl: public wxObject
{
DECLARE_DYNAMIC_CLASS(wxTabControl)
public:
wxTabControl(wxTabView *v = (wxTabView *) NULL);
~wxTabControl(void);
-
+
virtual void OnDraw(wxDC& dc, bool lastInRow);
- inline void SetLabel(const wxString& str) { m_controlLabel = str; }
- inline wxString GetLabel(void) const { return m_controlLabel; }
-
- inline void SetFont(wxFont *f) { m_labelFont = f; }
- inline wxFont *GetFont(void) const { return m_labelFont; }
-
- inline void SetSelected(bool sel) { m_isSelected = sel; }
- inline bool IsSelected(void) const { return m_isSelected; }
-
- inline void SetPosition(int x, int y) { m_offsetX = x; m_offsetY = y; }
- inline void SetSize(int x, int y) { m_width = x; m_height = y; }
-
- inline void SetRowPosition(int r) { m_rowPosition = r; }
- inline int GetRowPosition() const { return m_rowPosition; }
- inline void SetColPosition(int c) { m_colPosition = c; }
- inline int GetColPosition() const { return m_colPosition; }
-
- inline int GetX(void) const { return m_offsetX; }
- inline int GetY(void) const { return m_offsetY; }
- inline int GetWidth(void) const { return m_width; }
- inline int GetHeight(void) const { return m_height; }
-
- inline int GetId(void) const { return m_id; }
- inline void SetId(int i) { m_id = i; }
-
+ void SetLabel(const wxString& str) { m_controlLabel = str; }
+ wxString GetLabel(void) const { return m_controlLabel; }
+
+ void SetFont(const wxFont& f) { m_labelFont = f; }
+ wxFont *GetFont(void) const { return (wxFont*) & m_labelFont; }
+
+ void SetSelected(bool sel) { m_isSelected = sel; }
+ bool IsSelected(void) const { return m_isSelected; }
+
+ void SetPosition(int x, int y) { m_offsetX = x; m_offsetY = y; }
+ void SetSize(int x, int y) { m_width = x; m_height = y; }
+
+ void SetRowPosition(int r) { m_rowPosition = r; }
+ int GetRowPosition() const { return m_rowPosition; }
+ void SetColPosition(int c) { m_colPosition = c; }
+ int GetColPosition() const { return m_colPosition; }
+
+ int GetX(void) const { return m_offsetX; }
+ int GetY(void) const { return m_offsetY; }
+ int GetWidth(void) const { return m_width; }
+ int GetHeight(void) const { return m_height; }
+
+ int GetId(void) const { return m_id; }
+ void SetId(int i) { m_id = i; }
+
virtual bool HitTest(int x, int y) const ;
protected:
wxTabView* m_view;
wxString m_controlLabel;
bool m_isSelected;
- wxFont* m_labelFont;
+ wxFont m_labelFont;
int m_offsetX; // Offsets from top-left of tab view area (the area below the tabs)
int m_offsetY;
int m_width;
int m_rowPosition; // Position in row from 0
int m_colPosition; // Position in col from 0
};
-
+
/*
* Each wxTabLayer is a list of tabs. E.g. there
* are 3 layers in the MS Word Options dialog.
*/
-
-class wxTabLayer: public wxList
+
+class WXDLLEXPORT wxTabLayer: public wxList
{
- DECLARE_DYNAMIC_CLASS(wxTabLayer)
- public:
- wxTabLayer(void)
- {
- }
};
/*
* The wxTabView controls and draws the tabbed object
*/
+WX_DECLARE_LIST(wxTabLayer, wxTabLayerList);
+
#define wxTAB_STYLE_DRAW_BOX 1 // Draws 3D boxes round tab layers
#define wxTAB_STYLE_COLOUR_INTERIOR 2 // Colours interior of tabs, otherwise draws outline
-class wxTabView: public wxObject
+class WXDLLEXPORT wxTabView: public wxObject
{
DECLARE_DYNAMIC_CLASS(wxTabView)
public:
wxTabView(long style = wxTAB_STYLE_DRAW_BOX | wxTAB_STYLE_COLOUR_INTERIOR);
~wxTabView();
- inline int GetNumberOfLayers() const { return m_layers.Number(); }
- inline wxList& GetLayers() { return m_layers; }
+ inline int GetNumberOfLayers() const { return m_layers.GetCount(); }
+#if WXWIN_COMPATIBILITY_2_4
+ inline wxList& GetLayers() { return (wxList&)m_layers; }
+#else
+ inline wxTabLayerList& GetLayers() { return m_layers; }
+#endif
inline void SetWindow(wxWindow* wnd) { m_window = wnd; }
inline wxWindow* GetWindow(void) const { return m_window; }
// Automatically positions tabs
wxTabControl *AddTab(int id, const wxString& label, wxTabControl *existingTab = (wxTabControl *) NULL);
+
+ // Remove the tab without deleting the window
+ bool RemoveTab(int id);
void ClearTabs(bool deleteTabs = TRUE);
+ bool SetTabText(int id, const wxString& label);
+ wxString GetTabText(int id) const;
+
// Layout tabs (optional, e.g. if resizing window)
- void Layout(void);
+ void LayoutTabs();
// Draw all tabs
virtual void Draw(wxDC& dc);
inline wxPen *GetBackgroundPen(void) const { return m_backgroundPen; }
inline wxBrush *GetBackgroundBrush(void) const { return m_backgroundBrush; }
- inline void SetViewRect(const wxRectangle& rect) { m_tabViewRect = rect; }
+ inline void SetViewRect(const wxRect& rect) { m_tabViewRect = rect; }
inline wxRect GetViewRect(void) const { return m_tabViewRect; }
// Calculate tab width to fit to view, and optionally adjust the view
inline int GetTabHeight(void) const { return m_tabHeight; }
inline void SetTabSelectionHeight(int h) { m_tabSelectionHeight = h; }
inline int GetTabSelectionHeight(void) const { return m_tabSelectionHeight; }
+
+ // Returns the total height of the tabs component -- this may be several
+ // times the height of a tab, if there are several tab layers (rows).
+ int GetTotalTabHeight();
inline int GetTopMargin(void) const { return m_topMargin; }
inline void SetTopMargin(int margin) { m_topMargin = margin; }
inline void SetVerticalTabTextSpacing(int s) { m_tabVerticalTextSpacing = s; }
inline int GetVerticalTabTextSpacing() const { return m_tabVerticalTextSpacing; }
- inline wxFont *GetTabFont() const { return m_tabFont; }
- inline void SetTabFont(wxFont *f) { m_tabFont = f; }
+ inline wxFont *GetTabFont() const { return (wxFont*) & m_tabFont; }
+ inline void SetTabFont(const wxFont& f) { m_tabFont = f; }
- inline wxFont *GetSelectedTabFont() const { return m_tabSelectedFont; }
- inline void SetSelectedTabFont(wxFont *f) { m_tabSelectedFont = f; }
+ inline wxFont *GetSelectedTabFont() const { return (wxFont*) & m_tabSelectedFont; }
+ inline void SetSelectedTabFont(const wxFont& f) { m_tabSelectedFont = f; }
// Find the node and the column at which this control is positioned.
- wxNode *FindTabNodeAndColumn(wxTabControl *control, int *col) const ;
+ wxList::compatibility_iterator FindTabNodeAndColumn(wxTabControl *control, int *col) const ;
// Do the necessary to change to this tab
virtual bool ChangeTab(wxTabControl *control);
protected:
// List of layers, from front to back.
- wxList m_layers;
+ wxTabLayerList m_layers;
// Selected tab
int m_tabSelection;
wxPen* m_backgroundPen;
wxBrush* m_backgroundBrush;
- wxFont* m_tabFont;
- wxFont* m_tabSelectedFont;
+ wxFont m_tabFont;
+ wxFont m_tabSelectedFont;
int m_noTabs;
* A dialog box class that is tab-friendly
*/
-class wxTabbedDialog: public wxDialog
+class WXDLLEXPORT wxTabbedDialog: public wxDialog
{
DECLARE_DYNAMIC_CLASS(wxTabbedDialog)
* A panel class that is tab-friendly
*/
-class wxTabbedPanel: public wxPanel
+class WXDLLEXPORT wxTabbedPanel: public wxPanel
{
DECLARE_DYNAMIC_CLASS(wxTabbedPanel)
DECLARE_EVENT_TABLE()
};
-class wxPanelTabView: public wxTabView
+WX_DECLARE_HASH_MAP(int, wxWindow*, wxIntegerHash, wxIntegerEqual,
+ wxIntToWindowHashMap);
+
+class WXDLLEXPORT wxPanelTabView: public wxTabView
{
DECLARE_DYNAMIC_CLASS(wxPanelTabView)
public:
inline wxWindow *GetCurrentWindow() const { return m_currentWindow; }
void ShowWindowForTab(int id);
+ // inline wxList& GetWindows() const { return (wxList&) m_tabWindows; }
protected:
// List of panels, one for each tab. Indexed
// by tab ID.
- wxList m_tabWindows;
- wxWindow* m_currentWindow;
- wxPanel* m_panel;
+ wxIntToWindowHashMap m_tabWindows;
+ wxWindow* m_currentWindow;
+ wxPanel* m_panel;
};
#endif