]> git.saurik.com Git - wxWidgets.git/blob - wxPython/src/_evthandler.i
prevent a reference leak when OOR objects are created
[wxWidgets.git] / wxPython / src / _evthandler.i
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: _evthandler.i
3 // Purpose: SWIG interface for wxEventHandler
4 //
5 // Author: Robin Dunn
6 //
7 // Created: 9-Aug-2003
8 // RCS-ID: $Id$
9 // Copyright: (c) 2003 by Total Control Software
10 // Licence: wxWindows license
11 /////////////////////////////////////////////////////////////////////////////
12
13 // Not a %module
14
15
16 //---------------------------------------------------------------------------
17 %newgroup
18
19 // wxEvtHandler: the base class for all objects handling wxWindows events
20 class wxEvtHandler : public wxObject {
21 public:
22 wxEvtHandler();
23
24 wxEvtHandler* GetNextHandler();
25 wxEvtHandler* GetPreviousHandler();
26 void SetNextHandler(wxEvtHandler* handler);
27 void SetPreviousHandler(wxEvtHandler* handler);
28
29 bool GetEvtHandlerEnabled();
30 void SetEvtHandlerEnabled(bool enabled);
31
32
33 // process an event right now
34 bool ProcessEvent(wxEvent& event);
35
36 // add an event to be processed later
37 void AddPendingEvent(wxEvent& event);
38
39 // process all pending events
40 void ProcessPendingEvents();
41
42 %extend {
43 // Dynamic association of a member function handler with the event handler
44 void Connect( int id, int lastId, int eventType, PyObject* func) {
45 if (PyCallable_Check(func)) {
46 self->Connect(id, lastId, eventType,
47 (wxObjectEventFunction) &wxPyCallback::EventThunker,
48 new wxPyCallback(func));
49 }
50 else if (func == Py_None) {
51 self->Disconnect(id, lastId, eventType,
52 (wxObjectEventFunction)
53 &wxPyCallback::EventThunker);
54 }
55 else {
56 wxPyBLOCK_THREADS(
57 PyErr_SetString(PyExc_TypeError, "Expected callable object or None."));
58 }
59 }
60
61 bool Disconnect(int id, int lastId = -1,
62 wxEventType eventType = wxEVT_NULL) {
63 return self->Disconnect(id, lastId, eventType,
64 (wxObjectEventFunction)
65 &wxPyCallback::EventThunker);
66 }
67 }
68
69 %extend {
70 void _setOORInfo(PyObject* _self) {
71 if (_self && _self != Py_None) {
72 if (!self->GetClientObject())
73 self->SetClientObject(new wxPyOORClientData(_self));
74 }
75 else {
76 wxPyOORClientData* data = (wxPyOORClientData*)self->GetClientObject();
77 if (data) {
78 self->SetClientObject(NULL); // This will delete it too
79 }
80 }
81 }
82 }
83
84 %pythoncode {
85 def Bind(self, event, handler, source=None, id=wx.ID_ANY, id2=wx.ID_ANY):
86 """
87 Bind an event to an event handler.
88
89 :param event: One of the EVT_* objects that specifies the
90 type of event to bind,
91
92 :param handler: A callable object to be invoked when the
93 event is delivered to self. Pass None to
94 disconnect an event handler.
95
96 :param source: Sometimes the event originates from a
97 different window than self, but you still
98 want to catch it in self. (For example, a
99 button event delivered to a frame.) By
100 passing the source of the event, the event
101 handling system is able to differentiate
102 between the same event type from different
103 controls.
104
105 :param id: Used to spcify the event source by ID instead
106 of instance.
107
108 :param id2: Used when it is desirable to bind a handler
109 to a range of IDs, such as with EVT_MENU_RANGE.
110 """
111 if source is not None:
112 id = source.GetId()
113 event.Bind(self, id, id2, handler)
114
115 def Unbind(self, event, source=None, id=wx.ID_ANY, id2=wx.ID_ANY):
116 """
117 Disconencts the event handler binding for event from self.
118 Returns True if successful.
119 """
120 if source is not None:
121 id = source.GetId()
122 return event.Unbind(self, id, id2)
123 }
124
125
126 };
127
128 //---------------------------------------------------------------------------