38 #define mCBFn(fn) (static_cast<CallBackFunction>(&fn)) 41 #define mCB(obj,clss,fn) CallBack( static_cast<clss*>(obj), mCBFn(clss::fn)) 44 #define mSCB(fn) CallBack( (static_cast<StaticCallBackFunction>(&fn)) ) 46 class QCallBackEventReceiver;
67 : cberobj_(0), fn_(0), sfn_(0) {}
69 : cberobj_(o), fn_(f), sfn_(0) {}
71 : cberobj_(0), fn_(0), sfn_(f) {}
74 {
return !(*
this==cb); }
77 {
return disablecount_ == 0
78 && ((cberobj_ && fn_) || sfn_); }
81 void disable(
bool yn=
true)
const;
82 void enable()
const { disable(
false); }
89 static bool addToMainThread(
const CallBack&,
CallBacker* =0);
99 static bool callInMainThread(
const CallBack&,
CallBacker* =0);
108 static void removeFromThreadCalls(
const CallBacker*);
126 static bool queueIfNotInMainThread(CallBack,
131 { removeFromThreadCalls(cber); }
134 #define mMainThreadCall( func ) \ 135 CallBack::callInMainThread( CallBack( this, mCBFn(func) ), 0) 137 #define mEnsureExecutedInMainThread( func ) \ 138 if ( CallBack::queueIfNotInMainThread( \ 139 CallBack( this, mCBFn(func) ), 0 ) ) \ 142 #define mEnsureExecutedInMainThreadWithCapsule( func, caps ) \ 143 CallBack cb( this, mCBFn(func) ); \ 144 if ( CallBack::queueIfNotInMainThread(cb,caps->clone()) ) \ 159 void disableAll(
bool yn=
true);
160 bool hasAnyDisabled()
const;
189 virtual ~CallBacker();
192 bool onlyifnew=
false)
const;
198 bool onlyifnew=
false)
const;
206 {
if ( notif ) detachCB( *notif, cb ); }
215 void detachAllNotifiers()
const;
232 { detachAllNotifiers(); }
234 static void createReceiverForCurrentThread();
237 static void removeReceiverForCurrentThread();
264 : data(d), caller(c) {}
297 #define mCBCapsuleGet(PayLoadType,var,cb) \ 298 CBCapsule<PayLoadType>* var = dynamic_cast< CBCapsule<PayLoadType>* >( cb ); 300 #define mCBCapsuleUnpack(PayLoadType,var,cb) \ 301 mCBCapsuleGet(PayLoadType,cb##caps,cb) \ 302 PayLoadType var = cb##caps->data 304 #define mCBCapsuleUnpackWithCaller(PayLoadType,var,cber,cb) \ 305 mCBCapsuleGet(PayLoadType,cb##caps,cb) \ 306 PayLoadType var = cb##caps->data; \ 307 CallBacker* cber = cb##caps->caller #define mExpClass(module)
Definition: commondefs.h:157
Capsule class to wrap any class into a CallBacker.
Definition: callback.h:257
Inherit from this class to be able to send and/or receive CallBacks.
Definition: callback.h:182
CBCapsule(PLT d, CallBacker *c)
Definition: callback.h:263
CallBack(CallBacker *o, CallBackFunction f)
Definition: callback.h:68
A lock of a type that (hopefully) suits your needs. To use it, you need the Locker class...
Definition: threadlock.h:51
T to(const F &fr)
Definition: convert.h:31
bool operator==(const ArrayNDInfo &a1, const ArrayNDInfo &a2)
Definition: arrayndinfo.h:51
CallBacker * caller
Definition: callback.h:267
void(* StaticCallBackFunction)(CallBacker *)
Definition: callback.h:43
virtual bool isCapsule() const
Definition: callback.h:211
Interface class for Notifier. See comments there.
Definition: notify.h:20
friend class CallBacker
Definition: notify.h:24
void detachCB(const NotifierAccess *notif, const CallBack &cb) const
Definition: callback.h:204
void(CallBacker::* CallBackFunction)(CallBacker *)
Definition: callback.h:37
bool willCall() const
Definition: callback.h:76
void stopReceivingNotifications() const
Definition: callback.h:231
static Threads::ThreadID mainthread_
Definition: callback.h:120
Set of (small) copyable elements.
Definition: commontypes.h:26
CallBacker * cberobj_
Definition: callback.h:116
void * ThreadID
Definition: thread.h:33
bool operator!=(const CallBack &cb) const
Definition: callback.h:73
Threads::Atomic< int > disablecount_
Definition: callback.h:119
CallBack()
Definition: callback.h:66
StaticCallBackFunction scbFn() const
Definition: callback.h:87
ObjectSet< NotifierAccess > attachednotifiers_
Definition: callback.h:226
PLT data
Definition: callback.h:266
bool isDisabled() const
Definition: callback.h:80
CallBack(StaticCallBackFunction f)
Definition: callback.h:70
CBCapsule< PLT > * clone() const
Definition: callback.h:269
StaticCallBackFunction sfn_
Definition: callback.h:118
#define mDeprecated
Definition: plfdefs.h:213
CallBacker * cbObj()
Definition: callback.h:84
Threads::Lock attachednotifierslock_
Definition: callback.h:227
CallBackFunction cbFn() const
Definition: callback.h:86
CallBackFunction fn_
Definition: callback.h:117
TypeSet of CallBacks with a few extras.
Definition: callback.h:149
static void removeFromMainThread(const CallBacker *cber)
Definition: callback.h:130
void enable() const
Definition: callback.h:82
#define mClass(module)
Definition: commondefs.h:161
ObjectSet< QCallBackEventReceiver > receivers_
Definition: callback.h:223
PLT PayLoadType
Definition: callback.h:261
CallBacks object-oriented (object + method).
Definition: callback.h:62
Threads::Lock receiverslock_
Definition: callback.h:224
Threads::Lock lock_
Definition: callback.h:171
virtual bool isCapsule() const
Definition: callback.h:271
const CallBacker * cbObj() const
Definition: callback.h:85