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} };