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
00028 #ifndef _CEGUISubscriberSlot_h_
00029 #define _CEGUISubscriberSlot_h_
00030
00031 #include "CEGUIBase.h"
00032 #include "CEGUIFreeFunctionSlot.h"
00033 #include "CEGUIFunctorCopySlot.h"
00034 #include "CEGUIFunctorReferenceSlot.h"
00035 #include "CEGUIFunctorPointerSlot.h"
00036 #include "CEGUIMemberFunctionSlot.h"
00037 #include "CEGUIFunctorReferenceBinder.h"
00038
00039
00040 namespace CEGUI
00041 {
00042
00052 class CEGUIEXPORT SubscriberSlot
00053 {
00054 public:
00059 SubscriberSlot();
00060
00065 SubscriberSlot(FreeFunctionSlot::SlotFunction* func);
00066
00072 ~SubscriberSlot();
00073
00080 bool operator()(const EventArgs& args) const
00081 {
00082 return (*d_functor_impl)(args);
00083 }
00084
00089 bool connected() const
00090 {
00091 return d_functor_impl != 0;
00092 }
00093
00099 void cleanup();
00100
00101
00106 template<typename T>
00107 SubscriberSlot(bool (T::*function)(const EventArgs&), T* obj) :
00108 d_functor_impl(new MemberFunctionSlot<T>(function, obj))
00109 {}
00110
00115 template<typename T>
00116 SubscriberSlot(const FunctorReferenceBinder<T>& binder) :
00117 d_functor_impl(new FunctorReferenceSlot<T>(binder.d_functor))
00118 {}
00119
00124 template<typename T>
00125 SubscriberSlot(const T& functor) :
00126 d_functor_impl(new FunctorCopySlot<T>(functor))
00127 {}
00128
00133 template<typename T>
00134 SubscriberSlot(T* functor) :
00135 d_functor_impl(new FunctorPointerSlot<T>(functor))
00136 {}
00137
00138 private:
00140 SlotFunctorBase* d_functor_impl;
00141 };
00142
00143 }
00144
00145 #endif // end of guard _CEGUISubscriberSlot_h_