]> git.saurik.com Git - wxWidgets.git/blame - wxPython/src/aui.i
log missing font directories with wxLogDebug, not wxLogTrace, for more visibility
[wxWidgets.git] / wxPython / src / aui.i
CommitLineData
febb39df
RD
1/////////////////////////////////////////////////////////////////////////////
2// Name: aui.i
3// Purpose: Wrappers for the wxAUI classes.
4//
5// Author: Robin Dunn
6//
7// Created: 5-July-2006
8// RCS-ID: $Id$
9// Copyright: (c) 2006 by Total Control Software
10// Licence: wxWindows license
11/////////////////////////////////////////////////////////////////////////////
12
13%define DOCSTRING
14"The wx.aui moduleis an Advanced User Interface library that aims to
15implement \"cutting-edge\" interface usability and design features so
16developers can quickly and easily create beautiful and usable
17application interfaces.
18
19**Vision and Design Principles**
20
21wx.aui attempts to encapsulate the following aspects of the user
22interface:
23
24 * Frame Management: Frame management provides the means to open,
25 move and hide common controls that are needed to interact with the
26 document, and allow these configurations to be saved into
27 different perspectives and loaded at a later time.
28
29 * Toolbars: Toolbars are a specialized subset of the frame
30 management system and should behave similarly to other docked
31 components. However, they also require additional functionality,
32 such as \"spring-loaded\" rebar support, \"chevron\" buttons and
33 end-user customizability.
34
35 * Modeless Controls: Modeless controls expose a tool palette or set
36 of options that float above the application content while allowing
37 it to be accessed. Usually accessed by the toolbar, these controls
38 disappear when an option is selected, but may also be \"torn off\"
39 the toolbar into a floating frame of their own.
40
41 * Look and Feel: Look and feel encompasses the way controls are
42 drawn, both when shown statically as well as when they are being
43 moved. This aspect of user interface design incorporates \"special
44 effects\" such as transparent window dragging as well as frame
45 animation.
46
2a783b2d 47**wx.aui adheres to the following principles**
febb39df
RD
48
49 - Use native floating frames to obtain a native look and feel for
50 all platforms;
51
52 - Use existing wxPython code where possible, such as sizer
53 implementation for frame management;
54
55 - Use standard wxPython coding conventions.
56
57
58**Usage**
59
60The following example shows a simple implementation that utilizes
61`wx.aui.FrameManager` to manage three text controls in a frame window::
62
63 import wx
64 import wx.aui
65
66 class MyFrame(wx.Frame):
67
68 def __init__(self, parent, id=-1, title='wx.aui Test',
69 size=(800, 600), style=wx.DEFAULT_FRAME_STYLE):
70 wx.Frame.__init__(self, parent, id, title, pos, size, style)
71
2a783b2d 72 self._mgr = wx.aui.AuiManager(self)
febb39df
RD
73
74 # create several text controls
75 text1 = wx.TextCtrl(self, -1, 'Pane 1 - sample text',
76 wx.DefaultPosition, wx.Size(200,150),
77 wx.NO_BORDER | wx.TE_MULTILINE)
78
79 text2 = wx.TextCtrl(self, -1, 'Pane 2 - sample text',
80 wx.DefaultPosition, wx.Size(200,150),
81 wx.NO_BORDER | wx.TE_MULTILINE)
82
83 text3 = wx.TextCtrl(self, -1, 'Main content window',
84 wx.DefaultPosition, wx.Size(200,150),
85 wx.NO_BORDER | wx.TE_MULTILINE)
86
87 # add the panes to the manager
88 self._mgr.AddPane(text1, wx.LEFT, 'Pane Number One')
89 self._mgr.AddPane(text2, wx.BOTTOM, 'Pane Number Two')
90 self._mgr.AddPane(text3, wx.CENTER)
91
92 # tell the manager to 'commit' all the changes just made
93 self._mgr.Update()
94
95 self.Bind(wx.EVT_CLOSE, self.OnClose)
96
97
98 def OnClose(self, event):
99 # deinitialize the frame manager
100 self._mgr.UnInit()
101 # delete the frame
102 self.Destroy()
103
104
105 app = wx.App()
106 frame = MyFrame(None)
107 frame.Show()
108 app.MainLoop()
109"
110%enddef
111
112
113
114%module(package="wx", docstring=DOCSTRING) aui
115
116%{
117#include "wx/wxPython/wxPython.h"
118#include "wx/wxPython/pyclasses.h"
119#include <wx/aui/aui.h>
120%}
121
122//---------------------------------------------------------------------------
123
124%import core.i
125%import windows.i
126
127%pythoncode { wx = _core }
128%pythoncode { __docfilter__ = wx.__DocFilter(globals()) }
129
130
131%include _aui_docstrings.i
132
133//---------------------------------------------------------------------------
134
34d71f81
RD
135// Preprocessor stuff so SWIG doesn't get confused when %include-ing
136// the aui .h files.
070a1e7e
RD
137%ignore wxUSE_AUI;
138%ignore wxUSE_MENUS;
139%ignore wxABI_VERSION;
febb39df 140#define wxUSE_AUI 1
34d71f81 141#define wxUSE_MENUS 1
070a1e7e
RD
142#define wxABI_VERSION 99999
143
febb39df
RD
144#define WXDLLIMPEXP_AUI
145#define unsigned
d7a7616b 146#define wxDEPRECATED(decl)
34d71f81
RD
147#define DECLARE_EVENT_TABLE()
148#define DECLARE_DYNAMIC_CLASS(foo)
149
d7a7616b 150
febb39df 151
1c976bff
RD
152// We'll skip making wrappers for these, they have overloads that take a
153// wxSize or wxPoint
2a783b2d
RD
154%ignore wxAuiPaneInfo::MaxSize(int x, int y);
155%ignore wxAuiPaneInfo::MinSize(int x, int y);
156%ignore wxAuiPaneInfo::BestSize(int x, int y);
157%ignore wxAuiPaneInfo::FloatingPosition(int x, int y);
158%ignore wxAuiPaneInfo::FloatingSize(int x, int y);
febb39df
RD
159
160// But for these we will do the overloading (see %pythoncode below) so let's
161// rename the C++ versions
2a783b2d
RD
162%rename(_GetPaneByWidget) wxAuiManager::GetPane(wxWindow* window);
163%rename(_GetPaneByName) wxAuiManager::GetPane(const wxString& name);
febb39df 164
2a783b2d
RD
165%rename(_AddPane1) wxAuiManager::AddPane(wxWindow* window, const wxAuiPaneInfo& pane_info);
166%rename(_AddPane2) wxAuiManager::AddPane(wxWindow* window, int direction = wxLEFT,
167 const wxString& caption = wxEmptyString);
febb39df 168
2a783b2d
RD
169%rename(AddPaneAtPos) wxAuiManager::AddPane(wxWindow* window,
170 const wxPaneInfo& pane_info,
171 const wxPoint& drop_pos);
febb39df
RD
172
173// A typemap for the return value of wxFrameManager::GetAllPanes
2a783b2d 174%typemap(out) wxAuiPaneInfoArray& {
febb39df
RD
175 $result = PyList_New(0);
176 for (size_t i=0; i < $1->GetCount(); i++) {
2a783b2d 177 PyObject* pane_obj = SWIG_NewPointerObj((void*)(&$1->Item(i)), SWIGTYPE_p_wxAuiPaneInfo, 0);
febb39df
RD
178 PyList_Append($result, pane_obj);
179 }
180}
181
182
1c976bff
RD
183%nokwargs wxAuiTabContainer::SetActivePage;
184
185%pythonAppend wxAuiTabCtrl::wxAuiTabCtrl "self._setOORInfo(self)";
186
2a783b2d 187%pythonAppend wxAuiNotebook::wxAuiNotebook "self._setOORInfo(self)";
34d71f81 188%pythonAppend wxAuiNotebook::wxAuiNotebook() "val._setOORInfo(val)";
2a783b2d
RD
189%ignore wxAuiiNotebook::~wxAuiNotebook;
190%rename(PreAuiNotebook) wxAuiNotebook::wxAuiNotebook();
1c976bff 191
34d71f81
RD
192// Link error...
193%ignore wxAuiDefaultTabArt::SetWindow;
54af9b8b 194
d48ae46b
RD
195// ignore this overload
196%ignore wxAuiTabContainer::GetPage(size_t idx) const;
197
198
34d71f81
RD
199
200%pythonAppend wxAuiMDIParentFrame::wxAuiMDIParentFrame "self._setOORInfo(self)";
201%pythonAppend wxAuiMDIParentFrame::wxAuiMDIParentFrame() "val._setOORInfo(val)";
202%ignore wxAuiMDIParentFrame::~wxAuiMDIParentFrame;
203%rename(PreAuiMDIParentFrame) wxAuiMDIParentFrame::wxAuiMDIParentFrame();
204
cbfc9df6
RD
205// Ignore these for now because they need a typemap for the return value, see below.
206%ignore wxAuiMDIParentFrame::GetNotebook;
207%ignore wxAuiMDIParentFrame::GetActiveChild;
208%ignore wxAuiMDIParentFrame::GetClientWindow;
209
34d71f81
RD
210%pythonAppend wxAuiMDIChildFrame::wxAuiMDIChildFrame "self._setOORInfo(self)";
211%pythonAppend wxAuiMDIChildFrame::wxAuiMDIChildFrame() "val._setOORInfo(val)";
212%ignore wxAuiMDIChildFrame::~wxAuiMDIChildFrame;
213%rename(PreAuiMDIChildFrame) wxAuiMDIChildFrame::wxAuiMDIChildFrame();
214
215%pythonAppend wxAuiMDIClientWindow::wxAuiMDIClientWindow "self._setOORInfo(self)";
216%pythonAppend wxAuiMDIClientWindow::wxAuiMDIClientWindow() "val._setOORInfo(val)";
217%ignore wxAuiMDIClientWindow::~wxAuiMDIClientWindow;
218%rename(PreAuiMDIClientWindow) wxAuiMDIClientWindow::wxAuiMDIClientWindow();
219
220
cbfc9df6
RD
221%typemap(out) wxEvtHandler* { $result = wxPyMake_wxObject($1, $owner); }
222
febb39df
RD
223//---------------------------------------------------------------------------
224// Get all our defs from the REAL header files.
55424c8c
RD
225
226#define wxColor wxColour // fix problem in dockart.h
227
febb39df
RD
228%include framemanager.h
229%include dockart.h
230%include floatpane.h
1c976bff 231%include auibook.h
34d71f81 232%include tabmdi.h
febb39df 233
55424c8c
RD
234#undef wxColor
235
febb39df
RD
236//---------------------------------------------------------------------------
237// Methods to inject into the FrameManager class that will sort out calls to
238// the overloaded versions of GetPane and AddPane
239
2a783b2d 240%extend wxAuiManager {
d7a7616b 241 %pythoncode {
febb39df
RD
242 def GetPane(self, item):
243 """
244 GetPane(self, window_or_info item) -> PaneInfo
245
246 GetPane is used to search for a `PaneInfo` object either by
247 widget reference or by pane name, which acts as a unique id
248 for a window pane. The returned `PaneInfo` object may then be
249 modified to change a pane's look, state or position. After one
250 or more modifications to the `PaneInfo`, `FrameManager.Update`
251 should be called to realize the changes to the user interface.
252
253 If the lookup failed (meaning the pane could not be found in
254 the manager) GetPane returns an empty `PaneInfo`, a condition
255 which can be checked by calling `PaneInfo.IsOk`.
256 """
257 if isinstance(item, wx.Window):
258 return self._GetPaneByWidget(item)
259 else:
260 return self._GetPaneByName(item)
261
262 def AddPane(self, window, info=None, caption=None):
263 """
264 AddPane(self, window, info=None, caption=None) -> bool
265
266 AddPane tells the frame manager to start managing a child
267 window. There are two versions of this function. The first
268 verison accepts a `PaneInfo` object for the ``info`` parameter
269 and allows the full spectrum of pane parameter
270 possibilities. (Say that 3 times fast!)
271
272 The second version is used for simpler user interfaces which
273 do not require as much configuration. In this case the
274 ``info`` parameter specifies the direction property of the
275 pane info, and defaults to ``wx.LEFT``. The pane caption may
276 also be specified as an extra parameter in this form.
277 """
2a783b2d 278 if type(info) == AuiPaneInfo:
4c16bedf 279 return self._AddPane1(window, info)
febb39df
RD
280 else:
281 # This Is AddPane2
4c16bedf
RD
282 if info is None:
283 info = wx.LEFT
284 if caption is None:
285 caption = ""
286 return self._AddPane2(window, info, caption)
d7a7616b
RD
287 }
288
289 // For backwards compatibility
290 %pythoncode {
291 SetFrame = wx._deprecated(SetManagedWindow,
292 "SetFrame is deprecated, use `SetManagedWindow` instead.")
293 GetFrame = wx._deprecated(GetManagedWindow,
294 "GetFrame is deprecated, use `GetManagedWindow` instead.")
295 }
febb39df
RD
296}
297
2a783b2d
RD
298%extend wxAuiDockInfo {
299 ~wxAuiDockInfo() {}
050441c8
RD
300}
301
2a783b2d
RD
302%extend wxAuiDockUIPart {
303 ~wxAuiDockUIPart() {}
050441c8
RD
304}
305
2a783b2d
RD
306%extend wxAuiPaneButton {
307 ~wxAuiPaneButton() {}
050441c8
RD
308}
309
cbfc9df6
RD
310%extend wxAuiMDIParentFrame {
311 %typemap(out) wxAuiNotebook* { $result = wxPyMake_wxObject($1, $owner); }
312 %typemap(out) wxAuiMDIChildFrame* { $result = wxPyMake_wxObject($1, $owner); }
313 %typemap(out) wxAuiMDIClientWindow* { $result = wxPyMake_wxObject($1, $owner); }
314
315 %rename(GetNotebook) _GetNotebook;
316 %rename(GetActiveChild) _GetActiveChild;
317 %rename(GetClientWindow) _GetClientWindow;
318
319 wxAuiNotebook* _GetNotebook() const
320 {
321 return self->GetNotebook();
322 }
323
324 wxAuiMDIChildFrame* _GetActiveChild() const
325 {
326 return self->GetActiveChild();
327 }
328
329 wxAuiMDIClientWindow* _GetClientWindow() const
330 {
331 return self->GetClientWindow();
332 }
333
334 %typemap(out) wxAuiNotebook*;
335 %typemap(out) wxAuiMDIChildFrame*;
336 %typemap(out) wxAuiMDIClientWindow*;
337}
338
339
febb39df
RD
340//---------------------------------------------------------------------------
341
342%{
2db4b82e 343// A wxDocArt class that knows how to forward virtuals to Python methods
2a783b2d 344class wxPyAuiDockArt : public wxAuiDefaultDockArt
febb39df 345{
3c69a2ec 346public:
2a783b2d 347 wxPyAuiDockArt() : wxAuiDefaultDockArt() {}
febb39df
RD
348
349 DEC_PYCALLBACK_INT_INT(GetMetric);
350 DEC_PYCALLBACK_VOID_INTINT(SetMetric);
351 DEC_PYCALLBACK__INTFONT(SetFont);
352 DEC_PYCALLBACK_FONT_INT(GetFont);
353 DEC_PYCALLBACK_COLOUR_INT(GetColour);
354 DEC_PYCALLBACK__INTCOLOUR(SetColour);
355
356 virtual void DrawSash(wxDC& dc,
e81b607b 357 wxWindow* window,
febb39df
RD
358 int orientation,
359 const wxRect& rect)
360 {
361 bool found;
362 wxPyBlock_t blocked = wxPyBeginBlockThreads();
363 if ((found = wxPyCBH_findCallback(m_myInst, "DrawSash"))) {
364 PyObject* odc = wxPyMake_wxObject(&dc, false);
e81b607b 365 PyObject* owin = wxPyMake_wxObject(window, false);
febb39df 366 PyObject* orect = wxPyConstructObject((void*)&rect, wxT("wxRect"), 0);
e81b607b
RD
367 wxPyCBH_callCallback(m_myInst, Py_BuildValue("(OOiO)",
368 odc, owin, orientation, orect));
febb39df 369 Py_DECREF(odc);
8f514ab4 370 Py_DECREF(owin);
febb39df
RD
371 Py_DECREF(orect);
372 }
373 wxPyEndBlockThreads(blocked);
374 if (! found)
2a783b2d 375 wxAuiDefaultDockArt::DrawSash(dc, window, orientation, rect);
febb39df
RD
376 }
377
378 virtual void DrawBackground(wxDC& dc,
e81b607b 379 wxWindow* window,
febb39df
RD
380 int orientation,
381 const wxRect& rect)
382 {
383 bool found;
384 wxPyBlock_t blocked = wxPyBeginBlockThreads();
385 if ((found = wxPyCBH_findCallback(m_myInst, "DrawBackground"))) {
386 PyObject* odc = wxPyMake_wxObject(&dc, false);
e81b607b 387 PyObject* owin = wxPyMake_wxObject(window, false);
febb39df 388 PyObject* orect = wxPyConstructObject((void*)&rect, wxT("wxRect"), 0);
e81b607b
RD
389 wxPyCBH_callCallback(m_myInst, Py_BuildValue("(OOiO)",
390 odc, owin, orientation, orect));
febb39df 391 Py_DECREF(odc);
8f514ab4 392 Py_DECREF(owin);
febb39df
RD
393 Py_DECREF(orect);
394 }
395 wxPyEndBlockThreads(blocked);
396 if (! found)
2a783b2d 397 wxAuiDefaultDockArt::DrawBackground(dc, window, orientation, rect);
febb39df
RD
398 }
399
400 virtual void DrawCaption(wxDC& dc,
e81b607b 401 wxWindow* window,
febb39df
RD
402 const wxString& text,
403 const wxRect& rect,
2a783b2d 404 wxAuiPaneInfo& pane)
febb39df
RD
405 {
406 bool found;
407 wxPyBlock_t blocked = wxPyBeginBlockThreads();
408 if ((found = wxPyCBH_findCallback(m_myInst, "DrawCaption"))) {
409 PyObject* odc = wxPyMake_wxObject(&dc, false);
e81b607b 410 PyObject* owin = wxPyMake_wxObject(window, false);
febb39df
RD
411 PyObject* otext = wx2PyString(text);
412 PyObject* orect = wxPyConstructObject((void*)&rect, wxT("wxRect"), 0);
2a783b2d 413 PyObject* opane = wxPyConstructObject((void*)&pane, wxT("wxAuiPaneInfo"), 0);
e81b607b
RD
414 wxPyCBH_callCallback(m_myInst, Py_BuildValue("(OOOOO)",
415 odc, owin, otext, orect, opane));
febb39df 416 Py_DECREF(odc);
8f514ab4 417 Py_DECREF(owin);
febb39df
RD
418 Py_DECREF(otext);
419 Py_DECREF(orect);
420 Py_DECREF(opane);
421 }
422 wxPyEndBlockThreads(blocked);
423 if (! found)
2a783b2d 424 wxAuiDefaultDockArt::DrawCaption(dc, window, text, rect, pane);
febb39df
RD
425 }
426
427 virtual void DrawGripper(wxDC& dc,
e81b607b 428 wxWindow* window,
febb39df 429 const wxRect& rect,
2a783b2d 430 wxAuiPaneInfo& pane)
febb39df
RD
431 {
432 bool found;
433 wxPyBlock_t blocked = wxPyBeginBlockThreads();
434 if ((found = wxPyCBH_findCallback(m_myInst, "DrawGripper"))) {
435 PyObject* odc = wxPyMake_wxObject(&dc, false);
e81b607b 436 PyObject* owin = wxPyMake_wxObject(window, false);
febb39df 437 PyObject* orect = wxPyConstructObject((void*)&rect, wxT("wxRect"), 0);
2a783b2d 438 PyObject* opane = wxPyConstructObject((void*)&pane, wxT("wxAuiPaneInfo"), 0);
e81b607b 439 wxPyCBH_callCallback(m_myInst, Py_BuildValue("(OOOO)", odc, owin, orect, opane));
febb39df
RD
440 Py_DECREF(odc);
441 Py_DECREF(orect);
442 Py_DECREF(opane);
443 }
444 wxPyEndBlockThreads(blocked);
445 if (! found)
2a783b2d 446 wxAuiDefaultDockArt::DrawGripper(dc, window, rect, pane);
febb39df
RD
447 }
448
449 virtual void DrawBorder(wxDC& dc,
e81b607b 450 wxWindow* window,
febb39df 451 const wxRect& rect,
2a783b2d 452 wxAuiPaneInfo& pane)
febb39df
RD
453 {
454 bool found;
455 wxPyBlock_t blocked = wxPyBeginBlockThreads();
456 if ((found = wxPyCBH_findCallback(m_myInst, "DrawBorder"))) {
457 PyObject* odc = wxPyMake_wxObject(&dc, false);
e81b607b 458 PyObject* owin = wxPyMake_wxObject(window, false);
febb39df 459 PyObject* orect = wxPyConstructObject((void*)&rect, wxT("wxRect"), 0);
2a783b2d 460 PyObject* opane = wxPyConstructObject((void*)&pane, wxT("wxAuiPaneInfo"), 0);
febb39df
RD
461 wxPyCBH_callCallback(m_myInst, Py_BuildValue("(OOO)", odc, orect, opane));
462 Py_DECREF(odc);
8f514ab4 463 Py_DECREF(owin);
febb39df
RD
464 Py_DECREF(orect);
465 Py_DECREF(opane);
466 }
467 wxPyEndBlockThreads(blocked);
468 if (! found)
2a783b2d 469 wxAuiDefaultDockArt::DrawBorder(dc, window, rect, pane);
febb39df
RD
470 }
471
472 virtual void DrawPaneButton(wxDC& dc,
e81b607b 473 wxWindow* window,
febb39df
RD
474 int button,
475 int button_state,
476 const wxRect& rect,
2a783b2d 477 wxAuiPaneInfo& pane)
febb39df
RD
478 {
479 bool found;
480 wxPyBlock_t blocked = wxPyBeginBlockThreads();
481 if ((found = wxPyCBH_findCallback(m_myInst, "DrawPaneButton"))) {
482 PyObject* odc = wxPyMake_wxObject(&dc, false);
e81b607b 483 PyObject* owin = wxPyMake_wxObject(window, false);
febb39df 484 PyObject* orect = wxPyConstructObject((void*)&rect, wxT("wxRect"), 0);
2a783b2d 485 PyObject* opane = wxPyConstructObject((void*)&pane, wxT("wxAuiPaneInfo"), 0);
e81b607b
RD
486 wxPyCBH_callCallback(m_myInst, Py_BuildValue("(OOiIOO)",
487 odc, owin, button, button_state,
febb39df
RD
488 orect, opane));
489 Py_DECREF(odc);
8f514ab4 490 Py_DECREF(owin);
febb39df
RD
491 Py_DECREF(orect);
492 Py_DECREF(opane);
493 }
494 wxPyEndBlockThreads(blocked);
495 if (! found)
2a783b2d 496 wxAuiDefaultDockArt::DrawPaneButton(dc, window, button, button_state, rect, pane);
febb39df
RD
497 }
498
499 PYPRIVATE;
500
501};
502
2a783b2d
RD
503IMP_PYCALLBACK_INT_INT(wxPyAuiDockArt, wxAuiDefaultDockArt, GetMetric);
504IMP_PYCALLBACK_VOID_INTINT(wxPyAuiDockArt, wxAuiDefaultDockArt, SetMetric);
505IMP_PYCALLBACK__INTFONT(wxPyAuiDockArt, wxAuiDefaultDockArt, SetFont);
506IMP_PYCALLBACK_FONT_INT(wxPyAuiDockArt, wxAuiDefaultDockArt, GetFont);
507IMP_PYCALLBACK_COLOUR_INT(wxPyAuiDockArt, wxAuiDefaultDockArt, GetColour);
508IMP_PYCALLBACK__INTCOLOUR(wxPyAuiDockArt, wxAuiDefaultDockArt, SetColour);
febb39df
RD
509
510%}
511
512
2a783b2d
RD
513DocStr(wxPyAuiDockArt,
514"This version of the `AuiDockArt` class has been instrumented to be
febb39df
RD
515subclassable in Python and to reflect all calls to the C++ base class
516methods to the Python methods implemented in the derived class.", "");
517
2a783b2d 518class wxPyAuiDockArt : public wxAuiDefaultDockArt
febb39df 519{
3c69a2ec 520public:
c25f90f6 521 %pythonAppend wxPyAuiDockArt setCallbackInfo(PyAuiDockArt)
cbfc9df6 522 wxPyAuiDockArt();
febb39df 523
8f7ed3f3 524 void _setCallbackInfo(PyObject* self, PyObject* _class);
febb39df
RD
525};
526
527
777e547f
RD
528//---------------------------------------------------------------------------
529
2a783b2d 530%extend wxAuiNotebook {
777e547f
RD
531 %property(PageCount, GetPageCount, doc="See `GetPageCount`");
532 %property(Selection, GetSelection, SetSelection, doc="See `GetSelection` and `SetSelection`");
533}
534
535
536%extend wxAuiNotebookEvent {
537 %property(OldSelection, GetOldSelection, SetOldSelection, doc="See `GetOldSelection` and `SetOldSelection`");
538 %property(Selection, GetSelection, SetSelection, doc="See `GetSelection` and `SetSelection`");
539}
540
541
542%extend wxAuiTabContainer {
543 %property(ActivePage, GetActivePage, SetActivePage, doc="See `GetActivePage` and `SetActivePage`");
544 %property(PageCount, GetPageCount, doc="See `GetPageCount`");
545 %property(Pages, GetPages, doc="See `GetPages`");
546}
547
548
2a783b2d 549%extend wxAuiManager {
777e547f
RD
550 %property(AllPanes, GetAllPanes, doc="See `GetAllPanes`");
551 %property(ArtProvider, GetArtProvider, SetArtProvider, doc="See `GetArtProvider` and `SetArtProvider`");
552 %property(Flags, GetFlags, SetFlags, doc="See `GetFlags` and `SetFlags`");
553 %property(ManagedWindow, GetManagedWindow, SetManagedWindow, doc="See `GetManagedWindow` and `SetManagedWindow`");
554}
555
556
2a783b2d 557%extend wxAuiManagerEvent {
777e547f
RD
558 %property(Button, GetButton, SetButton, doc="See `GetButton` and `SetButton`");
559 %property(DC, GetDC, SetDC, doc="See `GetDC` and `SetDC`");
560 %property(Pane, GetPane, SetPane, doc="See `GetPane` and `SetPane`");
561}
562
563
2db4b82e
RD
564//---------------------------------------------------------------------------
565
566%{
567// A wxTabArt class that knows how to forward virtuals to Python methods
2a783b2d 568class wxPyAuiTabArt : public wxAuiDefaultTabArt
2db4b82e 569{
3c69a2ec 570public:
2a783b2d 571 wxPyAuiTabArt() : wxAuiDefaultTabArt() {}
2db4b82e 572
8f514ab4 573
d95b9f2b 574 virtual void DrawBackground( wxDC& dc,
54af9b8b 575 wxWindow* wnd,
2db4b82e
RD
576 const wxRect& rect )
577 {
578 bool found;
579 wxPyBlock_t blocked = wxPyBeginBlockThreads();
580 if ((found = wxPyCBH_findCallback(m_myInst, "DrawBackground"))) {
d95b9f2b 581 PyObject* odc = wxPyMake_wxObject(&dc, false);
54af9b8b 582 PyObject* ownd = wxPyMake_wxObject(wnd, false);
2db4b82e 583 PyObject* orect = wxPyConstructObject((void*)&rect, wxT("wxRect"), 0);
54af9b8b 584 wxPyCBH_callCallback(m_myInst, Py_BuildValue("(OOO)", odc, ownd, orect));
2db4b82e 585 Py_DECREF(odc);
54af9b8b 586 Py_DECREF(ownd);
2db4b82e
RD
587 Py_DECREF(orect);
588 }
589 wxPyEndBlockThreads(blocked);
590 if (!found)
54af9b8b 591 wxAuiDefaultTabArt::DrawBackground(dc, wnd, rect);
2db4b82e
RD
592 }
593
d95b9f2b 594 virtual void DrawTab( wxDC& dc,
54af9b8b 595 wxWindow* wnd,
81fd0478 596 const wxAuiNotebookPage& pane,
2db4b82e 597 const wxRect& in_rect,
36cb9ebe
RD
598 int close_button_state,
599 wxRect* out_tab_rect,
600 wxRect* out_button_rect,
2db4b82e
RD
601 int* x_extent)
602 {
603 bool found;
36cb9ebe 604 const char* errmsg = "DrawTab should return a sequence containing (tab_rect, button_rect, x_extent)";
2db4b82e
RD
605 wxPyBlock_t blocked = wxPyBeginBlockThreads();
606 if ((found = wxPyCBH_findCallback(m_myInst, "DrawTab"))) {
d95b9f2b 607 PyObject* odc = wxPyMake_wxObject(&dc, false);
54af9b8b 608 PyObject* ownd = wxPyMake_wxObject(wnd, false);
81fd0478 609 PyObject* opane = wxPyConstructObject((void*)&pane, wxT("wxAuiNotebookPage"), 0);
2db4b82e 610 PyObject* orect = wxPyConstructObject((void*)&in_rect, wxT("wxRect"), 0);
2db4b82e 611 PyObject* ro;
2a783b2d 612 ro = wxPyCBH_callCallbackObj(m_myInst, Py_BuildValue(
bce16979 613 "(OOOOOii)",
81fd0478
KO
614 odc, ownd, orect, opane,
615 close_button_state));
2db4b82e 616 if (ro) {
36cb9ebe 617 if (PySequence_Check(ro) && PyObject_Length(ro) == 3) {
2db4b82e
RD
618 PyObject* o1 = PySequence_GetItem(ro, 0);
619 PyObject* o2 = PySequence_GetItem(ro, 1);
36cb9ebe
RD
620 PyObject* o3 = PySequence_GetItem(ro, 2);
621 if (!wxRect_helper(o1, &out_tab_rect))
2db4b82e 622 PyErr_SetString(PyExc_TypeError, errmsg);
36cb9ebe
RD
623 else if (!wxRect_helper(o2, &out_button_rect))
624 PyErr_SetString(PyExc_TypeError, errmsg);
625 else if (!PyInt_Check(o3))
2db4b82e
RD
626 PyErr_SetString(PyExc_TypeError, errmsg);
627 else
36cb9ebe 628 *x_extent = PyInt_AsLong(o3);
2db4b82e
RD
629
630 Py_DECREF(o1);
631 Py_DECREF(o2);
36cb9ebe 632 Py_DECREF(o3);
2db4b82e
RD
633 }
634 else {
635 PyErr_SetString(PyExc_TypeError, errmsg);
636 }
637 Py_DECREF(ro);
638 }
639
640 Py_DECREF(odc);
54af9b8b 641 Py_DECREF(ownd);
2db4b82e 642 Py_DECREF(orect);
81fd0478 643 Py_DECREF(opane);
2db4b82e
RD
644 }
645 wxPyEndBlockThreads(blocked);
646 if (!found)
81fd0478 647 wxAuiDefaultTabArt::DrawTab(dc, wnd, pane, in_rect, close_button_state, out_tab_rect, out_button_rect, x_extent);
2db4b82e
RD
648 }
649
650
d95b9f2b 651 virtual void DrawButton( wxDC& dc,
54af9b8b 652 wxWindow* wnd,
8f514ab4
RD
653 const wxRect& in_rect,
654 int bitmap_id,
655 int button_state,
656 int orientation,
8f514ab4
RD
657 wxRect* out_rect)
658 {
659 bool found;
660 const char* errmsg = "DrawButton should return a wxRect";
661 wxPyBlock_t blocked = wxPyBeginBlockThreads();
662 if ((found = wxPyCBH_findCallback(m_myInst, "DrawButton"))) {
d95b9f2b 663 PyObject* odc = wxPyMake_wxObject(&dc, false);
54af9b8b 664 PyObject* ownd = wxPyMake_wxObject(wnd, false);
8f514ab4 665 PyObject* orect = wxPyConstructObject((void*)&in_rect, wxT("wxRect"), 0);
8f514ab4 666 PyObject* ro;
54af9b8b 667 ro = wxPyCBH_callCallbackObj(m_myInst, Py_BuildValue("(OOOiiiO)", odc, ownd, orect,
81fd0478 668 bitmap_id, button_state, orientation));
8f514ab4
RD
669 if (ro) {
670 if (!wxRect_helper(ro, &out_rect))
671 PyErr_SetString(PyExc_TypeError, errmsg);
672 Py_DECREF(ro);
673 }
674
675 Py_DECREF(odc);
54af9b8b 676 Py_DECREF(ownd);
8f514ab4 677 Py_DECREF(orect);
8f514ab4
RD
678 }
679 wxPyEndBlockThreads(blocked);
680 if (!found)
81fd0478 681 wxAuiDefaultTabArt::DrawButton(dc, wnd, in_rect, bitmap_id, button_state, orientation, out_rect);
8f514ab4
RD
682 }
683
54af9b8b 684
d95b9f2b 685 virtual wxSize GetTabSize( wxDC& dc,
54af9b8b 686 wxWindow* wnd,
8f514ab4 687 const wxString& caption,
bce16979 688 const wxBitmap& bitmap,
8f514ab4 689 bool active,
36cb9ebe 690 int close_button_state,
8f514ab4
RD
691 int* x_extent)
692 {
693 bool found;
694 wxSize rv, *prv = &rv;
695 const char* errmsg = "GetTabSize should return a sequence containing (size, x_extent)";
696 wxPyBlock_t blocked = wxPyBeginBlockThreads();
697 if ((found = wxPyCBH_findCallback(m_myInst, "GetTabSize"))) {
d95b9f2b 698 PyObject* odc = wxPyMake_wxObject(&dc, false);
54af9b8b 699 PyObject* ownd = wxPyMake_wxObject(wnd, false);
8f514ab4 700 PyObject* otext = wx2PyString(caption);
bce16979 701 PyObject* obmp = wxPyMake_wxObject((wxObject*)&bitmap, false);
8f514ab4 702 PyObject* ro;
2a783b2d 703 ro = wxPyCBH_callCallbackObj(m_myInst, Py_BuildValue(
bce16979 704 "(OOOOii)", odc, ownd, otext, obmp, (int)active, close_button_state));
8f514ab4
RD
705 if (ro) {
706 if (PySequence_Check(ro) && PyObject_Length(ro) == 2) {
707 PyObject* o1 = PySequence_GetItem(ro, 0);
708 PyObject* o2 = PySequence_GetItem(ro, 1);
709 if (!wxSize_helper(o1, &prv))
710 PyErr_SetString(PyExc_TypeError, errmsg);
711 else if (!PyInt_Check(o2))
712 PyErr_SetString(PyExc_TypeError, errmsg);
713 else
714 *x_extent = PyInt_AsLong(o2);
715
716 Py_DECREF(o1);
717 Py_DECREF(o2);
718 }
719 else {
720 PyErr_SetString(PyExc_TypeError, errmsg);
721 }
722 Py_DECREF(ro);
723 }
724
725 Py_DECREF(odc);
54af9b8b 726 Py_DECREF(ownd);
8f514ab4 727 Py_DECREF(otext);
bce16979 728 Py_DECREF(obmp);
8f514ab4
RD
729 }
730 wxPyEndBlockThreads(blocked);
731 if (!found)
bce16979 732 rv = wxAuiDefaultTabArt::GetTabSize(dc, wnd, caption, bitmap, active, close_button_state, x_extent);
8f514ab4
RD
733 return rv;
734 }
54af9b8b 735
d95b9f2b 736// TODO
81fd0478 737// virtual int ShowDropDown(
d95b9f2b 738// wxWindow* wnd,
81fd0478 739// const wxAuiNotebookPageArray& items,
d95b9f2b 740// int active_idx);
81fd0478
KO
741
742// virtual int GetIndentSize();
743
bce16979 744// virtual int GetBestTabCtrlSize(wxWindow* wnd,
81fd0478
KO
745// const wxAuiNotebookPageArray& pages,
746// const wxSize& required_bmp_size);
bce16979
RD
747// virtual wxAuiTabArt* Clone();
748// virtual void SetFlags(unsigned int flags);
749// virtual void SetSizingInfo(const wxSize& tab_ctrl_size,
750// size_t tab_count);
751// virtual int GetIndentSize();
752
d95b9f2b 753
8f514ab4 754
2db4b82e
RD
755 DEC_PYCALLBACK__FONT(SetNormalFont);
756 DEC_PYCALLBACK__FONT(SetSelectedFont);
757 DEC_PYCALLBACK__FONT(SetMeasuringFont);
758
759 PYPRIVATE;
760};
761
762
2a783b2d
RD
763IMP_PYCALLBACK__FONT(wxPyAuiTabArt, wxAuiDefaultTabArt, SetNormalFont);
764IMP_PYCALLBACK__FONT(wxPyAuiTabArt, wxAuiDefaultTabArt, SetSelectedFont);
765IMP_PYCALLBACK__FONT(wxPyAuiTabArt, wxAuiDefaultTabArt, SetMeasuringFont);
2db4b82e
RD
766%}
767
768
2a783b2d 769DocStr(wxPyAuiTabArt,
2db4b82e
RD
770"This version of the `TabArt` class has been instrumented to be
771subclassable in Python and to reflect all calls to the C++ base class
772methods to the Python methods implemented in the derived class.", "");
773
2a783b2d 774class wxPyAuiTabArt : public wxAuiDefaultTabArt
2db4b82e 775{
3c69a2ec 776public:
c25f90f6 777 %pythonAppend wxPyAuiTabArt setCallbackInfo(PyAuiTabArt)
2a783b2d 778 wxPyAuiTabArt();
2db4b82e 779
8f7ed3f3 780 void _setCallbackInfo(PyObject* self, PyObject* _class);
2db4b82e
RD
781};
782
783
777e547f 784//---------------------------------------------------------------------------
febb39df 785
febb39df 786