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