1 /////////////////////////////////////////////////////////////////////////////
 
   3 // Purpose:     SWIG interface for wxEventHandler
 
   9 // Copyright:   (c) 2003 by Total Control Software
 
  10 // Licence:     wxWindows license
 
  11 /////////////////////////////////////////////////////////////////////////////
 
  16 //---------------------------------------------------------------------------
 
  19 // wxEvtHandler: the base class for all objects handling wxWindows events
 
  20 class wxEvtHandler : public wxObject {
 
  22     // turn off this typemap
 
  23     %typemap(out) wxEvtHandler*;    
 
  25     %pythonAppend wxEvtHandler         "self._setOORInfo(self)"
 
  28     // Turn it back on again
 
  29     %typemap(out) wxEvtHandler* { $result = wxPyMake_wxObject($1, $owner); }
 
  31     wxEvtHandler* GetNextHandler();
 
  32     wxEvtHandler* GetPreviousHandler();
 
  33     void SetNextHandler(wxEvtHandler* handler);
 
  34     void SetPreviousHandler(wxEvtHandler* handler);
 
  36     bool GetEvtHandlerEnabled();
 
  37     void SetEvtHandlerEnabled(bool enabled);
 
  40     // process an event right now
 
  41     bool ProcessEvent(wxEvent& event);
 
  43     // add an event to be processed later
 
  44     void AddPendingEvent(wxEvent& event);
 
  46     // process all pending events
 
  47     void ProcessPendingEvents();
 
  50     void AllowReentrance( bool allow = true );
 
  51     bool IsReentranceAllowed();
 
  52     bool IsEventHandlingInProgress();
 
  55         // Dynamic association of a member function handler with the event handler
 
  56         void Connect( int id, int lastId, int eventType, PyObject* func) {
 
  57             if (PyCallable_Check(func)) {
 
  58                 self->Connect(id, lastId, eventType,
 
  59                           (wxObjectEventFunction) &wxPyCallback::EventThunker,
 
  60                           new wxPyCallback(func));
 
  62             else if (func == Py_None) {
 
  63                 self->Disconnect(id, lastId, eventType,
 
  64                                  (wxObjectEventFunction)
 
  65                                  &wxPyCallback::EventThunker);
 
  69                     PyErr_SetString(PyExc_TypeError, "Expected callable object or None."));
 
  73         bool Disconnect(int id, int lastId = -1,
 
  74                         wxEventType eventType = wxEVT_NULL) {
 
  75             return self->Disconnect(id, lastId, eventType,
 
  76                                    (wxObjectEventFunction)
 
  77                                     &wxPyCallback::EventThunker);
 
  81     %pythonAppend _setOORInfo   "args[0].thisown = 0";
 
  83         void _setOORInfo(PyObject* _self, bool incref=true) {
 
  84             if (_self && _self != Py_None) {
 
  85                 self->SetClientObject(new wxPyOORClientData(_self, incref));
 
  88                 wxPyOORClientData* data = (wxPyOORClientData*)self->GetClientObject();
 
  90                     self->SetClientObject(NULL);  // This will delete it too
 
  97         def Bind(self, event, handler, source=None, id=wx.ID_ANY, id2=wx.ID_ANY):
 
  99             Bind an event to an event handler.
 
 101             :param event: One of the EVT_* objects that specifies the
 
 102                           type of event to bind,
 
 104             :param handler: A callable object to be invoked when the
 
 105                           event is delivered to self.  Pass None to
 
 106                           disconnect an event handler.
 
 108             :param source: Sometimes the event originates from a
 
 109                           different window than self, but you still
 
 110                           want to catch it in self.  (For example, a
 
 111                           button event delivered to a frame.)  By
 
 112                           passing the source of the event, the event
 
 113                           handling system is able to differentiate
 
 114                           between the same event type from different
 
 117             :param id: Used to spcify the event source by ID instead
 
 120             :param id2: Used when it is desirable to bind a handler
 
 121                           to a range of IDs, such as with EVT_MENU_RANGE.
 
 123             if source is not None:
 
 125             event.Bind(self, id, id2, handler)              
 
 127         def Unbind(self, event, source=None, id=wx.ID_ANY, id2=wx.ID_ANY):
 
 129             Disconencts the event handler binding for event from self.
 
 130             Returns True if successful.
 
 132             if source is not None:
 
 134             return event.Unbind(self, id, id2)              
 
 137     %property(EvtHandlerEnabled, GetEvtHandlerEnabled, SetEvtHandlerEnabled, doc="See `GetEvtHandlerEnabled` and `SetEvtHandlerEnabled`");
 
 138     %property(NextHandler, GetNextHandler, SetNextHandler, doc="See `GetNextHandler` and `SetNextHandler`");
 
 139     %property(PreviousHandler, GetPreviousHandler, SetPreviousHandler, doc="See `GetPreviousHandler` and `SetPreviousHandler`");
 
 143 //---------------------------------------------------------------------------