diff --git a/wxPython/demo/Threads.py b/wxPython/demo/Threads.py index 19b759aece..b1dce085a6 100644 --- a/wxPython/demo/Threads.py +++ b/wxPython/demo/Threads.py @@ -71,11 +71,11 @@ class GraphWindow(wxWindow): for label in labels: self.values.append((label, 0)) - self.font = wxFont(12, wxSWISS, wxNORMAL, wxBOLD) - self.SetFont(self.font) + font = wxFont(12, wxSWISS, wxNORMAL, wxBOLD) + self.SetFont(font) self.colors = [ wxRED, wxGREEN, wxBLUE, wxCYAN, - wxNamedColour("Yellow"), wxNamedColor("Navy") ] + "Yellow", "Navy" ] EVT_ERASE_BACKGROUND(self, self.OnEraseBackground) EVT_PAINT(self, self.OnPaint) @@ -98,8 +98,12 @@ class GraphWindow(wxWindow): self.barHeight = hmax + def GetBestHeight(self): + return 2 * (self.barHeight + 1) * len(self.values) + + def Draw(self, dc, size): - dc.SetFont(self.font) + dc.SetFont(self.GetFont()) dc.SetTextForeground(wxBLUE) dc.SetBackground(wxBrush(self.GetBackgroundColour())) dc.Clear() @@ -161,6 +165,7 @@ class TestFrame(wxFrame): self.graph = GraphWindow(self, ['Zero', 'One', 'Two', 'Three', 'Four', 'Five', 'Six', 'Seven']) + self.graph.SetSize((-1, self.graph.GetBestHeight())) sizer = wxBoxSizer(wxVERTICAL) sizer.Add(panel, 0, wxEXPAND) @@ -168,6 +173,7 @@ class TestFrame(wxFrame): self.SetSizer(sizer) self.SetAutoLayout(true) + sizer.Fit(self) #self.graph.SetValue(0, 25) #self.graph.SetValue(1, 50) diff --git a/wxPython/src/events.i b/wxPython/src/events.i index e6933f8e25..e197bebd72 100644 --- a/wxPython/src/events.i +++ b/wxPython/src/events.i @@ -48,6 +48,8 @@ public: void SetId(int id); void SetTimestamp(long timeStamp); void Skip(bool skip = TRUE); + + wxEvent *Clone(); }; //--------------------------------------------------------------------------- diff --git a/wxPython/src/gtk/events.cpp b/wxPython/src/gtk/events.cpp index fe6aa76cab..4e4163335e 100644 --- a/wxPython/src/gtk/events.cpp +++ b/wxPython/src/gtk/events.cpp @@ -469,6 +469,41 @@ static PyObject *_wrap_wxEvent_Skip(PyObject *self, PyObject *args, PyObject *kw return _resultobj; } +#define wxEvent_Clone(_swigobj) (_swigobj->Clone()) +static PyObject *_wrap_wxEvent_Clone(PyObject *self, PyObject *args, PyObject *kwargs) { + PyObject * _resultobj; + wxEvent * _result; + wxEvent * _arg0; + PyObject * _argo0 = 0; + char *_kwnames[] = { "self", NULL }; + char _ptemp[128]; + + self = self; + if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxEvent_Clone",_kwnames,&_argo0)) + return NULL; + if (_argo0) { + if (_argo0 == Py_None) { _arg0 = NULL; } + else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxEvent_p")) { + PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxEvent_Clone. Expected _wxEvent_p."); + return NULL; + } + } +{ + wxPy_BEGIN_ALLOW_THREADS; + _result = (wxEvent *)wxEvent_Clone(_arg0); + + wxPy_END_ALLOW_THREADS; + if (PyErr_Occurred()) return NULL; +} if (_result) { + SWIG_MakePtr(_ptemp, (char *) _result,"_wxEvent_p"); + _resultobj = Py_BuildValue("s",_ptemp); + } else { + Py_INCREF(Py_None); + _resultobj = Py_None; + } + return _resultobj; +} + static void *SwigwxSizeEventTowxEvent(void *ptr) { wxSizeEvent *src; wxEvent *dest; @@ -7179,6 +7214,7 @@ static PyMethodDef eventscMethods[] = { { "new_wxCloseEvent", (PyCFunction) _wrap_new_wxCloseEvent, METH_VARARGS | METH_KEYWORDS }, { "wxSizeEvent_GetSize", (PyCFunction) _wrap_wxSizeEvent_GetSize, METH_VARARGS | METH_KEYWORDS }, { "new_wxSizeEvent", (PyCFunction) _wrap_new_wxSizeEvent, METH_VARARGS | METH_KEYWORDS }, + { "wxEvent_Clone", (PyCFunction) _wrap_wxEvent_Clone, METH_VARARGS | METH_KEYWORDS }, { "wxEvent_Skip", (PyCFunction) _wrap_wxEvent_Skip, METH_VARARGS | METH_KEYWORDS }, { "wxEvent_SetTimestamp", (PyCFunction) _wrap_wxEvent_SetTimestamp, METH_VARARGS | METH_KEYWORDS }, { "wxEvent_SetId", (PyCFunction) _wrap_wxEvent_SetId, METH_VARARGS | METH_KEYWORDS }, diff --git a/wxPython/src/gtk/events.py b/wxPython/src/gtk/events.py index 85de45a1f6..3236de4adb 100644 --- a/wxPython/src/gtk/events.py +++ b/wxPython/src/gtk/events.py @@ -41,6 +41,10 @@ class wxEventPtr(wxObjectPtr): def Skip(self, *_args, **_kwargs): val = apply(eventsc.wxEvent_Skip,(self,) + _args, _kwargs) return val + def Clone(self, *_args, **_kwargs): + val = apply(eventsc.wxEvent_Clone,(self,) + _args, _kwargs) + if val: val = wxEventPtr(val) + return val def __repr__(self): return "" % (self.this,) class wxEvent(wxEventPtr): diff --git a/wxPython/src/helpers.cpp b/wxPython/src/helpers.cpp index e485a2f817..187a0673c8 100644 --- a/wxPython/src/helpers.cpp +++ b/wxPython/src/helpers.cpp @@ -101,7 +101,6 @@ void WXDLLEXPORT wxEntryCleanup(); #ifdef WXP_WITH_THREAD -//PyThreadState* wxPyEventThreadState = NULL; PyInterpreterState* wxPyInterpreter = NULL; #endif @@ -118,7 +117,6 @@ void __wxPreStart() #ifdef WXP_WITH_THREAD PyEval_InitThreads(); -// wxPyEventThreadState = PyThreadState_Get(); // PyThreadState_New(PyThreadState_Get()->interp); wxPyInterpreter = PyThreadState_Get()->interp; #endif @@ -632,37 +630,41 @@ PyObject* wxPyEvtSelfRef::GetSelf() const { } +IMPLEMENT_ABSTRACT_CLASS(wxPyEvent, wxEvent); +IMPLEMENT_ABSTRACT_CLASS(wxPyCommandEvent, wxCommandEvent); + + wxPyEvent::wxPyEvent(int id) : wxEvent(id) { } + +wxPyEvent::wxPyEvent(const wxPyEvent& evt) + : wxEvent(evt) +{ + SetSelf(evt.m_self, TRUE); +} + + wxPyEvent::~wxPyEvent() { } -// This one is so the event object can be Cloned... -void wxPyEvent::CopyObject(wxObject& dest) const { - wxEvent::CopyObject(dest); - ((wxPyEvent*)&dest)->SetSelf(m_self, TRUE); -} - - -IMPLEMENT_DYNAMIC_CLASS(wxPyEvent, wxEvent); - wxPyCommandEvent::wxPyCommandEvent(wxEventType commandType, int id) : wxCommandEvent(commandType, id) { } + +wxPyCommandEvent::wxPyCommandEvent(const wxPyCommandEvent& evt) + : wxCommandEvent(evt) +{ + SetSelf(evt.m_self, TRUE); +} + + wxPyCommandEvent::~wxPyCommandEvent() { } -void wxPyCommandEvent::CopyObject(wxObject& dest) const { - wxCommandEvent::CopyObject(dest); - ((wxPyCommandEvent*)&dest)->SetSelf(m_self, TRUE); -} - - -IMPLEMENT_DYNAMIC_CLASS(wxPyCommandEvent, wxCommandEvent); diff --git a/wxPython/src/helpers.h b/wxPython/src/helpers.h index f114d2ab63..e31bed8bc2 100644 --- a/wxPython/src/helpers.h +++ b/wxPython/src/helpers.h @@ -219,22 +219,24 @@ protected: class wxPyEvent : public wxEvent, public wxPyEvtSelfRef { - DECLARE_DYNAMIC_CLASS(wxPyEvent) + DECLARE_ABSTRACT_CLASS(wxPyEvent) public: wxPyEvent(int id=0); + wxPyEvent(const wxPyEvent& evt); ~wxPyEvent(); - void CopyObject(wxObject& dest) const; + virtual wxEvent* Clone() const { return new wxPyEvent(*this); } }; class wxPyCommandEvent : public wxCommandEvent, public wxPyEvtSelfRef { - DECLARE_DYNAMIC_CLASS(wxPyCommandEvent) + DECLARE_ABSTRACT_CLASS(wxPyCommandEvent) public: wxPyCommandEvent(wxEventType commandType = wxEVT_NULL, int id=0); + wxPyCommandEvent(const wxPyCommandEvent& evt); ~wxPyCommandEvent(); - void CopyObject(wxObject& dest) const; + virtual wxEvent* Clone() const { return new wxPyCommandEvent(*this); } }; diff --git a/wxPython/src/msw/events.cpp b/wxPython/src/msw/events.cpp index 830ef6fa0d..9b26c43a66 100644 --- a/wxPython/src/msw/events.cpp +++ b/wxPython/src/msw/events.cpp @@ -469,6 +469,41 @@ static PyObject *_wrap_wxEvent_Skip(PyObject *self, PyObject *args, PyObject *kw return _resultobj; } +#define wxEvent_Clone(_swigobj) (_swigobj->Clone()) +static PyObject *_wrap_wxEvent_Clone(PyObject *self, PyObject *args, PyObject *kwargs) { + PyObject * _resultobj; + wxEvent * _result; + wxEvent * _arg0; + PyObject * _argo0 = 0; + char *_kwnames[] = { "self", NULL }; + char _ptemp[128]; + + self = self; + if(!PyArg_ParseTupleAndKeywords(args,kwargs,"O:wxEvent_Clone",_kwnames,&_argo0)) + return NULL; + if (_argo0) { + if (_argo0 == Py_None) { _arg0 = NULL; } + else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxEvent_p")) { + PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxEvent_Clone. Expected _wxEvent_p."); + return NULL; + } + } +{ + wxPy_BEGIN_ALLOW_THREADS; + _result = (wxEvent *)wxEvent_Clone(_arg0); + + wxPy_END_ALLOW_THREADS; + if (PyErr_Occurred()) return NULL; +} if (_result) { + SWIG_MakePtr(_ptemp, (char *) _result,"_wxEvent_p"); + _resultobj = Py_BuildValue("s",_ptemp); + } else { + Py_INCREF(Py_None); + _resultobj = Py_None; + } + return _resultobj; +} + static void *SwigwxSizeEventTowxEvent(void *ptr) { wxSizeEvent *src; wxEvent *dest; @@ -7179,6 +7214,7 @@ static PyMethodDef eventscMethods[] = { { "new_wxCloseEvent", (PyCFunction) _wrap_new_wxCloseEvent, METH_VARARGS | METH_KEYWORDS }, { "wxSizeEvent_GetSize", (PyCFunction) _wrap_wxSizeEvent_GetSize, METH_VARARGS | METH_KEYWORDS }, { "new_wxSizeEvent", (PyCFunction) _wrap_new_wxSizeEvent, METH_VARARGS | METH_KEYWORDS }, + { "wxEvent_Clone", (PyCFunction) _wrap_wxEvent_Clone, METH_VARARGS | METH_KEYWORDS }, { "wxEvent_Skip", (PyCFunction) _wrap_wxEvent_Skip, METH_VARARGS | METH_KEYWORDS }, { "wxEvent_SetTimestamp", (PyCFunction) _wrap_wxEvent_SetTimestamp, METH_VARARGS | METH_KEYWORDS }, { "wxEvent_SetId", (PyCFunction) _wrap_wxEvent_SetId, METH_VARARGS | METH_KEYWORDS }, diff --git a/wxPython/src/msw/events.py b/wxPython/src/msw/events.py index 85de45a1f6..3236de4adb 100644 --- a/wxPython/src/msw/events.py +++ b/wxPython/src/msw/events.py @@ -41,6 +41,10 @@ class wxEventPtr(wxObjectPtr): def Skip(self, *_args, **_kwargs): val = apply(eventsc.wxEvent_Skip,(self,) + _args, _kwargs) return val + def Clone(self, *_args, **_kwargs): + val = apply(eventsc.wxEvent_Clone,(self,) + _args, _kwargs) + if val: val = wxEventPtr(val) + return val def __repr__(self): return "" % (self.this,) class wxEvent(wxEventPtr):