33 template <
class Param1,
class Param2>
class Signal2 :
public ISignalBase {
43 void operator=(
const Signal2 &) =
delete;
44 void operator=(
Signal2 &&) =
delete;
55 virtual void execute(Param1,Param2);
85 template <
class T,
void (T::*MFP)(Param1,Param2)>
87 AutoSlot2<T,MFP> *s = NEW(
"AutoSlot") AutoSlot2<T,MFP>(t);
88 attach(s,
typeid(*s).name());
97 template <
class T,
void (T::*MFP)(Param1)>
99 AutoSlot1<T,MFP> *s = NEW(
"AutoSlot") AutoSlot1<T,MFP>(t);
100 attach(s,
typeid(*s).name());
109 template <
class T,
void (T::*MFP)()>
111 AutoSlot0<T,MFP> *s = NEW(
"AutoSlot") AutoSlot0<T,MFP>(t);
112 attach(s,
typeid(*s).name());
119 template <
class T,
void (T::*MFP)(Param1,Param2)>
121 AutoSlot2<T,MFP> s = AutoSlot2<T,MFP>(t);
122 remove(t,
typeid(s).name());
129 template <
class T,
void (T::*MFP)(Param1)>
131 AutoSlot1<T,MFP> s = AutoSlot1<T,MFP>(t);
132 remove(t,
typeid(s).name());
139 template <
class T,
void (T::*MFP)()>
141 AutoSlot0<T,MFP> s = AutoSlot0<T,MFP>(t);
142 remove(t,
typeid(s).name());
162 typedef QMultiMap<QString,SlotType *> SlotMap;
163 QList<ISignalBase *> signals_;
167 template <
class T,
void (T::*MFP)(Param1,Param2)>
class AutoSlot2 :
public SlotType {
169 AutoSlot2(T *t) : t_(t) { assert(t_); }
170 virtual void execute(Param1 v1,Param2 v2) {
174 virtual ISlotBase *getBase() {
return t_; }
180 template <
class T,
void (T::*MFP)(Param1)>
class AutoSlot1 :
public SlotType {
182 AutoSlot1(T *t) : t_(t) { assert(t_); }
183 virtual void execute(Param1 v1,Param2) {
187 virtual ISlotBase *getBase() {
return t_; }
193 template <
class T,
void (T::*MFP)()>
class AutoSlot0 :
public SlotType {
195 AutoSlot0(T *t) : t_(t) { assert(t_); }
196 virtual void execute(Param1,Param2) {
200 virtual ISlotBase *getBase() {
return t_; }
206 template <
class Param1,
class Param2>
208 while (signals_.size()) {
212 while (map_.size()) {
213 typename SlotMap::iterator it = map_.begin();
221 template <
class Param1,
class Param2>
223 for (
typename SlotMap::iterator it=map_.begin();it!=map_.end();++it)
224 it.value()->execute(v1,v2);
227 template <
class Param1,
class Param2>
230 map_.insert(name,slot);
234 template <
class Param1,
class Param2>
236 if (slot && name.length()) {
237 for (
typename SlotMap::iterator it=map_.find(name);it!=map_.end() && it.key()==name;++it) {
249 QList<QPair<QString,SlotType *> > toRemove;
250 for (
typename SlotMap::iterator it=map_.begin();it!=map_.end();++it) {
251 if (it.value()->getBase()==slot)
252 toRemove.push_back(QPair<QString,SlotType *>(it.key(),it.value()));
254 for (
int i=0;i<toRemove.size();++i) {
255 QPair<QString,SlotType *> &p = toRemove[i];
256 map_.remove(p.first,p.second);
260 return toRemove.size() ? true :
false;
263 QList<QPair<QString,SlotType *> > toRemove;
264 for (
typename SlotMap::iterator it=map_.find(name);it!=map_.end() && it.key()==name;++it)
265 toRemove.push_back(QPair<QString,SlotType *>(it.key(),it.value()));
266 for (
int i=0;i<toRemove.size();++i) {
267 QPair<QString,SlotType *> &p = toRemove[i];
268 map_.remove(p.first,p.second);
269 p.second->getBase()->removeNotice(
this);
272 return toRemove.size() ? true :
false;
275 while (map_.size()) {
276 typename SlotMap::iterator it = map_.begin();
285 template <
class Param1,
class Param2>
287 signals_.push_back(signal);
290 template <
class Param1,
class Param2>
292 int i = signals_.indexOf(signal);
294 signals_.removeAt(i);
virtual void execute(Param1, Param2)
Definition: signal2.h:222
namespace Itasca
Definition: basememory.cpp:9
Definition of a Signal2 object, holding a list of ISlot2 objects.
Definition: isignalbase.h:76
Signal base class.
Definition: isignalbase.h:44
virtual ~Signal2()
Definition: signal2.h:207
void attachMethod0(T *t)
Definition: signal2.h:110
void removeSignal(Signal2< Param1, Param2 > *sig)
Definition: signal2.h:157
virtual void attachNotice(ISignalBase *signal)=0
virtual void removeNotice(ISignalBase *signal)=0
Interface for the small-granularity callback utility.
Slot base class.
Definition: isignalbase.h:23
void attachSignal(Signal2< Param1, Param2 > *sig)
Definition: signal2.h:150
void removeMethod2(T *t)
Definition: signal2.h:120
virtual void attachNotice(ISignalBase *signal)
Definition: signal2.h:286
void removeMethod1(T *t)
Definition: signal2.h:130
ISlot2 interface - a two-argument class.
Definition: isignalbase.h:66
void attachMethod2(T *t)
Definition: signal2.h:86
virtual bool remove(ISlotBase *slot, const QString &name=QString())=0
ISlot2< Param1, Param2 > SlotType
Define SlotType as an ISlot2 object with template arguments Param1 and Param2.
Definition: signal2.h:37
void attachMethod1(T *t)
Definition: signal2.h:98
void removeMethod0(T *t)
Definition: signal2.h:140
Signal2()
Default constructor - no values are set.
Definition: signal2.h:40
virtual void removeNotice(ISignalBase *signal)
Definition: signal2.h:291
virtual void attach(SlotType *, const QString &)
Definition: signal2.h:228
virtual ISlotBase * getBase()=0
Returns the ISlotBase pointer to the base class from which this ISlot2 is derived.
bool remove(ISlotBase *slot, const QString &name=QString())
Definition: signal2.h:235