X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1fded56b375bf7a4687af1cdb182899614c1b2a8..a8cb1a4947bbbf5e18ce52448f4c3bb4cff4daee:/wxPython/contrib/gizmos/gizmos.i diff --git a/wxPython/contrib/gizmos/gizmos.i b/wxPython/contrib/gizmos/gizmos.i index e677f65e8c..2a3821483a 100644 --- a/wxPython/contrib/gizmos/gizmos.i +++ b/wxPython/contrib/gizmos/gizmos.i @@ -10,57 +10,61 @@ // Licence: wxWindows license ///////////////////////////////////////////////////////////////////////////// -%module gizmos +%define DOCSTRING +"Various *gizmo* classes: `DynamicSashWindow`, `EditableListBox`, +`LEDNumberCtrl`, `TreeListCtrl`, etc." +%enddef + +%module(package="wx", docstring=DOCSTRING) gizmos %{ -#include "wxPython.h" +#include "wx/wxPython/wxPython.h" +#include "wx/wxPython/pyclasses.h" + #include #include #include #include +#include #include #include #include -#include "treelistctrl.h" -#include "pytree.h" + +#include "wx/treelistctrl.h" +#include "wx/wxPython/pytree.h" + %} //--------------------------------------------------------------------------- -%include typemaps.i -%include my_typemaps.i +%import windows.i +%import controls.i +%pythoncode { import wx } +%pythoncode { __docfilter__ = wx._core.__DocFilter(globals()) } -%extern wx.i -%extern windows.i -%extern _defs.i -%extern events.i -%extern controls.i -%extern controls2.i -%extern gdi.i +MAKE_CONST_WXSTRING2(DynamicSashNameStr, wxT("dynamicSashWindow")); +MAKE_CONST_WXSTRING2(EditableListBoxNameStr, wxT("editableListBox")); +MAKE_CONST_WXSTRING2(TreeListCtrlNameStr, wxT("treelistctrl")); +MAKE_CONST_WXSTRING(StaticPictureNameStr); + +MAKE_CONST_WXSTRING_NOSWIG(EmptyString); -//---------------------------------------------------------------------- -%{ - // Put some wx default wxChar* values into wxStrings. - static const wxString wxPyDynamicSashNameStr(wxT("dynamicSashWindow")); - static const wxString wxPyEditableListBoxNameStr(wxT("editableListBox")); - static const wxString wxPyTreeListCtrlNameStr(wxT("treelistctrl")); - static const wxString wxPyEmptyString(wxT("")); -%} +%include _gizmos_rename.i -///---------------------------------------------------------------------- +//--------------------------------------------------------------------------- enum { - wxEVT_DYNAMIC_SASH_SPLIT, - wxEVT_DYNAMIC_SASH_UNIFY, - wxDS_MANAGE_SCROLLBARS, wxDS_DRAG_CORNER, }; +%constant wxEventType wxEVT_DYNAMIC_SASH_SPLIT; +%constant wxEventType wxEVT_DYNAMIC_SASH_UNIFY; + /* wxDynamicSashSplitEvents are sent to your view by wxDynamicSashWindow @@ -137,41 +141,37 @@ public: */ +MustHaveApp(wxDynamicSashWindow); + class wxDynamicSashWindow : public wxWindow { public: - wxDynamicSashWindow(wxWindow *parent, wxWindowID id, + %pythonAppend wxDynamicSashWindow "self._setOORInfo(self)" + %pythonAppend wxDynamicSashWindow() "" + + wxDynamicSashWindow(wxWindow *parent, wxWindowID id=-1, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxCLIP_CHILDREN | wxDS_MANAGE_SCROLLBARS | wxDS_DRAG_CORNER, const wxString& name = wxPyDynamicSashNameStr); - %name(wxPreDynamicSashWindow)wxDynamicSashWindow(); + %RenameCtor(PreDynamicSashWindow, wxDynamicSashWindow()); - bool Create(wxWindow *parent, wxWindowID id, + bool Create(wxWindow *parent, wxWindowID id=-1, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxCLIP_CHILDREN | wxDS_MANAGE_SCROLLBARS | wxDS_DRAG_CORNER, const wxString& name = wxPyDynamicSashNameStr); - %pragma(python) addtomethod = "__init__:self._setOORInfo(self)" - %pragma(python) addtomethod = "wxPreDynamicSashWindow:val._setOORInfo(val)" - wxScrollBar *GetHScrollBar(const wxWindow *child) const; wxScrollBar *GetVScrollBar(const wxWindow *child) const; }; -//---------------------------------------------------------------------- -// Python functions to act like the event macros - -%pragma(python) code = " -def EVT_DYNAMIC_SASH_SPLIT(win, id, func): - win.Connect(id, -1, wxEVT_DYNAMIC_SASH_SPLIT, func) - -def EVT_DYNAMIC_SASH_UNIFY(win, id, func): - win.Connect(id, -1, wxEVT_DYNAMIC_SASH_UNIFY, func) -" +%pythoncode { +EVT_DYNAMIC_SASH_SPLIT = wx.PyEventBinder( wxEVT_DYNAMIC_SASH_SPLIT, 1 ) +EVT_DYNAMIC_SASH_UNIFY = wx.PyEventBinder( wxEVT_DYNAMIC_SASH_UNIFY, 1 ) +} -//---------------------------------------------------------------------- -//---------------------------------------------------------------------- +//--------------------------------------------------------------------------- +//--------------------------------------------------------------------------- enum { wxEL_ALLOW_NEW, @@ -181,22 +181,25 @@ enum { // This class provides a composite control that lets the // user easily enter list of strings +MustHaveApp(wxEditableListBox); class wxEditableListBox : public wxPanel { public: - wxEditableListBox(wxWindow *parent, wxWindowID id, - const wxString& label, + %pythonAppend wxEditableListBox "self._setOORInfo(self)" + %pythonAppend wxEditableListBox() "" + + wxEditableListBox(wxWindow *parent, wxWindowID id=-1, + const wxString& label = wxPyEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxEL_ALLOW_NEW | wxEL_ALLOW_EDIT | wxEL_ALLOW_DELETE, const wxString& name = wxPyEditableListBoxNameStr); - %pragma(python) addtomethod = "__init__:self._setOORInfo(self)" void SetStrings(const wxArrayString& strings); //void GetStrings(wxArrayString& strings); - %addmethods { + %extend { PyObject* GetStrings() { wxArrayString strings; self->GetStrings(strings); @@ -204,17 +207,17 @@ public: } } - wxListCtrl* GetListCtrl() { return m_listCtrl; } - wxBitmapButton* GetDelButton() { return m_bDel; } - wxBitmapButton* GetNewButton() { return m_bNew; } - wxBitmapButton* GetUpButton() { return m_bUp; } - wxBitmapButton* GetDownButton() { return m_bDown; } - wxBitmapButton* GetEditButton() { return m_bEdit; } + wxPyListCtrl* GetListCtrl(); + wxBitmapButton* GetDelButton(); + wxBitmapButton* GetNewButton(); + wxBitmapButton* GetUpButton(); + wxBitmapButton* GetDownButton(); + wxBitmapButton* GetEditButton(); }; -//---------------------------------------------------------------------- +//--------------------------------------------------------------------------- /* @@ -229,14 +232,18 @@ public: typedef wxTreeCtrl wxPyTreeCtrl; %} +MustHaveApp(wxRemotelyScrolledTreeCtrl); + class wxRemotelyScrolledTreeCtrl: public wxPyTreeCtrl { public: + %pythonAppend wxRemotelyScrolledTreeCtrl "self._setOORInfo(self)" + %pythonAppend wxRemotelyScrolledTreeCtrl() "" + wxRemotelyScrolledTreeCtrl(wxWindow* parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxTR_HAS_BUTTONS); - %pragma(python) addtomethod = "__init__:self._setOORInfo(self)" void HideVScrollbar(); @@ -278,17 +285,17 @@ public: virtual void DrawItem(wxDC& dc, wxTreeItemId id, const wxRect& rect) { bool found; - wxPyBeginBlockThreads(); + wxPyBlock_t blocked = wxPyBeginBlockThreads(); if ((found = wxPyCBH_findCallback(m_myInst, "DrawItem"))) { - PyObject* dcobj = wxPyMake_wxObject(&dc); - PyObject* idobj = wxPyConstructObject((void*)&id, wxT("wxTreeItemId"), FALSE); - PyObject* recobj= wxPyConstructObject((void*)&rect, wxT("wxRect"), FALSE); + PyObject* dcobj = wxPyMake_wxObject(&dc,false); + PyObject* idobj = wxPyConstructObject((void*)&id, wxT("wxTreeItemId"), false); + PyObject* recobj= wxPyConstructObject((void*)&rect, wxT("wxRect"), false); wxPyCBH_callCallback(m_myInst, Py_BuildValue("(OOO)", dcobj, idobj, recobj)); Py_DECREF(dcobj); Py_DECREF(idobj); Py_DECREF(recobj); } - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); if (! found) wxTreeCompanionWindow::DrawItem(dc, id, rect); } @@ -298,16 +305,20 @@ public: %} -%name(wxTreeCompanionWindow) class wxPyTreeCompanionWindow: public wxWindow +MustHaveApp(wxPyTreeCompanionWindow); + +%rename(TreeCompanionWindow) wxPyTreeCompanionWindow; +class wxPyTreeCompanionWindow: public wxWindow { public: + %pythonAppend wxPyTreeCompanionWindow "self._setOORInfo(self);self._setCallbackInfo(self, TreeCompanionWindow)" + %pythonAppend wxPyTreeCompanionWindow() "" + wxPyTreeCompanionWindow(wxWindow* parent, wxWindowID id = -1, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0); void _setCallbackInfo(PyObject* self, PyObject* _class); - %pragma(python) addtomethod = "__init__:self._setCallbackInfo(self, wxTreeCompanionWindow)" - %pragma(python) addtomethod = "__init__:self._setOORInfo(self)" wxRemotelyScrolledTreeCtrl* GetTreeCtrl() const; void SetTreeCtrl(wxRemotelyScrolledTreeCtrl* treeCtrl); @@ -322,18 +333,22 @@ public: * than the usual one. */ +MustHaveApp(wxThinSplitterWindow); + class wxThinSplitterWindow: public wxSplitterWindow { public: + %pythonAppend wxThinSplitterWindow "self._setOORInfo(self)" + %pythonAppend wxThinSplitterWindow() "" + wxThinSplitterWindow(wxWindow* parent, wxWindowID id = -1, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxSP_3D | wxCLIP_CHILDREN); - %pragma(python) addtomethod = "__init__:self._setOORInfo(self)" - }; + /* * wxSplitterScrolledWindow * @@ -343,19 +358,23 @@ public: * scroll appropriately. */ +MustHaveApp(wxSplitterScrolledWindow); + class wxSplitterScrolledWindow: public wxScrolledWindow { public: + %pythonAppend wxSplitterScrolledWindow "self._setOORInfo(self)" + %pythonAppend wxSplitterScrolledWindow() "" + wxSplitterScrolledWindow(wxWindow* parent, wxWindowID id = -1, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0); - %pragma(python) addtomethod = "__init__:self._setOORInfo(self)" }; -//---------------------------------------------------------------------- -//---------------------------------------------------------------------- +//--------------------------------------------------------------------------- +//--------------------------------------------------------------------------- enum wxLEDValueAlign @@ -370,28 +389,28 @@ enum wxLEDValueAlign }; +MustHaveApp(wxLEDNumberCtrl); + class wxLEDNumberCtrl : public wxControl { public: - // Constructors. + %pythonAppend wxLEDNumberCtrl "self._setOORInfo(self)" + %pythonAppend wxLEDNumberCtrl() "" + wxLEDNumberCtrl(wxWindow *parent, wxWindowID id = -1, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxLED_ALIGN_LEFT | wxLED_DRAW_FADED); - %name(wxPreLEDNumberCtrl) wxLEDNumberCtrl(); - - %pragma(python) addtomethod = "__init__:self._setOORInfo(self)" - %pragma(python) addtomethod = "wxPreLEDNumberCtrl:val._setOORInfo(val)" + %RenameCtor(PreLEDNumberCtrl, wxLEDNumberCtrl()); - // Create functions. bool Create(wxWindow *parent, wxWindowID id = -1, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxLED_ALIGN_LEFT | wxLED_DRAW_FADED); - wxLEDValueAlign GetAlignment() const { return m_Alignment; } - bool GetDrawFaded() const { return m_DrawFaded; } - const wxString &GetValue() const { return m_Value; } + wxLEDValueAlign GetAlignment() const; + bool GetDrawFaded() const; + const wxString &GetValue() const; void SetAlignment(wxLEDValueAlign Alignment, bool Redraw = true); void SetDrawFaded(bool DrawFaded, bool Redraw = true); @@ -418,6 +437,20 @@ enum { }; +enum { + // flags for FindItem + wxTL_SEARCH_VISIBLE, + wxTL_SEARCH_LEVEL, + wxTL_SEARCH_FULL, + wxTL_SEARCH_PARTIAL, + wxTL_SEARCH_NOCASE +}; + +enum { + // extra tree styles + wxTR_DONT_ADJUST_MAC +}; +%pythoncode { wx.TR_DONT_ADJUST_MAC = TR_DONT_ADJUST_MAC } class wxTreeListColumnInfo: public wxObject { @@ -425,14 +458,18 @@ public: wxTreeListColumnInfo(const wxString& text = wxPyEmptyString, int image = -1, size_t width = 100, + bool shown = true, wxTreeListColumnAlign alignment = wxTL_ALIGN_LEFT); + bool GetShown() const; wxTreeListColumnAlign GetAlignment() const; wxString GetText() const; int GetImage() const; int GetSelectedImage() const; size_t GetWidth() const; + // TODO: These all actually return wxTreeListColumnInfo&, any problem with doing it for Python too? + void SetShown(bool shown); void SetAlignment(wxTreeListColumnAlign alignment); void SetText(const wxString& text); void SetImage(int image); @@ -460,7 +497,7 @@ public: const wxTreeItemId& item2) { int rval = 0; bool found; - wxPyBeginBlockThreads(); + wxPyBlock_t blocked = wxPyBeginBlockThreads(); if ((found = wxPyCBH_findCallback(m_myInst, "OnCompareItems"))) { PyObject *o1 = wxPyConstructObject((void*)&item1, wxT("wxTreeItemId"), 0); PyObject *o2 = wxPyConstructObject((void*)&item2, wxT("wxTreeItemId"), 0); @@ -468,7 +505,7 @@ public: Py_DECREF(o1); Py_DECREF(o2); } - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); if (! found) rval = wxTreeListCtrl::OnCompareItems(item1, item2); return rval; @@ -483,24 +520,24 @@ IMPLEMENT_ABSTRACT_CLASS(wxPyTreeListCtrl, wxTreeListCtrl) -// These are for the GetFirstChild/GetNextChild methods below -%{ - static const long longzero = 0; -%} -%typemap(python, in) long& INOUT = long* INOUT; -%typemap(python, argout) long& INOUT = long* INOUT; -%name(wxTreeListCtrl) class wxPyTreeListCtrl : public wxControl +MustHaveApp(wxPyTreeListCtrl); + +%rename(TreeListCtrl) wxPyTreeListCtrl; +class wxPyTreeListCtrl : public wxControl { public: + %pythonAppend wxPyTreeListCtrl "self._setOORInfo(self);self._setCallbackInfo(self, TreeListCtrl)" + %pythonAppend wxPyTreeListCtrl() "" + wxPyTreeListCtrl(wxWindow *parent, wxWindowID id = -1, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxTR_DEFAULT_STYLE, const wxValidator &validator = wxDefaultValidator, const wxString& name = wxPyTreeListCtrlNameStr ); - %name(wxPreTreeListCtrl)wxPyTreeListCtrl(); + %RenameCtor(PreTreeListCtrl, wxPyTreeListCtrl()); bool Create(wxWindow *parent, wxWindowID id = -1, const wxPoint& pos = wxDefaultPosition, @@ -510,11 +547,6 @@ public: const wxString& name = wxPyTreeListCtrlNameStr ); void _setCallbackInfo(PyObject* self, PyObject* _class); - %pragma(python) addtomethod = "__init__:self._setCallbackInfo(self, wxTreeListCtrl)" - - %pragma(python) addtomethod = "__init__:self._setOORInfo(self)" - %pragma(python) addtomethod = "wxPreTreeListCtrl:val._setOORInfo(val)" - // get the total number of items in the control @@ -526,10 +558,6 @@ public: unsigned int GetIndent() const; void SetIndent(unsigned int indent); - // spacing is the number of pixels between the start and the Text - unsigned int GetSpacing() const; - void SetSpacing(unsigned int spacing); - // line spacing is the space above and below the text on each line unsigned int GetLineSpacing() const; void SetLineSpacing(unsigned int spacing); @@ -553,19 +581,24 @@ public: void SetImageList(wxImageList *imageList); void SetStateImageList(wxImageList *imageList); void SetButtonsImageList(wxImageList *imageList); + + %apply SWIGTYPE *DISOWN { wxImageList *imageList }; void AssignImageList(wxImageList *imageList); void AssignStateImageList(wxImageList *imageList); void AssignButtonsImageList(wxImageList *imageList); - + %clear wxImageList *imageList; // adds a column void AddColumn(const wxString& text); - %name(AddColumnInfo) void AddColumn(const wxTreeListColumnInfo& col); +// void AddColumn(const wxString& text, +// size_t width, +// wxTreeListColumnAlign alignment = wxTL_ALIGN_LEFT); + %Rename(AddColumnInfo, void, AddColumn(const wxTreeListColumnInfo& col)); // inserts a column before the given one void InsertColumn(size_t before, const wxString& text); - %name(InsertColumnInfo) void InsertColumn(size_t before, const wxTreeListColumnInfo& col); + %Rename(InsertColumnInfo, void, InsertColumn(size_t before, const wxTreeListColumnInfo& col)); // deletes the given column - does not delete the corresponding column // of each item @@ -594,8 +627,10 @@ public: void SetColumnImage(size_t column, int image); int GetColumnImage(size_t column) const; + void ShowColumn(size_t column, bool shown); + bool IsColumnShown(size_t column) const; - %addmethods { + %extend { // retrieves item's label of the given column (main column by default) wxString GetItemText(const wxTreeItemId& item, int column = -1) { if (column < 0) column = self->GetMainColumn(); @@ -641,9 +676,9 @@ public: self->SetItemData(item, data); } - // [Get|Set]PyData are short-cuts. Also made somewhat crash-proof by + // [Get|Set]ItemPyData are short-cuts. Also made somewhat crash-proof by // automatically creating data classes. - PyObject* GetPyData(const wxTreeItemId& item) { + PyObject* GetItemPyData(const wxTreeItemId& item) { wxPyTreeItemData* data = (wxPyTreeItemData*)self->GetItemData(item); if (data == NULL) { data = new wxPyTreeItemData(); @@ -653,7 +688,7 @@ public: return data->GetData(); } - void SetPyData(const wxTreeItemId& item, PyObject* obj) { + void SetItemPyData(const wxTreeItemId& item, PyObject* obj) { wxPyTreeItemData* data = (wxPyTreeItemData*)self->GetItemData(item); if (data == NULL) { data = new wxPyTreeItemData(obj); @@ -663,23 +698,25 @@ public: data->SetData(obj); } } + %pythoncode { GetPyData = GetItemPyData } + %pythoncode { SetPyData = SetItemPyData } // force appearance of [+] button near the item. This is useful to // allow the user to expand the items which don't have any children now // - but instead add them only when needed, thus minimizing memory // usage and loading time. - void SetItemHasChildren(const wxTreeItemId& item, bool has = TRUE); + void SetItemHasChildren(const wxTreeItemId& item, bool has = true); // the item will be shown in bold - void SetItemBold(const wxTreeItemId& item, bool bold = TRUE); + void SetItemBold(const wxTreeItemId& item, bool bold = true); // set the item's text colour - void SetItemTextColour(const wxTreeItemId& item, const wxColour& col); + void SetItemTextColour(const wxTreeItemId& item, const wxColour& colour); // set the item's background colour void SetItemBackgroundColour(const wxTreeItemId& item, - const wxColour& col); + const wxColour& colour); // set the item's font (should be of the same height for all items) void SetItemFont(const wxTreeItemId& item, const wxFont& font); @@ -705,12 +742,12 @@ public: // is item text in bold font? bool IsBold(const wxTreeItemId& item) const; - // if 'recursively' is FALSE, only immediate children count, otherwise + // if 'recursively' is False, only immediate children count, otherwise // the returned number is the number of all items in this branch - size_t GetChildrenCount(const wxTreeItemId& item, bool recursively = TRUE); + size_t GetChildrenCount(const wxTreeItemId& item, bool recursively = true); - // wxTreeItemId.IsOk() will return FALSE if there is no such item + // wxTreeItemId.IsOk() will return False if there is no such item // get the root tree item wxTreeItemId GetRootItem() const; @@ -720,26 +757,26 @@ public: // get the items currently selected, return the number of such item //size_t GetSelections(wxArrayTreeItemIds&) const; - %addmethods { + %extend { PyObject* GetSelections() { - wxPyBeginBlockThreads(); + wxPyBlock_t blocked = wxPyBeginBlockThreads(); PyObject* rval = PyList_New(0); wxArrayTreeItemIds array; size_t num, x; num = self->GetSelections(array); for (x=0; x < num; x++) { wxTreeItemId *tii = new wxTreeItemId(array.Item(x)); - PyObject* item = wxPyConstructObject((void*)tii, wxT("wxTreeItemId"), TRUE); + PyObject* item = wxPyConstructObject((void*)tii, wxT("wxTreeItemId"), true); PyList_Append(rval, item); } - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return rval; } } // get the parent of this item (may return NULL if root) - %name(GetItemParent)wxTreeItemId GetParent(const wxTreeItemId& item) const; + wxTreeItemId GetItemParent(const wxTreeItemId& item) const; // for this enumeration function you must pass in a "cookie" parameter // which is opaque for the application but is necessary for the library @@ -748,11 +785,43 @@ public: // the "cookie" passed to GetFirstChild() and GetNextChild() should be // the same! - // get the first child of this item - wxTreeItemId GetFirstChild(const wxTreeItemId& item, long& INOUT = longzero) const; - // get the next child - wxTreeItemId GetNextChild(const wxTreeItemId& item, long& INOUT) const; + // NOTE: These are a copy of the same methods in _treectrl.i, be sure to + // update both at the same time. (Or find a good way to refactor!) + %extend { + // Get the first child of this item. Returns a wxTreeItemId and an + // opaque "cookie" value that should be passed to GetNextChild in + // order to continue the search. + PyObject* GetFirstChild(const wxTreeItemId& item) { + void* cookie = 0; + wxTreeItemId* ritem = new wxTreeItemId(self->GetFirstChild(item, cookie)); + wxPyBlock_t blocked = wxPyBeginBlockThreads(); + PyObject* tup = PyTuple_New(2); + PyTuple_SET_ITEM(tup, 0, wxPyConstructObject(ritem, wxT("wxTreeItemId"), true)); + PyTuple_SET_ITEM(tup, 1, wxPyMakeSwigPtr(cookie, wxT("void"))); + wxPyEndBlockThreads(blocked); + return tup; + } + + + // Get the next child of this item. The cookie parameter is the 2nd + // value returned from GetFirstChild or the previous GetNextChild. + // Returns a wxTreeItemId and an opaque "cookie" value that should be + // passed to GetNextChild in order to continue the search. + PyObject* GetNextChild(const wxTreeItemId& item, void* cookie) { + wxTreeItemId* ritem = new wxTreeItemId(self->GetNextChild(item, cookie)); + wxPyBlock_t blocked = wxPyBeginBlockThreads(); + PyObject* tup = PyTuple_New(2); + PyTuple_SET_ITEM(tup, 0, wxPyConstructObject(ritem, wxT("wxTreeItemId"), true)); + PyTuple_SET_ITEM(tup, 1, wxPyMakeSwigPtr(cookie, wxT("void"))); + wxPyEndBlockThreads(blocked); + return tup; + } + + + // TODO: GetPrevChild + + } // get the last child of this item - this method doesn't use cookies wxTreeItemId GetLastChild(const wxTreeItemId& item) const; @@ -796,12 +865,12 @@ public: wxPyTreeItemData *data = NULL); // insert a new item before the one with the given index - %name(InsertItemBefore) - wxTreeItemId InsertItem(const wxTreeItemId& parent, + %Rename(InsertItemBefore, + wxTreeItemId, InsertItem(const wxTreeItemId& parent, size_t index, const wxString& text, int image = -1, int selectedImage = -1, - wxPyTreeItemData *data = NULL); + wxPyTreeItemData *data = NULL)); // insert a new item in as the last child of the parent wxTreeItemId AppendItem(const wxTreeItemId& parent, @@ -840,9 +909,11 @@ public: void UnselectAll(); // select this item - void SelectItem(const wxTreeItemId& item, bool unselect_others=TRUE, - bool extended_select=FALSE); + void SelectItem(const wxTreeItemId& item, bool unselect_others=true, + bool extended_select=false); + void SelectAll(bool extended_select=false); + // make sure this item is visible (expanding the parent item and/or // scrolling to this item if necessary) void EnsureVisible(const wxTreeItemId& item); @@ -853,20 +924,19 @@ public: // Returns wxTreeItemId, flags, and column wxTreeItemId HitTest(const wxPoint& point, int& OUTPUT, int& OUTPUT); - %addmethods { + %extend { // get the bounding rectangle of the item (or of its label only) - PyObject* GetBoundingRect(const wxTreeItemId& item, bool textOnly = FALSE) { + PyObject* GetBoundingRect(const wxTreeItemId& item, bool textOnly = false) { wxRect rect; if (self->GetBoundingRect(item, rect, textOnly)) { - wxPyBeginBlockThreads(); + wxPyBlock_t blocked = wxPyBeginBlockThreads(); wxRect* r = new wxRect(rect); PyObject* val = wxPyConstructObject((void*)r, wxT("wxRect"), 1); - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return val; } else { - Py_INCREF(Py_None); - return Py_None; + RETURN_NONE(); } } } @@ -881,37 +951,63 @@ public: // sort the children of this item using OnCompareItems void SortChildren(const wxTreeItemId& item); - // get the selected item image - int GetItemSelectedImage(const wxTreeItemId& item) const; + // searching + wxTreeItemId FindItem (const wxTreeItemId& item, const wxString& str, int flags = 0); + + wxWindow* GetHeaderWindow() const; + wxScrolledWindow* GetMainWindow() const; - // set the selected item image - void SetItemSelectedImage(const wxTreeItemId& item, int image); +}; +//---------------------------------------------------------------------- - wxWindow* GetHeaderWindow() const; - wxWindow* GetMainWindow() const; - -%pragma(python) addtoclass = " - # Redefine some methods that SWIG gets a bit confused on... - def GetFirstChild(self, *_args, **_kwargs): - val1,val2 = gizmosc.wxTreeListCtrl_GetFirstChild(self, *_args, **_kwargs) - val1 = wxTreeItemIdPtr(val1) - val1.thisown = 1 - return (val1,val2) - def GetNextChild(self, *_args, **_kwargs): - val1,val2 = gizmosc.wxTreeListCtrl_GetNextChild(self, *_args, **_kwargs) - val1 = wxTreeItemIdPtr(val1) - val1.thisown = 1 - return (val1,val2) - def HitTest(self, *_args, **_kwargs): - val1, val2, val3 = gizmosc.wxTreeListCtrl_HitTest(self, *_args, **_kwargs) - val1 = wxTreeItemIdPtr(val1) - val1.thisown = 1 - return (val1, val2, val3) -" +enum +{ + wxSCALE_HORIZONTAL, + wxSCALE_VERTICAL, + wxSCALE_UNIFORM, + wxSCALE_CUSTOM }; +MustHaveApp(wxStaticPicture); + +class wxStaticPicture : public wxControl +{ +public: + %pythonAppend wxStaticPicture "self._setOORInfo(self)" + %pythonAppend wxStaticPicture() "" + + wxStaticPicture( wxWindow* parent, wxWindowID id=-1, + const wxBitmap& label=wxNullBitmap, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = 0, + const wxString& name = wxPyStaticPictureNameStr ); + + %RenameCtor(PreStaticPicture, wxStaticPicture()); + + bool Create( wxWindow* parent, wxWindowID id=-1, + const wxBitmap& label=wxNullBitmap, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = 0, + const wxString& name = wxPyStaticPictureNameStr ); + + void SetBitmap( const wxBitmap& bmp ); + wxBitmap GetBitmap() const; + void SetIcon( const wxIcon& icon ); + wxIcon GetIcon() const; + void SetAlignment( int align ); + int GetAlignment() const; + + void SetScale( int scale ); + int GetScale() const; + + void SetCustomScale( float sx, float sy ); + void GetCustomScale( float* OUTPUT, float* OUTPUT ) const; + +}; //---------------------------------------------------------------------- @@ -919,9 +1015,6 @@ public: %init %{ - wxClassInfo::CleanUpClasses(); - wxClassInfo::InitializeClasses(); - wxPyPtrTypeMap_Add("wxTreeCompanionWindow", "wxPyTreeCompanionWindow"); wxPyPtrTypeMap_Add("wxTreeListCtrl", "wxPyTreeListCtrl"); %} @@ -932,8 +1025,3 @@ public: //---------------------------------------------------------------------- //---------------------------------------------------------------------- - - - - -