5 * Copyright (c) 2020 Samsung Electronics Co., Ltd.
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
22 * @brief The class should implement Dali::ConnectionTrackerInterface, or inherit from Dali::ConnectionTracker.
24 * This enforces automatic disconnection when an object is destroyed, so you don't have
25 * to manually disconnect from signals.
27 * Alternatively, you can use a Dali::SlotDelegate if you don't want to inherit.
31 * class MyClass : public ConnectionTracker
34 * void Callback( Actor actor, const TouchEvent& event )
41 * Actor actor = Actor::New();
43 * actor.TouchedSignal().Connect( this, &MyClass::Callback );
48 * // ConnectionTracker base class automatically disconnects
59 #include <dali/public-api/common/dali-common.h>
60 #include <dali/public-api/signals/base-signal.h>
61 #include <dali/public-api/signals/callback.h>
62 #include <dali/public-api/signals/signal-slot-connections.h>
63 #include <dali/public-api/signals/slot-delegate.h>
68 * @addtogroup dali_core_signals
73 * @brief Base Template class to provide signals.
75 * To create a signal for this class, you first have to define a typedef within your handle's scope:
77 * class MyHandle : public Handle
83 * typedef Signal< void ()> VoidSignalType; ///< For signals that require no parameters and no return value
84 * typedef Signal< bool ()> BoolSignalType; ///< For signals that do not need parameters but require a boolean return
85 * typedef Signal< void ( float )> ParamSignalType; ///< For signals that need a float as a parameter but no return value
93 * VoidSignalType& VoidSignal();
94 * BoolSignalType& BoolSignal();
95 * ParamSignalType& ParamSignal();
100 * The methods are required in the handle class so that the application writer can retrieve the Signal in order to connect/disconnect.
102 * In the implementation class, the members should be defined and the methods should be provided to retrieve the signal itself.
103 * These will be called by the equivalent methods in the MyHandle class.
105 * class MyObject : public Object
111 * MyHandle::VoidSignalType& VoidSignal()
113 * return mVoidSignal;
116 * MyHandle::BoolSignalType& BoolSignal()
118 * return mBoolSignal;
121 * MyHandle::ParamSignalType& ParamSignal()
123 * return mParamSignal;
129 * MyHandle::VoidSignalType mVoidSignal;
130 * MyHandle::BoolSignalType mBoolSignal;
131 * MyHandle::ParamSignalType mParamSignal;
138 template<typename _Signature>
147 * @brief Queries whether there are any connected slots.
150 * @return True if there are any slots connected to the signal
154 return mImpl ? mImpl->Empty() : true;
158 * @brief Queries the number of slots.
161 * @return The number of slots connected to this signal
163 std::size_t GetConnectionCount() const
165 return mImpl ? mImpl->GetConnectionCount() : 0;
173 mImpl = std::make_unique<BaseSignal>();
179 std::unique_ptr<BaseSignal> mImpl;
183 * @brief A template for Signals with no parameters or return value.
187 class Signal<void()> : public SignalMixin
191 * @brief Connects a function.
194 * @param[in] func The function to connect
196 void Connect(void (*func)())
198 Impl().OnConnect(MakeCallback(func));
202 * @brief Disconnects a function.
205 * @param[in] func The function to disconnect
207 void Disconnect(void (*func)())
209 Impl().OnDisconnect(MakeCallback(func));
213 * @brief Connects a member function.
216 * @param[in] obj An object which must implement the ConnectionTrackerInterface
217 * @param[in] func The member function to connect
220 void Connect(X* obj, void (X::*func)())
222 Impl().OnConnect(obj, MakeCallback(obj, func));
226 * @brief Disconnects a member function.
229 * @param[in] obj An object which must implement the ConnectionTrackerInterface
230 * @param[in] func The member function to disconnect
233 void Disconnect(X* obj, void (X::*func)())
235 Impl().OnDisconnect(obj, MakeCallback(obj, func));
239 * @brief Connects a member function.
242 * @param[in] delegate A slot delegate
243 * @param[in] func The member function to connect
246 void Connect(SlotDelegate<X>& delegate, void (X::*func)())
248 Impl().OnConnect(delegate.GetConnectionTracker(), MakeCallback(delegate.GetSlot(), func));
252 * @brief Disconnects a member function.
255 * @param[in] delegate A slot delegate
256 * @param[in] func The member function to disconnect
259 void Disconnect(SlotDelegate<X>& delegate, void (X::*func)())
261 Impl().OnDisconnect(delegate.GetConnectionTracker(), MakeCallback(delegate.GetSlot(), func));
265 * @brief Connects a function object.
268 * @param[in] connectionTracker A connection tracker which can be used to disconnect
269 * @param[in] func The function object to copy
272 void Connect(ConnectionTrackerInterface* connectionTracker, const X& func)
274 Impl().OnConnect(connectionTracker, new CallbackFunctor0<X>(func));
278 * @brief Connects a function object using FunctorDelegate.
281 * @param[in] connectionTracker A connection tracker which can be used to disconnect
282 * @param[in] delegate A newly allocated FunctorDelegate (ownership is taken)
284 void Connect(ConnectionTrackerInterface* connectionTracker, FunctorDelegate* delegate)
286 Impl().OnConnect(connectionTracker, new CallbackFunctorDelegate0(delegate));
290 * @brief Emits the signal.
300 * @brief A template for Signals with no parameters and a return value.
303 template<typename Ret>
304 class Signal<Ret()> : public SignalMixin
308 * @brief Connects a function.
311 * @param[in] func The function to connect
313 void Connect(Ret (*func)())
315 Impl().OnConnect(MakeCallback(func));
319 * @brief Disconnects a function.
322 * @param[in] func The function to disconnect
324 void Disconnect(Ret (*func)())
326 Impl().OnDisconnect(MakeCallback(func));
330 * @brief Connects a member function.
333 * @param[in] obj An object which must implement the ConnectionTrackerInterface
334 * @param[in] func The member function to connect
337 void Connect(X* obj, Ret (X::*func)())
339 Impl().OnConnect(obj, MakeCallback(obj, func));
343 * @brief Disconnects a member function.
346 * @param[in] obj An object which must implement the ConnectionTrackerInterface
347 * @param[in] func The member function to disconnect
350 void Disconnect(X* obj, Ret (X::*func)())
352 Impl().OnDisconnect(obj, MakeCallback(obj, func));
356 * @brief Connects a member function.
359 * @param[in] delegate A slot delegate
360 * @param[in] func The member function to connect
363 void Connect(SlotDelegate<X>& delegate, Ret (X::*func)())
365 Impl().OnConnect(delegate.GetConnectionTracker(), MakeCallback(delegate.GetSlot(), func));
369 * @brief Disconnects a member function.
372 * @param[in] delegate A slot delegate
373 * @param[in] func The member function to disconnect
376 void Disconnect(SlotDelegate<X>& delegate, Ret (X::*func)())
378 Impl().OnDisconnect(delegate.GetConnectionTracker(), MakeCallback(delegate.GetSlot(), func));
382 * @brief Connects a function object.
385 * @param[in] connectionTracker A connection tracker which can be used to disconnect
386 * @param[in] func The function object to copy
389 void Connect(ConnectionTrackerInterface* connectionTracker, const X& func)
391 Impl().OnConnect(connectionTracker, new CallbackFunctorReturn0<X, Ret>(func));
395 * @brief Connects a function object using FunctorDelegate.
398 * @param[in] connectionTracker A connection tracker which can be used to disconnect
399 * @param[in] delegate A newly allocated FunctorDelegate (ownership is taken)
401 void Connect(ConnectionTrackerInterface* connectionTracker, FunctorDelegate* delegate)
403 Impl().OnConnect(connectionTracker, new CallbackFunctorDelegateReturn0<Ret>(delegate));
407 * @brief Emits the signal.
410 * @return The value returned by the last callback, or a default constructed value if no callbacks are connected
414 return Impl().template EmitReturn<Ret>();
419 * @brief A template for Signals with 1 parameter.
422 template<typename Arg0>
423 class Signal<void(Arg0)> : public SignalMixin
427 * @brief Connects a function.
430 * @param[in] func The function to connect
432 void Connect(void (*func)(Arg0 arg0))
434 Impl().OnConnect(MakeCallback(func));
438 * @brief Disconnects a function.
441 * @param[in] func The function to disconnect
443 void Disconnect(void (*func)(Arg0 arg0))
445 Impl().OnDisconnect(MakeCallback(func));
449 * @brief Connects a member function.
452 * @param[in] obj An object which must implement the ConnectionTrackerInterface
453 * @param[in] func The member function to connect
456 void Connect(X* obj, void (X::*func)(Arg0 arg0))
458 Impl().OnConnect(obj, MakeCallback(obj, func));
462 * @brief Disconnects a member function.
465 * @param[in] obj An object which must implement the ConnectionTrackerInterface
466 * @param[in] func The member function to disconnect
469 void Disconnect(X* obj, void (X::*func)(Arg0 arg0))
471 Impl().OnDisconnect(obj, MakeCallback(obj, func));
475 * @brief Connects a member function.
478 * @param[in] delegate A slot delegate
479 * @param[in] func The member function to connect
482 void Connect(SlotDelegate<X>& delegate, void (X::*func)(Arg0 arg0))
484 Impl().OnConnect(delegate.GetConnectionTracker(), MakeCallback(delegate.GetSlot(), func));
488 * @brief Disconnects a member function.
491 * @param[in] delegate A slot delegate
492 * @param[in] func The member function to disconnect
495 void Disconnect(SlotDelegate<X>& delegate, void (X::*func)(Arg0 arg0))
497 Impl().OnDisconnect(delegate.GetConnectionTracker(), MakeCallback(delegate.GetSlot(), func));
501 * @brief Connects a function object.
504 * @param[in] connectionTracker A connection tracker which can be used to disconnect
505 * @param[in] func The function object to copy
508 void Connect(ConnectionTrackerInterface* connectionTracker, const X& func)
510 Impl().OnConnect(connectionTracker, new CallbackFunctor1<X, Arg0>(func));
514 * @brief Connects a function object using FunctorDelegate.
517 * @param[in] connectionTracker A connection tracker which can be used to disconnect
518 * @param[in] delegate A newly allocated FunctorDelegate (ownership is taken)
520 void Connect(ConnectionTrackerInterface* connectionTracker, FunctorDelegate* delegate)
522 Impl().OnConnect(connectionTracker, new CallbackFunctorDelegate1<Arg0>(delegate));
526 * @brief Emits the signal.
529 * @param[in] arg0 The first value to pass to callbacks
533 Impl().template Emit<Arg0>(arg0);
538 * @brief A template for Signals with 1 parameter and a return value.
541 template<typename Ret, typename Arg0>
542 class Signal<Ret(Arg0)> : public SignalMixin
546 * @brief Connects a function.
549 * @param[in] func The function to connect
551 void Connect(Ret (*func)(Arg0 arg0))
553 Impl().OnConnect(MakeCallback(func));
557 * @brief Disconnects a function.
560 * @param[in] func The function to disconnect
562 void Disconnect(Ret (*func)(Arg0 arg0))
564 Impl().OnDisconnect(MakeCallback(func));
568 * @brief Connects a member function.
571 * @param[in] obj An object which must implement the ConnectionTrackerInterface
572 * @param[in] func The member function to connect
575 void Connect(X* obj, Ret (X::*func)(Arg0 arg0))
577 Impl().OnConnect(obj, MakeCallback(obj, func));
581 * @brief Disconnects a member function.
584 * @param[in] obj An object which must implement the ConnectionTrackerInterface
585 * @param[in] func The member function to disconnect
588 void Disconnect(X* obj, Ret (X::*func)(Arg0 arg0))
590 Impl().OnDisconnect(obj, MakeCallback(obj, func));
594 * @brief Connects a member function.
597 * @param[in] delegate A slot delegate
598 * @param[in] func The member function to connect
601 void Connect(SlotDelegate<X>& delegate, Ret (X::*func)(Arg0 arg0))
603 Impl().OnConnect(delegate.GetConnectionTracker(), MakeCallback(delegate.GetSlot(), func));
607 * @brief Disconnects a member function.
610 * @param[in] delegate A slot delegate
611 * @param[in] func The member function to disconnect
614 void Disconnect(SlotDelegate<X>& delegate, Ret (X::*func)(Arg0 arg0))
616 Impl().OnDisconnect(delegate.GetConnectionTracker(), MakeCallback(delegate.GetSlot(), func));
620 * @brief Connects a function object.
623 * @param[in] connectionTracker A connection tracker which can be used to disconnect
624 * @param[in] func The function object to copy
627 void Connect(ConnectionTrackerInterface* connectionTracker, const X& func)
629 Impl().OnConnect(connectionTracker, new CallbackFunctorReturn1<X, Arg0, Ret>(func));
633 * @brief Connects a function object using FunctorDelegate.
636 * @param[in] connectionTracker A connection tracker which can be used to disconnect
637 * @param[in] delegate A newly allocated FunctorDelegate (ownership is taken)
639 void Connect(ConnectionTrackerInterface* connectionTracker, FunctorDelegate* delegate)
641 Impl().OnConnect(connectionTracker, new CallbackFunctorDelegateReturn1<Arg0, Ret>(delegate));
645 * @brief Emits the signal.
648 * @param[in] arg0 The first value to pass to callbacks
649 * @return The value returned by the last callback, or a default constructed value if no callbacks are connected
653 return Impl().template EmitReturn<Ret, Arg0>(arg0);
658 * @brief A template for Signals with 2 parameters.
662 template<typename Arg0, typename Arg1>
663 class Signal<void(Arg0, Arg1)> : public SignalMixin
667 * @brief Connects a function.
670 * @param[in] func The function to connect
672 void Connect(void (*func)(Arg0 arg0, Arg1 arg1))
674 Impl().OnConnect(MakeCallback(func));
678 * @brief Disconnects a function.
681 * @param[in] func The function to disconnect
683 void Disconnect(void (*func)(Arg0 arg0, Arg1 arg1))
685 Impl().OnDisconnect(MakeCallback(func));
689 * @brief Connects a member function.
692 * @param[in] obj An object which must implement the ConnectionTrackerInterface
693 * @param[in] func The member function to connect
696 void Connect(X* obj, void (X::*func)(Arg0 arg0, Arg1 arg1))
698 Impl().OnConnect(obj, MakeCallback(obj, func));
702 * @brief Disconnects a member function.
705 * @param[in] obj An object which must implement the ConnectionTrackerInterface
706 * @param[in] func The member function to disconnect
709 void Disconnect(X* obj, void (X::*func)(Arg0 arg0, Arg1 arg1))
711 Impl().OnDisconnect(obj, MakeCallback(obj, func));
715 * @brief Connects a member function.
718 * @param[in] delegate A slot delegate
719 * @param[in] func The member function to connect
722 void Connect(SlotDelegate<X>& delegate, void (X::*func)(Arg0 arg0, Arg1 arg1))
724 Impl().OnConnect(delegate.GetConnectionTracker(), MakeCallback(delegate.GetSlot(), func));
728 * @brief Disconnects a member function.
731 * @param[in] delegate A slot delegate
732 * @param[in] func The member function to disconnect
735 void Disconnect(SlotDelegate<X>& delegate, void (X::*func)(Arg0 arg0, Arg1 arg1))
737 Impl().OnDisconnect(delegate.GetConnectionTracker(), MakeCallback(delegate.GetSlot(), func));
741 * @brief Connects a function object.
744 * @param[in] connectionTracker A connection tracker which can be used to disconnect
745 * @param[in] func The function object to copy
748 void Connect(ConnectionTrackerInterface* connectionTracker, const X& func)
750 Impl().OnConnect(connectionTracker, new CallbackFunctor2<X, Arg0, Arg1>(func));
754 * @brief Connects a function object using FunctorDelegate.
757 * @param[in] connectionTracker A connection tracker which can be used to disconnect
758 * @param[in] delegate A newly allocated FunctorDelegate (ownership is taken)
760 void Connect(ConnectionTrackerInterface* connectionTracker, FunctorDelegate* delegate)
762 Impl().OnConnect(connectionTracker, new CallbackFunctorDelegate2<Arg0, Arg1>(delegate));
766 * @brief Emits the signal.
769 * @param[in] arg0 The first value to pass to callbacks
770 * @param[in] arg1 The second value to pass to callbacks
772 void Emit(Arg0 arg0, Arg1 arg1)
774 Impl().template Emit<Arg0, Arg1>(arg0, arg1);
779 * @brief A template for Signals with 2 parameters and a return value.
782 template<typename Ret, typename Arg0, typename Arg1>
783 class Signal<Ret(Arg0, Arg1)> : public SignalMixin
787 * @brief Connects a function.
789 * @param[in] func The function to connect
791 void Connect(Ret (*func)(Arg0 arg0, Arg1 arg1))
793 Impl().OnConnect(MakeCallback(func));
797 * @brief Disconnects a function.
800 * @param[in] func The function to disconnect
802 void Disconnect(Ret (*func)(Arg0 arg0, Arg1 arg1))
804 Impl().OnDisconnect(MakeCallback(func));
808 * @brief Connects a member function.
811 * @param[in] obj An object which must implement the ConnectionTrackerInterface
812 * @param[in] func The member function to connect
815 void Connect(X* obj, Ret (X::*func)(Arg0 arg0, Arg1 arg1))
817 Impl().OnConnect(obj, MakeCallback(obj, func));
821 * @brief Disconnects a member function.
824 * @param[in] obj An object which must implement the ConnectionTrackerInterface
825 * @param[in] func The member function to disconnect
828 void Disconnect(X* obj, Ret (X::*func)(Arg0 arg0, Arg1 arg1))
830 Impl().OnDisconnect(obj, MakeCallback(obj, func));
834 * @brief Connects a member function.
837 * @param[in] delegate A slot delegate
838 * @param[in] func The member function to connect
841 void Connect(SlotDelegate<X>& delegate, Ret (X::*func)(Arg0 arg0, Arg1 arg1))
843 Impl().OnConnect(delegate.GetConnectionTracker(), MakeCallback(delegate.GetSlot(), func));
847 * @brief Disconnects a member function.
850 * @param[in] delegate A slot delegate
851 * @param[in] func The member function to disconnect
854 void Disconnect(SlotDelegate<X>& delegate, Ret (X::*func)(Arg0 arg0, Arg1 arg1))
856 Impl().OnDisconnect(delegate.GetConnectionTracker(), MakeCallback(delegate.GetSlot(), func));
860 * @brief Connects a function object.
863 * @param[in] connectionTracker A connection tracker which can be used to disconnect
864 * @param[in] func The function object to copy
867 void Connect(ConnectionTrackerInterface* connectionTracker, const X& func)
869 Impl().OnConnect(connectionTracker, new CallbackFunctorReturn2<X, Arg0, Arg1, Ret>(func));
873 * @brief Connects a function object using FunctorDelegate.
876 * @param[in] connectionTracker A connection tracker which can be used to disconnect
877 * @param[in] delegate A newly allocated FunctorDelegate (ownership is taken)
879 void Connect(ConnectionTrackerInterface* connectionTracker, FunctorDelegate* delegate)
881 Impl().OnConnect(connectionTracker, new CallbackFunctorDelegateReturn2<Arg0, Arg1, Ret>(delegate));
885 * @brief Emits the signal.
888 * @param[in] arg0 The first value to pass to callbacks
889 * @param[in] arg1 The second value to pass to callbacks
890 * @return The value returned by the last callback, or a default constructed value if no callbacks are connected
892 Ret Emit(Arg0 arg0, Arg1 arg1)
894 return Impl().template EmitReturn<Ret, Arg0, Arg1>(arg0, arg1);
899 * @brief A template for Signals with 3 parameters.
902 template<typename Arg0, typename Arg1, typename Arg2>
903 class Signal<void(Arg0, Arg1, Arg2)> : public SignalMixin
907 * @brief Connects a function.
910 * @param[in] func The function to connect
912 void Connect(void (*func)(Arg0 arg0, Arg1 arg1, Arg2 arg2))
914 Impl().OnConnect(MakeCallback(func));
918 * @brief Disconnects a function.
921 * @param[in] func The function to disconnect
923 void Disconnect(void (*func)(Arg0 arg0, Arg1 arg1, Arg2 arg2))
925 Impl().OnDisconnect(MakeCallback(func));
929 * @brief Connects a member function.
932 * @param[in] obj An object which must implement the ConnectionTrackerInterface
933 * @param[in] func The member function to connect
936 void Connect(X* obj, void (X::*func)(Arg0 arg0, Arg1 arg1, Arg2 arg2))
938 Impl().OnConnect(obj, MakeCallback(obj, func));
942 * @brief Disconnects a member function.
945 * @param[in] obj An object which must implement the ConnectionTrackerInterface
946 * @param[in] func The member function to disconnect
949 void Disconnect(X* obj, void (X::*func)(Arg0 arg0, Arg1 arg1, Arg2 arg2))
951 Impl().OnDisconnect(obj, MakeCallback(obj, func));
955 * @brief Connects a member function.
958 * @param[in] delegate A slot delegate
959 * @param[in] func The member function to connect
962 void Connect(SlotDelegate<X>& delegate, void (X::*func)(Arg0 arg0, Arg1 arg1, Arg2 arg2))
964 Impl().OnConnect(delegate.GetConnectionTracker(), MakeCallback(delegate.GetSlot(), func));
968 * @brief Disconnects a member function.
971 * @param[in] delegate A slot delegate
972 * @param[in] func The member function to disconnect
975 void Disconnect(SlotDelegate<X>& delegate, void (X::*func)(Arg0 arg0, Arg1 arg1, Arg2 arg2))
977 Impl().OnDisconnect(delegate.GetConnectionTracker(), MakeCallback(delegate.GetSlot(), func));
981 * @brief Connects a function object.
984 * @param[in] connectionTracker A connection tracker which can be used to disconnect
985 * @param[in] func The function object to copy
988 void Connect(ConnectionTrackerInterface* connectionTracker, const X& func)
990 Impl().OnConnect(connectionTracker, new CallbackFunctor3<X, Arg0, Arg1, Arg2>(func));
994 * @brief Connects a function object using FunctorDelegate.
997 * @param[in] connectionTracker A connection tracker which can be used to disconnect
998 * @param[in] delegate A newly allocated FunctorDelegate (ownership is taken)
1000 void Connect(ConnectionTrackerInterface* connectionTracker, FunctorDelegate* delegate)
1002 Impl().OnConnect(connectionTracker, new CallbackFunctorDelegate3<Arg0, Arg1, Arg2>(delegate));
1006 * @brief Emits the signal.
1009 * @param[in] arg0 The first value to pass to callbacks
1010 * @param[in] arg1 The second value to pass to callbacks
1011 * @param[in] arg2 The third value to pass to callbacks
1013 void Emit(Arg0 arg0, Arg1 arg1, Arg2 arg2)
1015 Impl().template Emit<Arg0, Arg1, Arg2>(arg0, arg1, arg2);
1020 * @brief A template for Signals with 2 parameters and a return value.
1023 template<typename Ret, typename Arg0, typename Arg1, typename Arg2>
1024 class Signal<Ret(Arg0, Arg1, Arg2)> : public SignalMixin
1028 * @brief Connects a function.
1031 * @param[in] func The function to connect
1033 void Connect(Ret (*func)(Arg0 arg0, Arg1 arg1, Arg2 arg2))
1035 Impl().OnConnect(MakeCallback(func));
1039 * @brief Disconnects a function.
1042 * @param[in] func The function to disconnect
1044 void Disconnect(Ret (*func)(Arg0 arg0, Arg1 arg1, Arg2 arg2))
1046 Impl().OnDisconnect(MakeCallback(func));
1050 * @brief Connects a member function.
1053 * @param[in] obj An object which must implement the ConnectionTrackerInterface
1054 * @param[in] func The member function to connect
1057 void Connect(X* obj, Ret (X::*func)(Arg0 arg0, Arg1 arg1, Arg2 arg2))
1059 Impl().OnConnect(obj, MakeCallback(obj, func));
1063 * @brief Disconnects a member function.
1066 * @param[in] obj An object which must implement the ConnectionTrackerInterface
1067 * @param[in] func The member function to disconnect
1070 void Disconnect(X* obj, Ret (X::*func)(Arg0 arg0, Arg1 arg1, Arg2 arg2))
1072 Impl().OnDisconnect(obj, MakeCallback(obj, func));
1076 * @brief Connects a member function.
1079 * @param[in] delegate A slot delegate
1080 * @param[in] func The member function to connect
1083 void Connect(SlotDelegate<X>& delegate, Ret (X::*func)(Arg0 arg0, Arg1 arg1, Arg2 arg2))
1085 Impl().OnConnect(delegate.GetConnectionTracker(), MakeCallback(delegate.GetSlot(), func));
1089 * @brief Disconnects a member function.
1092 * @param[in] delegate A slot delegate
1093 * @param[in] func The member function to disconnect
1096 void Disconnect(SlotDelegate<X>& delegate, Ret (X::*func)(Arg0 arg0, Arg1 arg1, Arg2 arg2))
1098 Impl().OnDisconnect(delegate.GetConnectionTracker(), MakeCallback(delegate.GetSlot(), func));
1102 * @brief Connects a function object.
1105 * @param[in] connectionTracker A connection tracker which can be used to disconnect
1106 * @param[in] func The function object to copy
1109 void Connect(ConnectionTrackerInterface* connectionTracker, const X& func)
1111 Impl().OnConnect(connectionTracker, new CallbackFunctorReturn3<X, Arg0, Arg1, Arg2, Ret>(func));
1115 * @brief Connects a function object using FunctorDelegate.
1118 * @param[in] connectionTracker A connection tracker which can be used to disconnect
1119 * @param[in] delegate A newly allocated FunctorDelegate (ownership is taken)
1121 void Connect(ConnectionTrackerInterface* connectionTracker, FunctorDelegate* delegate)
1123 Impl().OnConnect(connectionTracker, new CallbackFunctorDelegateReturn3<Arg0, Arg1, Arg2, Ret>(delegate));
1127 * @brief Emits the signal.
1130 * @param[in] arg0 The first value to pass to callbacks
1131 * @param[in] arg1 The second value to pass to callbacks
1132 * @param[in] arg2 The third value to pass to callbacks
1133 * @return The value returned by the last callback, or a default constructed value if no callbacks are connected
1135 Ret Emit(Arg0 arg0, Arg1 arg1, Arg2 arg2)
1137 return Impl().template EmitReturn<Ret, Arg0, Arg1, Arg2>(arg0, arg1, arg2);
1146 #endif // DALI_SIGNAL_H