From 164b735b71bdb01126256c6825ff50f8b9c8fdd0 Mon Sep 17 00:00:00 2001 From: Robin Dunn Date: Sun, 13 Feb 2000 00:29:38 +0000 Subject: [PATCH] Fixed thread state problem in wxTreeCtrl.GetBoundingBox git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@5984 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- utils/wxPython/CHANGES.txt | 11 ++++++++ utils/wxPython/demo/wxTreeCtrl.py | 3 ++ utils/wxPython/src/controls2.i | 30 ++++++++++++++++++-- utils/wxPython/src/msw/controls2.cpp | 41 ++++++++++++++++++++++++---- utils/wxPython/src/msw/controls2.py | 15 +++++++++- 5 files changed, 90 insertions(+), 10 deletions(-) diff --git a/utils/wxPython/CHANGES.txt b/utils/wxPython/CHANGES.txt index 8325bbb744..a70c4b279c 100644 --- a/utils/wxPython/CHANGES.txt +++ b/utils/wxPython/CHANGES.txt @@ -2,6 +2,17 @@ CHANGES.txt for wxPython ---------------------------------------------------------------------- +New in 2.1.14 +------------- + +Fixed wxTreeCtrl.HitTest to return both the tree item as well as the +flags that clairify where the click was in relation to the item. + +Fixed problem in wxTreeCtrl.GetBoundingBox + + + + What's new in 2.1.13 -------------------- Skipped a version number to match what has been released for wxGTK. diff --git a/utils/wxPython/demo/wxTreeCtrl.py b/utils/wxPython/demo/wxTreeCtrl.py index 3c8587db27..41741c08fb 100644 --- a/utils/wxPython/demo/wxTreeCtrl.py +++ b/utils/wxPython/demo/wxTreeCtrl.py @@ -106,6 +106,9 @@ class TestTreeCtrlPanel(wxPanel): def OnSelChanged(self, event): self.item = event.GetItem() self.log.WriteText("OnSelChanged: %s\n" % self.tree.GetItemText(self.item)) + self.log.WriteText("BoundingRect: %s\n" % + self.tree.GetBoundingRect(self.item, true)) + #--------------------------------------------------------------------------- diff --git a/utils/wxPython/src/controls2.i b/utils/wxPython/src/controls2.i index 6d5697b931..1ff1ff3639 100644 --- a/utils/wxPython/src/controls2.i +++ b/utils/wxPython/src/controls2.i @@ -240,6 +240,25 @@ enum wxTreeItemIcon }; +// constants for HitTest +enum { + wxTREE_HITTEST_ABOVE, + wxTREE_HITTEST_BELOW, + wxTREE_HITTEST_NOWHERE, + wxTREE_HITTEST_ONITEMBUTTON, + wxTREE_HITTEST_ONITEMICON, + wxTREE_HITTEST_ONITEMINDENT, + wxTREE_HITTEST_ONITEMLABEL, + wxTREE_HITTEST_ONITEMRIGHT, + wxTREE_HITTEST_ONITEMSTATEICON, + wxTREE_HITTEST_TOLEFT, + wxTREE_HITTEST_TORIGHT, + wxTREE_HITTEST_ONITEMUPPERPART, + wxTREE_HITTEST_ONITEMLOWERPART, + wxTREE_HITTEST_ONITEM +}; + + class wxTreeItemId { public: wxTreeItemId(); @@ -464,7 +483,7 @@ public: void SetItemBold(const wxTreeItemId& item, int bold = TRUE); bool IsBold(const wxTreeItemId& item) const; - wxTreeItemId HitTest(const wxPoint& point); + wxTreeItemId HitTest(const wxPoint& point, int& OUTPUT); void SetItemTextColour(const wxTreeItemId& item, const wxColour& col); void SetItemBackgroundColour(const wxTreeItemId& item, const wxColour& col); @@ -477,8 +496,13 @@ public: %addmethods { PyObject* GetBoundingRect(const wxTreeItemId& item, int textOnly = FALSE) { wxRect rect; - if (self->GetBoundingRect(item, rect, textOnly)) - return wxPyConstructObject((void*)&rect, "wxRect"); + if (self->GetBoundingRect(item, rect, textOnly)) { + bool doSave = wxPyRestoreThread(); + wxRect* r = new wxRect(rect); + PyObject* val = wxPyConstructObject((void*)r, "wxRect"); + wxPySaveThread(doSave); + return val; + } else { Py_INCREF(Py_None); return Py_None; diff --git a/utils/wxPython/src/msw/controls2.cpp b/utils/wxPython/src/msw/controls2.cpp index 41951ecfe7..f46ae71271 100644 --- a/utils/wxPython/src/msw/controls2.cpp +++ b/utils/wxPython/src/msw/controls2.cpp @@ -5742,19 +5742,24 @@ static PyObject *_wrap_wxTreeCtrl_IsBold(PyObject *self, PyObject *args, PyObjec return _resultobj; } -#define wxTreeCtrl_HitTest(_swigobj,_swigarg0) (_swigobj->HitTest(_swigarg0)) +#define wxTreeCtrl_HitTest(_swigobj,_swigarg0,_swigarg1) (_swigobj->HitTest(_swigarg0,_swigarg1)) static PyObject *_wrap_wxTreeCtrl_HitTest(PyObject *self, PyObject *args, PyObject *kwargs) { PyObject * _resultobj; wxTreeItemId * _result; wxTreeCtrl * _arg0; wxPoint * _arg1; + int * _arg2; + int temp; PyObject * _argo0 = 0; - wxPoint temp; + wxPoint temp0; PyObject * _obj1 = 0; char *_kwnames[] = { "self","point", NULL }; char _ptemp[128]; self = self; +{ + _arg2 = &temp; +} if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxTreeCtrl_HitTest",_kwnames,&_argo0,&_obj1)) return NULL; if (_argo0) { @@ -5765,17 +5770,22 @@ static PyObject *_wrap_wxTreeCtrl_HitTest(PyObject *self, PyObject *args, PyObje } } { - _arg1 = &temp; + _arg1 = &temp0; if (! wxPoint_helper(_obj1, &_arg1)) return NULL; } { wxPy_BEGIN_ALLOW_THREADS; - _result = new wxTreeItemId (wxTreeCtrl_HitTest(_arg0,*_arg1)); + _result = new wxTreeItemId (wxTreeCtrl_HitTest(_arg0,*_arg1,*_arg2)); wxPy_END_ALLOW_THREADS; } SWIG_MakePtr(_ptemp, (void *) _result,"_wxTreeItemId_p"); _resultobj = Py_BuildValue("s",_ptemp); +{ + PyObject *o; + o = PyInt_FromLong((long) (*_arg2)); + _resultobj = t_output_helper(_resultobj, o); +} return _resultobj; } @@ -5953,8 +5963,13 @@ static PyObject *_wrap_wxTreeCtrl_SetItemDropHighlight(PyObject *self, PyObject static PyObject * wxTreeCtrl_GetBoundingRect(wxTreeCtrl *self,const wxTreeItemId & item,int textOnly) { wxRect rect; - if (self->GetBoundingRect(item, rect, textOnly)) - return wxPyConstructObject((void*)&rect, "wxRect"); + if (self->GetBoundingRect(item, rect, textOnly)) { + bool doSave = wxPyRestoreThread(); + wxRect* r = new wxRect(rect); + PyObject* val = wxPyConstructObject((void*)r, "wxRect"); + wxPySaveThread(doSave); + return val; + } else { Py_INCREF(Py_None); return Py_None; @@ -6588,6 +6603,20 @@ SWIGEXPORT(void) initcontrols2c() { PyDict_SetItemString(d,"wxTreeItemIcon_Expanded", PyInt_FromLong((long) wxTreeItemIcon_Expanded)); PyDict_SetItemString(d,"wxTreeItemIcon_SelectedExpanded", PyInt_FromLong((long) wxTreeItemIcon_SelectedExpanded)); PyDict_SetItemString(d,"wxTreeItemIcon_Max", PyInt_FromLong((long) wxTreeItemIcon_Max)); + PyDict_SetItemString(d,"wxTREE_HITTEST_ABOVE", PyInt_FromLong((long) wxTREE_HITTEST_ABOVE)); + PyDict_SetItemString(d,"wxTREE_HITTEST_BELOW", PyInt_FromLong((long) wxTREE_HITTEST_BELOW)); + PyDict_SetItemString(d,"wxTREE_HITTEST_NOWHERE", PyInt_FromLong((long) wxTREE_HITTEST_NOWHERE)); + PyDict_SetItemString(d,"wxTREE_HITTEST_ONITEMBUTTON", PyInt_FromLong((long) wxTREE_HITTEST_ONITEMBUTTON)); + PyDict_SetItemString(d,"wxTREE_HITTEST_ONITEMICON", PyInt_FromLong((long) wxTREE_HITTEST_ONITEMICON)); + PyDict_SetItemString(d,"wxTREE_HITTEST_ONITEMINDENT", PyInt_FromLong((long) wxTREE_HITTEST_ONITEMINDENT)); + PyDict_SetItemString(d,"wxTREE_HITTEST_ONITEMLABEL", PyInt_FromLong((long) wxTREE_HITTEST_ONITEMLABEL)); + PyDict_SetItemString(d,"wxTREE_HITTEST_ONITEMRIGHT", PyInt_FromLong((long) wxTREE_HITTEST_ONITEMRIGHT)); + PyDict_SetItemString(d,"wxTREE_HITTEST_ONITEMSTATEICON", PyInt_FromLong((long) wxTREE_HITTEST_ONITEMSTATEICON)); + PyDict_SetItemString(d,"wxTREE_HITTEST_TOLEFT", PyInt_FromLong((long) wxTREE_HITTEST_TOLEFT)); + PyDict_SetItemString(d,"wxTREE_HITTEST_TORIGHT", PyInt_FromLong((long) wxTREE_HITTEST_TORIGHT)); + PyDict_SetItemString(d,"wxTREE_HITTEST_ONITEMUPPERPART", PyInt_FromLong((long) wxTREE_HITTEST_ONITEMUPPERPART)); + PyDict_SetItemString(d,"wxTREE_HITTEST_ONITEMLOWERPART", PyInt_FromLong((long) wxTREE_HITTEST_ONITEMLOWERPART)); + PyDict_SetItemString(d,"wxTREE_HITTEST_ONITEM", PyInt_FromLong((long) wxTREE_HITTEST_ONITEM)); { int i; for (i = 0; _swig_mapping[i].n1; i++) diff --git a/utils/wxPython/src/msw/controls2.py b/utils/wxPython/src/msw/controls2.py index 235ffa1deb..5cadc4898d 100644 --- a/utils/wxPython/src/msw/controls2.py +++ b/utils/wxPython/src/msw/controls2.py @@ -590,7 +590,6 @@ class wxTreeCtrlPtr(wxControlPtr): return val def HitTest(self, *_args, **_kwargs): val = apply(controls2c.wxTreeCtrl_HitTest,(self,) + _args, _kwargs) - if val: val = wxTreeItemIdPtr(val) ; val.thisown = 1 return val def SetItemTextColour(self, *_args, **_kwargs): val = apply(controls2c.wxTreeCtrl_SetItemTextColour,(self,) + _args, _kwargs) @@ -687,3 +686,17 @@ wxTreeItemIcon_Selected = controls2c.wxTreeItemIcon_Selected wxTreeItemIcon_Expanded = controls2c.wxTreeItemIcon_Expanded wxTreeItemIcon_SelectedExpanded = controls2c.wxTreeItemIcon_SelectedExpanded wxTreeItemIcon_Max = controls2c.wxTreeItemIcon_Max +wxTREE_HITTEST_ABOVE = controls2c.wxTREE_HITTEST_ABOVE +wxTREE_HITTEST_BELOW = controls2c.wxTREE_HITTEST_BELOW +wxTREE_HITTEST_NOWHERE = controls2c.wxTREE_HITTEST_NOWHERE +wxTREE_HITTEST_ONITEMBUTTON = controls2c.wxTREE_HITTEST_ONITEMBUTTON +wxTREE_HITTEST_ONITEMICON = controls2c.wxTREE_HITTEST_ONITEMICON +wxTREE_HITTEST_ONITEMINDENT = controls2c.wxTREE_HITTEST_ONITEMINDENT +wxTREE_HITTEST_ONITEMLABEL = controls2c.wxTREE_HITTEST_ONITEMLABEL +wxTREE_HITTEST_ONITEMRIGHT = controls2c.wxTREE_HITTEST_ONITEMRIGHT +wxTREE_HITTEST_ONITEMSTATEICON = controls2c.wxTREE_HITTEST_ONITEMSTATEICON +wxTREE_HITTEST_TOLEFT = controls2c.wxTREE_HITTEST_TOLEFT +wxTREE_HITTEST_TORIGHT = controls2c.wxTREE_HITTEST_TORIGHT +wxTREE_HITTEST_ONITEMUPPERPART = controls2c.wxTREE_HITTEST_ONITEMUPPERPART +wxTREE_HITTEST_ONITEMLOWERPART = controls2c.wxTREE_HITTEST_ONITEMLOWERPART +wxTREE_HITTEST_ONITEM = controls2c.wxTREE_HITTEST_ONITEM -- 2.45.2