28#include <vdk/vdkobj.h>
29#include <gdk/gdktypes.h>
40class OBJECT_SIGNALTableEntry {
42 typedef bool (T::*OBJPMF)(
VDKObject* sender);
53#define DECLARE_OBJECT_SIGNAL_MAP(_OBJECT_SIGNALclass_) \
55static OBJECT_SIGNALTableEntry< _OBJECT_SIGNALclass_ > __OC_OBJ_Bentries[];\
56typedef OBJECT_SIGNALTableEntry< _OBJECT_SIGNALclass_ >::OBJPMF _Member_;\
57typedef _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)\
73int _OBJECT_SIGNALclass_::VDKObjectSignalResponse(GtkWidget* mobj, int signal, void* obj, bool treated) \
76VDKObject* vdkobj = static_cast<VDKObject*>(obj);\
78for(;__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))\
93else return base::VDKObjectSignalResponse(mobj,signal,obj, treated); \
98int _OBJECT_SIGNALclass_::VDKObjectSignalResponseTableSize()\
101for(;__OC_OBJ_Bentries[t].signal >= 0;t++)\
108int _OBJECT_SIGNALclass_::ObjectSignalDetach(int signal)\
111for(;__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;\
125bool _OBJECT_SIGNALclass_::ObjectSignalAttach(int slot)\
127if( (slot >= 0) && (slot <= VDKObjectSignalResponseTableSize()) )\
129 __OC_OBJ_Bentries[slot].connected = true;\
137OBJECT_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} };
156class OBJECT_EVENTTableEntry {
158 typedef bool (T::*OBJPMF)(
VDKObject* sender, GdkEvent* event);
167#define DECLARE_OBJECT_EVENT_MAP(_OBJECT_EVENTclass_) \
169static OBJECT_EVENTTableEntry< _OBJECT_EVENTclass_ > __OCBOBJECT_EVENTEntries[];\
170typedef OBJECT_EVENTTableEntry< _OBJECT_EVENTclass_ >::OBJPMF _EvMember_;\
171typedef _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) \
183int _OBJECT_EVENTclass_::VDKObjectEventResponse(GtkWidget* wid, GdkEvent* event, void* obj, bool treated) \
186VDKObject* vdkobj = static_cast<VDKObject*>(obj);\
187for(;__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))\
202if(treated) return 1;\
203else return base::VDKObjectEventResponse(wid,event,obj, treated); \
208int _OBJECT_EVENTclass_::VDKObjectEventResponseTableSize()\
211for(;__OCBOBJECT_EVENTEntries[t].event>= 0;t++)\
218int _OBJECT_EVENTclass_::ObjectEventDetach(VDKEvent event)\
221for(;__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;\
235bool _OBJECT_EVENTclass_::ObjectEventAttach(int slot)\
237if( (slot >= 0) && (slot <= VDKObjectEventResponseTableSize()) )\
239 __OCBOBJECT_EVENTEntries[slot].connected = true;\
247OBJECT_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} };