]> git.saurik.com Git - wxWidgets.git/blame - include/wx/msw/notebook.h
Restored the ability to set the background colour for a toolbar on Windows
[wxWidgets.git] / include / wx / msw / notebook.h
CommitLineData
b5f2afe5
VZ
1/////////////////////////////////////////////////////////////////////////////
2// Name: msw/notebook.h
3// Purpose: MSW/GTK compatible notebook (a.k.a. property sheet)
4// Author: Robert Roebling
5// Modified by: Vadim Zeitlin for Windows version
6// RCS-ID: $Id$
371a5b4e 7// Copyright: (c) Julian Smart
65571936 8// Licence: wxWindows licence
b5f2afe5
VZ
9/////////////////////////////////////////////////////////////////////////////
10
11#ifndef _NOTEBOOK_H
12#define _NOTEBOOK_H
13
12028905 14#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
b5f2afe5
VZ
15 #pragma interface "notebook.h"
16#endif
17
1e6feb95
VZ
18#if wxUSE_NOTEBOOK
19
b5f2afe5
VZ
20// ----------------------------------------------------------------------------
21// headers
22// ----------------------------------------------------------------------------
74b31181 23
7c0ea335 24#include "wx/control.h"
b5f2afe5 25
b5f2afe5
VZ
26// ----------------------------------------------------------------------------
27// wxNotebook
28// ----------------------------------------------------------------------------
29
8acd402f
SC
30class WXDLLEXPORT wxNotebookPageInfo : public wxObject
31{
32public :
3839f37e 33 wxNotebookPageInfo() { m_page = NULL; m_imageId = -1; m_selected = false; }
8acd402f
SC
34 virtual ~wxNotebookPageInfo() { }
35
3839f37e
VZ
36 void Create(wxNotebookPage *page,
37 const wxString& text,
38 bool selected,
39 int imageId)
40 {
41 m_page = page;
42 m_text = text;
43 m_selected = selected;
44 m_imageId = imageId;
45 }
46
47 wxNotebookPage* GetPage() const { return m_page; }
48 wxString GetText() const { return m_text; }
49 bool GetSelected() const { return m_selected; }
8acd402f 50 int GetImageId() const { return m_imageId; }
8acd402f 51
3839f37e
VZ
52private:
53 wxNotebookPage *m_page;
54 wxString m_text;
55 bool m_selected;
56 int m_imageId;
57
58 DECLARE_DYNAMIC_CLASS(wxNotebookPageInfo)
59};
8acd402f
SC
60
61
91c9dbdc 62WX_DECLARE_EXPORTED_LIST(wxNotebookPageInfo, wxNotebookPageInfoList );
8acd402f 63
1e6feb95 64class WXDLLEXPORT wxNotebook : public wxNotebookBase
b5f2afe5
VZ
65{
66public:
67 // ctors
68 // -----
69 // default for dynamic class
70 wxNotebook();
71 // the same arguments as for wxControl (@@@ any special styles?)
72 wxNotebook(wxWindow *parent,
35eca07c 73 wxWindowID id,
b5f2afe5
VZ
74 const wxPoint& pos = wxDefaultPosition,
75 const wxSize& size = wxDefaultSize,
debe6624 76 long style = 0,
630ad6c6 77 const wxString& name = wxNotebookNameStr);
b5f2afe5
VZ
78 // Create() function
79 bool Create(wxWindow *parent,
35eca07c 80 wxWindowID id,
b5f2afe5
VZ
81 const wxPoint& pos = wxDefaultPosition,
82 const wxSize& size = wxDefaultSize,
debe6624 83 long style = 0,
630ad6c6 84 const wxString& name = wxNotebookNameStr);
caf95d2a 85 virtual ~wxNotebook();
b5f2afe5
VZ
86
87 // accessors
88 // ---------
89 // get number of pages in the dialog
8d34bf5c 90 virtual size_t GetPageCount() const;
b5f2afe5
VZ
91
92 // set the currently selected page, return the index of the previously
93 // selected one (or -1 on error)
94 // NB: this function will _not_ generate wxEVT_NOTEBOOK_PAGE_xxx events
15aad3b9 95 int SetSelection(size_t nPage);
b5f2afe5
VZ
96 // get the currently selected page
97 int GetSelection() const { return m_nSelection; }
98
99 // set/get the title of a page
15aad3b9
VZ
100 bool SetPageText(size_t nPage, const wxString& strText);
101 wxString GetPageText(size_t nPage) const;
b5f2afe5
VZ
102
103 // image list stuff: each page may have an image associated with it. All
104 // the images belong to an image list, so you have to
105 // 1) create an image list
106 // 2) associate it with the notebook
107 // 3) set for each page it's image
108 // associate image list with a control
109 void SetImageList(wxImageList* imageList);
b5f2afe5
VZ
110
111 // sets/returns item's image index in the current image list
15aad3b9
VZ
112 int GetPageImage(size_t nPage) const;
113 bool SetPageImage(size_t nPage, int nImage);
b5f2afe5 114
b5f2afe5
VZ
115 // currently it's always 1 because wxGTK doesn't support multi-row
116 // tab controls
117 int GetRowCount() const;
118
119 // control the appearance of the notebook pages
120 // set the size (the same for all pages)
121 void SetPageSize(const wxSize& size);
122 // set the padding between tabs (in pixels)
123 void SetPadding(const wxSize& padding);
124
125 // operations
126 // ----------
b5f2afe5
VZ
127 // remove all pages
128 bool DeleteAllPages();
e450aa69 129
efa14cf2 130 // inserts a new page to the notebook (it will be deleted ny the notebook,
b5f2afe5 131 // don't delete it yourself). If bSelect, this page becomes active.
15aad3b9 132 bool InsertPage(size_t nPage,
b5f2afe5
VZ
133 wxNotebookPage *pPage,
134 const wxString& strText,
078cf5cb 135 bool bSelect = false,
8a33ea62 136 int imageId = -1);
b5f2afe5 137
3839f37e
VZ
138 void AddPageInfo( wxNotebookPageInfo* info ) { AddPage( info->GetPage() , info->GetText() , info->GetSelected() , info->GetImageId() ); }
139 const wxNotebookPageInfoList& GetPageInfos() const;
8acd402f 140
58a8ab88
JS
141 // Windows-only at present. Also, you must use the wxNB_FIXEDWIDTH
142 // style.
143 void SetTabSize(const wxSize& sz);
144
e450aa69
VZ
145 // hit test
146 virtual int HitTest(const wxPoint& pt, long *flags = NULL) const;
147
148 // calculate the size of the notebook from the size of its page
2ce7af35
JS
149 virtual wxSize CalcSizeFromPage(const wxSize& sizePage) const;
150
b5f2afe5
VZ
151 // callbacks
152 // ---------
9026ad85 153 void OnSize(wxSizeEvent& event);
b5f2afe5 154 void OnSelChange(wxNotebookEvent& event);
8a33ea62 155 void OnNavigationKey(wxNavigationKeyEvent& event);
35eca07c 156
b5f2afe5
VZ
157 // base class virtuals
158 // -------------------
0b481c72 159
a23fd0e1 160 virtual bool MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result);
0df3fbd7
VZ
161 virtual bool MSWOnScroll(int orientation, WXWORD nSBCode,
162 WXWORD pos, WXHWND control);
b8bdaa7c 163 virtual bool MSWTranslateMessage(WXMSG *wxmsg);
0b481c72
VZ
164
165#if wxUSE_CONSTRAINTS
078cf5cb 166 virtual void SetConstraintSizes(bool recurse = true);
5475b960 167 virtual bool DoPhase(int nPhase);
0b481c72 168#endif // wxUSE_CONSTRAINTS
b5f2afe5 169
caf95d2a
VZ
170
171 // implementation only
172 // -------------------
173
174#if wxUSE_UXTHEME
c4a95f6f
VZ
175 virtual bool SetBackgroundColour(const wxColour& colour)
176 {
177 if ( !wxNotebookBase::SetBackgroundColour(colour) )
178 return false;
caf95d2a 179
c4a95f6f 180 UpdateBgBrush();
9b7d2b81 181
c4a95f6f
VZ
182 return true;
183 }
184
185 virtual WXHBRUSH MSWGetBgBrushForChild(WXHDC hDC, wxWindow *win);
186 virtual wxColour MSWGetBgColourForChild(wxWindow *win);
caf95d2a
VZ
187#endif // wxUSE_UXTHEME
188
b5f2afe5
VZ
189protected:
190 // common part of all ctors
191 void Init();
192
0df3fbd7
VZ
193 // translate wxWin styles to the Windows ones
194 virtual WXDWORD MSWGetStyle(long flags, WXDWORD *exstyle = NULL) const;
195
1e6feb95 196 // remove one page from the notebook, without deleting
15aad3b9 197 virtual wxNotebookPage *DoRemovePage(size_t nPage);
1e6feb95 198
2015f2b3
VZ
199 // set the size of the given page to fit in the notebook
200 void AdjustPageSize(wxNotebookPage *page);
201
ffafd8a5 202#if wxUSE_UXTHEME
c4a95f6f
VZ
203 // this is a slightly ugly function which gets the bitmap of notebook
204 // background and either returns the colour under the specified window in it
205 // or creates a brush from it
206 //
207 // so if win == NULL, a brush is created and returned
208 // win != NULL, returns COLORREF of the pixel under its top left corner
209 WXHANDLE QueryBgBitmap(wxWindow *win = NULL);
210
caf95d2a
VZ
211 // creates the brush to be used for drawing the tab control background
212 void UpdateBgBrush();
213#endif // wxUSE_UXTHEME
2015f2b3 214
2b5f62a0
VZ
215 // the current selection (-1 if none)
216 int m_nSelection;
b5f2afe5 217
caf95d2a
VZ
218 wxNotebookPageInfoList m_pageInfos;
219
220#if wxUSE_UXTHEME
221 // background brush used to paint the tab control
222 WXHBRUSH m_hbrBackground;
223#endif // wxUSE_UXTHEME
8acd402f 224
2015f2b3 225
fc7a2a60 226 DECLARE_DYNAMIC_CLASS_NO_COPY(wxNotebook)
b5f2afe5
VZ
227 DECLARE_EVENT_TABLE()
228};
229
1e6feb95
VZ
230#endif // wxUSE_NOTEBOOK
231
b5f2afe5 232#endif // _NOTEBOOK_H