X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8668c242808de89b9a8debf2b5a8e62d46e10972..125c972b66dd7601d8aa40c094504b4b961a8916:/wxPython/src/_treectrl.i diff --git a/wxPython/src/_treectrl.i b/wxPython/src/_treectrl.i index 616322344c..2e7da38712 100644 --- a/wxPython/src/_treectrl.i +++ b/wxPython/src/_treectrl.i @@ -82,7 +82,6 @@ enum { //--------------------------------------------------------------------------- %newgroup -typedef void *wxTreeItemIdValue; // wxTreeItemId identifies an element of the tree. In this implementation, it's // just a trivial wrapper around Win32 HTREEITEM or a pointer to some private @@ -97,18 +96,11 @@ public: bool IsOk() const; %extend { - bool operator==(const wxTreeItemId* other) { - if (!other) return False; - return *self == *other; - } - - bool operator!=(const wxTreeItemId* other) { - if (!other) return True; - return *self != *other; - } + bool __eq__(const wxTreeItemId* other) { return other ? (*self == *other) : False; } + bool __ne__(const wxTreeItemId* other) { return other ? (*self != *other) : True; } } - wxTreeItemIdValue m_pItem; + void* m_pItem; %pythoncode { @@ -294,7 +286,7 @@ public: const wxTreeItemId& item2) { int rval = 0; bool found; - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); if ((found = wxPyCBH_findCallback(m_myInst, "OnCompareItems"))) { PyObject *o1 = wxPyConstructObject((void*)&item1, wxT("wxTreeItemId"), False); PyObject *o2 = wxPyConstructObject((void*)&item2, wxT("wxTreeItemId"), False); @@ -302,7 +294,7 @@ public: Py_DECREF(o1); Py_DECREF(o2); } - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); if (! found) rval = wxTreeCtrl::OnCompareItems(item1, item2); return rval; @@ -317,10 +309,13 @@ IMPLEMENT_ABSTRACT_CLASS(wxPyTreeCtrl, wxTreeCtrl); +MustHaveApp(wxPyTreeCtrl); + %name(TreeCtrl)class wxPyTreeCtrl : public wxControl { public: - %addtofunc wxPyTreeCtrl "self._setOORInfo(self);self._setCallbackInfo(self, TreeCtrl)" - %addtofunc wxPyTreeCtrl() "" + %pythonAppend wxPyTreeCtrl "self._setOORInfo(self);self._setCallbackInfo(self, TreeCtrl)" + %pythonAppend wxPyTreeCtrl() "" + %typemap(out) wxPyTreeCtrl*; // turn off this typemap wxPyTreeCtrl(wxWindow *parent, wxWindowID id = -1, const wxPoint& pos = wxDefaultPosition, @@ -330,6 +325,9 @@ public: const wxString& name = wxPyTreeCtrlNameStr); %name(PreTreeCtrl)wxPyTreeCtrl(); + // Turn it back on again + %typemap(out) wxPyTreeCtrl* { $result = wxPyMake_wxObject($1, $owner); } + bool Create(wxWindow *parent, wxWindowID id = -1, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, @@ -509,7 +507,7 @@ public: // NB: this operation is expensive and can take a long time for a // control with a lot of items (~ O(number of items)). PyObject* GetSelections() { - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); PyObject* rval = PyList_New(0); wxArrayTreeItemIds array; size_t num, x; @@ -518,8 +516,9 @@ public: wxTreeItemId *tii = new wxTreeItemId(array.Item(x)); PyObject* item = wxPyConstructObject((void*)tii, wxT("wxTreeItemId"), True); PyList_Append(rval, item); + Py_DECREF(item); } - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return rval; } } @@ -529,18 +528,20 @@ public: wxTreeItemId GetItemParent(const wxTreeItemId& item) const; + // NOTE: These are a copy of the same methods in gizmos.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) { - wxTreeItemIdValue cookie = 0; - wxTreeItemId ritem = self->GetFirstChild(item, cookie); - wxPyBeginBlockThreads(); + void* cookie = 0; + wxTreeItemId* ritem = new wxTreeItemId(self->GetFirstChild(item, cookie)); + bool blocked = wxPyBeginBlockThreads(); PyObject* tup = PyTuple_New(2); - PyTuple_SET_ITEM(tup, 0, wxPyConstructObject(&ritem, wxT("wxTreeItemId"), True)); - PyTuple_SET_ITEM(tup, 1, wxPyConstructObject(cookie, wxT("wxTreeItemIdValue"), True)); - wxPyEndBlockThreads(); + PyTuple_SET_ITEM(tup, 0, wxPyConstructObject(ritem, wxT("wxTreeItemId"), True)); + PyTuple_SET_ITEM(tup, 1, wxPyMakeSwigPtr(cookie, wxT("void"))); + wxPyEndBlockThreads(blocked); return tup; } @@ -549,13 +550,13 @@ public: // 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, wxTreeItemIdValue& cookie) { - wxTreeItemId ritem = self->GetNextChild(item, cookie); - wxPyBeginBlockThreads(); + PyObject* GetNextChild(const wxTreeItemId& item, void* cookie) { + wxTreeItemId* ritem = new wxTreeItemId(self->GetNextChild(item, cookie)); + bool blocked = wxPyBeginBlockThreads(); PyObject* tup = PyTuple_New(2); - PyTuple_SET_ITEM(tup, 0, wxPyConstructObject(&ritem, wxT("wxTreeItemId"), True)); - PyTuple_SET_ITEM(tup, 1, wxPyConstructObject(cookie, wxT("wxTreeItemIdValue"), True)); - wxPyEndBlockThreads(); + PyTuple_SET_ITEM(tup, 0, wxPyConstructObject(ritem, wxT("wxTreeItemId"), True)); + PyTuple_SET_ITEM(tup, 1, wxPyMakeSwigPtr(cookie, wxT("void"))); + wxPyEndBlockThreads(blocked); return tup; } } @@ -643,12 +644,19 @@ public: // remove the selection from currently selected item (if any) void Unselect(); + // remove the selection from the given one (multiselect mode only) + void UnselectItem(const wxTreeItemId& item); + // unselect all items (only makes sense for multiple selection control) void UnselectAll(); // select this item - void SelectItem(const wxTreeItemId& item); + void SelectItem(const wxTreeItemId& item, bool select = True); + + // toggle the item selection + void ToggleItemSelection(const wxTreeItemId& item); + // make sure this item is visible (expanding the parent item and/or // scrolling to this item if necessary) void EnsureVisible(const wxTreeItemId& item); @@ -686,10 +694,10 @@ public: DocDeclAStr( wxTreeItemId, HitTest(const wxPoint& point, int& OUTPUT), "HitTest(Point point) -> (item, where)", - "Determine which item (if any) belongs the given point. The\n" - "coordinates specified are relative to the client area of tree ctrl\n" - "and the where return value is set to a bitmask of wxTREE_HITTEST_xxx\n" - "constants.\n"); + "Determine which item (if any) belongs the given point. The coordinates +specified are relative to the client area of tree ctrl and the where return +value is set to a bitmask of wxTREE_HITTEST_xxx constants. +", ""); %extend { @@ -697,10 +705,10 @@ public: PyObject* GetBoundingRect(const wxTreeItemId& item, bool textOnly = False) { wxRect rect; if (self->GetBoundingRect(item, rect, textOnly)) { - wxPyBeginBlockThreads(); + bool blocked = wxPyBeginBlockThreads(); wxRect* r = new wxRect(rect); PyObject* val = wxPyConstructObject((void*)r, wxT("wxRect"), True); - wxPyEndBlockThreads(); + wxPyEndBlockThreads(blocked); return val; } else @@ -708,7 +716,14 @@ public: } } +#ifdef __WXMSW__ + // set/get the item state.image (state == -1 means cycle to the next one) + void SetState(const wxTreeItemId& node, int state); + int GetState(const wxTreeItemId& node); +#endif + static wxVisualAttributes + GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL); };