1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: Wrappers for the wxAUI classes.
7 // Created: 5-July-2006
9 // Copyright: (c) 2006 by Total Control Software
10 // Licence: wxWindows license
11 /////////////////////////////////////////////////////////////////////////////
14 "The wx.aui moduleis an Advanced User Interface library that aims to
15 implement \"cutting-edge\" interface usability and design features so
16 developers can quickly and easily create beautiful and usable
17 application interfaces.
19 **Vision and Design Principles**
21 wx.aui attempts to encapsulate the following aspects of the user
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.
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.
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.
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
47 **wx.aui adheres to the following principles**
49 - Use native floating frames to obtain a native look and feel for
52 - Use existing wxPython code where possible, such as sizer
53 implementation for frame management;
55 - Use standard wxPython coding conventions.
60 The following example shows a simple implementation that utilizes
61 `wx.aui.FrameManager` to manage three text controls in a frame window::
66 class MyFrame(wx.Frame):
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)
72 self._mgr = wx.aui.AuiManager(self)
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)
79 text2 = wx.TextCtrl(self, -1, 'Pane 2 - sample text',
80 wx.DefaultPosition, wx.Size(200,150),
81 wx.NO_BORDER | wx.TE_MULTILINE)
83 text3 = wx.TextCtrl(self, -1, 'Main content window',
84 wx.DefaultPosition, wx.Size(200,150),
85 wx.NO_BORDER | wx.TE_MULTILINE)
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)
92 # tell the manager to 'commit' all the changes just made
95 self.Bind(wx.EVT_CLOSE, self.OnClose)
98 def OnClose(self, event):
99 # deinitialize the frame manager
106 frame = MyFrame(None)
114 %module(package="wx", docstring=DOCSTRING) aui
117 #include "wx/wxPython/wxPython.h"
118 #include "wx/wxPython/pyclasses.h"
119 #include <wx/aui/aui.h>
122 //---------------------------------------------------------------------------
127 %pythoncode { wx = _core }
128 %pythoncode { __docfilter__ = wx.__DocFilter(globals()) }
131 %include _aui_docstrings.i
133 //---------------------------------------------------------------------------
135 // Preprocessor stuff so SWIG doesn't get confused when %include-ing
139 %ignore wxABI_VERSION;
141 #define wxUSE_MENUS 1
142 #define wxABI_VERSION 99999
144 #define WXDLLIMPEXP_AUI
146 #define wxDEPRECATED(decl)
147 #define DECLARE_EVENT_TABLE()
148 #define DECLARE_DYNAMIC_CLASS(foo)
152 // We'll skip making wrappers for these, they have overloads that take a
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);
160 // But for these we will do the overloading (see %pythoncode below) so let's
161 // rename the C++ versions
162 %rename(_GetPaneByWidget) wxAuiManager::GetPane(wxWindow* window);
163 %rename(_GetPaneByName) wxAuiManager::GetPane(const wxString& name);
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);
169 %rename(AddPaneAtPos) wxAuiManager::AddPane(wxWindow* window,
170 const wxPaneInfo& pane_info,
171 const wxPoint& drop_pos);
173 // A typemap for the return value of wxFrameManager::GetAllPanes
174 %typemap(out) wxAuiPaneInfoArray& {
175 $result = PyList_New(0);
176 for (size_t i=0; i < $1->GetCount(); i++) {
177 PyObject* pane_obj = SWIG_NewPointerObj((void*)(&$1->Item(i)), SWIGTYPE_p_wxAuiPaneInfo, 0);
178 PyList_Append($result, pane_obj);
183 %nokwargs wxAuiTabContainer::SetActivePage;
185 %pythonAppend wxAuiTabCtrl::wxAuiTabCtrl "self._setOORInfo(self)";
187 %pythonAppend wxAuiNotebook::wxAuiNotebook "self._setOORInfo(self)";
188 %pythonAppend wxAuiNotebook::wxAuiNotebook() "val._setOORInfo(val)";
189 %ignore wxAuiiNotebook::~wxAuiNotebook;
190 %rename(PreAuiNotebook) wxAuiNotebook::wxAuiNotebook();
193 %ignore wxAuiDefaultTabArt::SetWindow;
195 // ignore this overload
196 %ignore wxAuiTabContainer::GetPage(size_t idx) const;
200 %pythonAppend wxAuiMDIParentFrame::wxAuiMDIParentFrame "self._setOORInfo(self)";
201 %pythonAppend wxAuiMDIParentFrame::wxAuiMDIParentFrame() "val._setOORInfo(val)";
202 %ignore wxAuiMDIParentFrame::~wxAuiMDIParentFrame;
203 %rename(PreAuiMDIParentFrame) wxAuiMDIParentFrame::wxAuiMDIParentFrame();
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;
210 %pythonAppend wxAuiMDIChildFrame::wxAuiMDIChildFrame "self._setOORInfo(self)";
211 %pythonAppend wxAuiMDIChildFrame::wxAuiMDIChildFrame() "val._setOORInfo(val)";
212 %ignore wxAuiMDIChildFrame::~wxAuiMDIChildFrame;
213 %rename(PreAuiMDIChildFrame) wxAuiMDIChildFrame::wxAuiMDIChildFrame();
215 %pythonAppend wxAuiMDIClientWindow::wxAuiMDIClientWindow "self._setOORInfo(self)";
216 %pythonAppend wxAuiMDIClientWindow::wxAuiMDIClientWindow() "val._setOORInfo(val)";
217 %ignore wxAuiMDIClientWindow::~wxAuiMDIClientWindow;
218 %rename(PreAuiMDIClientWindow) wxAuiMDIClientWindow::wxAuiMDIClientWindow();
221 %typemap(out) wxEvtHandler* { $result = wxPyMake_wxObject($1, $owner); }
223 //---------------------------------------------------------------------------
224 // Get all our defs from the REAL header files.
226 #define wxColor wxColour // fix problem in dockart.h
228 %include framemanager.h
236 //---------------------------------------------------------------------------
237 // Methods to inject into the FrameManager class that will sort out calls to
238 // the overloaded versions of GetPane and AddPane
240 %extend wxAuiManager {
242 def GetPane(self, item):
244 GetPane(self, window_or_info item) -> PaneInfo
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.
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`.
257 if isinstance(item, wx.Window):
258 return self._GetPaneByWidget(item)
260 return self._GetPaneByName(item)
262 def AddPane(self, window, info=None, caption=None):
264 AddPane(self, window, info=None, caption=None) -> bool
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!)
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.
278 if type(info) == AuiPaneInfo:
279 return self._AddPane1(window, info)
286 return self._AddPane2(window, info, caption)
289 // For backwards compatibility
291 SetFrame = wx._deprecated(SetManagedWindow,
292 "SetFrame is deprecated, use `SetManagedWindow` instead.")
293 GetFrame = wx._deprecated(GetManagedWindow,
294 "GetFrame is deprecated, use `GetManagedWindow` instead.")
298 %extend wxAuiDockInfo {
302 %extend wxAuiDockUIPart {
303 ~wxAuiDockUIPart() {}
306 %extend wxAuiPaneButton {
307 ~wxAuiPaneButton() {}
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); }
315 %rename(GetNotebook) _GetNotebook;
316 %rename(GetActiveChild) _GetActiveChild;
317 %rename(GetClientWindow) _GetClientWindow;
319 wxAuiNotebook* _GetNotebook() const
321 return self->GetNotebook();
324 wxAuiMDIChildFrame* _GetActiveChild() const
326 return self->GetActiveChild();
329 wxAuiMDIClientWindow* _GetClientWindow() const
331 return self->GetClientWindow();
334 %typemap(out) wxAuiNotebook*;
335 %typemap(out) wxAuiMDIChildFrame*;
336 %typemap(out) wxAuiMDIClientWindow*;
340 //---------------------------------------------------------------------------
343 // A wxDocArt class that knows how to forward virtuals to Python methods
344 class wxPyAuiDockArt : public wxAuiDefaultDockArt
347 wxPyAuiDockArt() : wxAuiDefaultDockArt() {}
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);
356 virtual void DrawSash(wxDC& dc,
362 wxPyBlock_t blocked = wxPyBeginBlockThreads();
363 if ((found = wxPyCBH_findCallback(m_myInst, "DrawSash"))) {
364 PyObject* odc = wxPyMake_wxObject(&dc, false);
365 PyObject* owin = wxPyMake_wxObject(window, false);
366 PyObject* orect = wxPyConstructObject((void*)&rect, wxT("wxRect"), 0);
367 wxPyCBH_callCallback(m_myInst, Py_BuildValue("(OOiO)",
368 odc, owin, orientation, orect));
373 wxPyEndBlockThreads(blocked);
375 wxAuiDefaultDockArt::DrawSash(dc, window, orientation, rect);
378 virtual void DrawBackground(wxDC& dc,
384 wxPyBlock_t blocked = wxPyBeginBlockThreads();
385 if ((found = wxPyCBH_findCallback(m_myInst, "DrawBackground"))) {
386 PyObject* odc = wxPyMake_wxObject(&dc, false);
387 PyObject* owin = wxPyMake_wxObject(window, false);
388 PyObject* orect = wxPyConstructObject((void*)&rect, wxT("wxRect"), 0);
389 wxPyCBH_callCallback(m_myInst, Py_BuildValue("(OOiO)",
390 odc, owin, orientation, orect));
395 wxPyEndBlockThreads(blocked);
397 wxAuiDefaultDockArt::DrawBackground(dc, window, orientation, rect);
400 virtual void DrawCaption(wxDC& dc,
402 const wxString& text,
407 wxPyBlock_t blocked = wxPyBeginBlockThreads();
408 if ((found = wxPyCBH_findCallback(m_myInst, "DrawCaption"))) {
409 PyObject* odc = wxPyMake_wxObject(&dc, false);
410 PyObject* owin = wxPyMake_wxObject(window, false);
411 PyObject* otext = wx2PyString(text);
412 PyObject* orect = wxPyConstructObject((void*)&rect, wxT("wxRect"), 0);
413 PyObject* opane = wxPyConstructObject((void*)&pane, wxT("wxAuiPaneInfo"), 0);
414 wxPyCBH_callCallback(m_myInst, Py_BuildValue("(OOOOO)",
415 odc, owin, otext, orect, opane));
422 wxPyEndBlockThreads(blocked);
424 wxAuiDefaultDockArt::DrawCaption(dc, window, text, rect, pane);
427 virtual void DrawGripper(wxDC& dc,
433 wxPyBlock_t blocked = wxPyBeginBlockThreads();
434 if ((found = wxPyCBH_findCallback(m_myInst, "DrawGripper"))) {
435 PyObject* odc = wxPyMake_wxObject(&dc, false);
436 PyObject* owin = wxPyMake_wxObject(window, false);
437 PyObject* orect = wxPyConstructObject((void*)&rect, wxT("wxRect"), 0);
438 PyObject* opane = wxPyConstructObject((void*)&pane, wxT("wxAuiPaneInfo"), 0);
439 wxPyCBH_callCallback(m_myInst, Py_BuildValue("(OOOO)", odc, owin, orect, opane));
444 wxPyEndBlockThreads(blocked);
446 wxAuiDefaultDockArt::DrawGripper(dc, window, rect, pane);
449 virtual void DrawBorder(wxDC& dc,
455 wxPyBlock_t blocked = wxPyBeginBlockThreads();
456 if ((found = wxPyCBH_findCallback(m_myInst, "DrawBorder"))) {
457 PyObject* odc = wxPyMake_wxObject(&dc, false);
458 PyObject* owin = wxPyMake_wxObject(window, false);
459 PyObject* orect = wxPyConstructObject((void*)&rect, wxT("wxRect"), 0);
460 PyObject* opane = wxPyConstructObject((void*)&pane, wxT("wxAuiPaneInfo"), 0);
461 wxPyCBH_callCallback(m_myInst, Py_BuildValue("(OOO)", odc, orect, opane));
467 wxPyEndBlockThreads(blocked);
469 wxAuiDefaultDockArt::DrawBorder(dc, window, rect, pane);
472 virtual void DrawPaneButton(wxDC& dc,
480 wxPyBlock_t blocked = wxPyBeginBlockThreads();
481 if ((found = wxPyCBH_findCallback(m_myInst, "DrawPaneButton"))) {
482 PyObject* odc = wxPyMake_wxObject(&dc, false);
483 PyObject* owin = wxPyMake_wxObject(window, false);
484 PyObject* orect = wxPyConstructObject((void*)&rect, wxT("wxRect"), 0);
485 PyObject* opane = wxPyConstructObject((void*)&pane, wxT("wxAuiPaneInfo"), 0);
486 wxPyCBH_callCallback(m_myInst, Py_BuildValue("(OOiIOO)",
487 odc, owin, button, button_state,
494 wxPyEndBlockThreads(blocked);
496 wxAuiDefaultDockArt::DrawPaneButton(dc, window, button, button_state, rect, pane);
503 IMP_PYCALLBACK_INT_INT(wxPyAuiDockArt, wxAuiDefaultDockArt, GetMetric);
504 IMP_PYCALLBACK_VOID_INTINT(wxPyAuiDockArt, wxAuiDefaultDockArt, SetMetric);
505 IMP_PYCALLBACK__INTFONT(wxPyAuiDockArt, wxAuiDefaultDockArt, SetFont);
506 IMP_PYCALLBACK_FONT_INT(wxPyAuiDockArt, wxAuiDefaultDockArt, GetFont);
507 IMP_PYCALLBACK_COLOUR_INT(wxPyAuiDockArt, wxAuiDefaultDockArt, GetColour);
508 IMP_PYCALLBACK__INTCOLOUR(wxPyAuiDockArt, wxAuiDefaultDockArt, SetColour);
513 DocStr(wxPyAuiDockArt,
514 "This version of the `AuiDockArt` class has been instrumented to be
515 subclassable in Python and to reflect all calls to the C++ base class
516 methods to the Python methods implemented in the derived class.", "");
518 class wxPyAuiDockArt : public wxAuiDefaultDockArt
521 %pythonAppend wxPyAuiDockArt setCallbackInfo(PyAuiDockArt)
524 void _setCallbackInfo(PyObject* self, PyObject* _class);
528 //---------------------------------------------------------------------------
530 %extend wxAuiNotebook {
531 %property(PageCount, GetPageCount, doc="See `GetPageCount`");
532 %property(Selection, GetSelection, SetSelection, doc="See `GetSelection` and `SetSelection`");
536 %extend wxAuiNotebookEvent {
537 %property(OldSelection, GetOldSelection, SetOldSelection, doc="See `GetOldSelection` and `SetOldSelection`");
538 %property(Selection, GetSelection, SetSelection, doc="See `GetSelection` and `SetSelection`");
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`");
549 %extend wxAuiManager {
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`");
557 %extend wxAuiManagerEvent {
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`");
564 //---------------------------------------------------------------------------
567 // A wxTabArt class that knows how to forward virtuals to Python methods
568 class wxPyAuiTabArt : public wxAuiDefaultTabArt
571 wxPyAuiTabArt() : wxAuiDefaultTabArt() {}
574 virtual void DrawBackground( wxDC& dc,
579 wxPyBlock_t blocked = wxPyBeginBlockThreads();
580 if ((found = wxPyCBH_findCallback(m_myInst, "DrawBackground"))) {
581 PyObject* odc = wxPyMake_wxObject(&dc, false);
582 PyObject* ownd = wxPyMake_wxObject(wnd, false);
583 PyObject* orect = wxPyConstructObject((void*)&rect, wxT("wxRect"), 0);
584 wxPyCBH_callCallback(m_myInst, Py_BuildValue("(OOO)", odc, ownd, orect));
589 wxPyEndBlockThreads(blocked);
591 wxAuiDefaultTabArt::DrawBackground(dc, wnd, rect);
594 virtual void DrawTab( wxDC& dc,
596 const wxAuiNotebookPage& pane,
597 const wxRect& in_rect,
598 int close_button_state,
599 wxRect* out_tab_rect,
600 wxRect* out_button_rect,
604 const char* errmsg = "DrawTab should return a sequence containing (tab_rect, button_rect, x_extent)";
605 wxPyBlock_t blocked = wxPyBeginBlockThreads();
606 if ((found = wxPyCBH_findCallback(m_myInst, "DrawTab"))) {
607 PyObject* odc = wxPyMake_wxObject(&dc, false);
608 PyObject* ownd = wxPyMake_wxObject(wnd, false);
609 PyObject* opane = wxPyConstructObject((void*)&pane, wxT("wxAuiNotebookPage"), 0);
610 PyObject* orect = wxPyConstructObject((void*)&in_rect, wxT("wxRect"), 0);
612 ro = wxPyCBH_callCallbackObj(m_myInst, Py_BuildValue(
614 odc, ownd, orect, opane,
615 close_button_state));
617 if (PySequence_Check(ro) && PyObject_Length(ro) == 3) {
618 PyObject* o1 = PySequence_GetItem(ro, 0);
619 PyObject* o2 = PySequence_GetItem(ro, 1);
620 PyObject* o3 = PySequence_GetItem(ro, 2);
621 if (!wxRect_helper(o1, &out_tab_rect))
622 PyErr_SetString(PyExc_TypeError, errmsg);
623 else if (!wxRect_helper(o2, &out_button_rect))
624 PyErr_SetString(PyExc_TypeError, errmsg);
625 else if (!PyInt_Check(o3))
626 PyErr_SetString(PyExc_TypeError, errmsg);
628 *x_extent = PyInt_AsLong(o3);
635 PyErr_SetString(PyExc_TypeError, errmsg);
645 wxPyEndBlockThreads(blocked);
647 wxAuiDefaultTabArt::DrawTab(dc, wnd, pane, in_rect, close_button_state, out_tab_rect, out_button_rect, x_extent);
651 virtual void DrawButton( wxDC& dc,
653 const wxRect& in_rect,
660 const char* errmsg = "DrawButton should return a wxRect";
661 wxPyBlock_t blocked = wxPyBeginBlockThreads();
662 if ((found = wxPyCBH_findCallback(m_myInst, "DrawButton"))) {
663 PyObject* odc = wxPyMake_wxObject(&dc, false);
664 PyObject* ownd = wxPyMake_wxObject(wnd, false);
665 PyObject* orect = wxPyConstructObject((void*)&in_rect, wxT("wxRect"), 0);
667 ro = wxPyCBH_callCallbackObj(m_myInst, Py_BuildValue("(OOOiiiO)", odc, ownd, orect,
668 bitmap_id, button_state, orientation));
670 if (!wxRect_helper(ro, &out_rect))
671 PyErr_SetString(PyExc_TypeError, errmsg);
679 wxPyEndBlockThreads(blocked);
681 wxAuiDefaultTabArt::DrawButton(dc, wnd, in_rect, bitmap_id, button_state, orientation, out_rect);
685 virtual wxSize GetTabSize( wxDC& dc,
687 const wxString& caption,
688 const wxBitmap& bitmap,
690 int close_button_state,
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"))) {
698 PyObject* odc = wxPyMake_wxObject(&dc, false);
699 PyObject* ownd = wxPyMake_wxObject(wnd, false);
700 PyObject* otext = wx2PyString(caption);
701 PyObject* obmp = wxPyMake_wxObject((wxObject*)&bitmap, false);
703 ro = wxPyCBH_callCallbackObj(m_myInst, Py_BuildValue(
704 "(OOOOii)", odc, ownd, otext, obmp, (int)active, close_button_state));
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);
714 *x_extent = PyInt_AsLong(o2);
720 PyErr_SetString(PyExc_TypeError, errmsg);
730 wxPyEndBlockThreads(blocked);
732 rv = wxAuiDefaultTabArt::GetTabSize(dc, wnd, caption, bitmap, active, close_button_state, x_extent);
737 // virtual int ShowDropDown(
739 // const wxAuiNotebookPageArray& items,
742 // virtual int GetIndentSize();
744 // virtual int GetBestTabCtrlSize(wxWindow* wnd,
745 // const wxAuiNotebookPageArray& pages,
746 // const wxSize& required_bmp_size);
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();
755 DEC_PYCALLBACK__FONT(SetNormalFont);
756 DEC_PYCALLBACK__FONT(SetSelectedFont);
757 DEC_PYCALLBACK__FONT(SetMeasuringFont);
763 IMP_PYCALLBACK__FONT(wxPyAuiTabArt, wxAuiDefaultTabArt, SetNormalFont);
764 IMP_PYCALLBACK__FONT(wxPyAuiTabArt, wxAuiDefaultTabArt, SetSelectedFont);
765 IMP_PYCALLBACK__FONT(wxPyAuiTabArt, wxAuiDefaultTabArt, SetMeasuringFont);
769 DocStr(wxPyAuiTabArt,
770 "This version of the `TabArt` class has been instrumented to be
771 subclassable in Python and to reflect all calls to the C++ base class
772 methods to the Python methods implemented in the derived class.", "");
774 class wxPyAuiTabArt : public wxAuiDefaultTabArt
777 %pythonAppend wxPyAuiTabArt setCallbackInfo(PyAuiTabArt)
780 void _setCallbackInfo(PyObject* self, PyObject* _class);
784 //---------------------------------------------------------------------------