sigc_addon.h
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #ifndef _sigc_addon_h_
00028 #define _sigc_addon_h_
00029 #ifdef USE_SIGCPLUSPLUS
00030 #include <sigc++/signal_system.h>
00031
00032 #ifdef SIGC_CXX_NAMESPACES // currently code depends on this!
00033 using namespace std;
00034 using namespace SigC;
00035 #endif
00036
00057 template<class Ret, class T>
00058 class DualSignal0 : public SigC::Signal1<Ret, T>,
00059 public SigC::Signal0<Ret>
00060 {
00061 private:
00062
00063
00064 public:
00065 typedef SigC::Signal0<Ret> short_signal_t;
00066 typedef SigC::Signal1<Ret,T> long_signal_t;
00067
00068 Connection connect(const Slot0<Ret> &sl)
00069 {return short_signal_t::connect(sl);}
00070
00071 Connection connect(const Slot1<Ret, T> &sl)
00072 {return long_signal_t::connect(sl);}
00073
00074 Ret emit(T obj)
00075 {short_signal_t::emit();
00076 return long_signal_t::emit(obj);}
00077
00078 Ret operator()(T obj)
00079 {short_signal_t::emit();
00080 return long_signal_t::emit(obj);}
00081
00082 bool empty() const
00083 {return (short_signal_t::empty() &&
00084 long_signal_t::empty());}
00085 };
00086
00087 template<class Ret, class T, class P1>
00088 class
00089 DualSignal1 : public SigC::Signal2<Ret, T, P1>,
00090 public SigC::Signal1<Ret, P1>
00091 {
00092 private:
00093 Ret emit(P1){};
00094 Ret operator()(P1){}
00095 public:
00096 typedef SigC::Signal1<Ret,P1> short_signal_t;
00097 typedef SigC::Signal2<Ret,T,P1> long_signal_t;
00098
00099 Connection connect(const Slot1<Ret,P1> &sl)
00100 {return short_signal_t::connect(sl);}
00101
00102 Connection connect(const Slot2<Ret, T,P1> &sl)
00103 {return long_signal_t::connect(sl);}
00104
00105 Ret emit(T obj, P1 p1)
00106 {short_signal_t::emit(p1);
00107 return long_signal_t::emit(obj,p1);}
00108
00109 Ret operator()(T obj, P1 p1)
00110 {short_signal_t::emit(p1);
00111 return long_signal_t::emit(obj,p1);}
00112
00113 bool empty() const
00114 {return (short_signal_t::empty() &&
00115 long_signal_t::empty());}
00116 };
00117
00118 template<class Ret, class T, class P1, class P2>
00119 class
00120 DualSignal2 : public SigC::Signal3<Ret, T, P1, P2>,
00121 public SigC::Signal2<Ret, P1, P2>
00122 {
00123 private:
00124 Ret emit(P1,P2){};
00125 Ret operator()(P1,P2){}
00126 public:
00127 typedef SigC::Signal2<Ret,P1,P2> short_signal_t;
00128 typedef SigC::Signal3<Ret,T,P1,P2> long_signal_t;
00129
00130 Connection connect(const Slot2<Ret,P1,P2> &sl)
00131 {return short_signal_t::connect(sl);}
00132
00133 Connection connect(const Slot3<Ret, T,P1,P2> &sl)
00134 {return long_signal_t::connect(sl);}
00135
00136 Ret emit(T obj, P1 p1, P2 p2)
00137 {short_signal_t::emit(p1,p2);
00138 return long_signal_t::emit(obj,p1,p2);}
00139
00140 Ret operator()(T obj, P1 p1, P2 p2)
00141 {short_signal_t::emit(p1,p2);
00142 return long_signal_t::emit(obj,p1,p2);}
00143
00144 bool empty() const
00145 {return (short_signal_t::empty() &&
00146 long_signal_t::empty());}
00147 };
00148
00149 template<class Ret, class T, class P1, class P2, class P3>
00150 class
00151 DualSignal3 : public SigC::Signal4<Ret, T, P1, P2, P3>,
00152 public SigC::Signal3<Ret, P1, P2, P3>
00153 {
00154 private:
00155 Ret emit(P1,P2,P3){};
00156 Ret operator()(P1,P2,P3){}
00157 public:
00158 typedef SigC::Signal3<Ret,P1,P2,P3> short_signal_t;
00159 typedef SigC::Signal4<Ret,T,P1,P2,P3> long_signal_t;
00160
00161 Connection connect(const Slot3<Ret,P1,P2,P3> &sl)
00162 {return short_signal_t::connect(sl);}
00163
00164 Connection connect(const Slot4<Ret, T,P1,P2,P3> &sl)
00165 {return long_signal_t::connect(sl);}
00166
00167 Ret emit(T obj, P1 p1, P2 p2,P3 p3)
00168 {short_signal_t::emit(p1,p2,p3);
00169 return long_signal_t::emit(obj,p1,p2,p3);}
00170
00171 Ret operator()(T obj, P1 p1, P2 p2, P3 p3)
00172 {short_signal_t::emit(p1,p2,p3);
00173 return long_signal_t::emit(obj,p1,p2,p3);}
00174
00175 bool empty() const
00176 {return (short_signal_t::empty() &&
00177 long_signal_t::empty());}
00178 };
00179
00180 template<class Ret>
00181 class VDKSignal0 : public DualSignal0<Ret, VDKObject*>{};
00182
00183 template<class Ret, class P1>
00184 class VDKSignal1 : public DualSignal1<Ret, VDKObject*, P1>{};
00185
00186 template<class Ret, class P1, class P2>
00187 class VDKSignal2 : public DualSignal2<Ret, VDKObject*, P1, P2>{};
00188
00189 template<class Ret, class P1, class P2, class P3>
00190 class VDKSignal3 : public DualSignal3<Ret, VDKObject*, P1, P2, P3>{};
00191
00192 #endif
00193 #endif
00194
Generated on Tue Aug 17 12:39:50 2004 for vdk 2.4.0 by
1.3.7