1 /////////////////////////////////////////////////////////////////////////////
2 // Name:        wx/generic/notebook.h
3 // Purpose:     wxNotebook class (a.k.a. property sheet, tabbed dialog)
4 // Author:      Julian Smart
5 // Modified by:
6 // Copyright:   (c) Julian Smart
7 // Licence:     wxWindows licence
8 /////////////////////////////////////////////////////////////////////////////
9 
10 #ifndef _WX_NOTEBOOK_H_
11 #define _WX_NOTEBOOK_H_
12 
13 // ----------------------------------------------------------------------------
14 // headers
15 // ----------------------------------------------------------------------------
16 #include "wx/event.h"
17 #include "wx/control.h"
18 
19 // ----------------------------------------------------------------------------
20 // types
21 // ----------------------------------------------------------------------------
22 
23 // fwd declarations
24 class WXDLLIMPEXP_FWD_CORE wxImageList;
25 class WXDLLIMPEXP_FWD_CORE wxWindow;
26 class WXDLLIMPEXP_FWD_CORE wxTabView;
27 
28 // ----------------------------------------------------------------------------
29 // wxNotebook
30 // ----------------------------------------------------------------------------
31 
32 class WXDLLIMPEXP_CORE wxNotebook : public wxNotebookBase
33 {
34 public:
35   // ctors
36   // -----
37     // default for dynamic class
38   wxNotebook();
39     // the same arguments as for wxControl (@@@ any special styles?)
40   wxNotebook(wxWindow *parent,
41              wxWindowID id,
42              const wxPoint& pos = wxDefaultPosition,
43              const wxSize& size = wxDefaultSize,
44              long style = 0,
45              const wxString& name = wxASCII_STR(wxNotebookNameStr));
46     // Create() function
47   bool Create(wxWindow *parent,
48               wxWindowID id,
49               const wxPoint& pos = wxDefaultPosition,
50               const wxSize& size = wxDefaultSize,
51               long style = 0,
52               const wxString& name = wxASCII_STR(wxNotebookNameStr));
53     // dtor
54   virtual ~wxNotebook();
55 
56   // accessors
57   // ---------
58   // Find the position of the wxNotebookPage, wxNOT_FOUND if not found.
59   int FindPagePosition(wxNotebookPage* page) const;
60 
61     // set the currently selected page, return the index of the previously
62     // selected one (or wxNOT_FOUND on error)
63     // NB: this function will _not_ generate wxEVT_NOTEBOOK_PAGE_xxx events
64   int SetSelection(size_t nPage);
65     // cycle thru the tabs
66   //  void AdvanceSelection(bool bForward = true);
67 
68     // changes selected page without sending events
69   int ChangeSelection(size_t nPage);
70 
71     // set/get the title of a page
72   bool SetPageText(size_t nPage, const wxString& strText);
73   wxString GetPageText(size_t nPage) const;
74 
75   // get the number of rows for a control with wxNB_MULTILINE style (not all
76   // versions support it - they will always return 1 then)
77   virtual int GetRowCount() const ;
78 
79     // sets/returns item's image index in the current image list
80   int  GetPageImage(size_t nPage) const;
81   bool SetPageImage(size_t nPage, int nImage);
82 
83   // control the appearance of the notebook pages
84     // set the size (the same for all pages)
85   void SetPageSize(const wxSize& size);
86     // set the padding between tabs (in pixels)
87   void SetPadding(const wxSize& padding);
88 
89     // Sets the size of the tabs (assumes all tabs are the same size)
90   void SetTabSize(const wxSize& sz);
91 
92   // operations
93   // ----------
94     // remove one page from the notebook, and delete the page.
95   bool DeletePage(size_t nPage);
96   bool DeletePage(wxNotebookPage* page);
97     // remove one page from the notebook, without deleting the page.
98   bool RemovePage(size_t nPage);
99   bool RemovePage(wxNotebookPage* page);
100   virtual wxWindow* DoRemovePage(size_t nPage);
101 
102     // remove all pages
103   bool DeleteAllPages();
104     // the same as AddPage(), but adds it at the specified position
105   bool InsertPage(size_t nPage,
106                   wxNotebookPage *pPage,
107                   const wxString& strText,
108                   bool bSelect = false,
109                   int imageId = NO_IMAGE);
110 
111   // callbacks
112   // ---------
113   void OnSize(wxSizeEvent& event);
114   void OnInternalIdle();
115   void OnSelChange(wxBookCtrlEvent& event);
116   void OnSetFocus(wxFocusEvent& event);
117   void OnNavigationKey(wxNavigationKeyEvent& event);
118 
119   // base class virtuals
120   // -------------------
121   virtual void Command(wxCommandEvent& event);
122   virtual void SetConstraintSizes(bool recurse = true);
123   virtual bool DoPhase(int nPhase);
124 
125   virtual wxSize CalcSizeFromPage(const wxSize& sizePage) const;
126 
127   // Implementation
128 
129   // wxNotebook on Motif uses a generic wxTabView to implement itself.
GetTabView()130   wxTabView *GetTabView() const { return m_tabView; }
SetTabView(wxTabView * v)131   void SetTabView(wxTabView *v) { m_tabView = v; }
132 
133   void OnMouseEvent(wxMouseEvent& event);
134   void OnPaint(wxPaintEvent& event);
135 
136   virtual wxRect GetAvailableClientSize();
137 
138   // Implementation: calculate the layout of the view rect
139   // and resize the children if required
140   bool RefreshLayout(bool force = true);
141 
142 protected:
143   // common part of all ctors
144   void Init();
145 
146   // helper functions
147   void ChangePage(int nOldSel, int nSel); // change pages
148 
149   wxTabView*   m_tabView;
150 
151   wxDECLARE_DYNAMIC_CLASS(wxNotebook);
152   wxDECLARE_EVENT_TABLE();
153 };
154 
155 #endif // _WX_NOTEBOOK_H_
156