1/////////////////////////////////////////////////////////////////////////////
2// Name:        notebook.h
3// Purpose:     MSW/GTK compatible notebook (a.k.a. property sheet)
4// Author:      David Webster
5// Modified by:
6// RCS-ID:      $Id: notebook.h 41738 2006-10-08 17:37:23Z VZ $
7// Copyright:   (c) David Webster
8// Licence:     wxWindows licence
9/////////////////////////////////////////////////////////////////////////////
10
11#ifndef _NOTEBOOK_H
12#define _NOTEBOOK_H
13
14#if wxUSE_NOTEBOOK
15
16// ----------------------------------------------------------------------------
17// headers
18// ----------------------------------------------------------------------------
19
20#include "wx/control.h"
21
22// ----------------------------------------------------------------------------
23// wxNotebook
24// ----------------------------------------------------------------------------
25
26class WXDLLEXPORT wxNotebook : public wxNotebookBase
27{
28public:
29    //
30    // Ctors
31    // -----
32    // Default for dynamic class
33    //
34    wxNotebook();
35
36    //
37    // the same arguments as for wxControl
38    //
39    wxNotebook( wxWindow*       pParent
40               ,wxWindowID      vId
41               ,const wxPoint&  rPos = wxDefaultPosition
42               ,const wxSize&   rSize = wxDefaultSize
43               ,long            lStyle = 0
44               ,const wxString& rsName = wxNotebookNameStr
45              );
46
47    bool Create( wxWindow*       pParent
48                ,wxWindowID      vId
49                ,const wxPoint&  rPos = wxDefaultPosition
50                ,const wxSize&   rSize = wxDefaultSize
51                ,long            lStyle = 0
52                ,const wxString& rsName = wxNotebookNameStr
53               );
54
55    //
56    // Accessors
57    // ---------
58    // Get number of pages in the dialog
59    //
60    virtual size_t GetPageCount(void) const;
61
62    //
63    // Set the currently selected page, return the index of the previously
64    // selected one (or -1 on error)
65    // NB: this function will _not_ generate wxEVT_NOTEBOOK_PAGE_xxx events
66    //
67    int      SetSelection(size_t nPage);
68
69    // changes selected page without sending events
70    int ChangeSelection(size_t nPage);
71
72    //
73    // Get the currently selected page
74    //
75    inline int      GetSelection(void) const { return m_nSelection; }
76
77    //
78    // Set/Get the title of a page
79    //
80    bool     SetPageText( size_t             nPage
81                         ,const wxString& sStrText
82                        );
83    wxString GetPageText(size_t nPage) const;
84
85    //
86    // Image list stuff: each page may have an image associated with it. All
87    // the images belong to an image list, so you have to
88    // 1) create an image list
89    // 2) associate it with the notebook
90    // 3) set for each page it's image
91    // associate image list with a control
92    //
93           void     SetImageList(wxImageList* pImageList);
94
95    //
96    // Sets/returns item's image index in the current image list
97    //
98    int      GetPageImage(size_t nPage) const;
99    bool     SetPageImage( size_t nPage
100                          ,int nImage
101                         );
102
103    //
104    // Currently it's always 1 because wxGTK doesn't support multi-row
105    // tab controls
106    //
107           int      GetRowCount(void) const;
108
109    //
110    // control the appearance of the notebook pages
111    // set the size (the same for all pages)
112    //
113           void     SetPageSize(const wxSize& rSize);
114
115    //
116    // Set the padding between tabs (in pixels)
117    //
118           void     SetPadding(const wxSize& rPadding);
119
120    //
121    // Operations
122    // ----------
123    // Remove all pages
124    //
125           bool     DeleteAllPages(void);
126
127    //
128    // Adds a new page to the notebook (it will be deleted ny the notebook,
129    // don't delete it yourself). If bSelect, this page becomes active.
130    //
131           bool     AddPage( wxNotebookPage* pPage
132                            ,const wxString& rsStrText
133                            ,bool            bSelect = false
134                            ,int             nImageId = -1
135                           );
136
137    //
138    // The same as AddPage(), but adds it at the specified position
139    //
140    bool     InsertPage( size_t nPage
141                        ,wxNotebookPage* pPage
142                        ,const wxString& rsStrText
143                        ,bool            bSelect = false
144                        ,int             nImageId = -1
145                       );
146
147    //
148    // Windows-only at present. Also, you must use the wxNB_FIXEDWIDTH
149    // style.
150    //
151           void     SetTabSize(const wxSize& rSize);
152
153    //
154    // Callbacks
155    // ---------
156    //
157    void OnSize(wxSizeEvent& rEvent);
158    void OnSelChange(wxNotebookEvent& rEvent);
159    void OnSetFocus(wxFocusEvent& rEvent);
160    void OnNavigationKey(wxNavigationKeyEvent& rEvent);
161
162    //
163    // Base class virtuals
164    // -------------------
165    //
166    virtual bool OS2OnScroll( int    nOrientation
167                             ,WXWORD wSBCode
168                             ,WXWORD wPos
169                             ,WXHWND hControl
170                            );
171    virtual void SetConstraintSizes(bool bRecurse = true);
172    virtual bool DoPhase(int nPhase);
173
174protected:
175    //
176    // Common part of all ctors
177    //
178    void                    Init(void);
179
180    //
181    // Translate wxWin styles to the PM ones
182    //
183    virtual WXDWORD         OS2GetStyle( long     lFlags
184                                        ,WXDWORD* pwExstyle = NULL
185                                       ) const;
186
187    //
188    // Remove one page from the notebook, without deleting
189    //
190    virtual wxNotebookPage* DoRemovePage(size_t nPage);
191
192    //
193    // Helper functions
194    //
195
196    int                     m_nSelection; // The current selection (-1 if none)
197
198private:
199    wxArrayLong                     m_alPageId;
200    int                             m_nTabSize; // holds the largest tab size
201
202    DECLARE_DYNAMIC_CLASS(wxNotebook)
203    DECLARE_EVENT_TABLE()
204}; // end of CLASS wxNotebook
205
206#endif // wxUSE_NOTEBOOK
207
208#endif // _NOTEBOOK_H
209