]> git.saurik.com Git - wxWidgets.git/blob - wxPython/src/_notebook.i
Tweaks to work around wxMac bugs
[wxWidgets.git] / wxPython / src / _notebook.i
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: _notebook.i
3 // Purpose: SWIG interface defs for wxNotebook and such
4 //
5 // Author: Robin Dunn
6 //
7 // Created: 2-June-1998
8 // RCS-ID: $Id$
9 // Copyright: (c) 2003 by Total Control Software
10 // Licence: wxWindows license
11 /////////////////////////////////////////////////////////////////////////////
12
13 // Not a %module
14
15
16 //---------------------------------------------------------------------------
17
18 MAKE_CONST_WXSTRING(NOTEBOOK_NAME);
19
20 //---------------------------------------------------------------------------
21 %newgroup
22
23 // TODO: Virtualize this class so other book controls can be derived in Python
24
25 // Common base class for wxList/Tree/Notebook
26 class wxBookCtrl : public wxControl
27 {
28 public:
29 // This is an ABC, it can't be constructed...
30
31 // wxBookCtrl(wxWindow *parent,
32 // wxWindowID id,
33 // const wxPoint& pos = wxDefaultPosition,
34 // const wxSize& size = wxDefaultSize,
35 // long style = 0,
36 // const wxString& name = wxPyEmptyString);
37 // %name(PreBookCtrl)wxBookCtrl();
38 // bool Create(wxWindow *parent,
39 // wxWindowID id,
40 // const wxPoint& pos = wxDefaultPosition,
41 // const wxSize& size = wxDefaultSize,
42 // long style = 0,
43 // const wxString& name = wxPyEmptyString);
44
45
46 // get number of pages in the dialog
47 virtual size_t GetPageCount() const;
48
49 // get the panel which represents the given page
50 virtual wxWindow *GetPage(size_t n);
51
52 // get the currently selected page or wxNOT_FOUND if none
53 virtual int GetSelection() const/* = 0*/;
54
55 // set/get the title of a page
56 virtual bool SetPageText(size_t n, const wxString& strText)/* = 0*/;
57 virtual wxString GetPageText(size_t n) const/* = 0*/;
58
59
60 // image list stuff: each page may have an image associated with it (all
61 // images belong to the same image list)
62
63 // sets the image list to use, it is *not* deleted by the control
64 virtual void SetImageList(wxImageList *imageList);
65
66 // as SetImageList() but we will delete the image list ourselves
67 %apply SWIGTYPE *DISOWN { wxImageList *imageList };
68 void AssignImageList(wxImageList *imageList);
69 %clear wxImageList *imageList;
70
71 // get pointer (may be NULL) to the associated image list
72 wxImageList* GetImageList() const;
73
74 // sets/returns item's image index in the current image list
75 virtual int GetPageImage(size_t n) const/* = 0*/;
76 virtual bool SetPageImage(size_t n, int imageId)/* = 0*/;
77
78
79 // resize the notebook so that all pages will have the specified size
80 virtual void SetPageSize(const wxSize& size);
81
82 // calculate the size of the control from the size of its page
83 virtual wxSize CalcSizeFromPage(const wxSize& sizePage) const/* = 0*/;
84
85
86
87 // remove one page from the control and delete it
88 virtual bool DeletePage(size_t n);
89
90 // remove one page from the notebook, without deleting it
91 virtual bool RemovePage(size_t n);
92
93 // remove all pages and delete them
94 virtual bool DeleteAllPages();
95
96 // adds a new page to the control
97 virtual bool AddPage(wxWindow *page,
98 const wxString& text,
99 bool select = False,
100 int imageId = -1);
101
102 // the same as AddPage(), but adds the page at the specified position
103 virtual bool InsertPage(size_t n,
104 wxWindow *page,
105 const wxString& text,
106 bool select = False,
107 int imageId = -1)/* = 0*/;
108
109 // set the currently selected page, return the index of the previously
110 // selected one (or -1 on error)
111 //
112 // NB: this function will _not_ generate PAGE_CHANGING/ED events
113 virtual int SetSelection(size_t n)/* = 0*/;
114
115
116 // cycle thru the pages
117 void AdvanceSelection(bool forward = True);
118
119 static wxVisualAttributes
120 GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL);
121 };
122
123
124
125 class wxBookCtrlEvent : public wxNotifyEvent
126 {
127 public:
128 wxBookCtrlEvent(wxEventType commandType = wxEVT_NULL, int id = 0,
129 int nSel = -1, int nOldSel = -1);
130
131 // the currently selected page (-1 if none)
132 int GetSelection() const;
133 void SetSelection(int nSel);
134 // the page that was selected before the change (-1 if none)
135 int GetOldSelection() const;
136 void SetOldSelection(int nOldSel);
137 };
138
139
140
141 //---------------------------------------------------------------------------
142 %newgroup
143
144 enum {
145 // styles
146 wxNB_FIXEDWIDTH,
147 wxNB_TOP,
148 wxNB_LEFT,
149 wxNB_RIGHT,
150 wxNB_BOTTOM,
151 wxNB_MULTILINE,
152
153 // hittest flags
154 wxNB_HITTEST_NOWHERE = 1, // not on tab
155 wxNB_HITTEST_ONICON = 2, // on icon
156 wxNB_HITTEST_ONLABEL = 4, // on label
157 wxNB_HITTEST_ONITEM = wxNB_HITTEST_ONICON | wxNB_HITTEST_ONLABEL,
158
159 };
160
161
162
163 class wxNotebook : public wxBookCtrl {
164 public:
165 %pythonAppend wxNotebook "self._setOORInfo(self)"
166 %pythonAppend wxNotebook() ""
167
168 wxNotebook(wxWindow *parent,
169 wxWindowID id=-1,
170 const wxPoint& pos = wxDefaultPosition,
171 const wxSize& size = wxDefaultSize,
172 long style = 0,
173 const wxString& name = wxPyNOTEBOOK_NAME);
174 %name(PreNotebook)wxNotebook();
175
176 bool Create(wxWindow *parent,
177 wxWindowID id,
178 const wxPoint& pos = wxDefaultPosition,
179 const wxSize& size = wxDefaultSize,
180 long style = 0,
181 const wxString& name = wxPyNOTEBOOK_NAME);
182
183
184 // get the number of rows for a control with wxNB_MULTILINE style (not all
185 // versions support it - they will always return 1 then)
186 virtual int GetRowCount() const;
187
188 // set the padding between tabs (in pixels)
189 virtual void SetPadding(const wxSize& padding);
190
191 // set the size of the tabs for wxNB_FIXEDWIDTH controls
192 virtual void SetTabSize(const wxSize& sz);
193
194 // hit test, returns which tab is hit and, optionally, where (icon, label)
195 // (not implemented on all platforms)
196 DocDeclAStr(
197 virtual int, HitTest(const wxPoint& pt, long* OUTPUT) const,
198 "HitTest(Point pt) -> (tab, where)",
199 "Returns the tab which is hit, and flags indicating where using wx.NB_HITTEST_ flags.");
200
201 // implement some base class functions
202 virtual wxSize CalcSizeFromPage(const wxSize& sizePage) const;
203
204 #ifdef __WXMSW__
205 // Windows only: attempts to apply the UX theme page background to this page
206 void ApplyThemeBackground(wxWindow* window, const wxColour& colour);
207 #endif
208
209 static wxVisualAttributes
210 GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL);
211 };
212
213
214
215 class wxNotebookEvent : public wxBookCtrlEvent
216 {
217 public:
218 wxNotebookEvent(wxEventType commandType = wxEVT_NULL, int id = 0,
219 int nSel = -1, int nOldSel = -1);
220
221 };
222
223 // notebook control event types
224 %constant wxEventType wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED;
225 %constant wxEventType wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING;
226
227
228 %pythoncode {
229 %# wxNotebook events
230 EVT_NOTEBOOK_PAGE_CHANGED = wx.PyEventBinder( wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, 1 )
231 EVT_NOTEBOOK_PAGE_CHANGING = wx.PyEventBinder( wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING, 1 )
232 }
233
234
235 %pythoncode {
236 %#----------------------------------------------------------------------------
237
238 class NotebookPage(wx.Panel):
239 """
240 There is an old (and apparently unsolvable) bug when placing a
241 window with a nonstandard background colour in a wxNotebook on
242 wxGTK, as the notbooks's background colour would always be used
243 when the window is refreshed. The solution is to place a panel in
244 the notbook and the coloured window on the panel, sized to cover
245 the panel. This simple class does that for you, just put an
246 instance of this in the notebook and make your regular window a
247 child of this one and it will handle the resize for you.
248 """
249 def __init__(self, parent, id=-1,
250 pos=wx.DefaultPosition, size=wx.DefaultSize,
251 style=wx.TAB_TRAVERSAL, name="panel"):
252 wx.Panel.__init__(self, parent, id, pos, size, style, name)
253 self.child = None
254 EVT_SIZE(self, self.OnSize)
255
256 def OnSize(self, evt):
257 if self.child is None:
258 children = self.GetChildren()
259 if len(children):
260 self.child = children[0]
261 if self.child:
262 self.child.SetPosition((0,0))
263 self.child.SetSize(self.GetSize())
264
265 }
266
267 //---------------------------------------------------------------------------
268 %newgroup
269
270
271 enum
272 {
273 // default alignment: left everywhere except Mac where it is top
274 wxLB_DEFAULT = 0,
275
276 // put the list control to the left/right/top/bottom of the page area
277 wxLB_TOP = 0x1,
278 wxLB_BOTTOM = 0x2,
279 wxLB_LEFT = 0x4,
280 wxLB_RIGHT = 0x8,
281
282 // the mask which can be used to extract the alignment from the style
283 wxLB_ALIGN_MASK = 0xf,
284 };
285
286
287
288 // wxListCtrl and wxNotebook combination
289 class wxListbook : public wxBookCtrl
290 {
291 public:
292 %pythonAppend wxListbook "self._setOORInfo(self)"
293 %pythonAppend wxListbook() ""
294
295 wxListbook(wxWindow *parent,
296 wxWindowID id=-1,
297 const wxPoint& pos = wxDefaultPosition,
298 const wxSize& size = wxDefaultSize,
299 long style = 0,
300 const wxString& name = wxPyEmptyString);
301 %name(PreListbook)wxListbook();
302
303 bool Create(wxWindow *parent,
304 wxWindowID id,
305 const wxPoint& pos = wxDefaultPosition,
306 const wxSize& size = wxDefaultSize,
307 long style = 0,
308 const wxString& name = wxPyEmptyString);
309
310 // returns True if we have wxLB_TOP or wxLB_BOTTOM style
311 bool IsVertical() const;
312
313 };
314
315
316
317 class wxListbookEvent : public wxBookCtrlEvent
318 {
319 public:
320 wxListbookEvent(wxEventType commandType = wxEVT_NULL, int id = 0,
321 int nSel = -1, int nOldSel = -1);
322 };
323
324
325 %constant wxEventType wxEVT_COMMAND_LISTBOOK_PAGE_CHANGED;
326 %constant wxEventType wxEVT_COMMAND_LISTBOOK_PAGE_CHANGING;
327
328 %pythoncode {
329 EVT_LISTBOOK_PAGE_CHANGED = wx.PyEventBinder( wxEVT_COMMAND_LISTBOOK_PAGE_CHANGED, 1 )
330 EVT_LISTBOOK_PAGE_CHANGING = wx.PyEventBinder( wxEVT_COMMAND_LISTBOOK_PAGE_CHANGING, 1 )
331 }
332
333
334 //---------------------------------------------------------------------------
335 %newgroup;
336
337
338 class wxBookCtrlSizer: public wxSizer
339 {
340 public:
341 %pythonAppend wxBookCtrlSizer "self._setOORInfo(self)"
342
343 wxBookCtrlSizer( wxBookCtrl *nb );
344
345 void RecalcSizes();
346 wxSize CalcMin();
347 wxBookCtrl *GetControl();
348 };
349
350
351 class wxNotebookSizer: public wxSizer {
352 public:
353 %pythonAppend wxNotebookSizer "self._setOORInfo(self)"
354
355 wxNotebookSizer( wxNotebook *nb );
356
357 void RecalcSizes();
358 wxSize CalcMin();
359 wxNotebook *GetNotebook();
360 };
361
362 //---------------------------------------------------------------------------