Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members  

evobjhandle.h

00001 /*
00002  * ===========================
00003  * VDK Visual Develeopment Kit
00004  * Version 0.4
00005  * October 1998
00006  * ===========================
00007  *
00008  * Copyright (C) 1998, Mario Motta
00009  * Developed by Mario Motta <mmotta@guest.net>
00010  *
00011  * This library is free software; you can redistribute it and/or
00012  * modify it under the terms of the GNU Library General Public
00013  * License as published by the Free Software Foundation; either
00014  * version 2 of the License, or (at your option) any later version.
00015  *
00016  * This library is distributed in the hope that it will be useful,
00017  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00018  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00019  * Library General Public License for more details.
00020  *
00021  * You should have received a copy of the GNU Library General Public
00022  * License along with this library; if not, write to the Free Software
00023  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
00024  * 02111-1307, USA.
00025  */
00026 #ifndef EVJOBHANDLE_H
00027 #define EVJOBHANDLE_H
00028 #include <vdk/vdkobj.h>
00029 #include <gdk/gdktypes.h>
00030 /*
00031 ==============================================
00032          OBJECT_SIGNAL DISPATCHER ROUTINES
00033 ==============================================
00034 */
00035 /*
00036 OBJECT_SIGNALTableEntry:
00037 Obj/Signal/Response method Table Entry
00038 */
00039 template <class T>
00040 class OBJECT_SIGNALTableEntry {
00041   public:
00042   typedef bool (T::*OBJPMF)(VDKObject* sender);
00043   int signal; /* signal type (see enum VDKSignal in vdkobj.h) */
00044   OBJPMF    Pmf;  /* pointer to <class T> member function */
00045   bool connected; /* connected flag, if false deny signal */
00046 };
00047 
00048  
00049 /*
00050 Signal response function map declaration:
00051 declare a static signal table for each object class
00052 */
00053 #define DECLARE_OBJECT_SIGNAL_MAP(_OBJECT_SIGNALclass_)  \
00054 private:\
00055 static OBJECT_SIGNALTableEntry< _OBJECT_SIGNALclass_ > __OC_OBJ_Bentries[];\
00056 typedef OBJECT_SIGNALTableEntry< _OBJECT_SIGNALclass_ >::OBJPMF _Member_;\
00057 typedef _OBJECT_SIGNALclass_  _OBJECT_SIGNALmyclass_;\
00058 protected:\
00059     virtual int  VDKObjectSignalResponseTableSize();\
00060 public:\
00061     virtual int  VDKObjectSignalResponse(GtkWidget*,int signal,void*, bool);\
00062     virtual int  ObjectSignalDetach(int signal);\
00063     virtual bool ObjectSignalAttach(int slot);
00064 /*
00065 define form signal response function that in turn call
00066 object signal response function
00067 */
00068 #define DEFINE_OBJECT_SIGNAL_MAP(_OBJECT_SIGNALclass_,base)\
00069 \
00070 \
00071 \
00072 \
00073 int _OBJECT_SIGNALclass_::VDKObjectSignalResponse(GtkWidget* mobj, int signal, void* obj, bool treated) \
00074 {\
00075 int t=0;\
00076 VDKObject* vdkobj = static_cast<VDKObject*>(obj);\
00077                                                    /*bool treated = false;*/\
00078 for(;__OC_OBJ_Bentries[t].signal >= 0 ;t++)\
00079   {\
00080      if( (__OC_OBJ_Bentries[t].signal == signal) )\
00081        {\
00082          if (__OC_OBJ_Bentries[t].connected)\
00083            {\
00084            bool (_OBJECT_SIGNALclass_::*response)(VDKObject* sender)=\
00085                     __OC_OBJ_Bentries[t].Pmf;\
00086             if(((*this).*response)(vdkobj))\
00087              treated = true;\
00088            }\
00089               /*break;*/\
00090        }\
00091    }\
00092 if(treated) return 1;\
00093 else return base::VDKObjectSignalResponse(mobj,signal,obj, treated); \
00094 }\
00095 \
00096 \
00097 \
00098 int _OBJECT_SIGNALclass_::VDKObjectSignalResponseTableSize()\
00099 {\
00100 int t = 0;\
00101 for(;__OC_OBJ_Bentries[t].signal >= 0;t++)\
00102    ;\
00103 return t;\
00104 }\
00105 \
00106 \
00107 \
00108 int _OBJECT_SIGNALclass_::ObjectSignalDetach(int signal)\
00109 {\
00110 int t=0;\
00111 for(;__OC_OBJ_Bentries[t].signal>= 0 ;t++)\
00112   {\
00113      if((__OC_OBJ_Bentries[t].signal == signal) &&\
00114         __OC_OBJ_Bentries[t].connected != false)\
00115        {\
00116          __OC_OBJ_Bentries[t].connected = false;\
00117          return t;\
00118        }\
00119    }\
00120 return -1;\
00121 }\
00122 \
00123 \
00124 \
00125 bool _OBJECT_SIGNALclass_::ObjectSignalAttach(int slot)\
00126 {\
00127 if( (slot >= 0) && (slot <= VDKObjectSignalResponseTableSize()) )\
00128      {\
00129      __OC_OBJ_Bentries[slot].connected = true;\
00130      return true;\
00131      }\
00132 else\
00133      return false;\
00134 }\
00135 \
00136 \
00137 OBJECT_SIGNALTableEntry< _OBJECT_SIGNALclass_ > _OBJECT_SIGNALclass_::__OC_OBJ_Bentries[] = {
00138 /*
00139 fill static signal table
00140 */
00141 #define ON_OBJECT_SIGNAL(_OBJECT_SIGNAL_,_member_)  \
00142   {_OBJECT_SIGNAL_,&(_OBJECT_SIGNALmyclass_::_member_),true}
00143 /*
00144 */
00145 #define END_OBJECT_SIGNAL_MAP ,{-1, NULL,false} };
00146 /*
00147 ==============================================
00148          OBJECT_EVENT DISPATCHER ROUTINES
00149 ==============================================
00150 */
00151 /*
00152 OBJECT_EVENTTableEntry:
00153 Event-ObjectCallback Table Entry
00154 */
00155 template <class T>
00156 class OBJECT_EVENTTableEntry {
00157  public:
00158   typedef bool (T::*OBJPMF)(VDKObject* sender, GdkEvent* event);
00159   GdkEventType event; /* event type (see enum VDKevent in vdkobj.h) */
00160   OBJPMF    Pmf;  /* pointer to <class T> member function */
00161   bool connected;
00162 };
00163 /*
00164 Events response function map declaration:
00165 declare a static events table for each form
00166 */
00167 #define DECLARE_OBJECT_EVENT_MAP(_OBJECT_EVENTclass_)  \
00168 private:\
00169 static OBJECT_EVENTTableEntry< _OBJECT_EVENTclass_ > __OCBOBJECT_EVENTEntries[];\
00170 typedef OBJECT_EVENTTableEntry< _OBJECT_EVENTclass_ >::OBJPMF _EvMember_;\
00171 typedef _OBJECT_EVENTclass_  _OBJECT_EVENTmyclass_;\
00172 protected:\
00173     virtual int VDKObjectEventResponseTableSize();\
00174 public:\
00175     virtual int  VDKObjectEventResponse(GtkWidget* , GdkEvent* , void*, bool);\
00176     virtual int  ObjectEventDetach(VDKEvent event);\
00177     virtual bool ObjectEventAttach(int slot);
00178 /*
00179 define form OBJECT_EVENT response function that in turn call
00180 object OBJECT_EVENT response function
00181 */
00182 #define DEFINE_OBJECT_EVENT_MAP(_OBJECT_EVENTclass_,base)  \
00183 int _OBJECT_EVENTclass_::VDKObjectEventResponse(GtkWidget* wid, GdkEvent* event, void* obj, bool treated) \
00184 {\
00185 int t=0;\
00186 VDKObject* vdkobj = static_cast<VDKObject*>(obj);\
00187 for(;__OCBOBJECT_EVENTEntries[t].event >= 0 ;t++)\
00188   {\
00189      if((__OCBOBJECT_EVENTEntries[t].event == ((GdkEventAny*)event)->type) )\
00190        {\
00191           if (__OCBOBJECT_EVENTEntries[t].connected)\
00192              {\
00193                 bool (_OBJECT_EVENTclass_::*response)\
00194                  (VDKObject* , GdkEvent* )= \
00195                  __OCBOBJECT_EVENTEntries[t].Pmf;\
00196                if(((*this).*response)(vdkobj,event))\
00197                  treated = true;\
00198              }\
00199                 /*break;*/\
00200        }\
00201    }\
00202 if(treated) return 1;\
00203 else return base::VDKObjectEventResponse(wid,event,obj, treated); \
00204 }\
00205 \
00206 \
00207 \
00208 int _OBJECT_EVENTclass_::VDKObjectEventResponseTableSize()\
00209 {\
00210 int t = 0;\
00211 for(;__OCBOBJECT_EVENTEntries[t].event>= 0;t++)\
00212    ;\
00213 return t;\
00214 }\
00215 \
00216 \
00217 \
00218 int _OBJECT_EVENTclass_::ObjectEventDetach(VDKEvent event)\
00219 {\
00220 int t=0;\
00221 for(;__OCBOBJECT_EVENTEntries[t].event >= 0 ;t++)\
00222   {\
00223      if((__OCBOBJECT_EVENTEntries[t].event == (GdkEventType) event) &&\
00224         __OCBOBJECT_EVENTEntries[t].connected != false)\
00225        {\
00226          __OCBOBJECT_EVENTEntries[t].connected = false;\
00227          return t;\
00228        }\
00229    }\
00230 return -1;\
00231 }\
00232 \
00233 \
00234 \
00235 bool _OBJECT_EVENTclass_::ObjectEventAttach(int slot)\
00236 {\
00237 if( (slot >= 0) && (slot <= VDKObjectEventResponseTableSize()) )\
00238      {\
00239      __OCBOBJECT_EVENTEntries[slot].connected = true;\
00240      return true;\
00241      }\
00242 else\
00243      return false;\
00244 }\
00245 \
00246 \
00247 OBJECT_EVENTTableEntry< _OBJECT_EVENTclass_ > _OBJECT_EVENTclass_::__OCBOBJECT_EVENTEntries[] = {
00248 /*
00249 fill static OBJECT_EVENT table
00250 */
00251 #define ON_OBJECT_EVENT(_OBJECT_EVENT_,_member_)  \
00252   {(GdkEventType) _OBJECT_EVENT_,&(_OBJECT_EVENTmyclass_::_member_),true}
00253 /*
00254 */
00255 #define END_OBJECT_EVENT_MAP ,{(GdkEventType) -1, NULL,false} };
00256 
00257 #endif
00258 
00259 
00260 
00261 
00262 

Generated on Sat May 4 23:45:38 2002 for vdk 2.0.1 by doxygen1.2.14 written by Dimitri van Heesch, © 1997-2002