28 #include <vdk/vdkobj.h> 29 #include <gdk/gdktypes.h> 40 class OBJECT_SIGNALTableEntry {
42 typedef bool (T::*OBJPMF)(
VDKObject* sender);
53 #define DECLARE_OBJECT_SIGNAL_MAP(_OBJECT_SIGNALclass_) \ 55 static OBJECT_SIGNALTableEntry< _OBJECT_SIGNALclass_ > __OC_OBJ_Bentries[];\ 56 typedef OBJECT_SIGNALTableEntry< _OBJECT_SIGNALclass_ >::OBJPMF _Member_;\ 57 typedef _OBJECT_SIGNALclass_ _OBJECT_SIGNALmyclass_;\ 59 virtual int VDKObjectSignalResponseTableSize();\ 61 virtual int VDKObjectSignalResponse(GtkWidget*,int signal,void*, bool);\ 62 virtual int ObjectSignalDetach(int signal);\ 63 virtual bool ObjectSignalAttach(int slot); 68 #define DEFINE_OBJECT_SIGNAL_MAP(_OBJECT_SIGNALclass_,base)\ 73 int _OBJECT_SIGNALclass_::VDKObjectSignalResponse(GtkWidget* mobj, int signal, void* obj, bool treated) \ 76 VDKObject* vdkobj = static_cast<VDKObject*>(obj);\ 78 for(;__OC_OBJ_Bentries[t].signal >= 0 ;t++)\ 80 if( (__OC_OBJ_Bentries[t].signal == signal) )\ 82 if (__OC_OBJ_Bentries[t].connected)\ 84 bool (_OBJECT_SIGNALclass_::*response)(VDKObject* sender)=\ 85 __OC_OBJ_Bentries[t].Pmf;\ 86 if(((*this).*response)(vdkobj))\ 92 if(treated) return 1;\ 93 else return base::VDKObjectSignalResponse(mobj,signal,obj, treated); \ 98 int _OBJECT_SIGNALclass_::VDKObjectSignalResponseTableSize()\ 101 for(;__OC_OBJ_Bentries[t].signal >= 0;t++)\ 108 int _OBJECT_SIGNALclass_::ObjectSignalDetach(int signal)\ 111 for(;__OC_OBJ_Bentries[t].signal>= 0 ;t++)\ 113 if((__OC_OBJ_Bentries[t].signal == signal) &&\ 114 __OC_OBJ_Bentries[t].connected != false)\ 116 __OC_OBJ_Bentries[t].connected = false;\ 125 bool _OBJECT_SIGNALclass_::ObjectSignalAttach(int slot)\ 127 if( (slot >= 0) && (slot <= VDKObjectSignalResponseTableSize()) )\ 129 __OC_OBJ_Bentries[slot].connected = true;\ 137 OBJECT_SIGNALTableEntry< _OBJECT_SIGNALclass_ > _OBJECT_SIGNALclass_::__OC_OBJ_Bentries[] = { 141 #define ON_OBJECT_SIGNAL(_OBJECT_SIGNAL_,_member_) \ 142 {_OBJECT_SIGNAL_,&(_OBJECT_SIGNALmyclass_::_member_),true} 145 #define END_OBJECT_SIGNAL_MAP ,{-1, NULL,false} }; 156 class OBJECT_EVENTTableEntry {
158 typedef bool (T::*OBJPMF)(
VDKObject* sender, GdkEvent* event);
167 #define DECLARE_OBJECT_EVENT_MAP(_OBJECT_EVENTclass_) \ 169 static OBJECT_EVENTTableEntry< _OBJECT_EVENTclass_ > __OCBOBJECT_EVENTEntries[];\ 170 typedef OBJECT_EVENTTableEntry< _OBJECT_EVENTclass_ >::OBJPMF _EvMember_;\ 171 typedef _OBJECT_EVENTclass_ _OBJECT_EVENTmyclass_;\ 173 virtual int VDKObjectEventResponseTableSize();\ 175 virtual int VDKObjectEventResponse(GtkWidget* , GdkEvent* , void*, bool);\ 176 virtual int ObjectEventDetach(VDKEvent event);\ 177 virtual bool ObjectEventAttach(int slot); 182 #define DEFINE_OBJECT_EVENT_MAP(_OBJECT_EVENTclass_,base) \ 183 int _OBJECT_EVENTclass_::VDKObjectEventResponse(GtkWidget* wid, GdkEvent* event, void* obj, bool treated) \ 186 VDKObject* vdkobj = static_cast<VDKObject*>(obj);\ 187 for(;__OCBOBJECT_EVENTEntries[t].event >= 0 ;t++)\ 189 if((__OCBOBJECT_EVENTEntries[t].event == ((GdkEventAny*)event)->type) )\ 191 if (__OCBOBJECT_EVENTEntries[t].connected)\ 193 bool (_OBJECT_EVENTclass_::*response)\ 194 (VDKObject* , GdkEvent* )= \ 195 __OCBOBJECT_EVENTEntries[t].Pmf;\ 196 if(((*this).*response)(vdkobj,event))\ 202 if(treated) return 1;\ 203 else return base::VDKObjectEventResponse(wid,event,obj, treated); \ 208 int _OBJECT_EVENTclass_::VDKObjectEventResponseTableSize()\ 211 for(;__OCBOBJECT_EVENTEntries[t].event>= 0;t++)\ 218 int _OBJECT_EVENTclass_::ObjectEventDetach(VDKEvent event)\ 221 for(;__OCBOBJECT_EVENTEntries[t].event >= 0 ;t++)\ 223 if((__OCBOBJECT_EVENTEntries[t].event == (GdkEventType) event) &&\ 224 __OCBOBJECT_EVENTEntries[t].connected != false)\ 226 __OCBOBJECT_EVENTEntries[t].connected = false;\ 235 bool _OBJECT_EVENTclass_::ObjectEventAttach(int slot)\ 237 if( (slot >= 0) && (slot <= VDKObjectEventResponseTableSize()) )\ 239 __OCBOBJECT_EVENTEntries[slot].connected = true;\ 247 OBJECT_EVENTTableEntry< _OBJECT_EVENTclass_ > _OBJECT_EVENTclass_::__OCBOBJECT_EVENTEntries[] = { 251 #define ON_OBJECT_EVENT(_OBJECT_EVENT_,_member_) \ 252 {(GdkEventType) _OBJECT_EVENT_,&(_OBJECT_EVENTmyclass_::_member_),true} 255 #define END_OBJECT_EVENT_MAP ,{(GdkEventType) -1, NULL,false} };