27 #ifndef _sigc_addon_h_
28 #define _sigc_addon_h_
29 #ifdef USE_SIGCPLUSPLUS
30 #include <sigc++/signal_system.h>
32 #ifdef SIGC_CXX_NAMESPACES
57 template<
class Ret,
class T>
58 class DualSignal0 :
public SigC::Signal1<Ret, T>,
59 public SigC::Signal0<Ret>
65 typedef SigC::Signal0<Ret> short_signal_t;
66 typedef SigC::Signal1<Ret,T> long_signal_t;
68 Connection connect(
const Slot0<Ret> &sl)
69 {
return short_signal_t::connect(sl);}
71 Connection connect(
const Slot1<Ret, T> &sl)
72 {
return long_signal_t::connect(sl);}
75 {short_signal_t::emit();
76 return long_signal_t::emit(obj);}
79 {short_signal_t::emit();
80 return long_signal_t::emit(obj);}
83 {
return (short_signal_t::empty() &&
84 long_signal_t::empty());}
87 template<
class Ret,
class T,
class P1>
89 DualSignal1 :
public SigC::Signal2<Ret, T, P1>,
90 public SigC::Signal1<Ret, P1>
96 typedef SigC::Signal1<Ret,P1> short_signal_t;
97 typedef SigC::Signal2<Ret,T,P1> long_signal_t;
99 Connection connect(
const Slot1<Ret,P1> &sl)
100 {
return short_signal_t::connect(sl);}
102 Connection connect(
const Slot2<Ret, T,P1> &sl)
103 {
return long_signal_t::connect(sl);}
105 Ret emit(T obj, P1 p1)
106 {short_signal_t::emit(p1);
107 return long_signal_t::emit(obj,p1);}
109 Ret operator()(T obj, P1 p1)
110 {short_signal_t::emit(p1);
111 return long_signal_t::emit(obj,p1);}
114 {
return (short_signal_t::empty() &&
115 long_signal_t::empty());}
118 template<
class Ret,
class T,
class P1,
class P2>
120 DualSignal2 :
public SigC::Signal3<Ret, T, P1, P2>,
121 public SigC::Signal2<Ret, P1, P2>
125 Ret operator()(P1,P2){}
127 typedef SigC::Signal2<Ret,P1,P2> short_signal_t;
128 typedef SigC::Signal3<Ret,T,P1,P2> long_signal_t;
130 Connection connect(
const Slot2<Ret,P1,P2> &sl)
131 {
return short_signal_t::connect(sl);}
133 Connection connect(
const Slot3<Ret, T,P1,P2> &sl)
134 {
return long_signal_t::connect(sl);}
136 Ret emit(T obj, P1 p1, P2 p2)
137 {short_signal_t::emit(p1,p2);
138 return long_signal_t::emit(obj,p1,p2);}
140 Ret operator()(T obj, P1 p1, P2 p2)
141 {short_signal_t::emit(p1,p2);
142 return long_signal_t::emit(obj,p1,p2);}
145 {
return (short_signal_t::empty() &&
146 long_signal_t::empty());}
149 template<
class Ret,
class T,
class P1,
class P2,
class P3>
151 DualSignal3 :
public SigC::Signal4<Ret, T, P1, P2, P3>,
152 public SigC::Signal3<Ret, P1, P2, P3>
155 Ret emit(P1,P2,P3){};
156 Ret operator()(P1,P2,P3){}
158 typedef SigC::Signal3<Ret,P1,P2,P3> short_signal_t;
159 typedef SigC::Signal4<Ret,T,P1,P2,P3> long_signal_t;
161 Connection connect(
const Slot3<Ret,P1,P2,P3> &sl)
162 {
return short_signal_t::connect(sl);}
164 Connection connect(
const Slot4<Ret, T,P1,P2,P3> &sl)
165 {
return long_signal_t::connect(sl);}
167 Ret emit(T obj, P1 p1, P2 p2,P3 p3)
168 {short_signal_t::emit(p1,p2,p3);
169 return long_signal_t::emit(obj,p1,p2,p3);}
171 Ret operator()(T obj, P1 p1, P2 p2, P3 p3)
172 {short_signal_t::emit(p1,p2,p3);
173 return long_signal_t::emit(obj,p1,p2,p3);}
176 {
return (short_signal_t::empty() &&
177 long_signal_t::empty());}
181 class VDKSignal0 :
public DualSignal0<Ret, VDKObject*>{};
183 template<
class Ret,
class P1>
184 class VDKSignal1 :
public DualSignal1<Ret, VDKObject*, P1>{};
186 template<
class Ret,
class P1,
class P2>
187 class VDKSignal2 :
public DualSignal2<Ret, VDKObject*, P1, P2>{};
189 template<
class Ret,
class P1,
class P2,
class P3>
190 class VDKSignal3 :
public DualSignal3<Ret, VDKObject*, P1, P2, P3>{};