//---------------------------------------------------------------------------
%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
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 {
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);
Py_DECREF(o1);
Py_DECREF(o2);
}
- wxPyEndBlockThreads();
+ wxPyEndBlockThreads(blocked);
if (! found)
rval = wxTreeCtrl::OnCompareItems(item1, item2);
return rval;
+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,
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,
// 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;
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;
}
}
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;
}
// 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;
}
}
// 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);
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 {
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
}
}
+#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);
};