5 * Copyright (c) 2022 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/common/vector-wrapper.h>
61 #include <dali/public-api/signals/base-signal.h>
62 #include <dali/public-api/signals/callback.h>
63 #include <dali/public-api/signals/signal-slot-connections.h>
64 #include <dali/public-api/signals/slot-delegate.h>
69 * @addtogroup dali_core_signals
74 * @brief Base Template class to provide signals.
76 * To create a signal for this class, you first have to define a typedef within your handle's scope:
78 * class MyHandle : public Handle
84 * typedef Signal< void ()> VoidSignalType; ///< For signals that require no parameters and no return value
85 * typedef Signal< bool ()> BoolSignalType; ///< For signals that do not need parameters but require a boolean return
86 * typedef Signal< void ( float )> ParamSignalType; ///< For signals that need a float as a parameter but no return value
94 * VoidSignalType& VoidSignal();
95 * BoolSignalType& BoolSignal();
96 * ParamSignalType& ParamSignal();
101 * The methods are required in the handle class so that the application writer can retrieve the Signal in order to connect/disconnect.
103 * In the implementation class, the members should be defined and the methods should be provided to retrieve the signal itself.
104 * These will be called by the equivalent methods in the MyHandle class.
106 * class MyObject : public Object
112 * MyHandle::VoidSignalType& VoidSignal()
114 * return mVoidSignal;
117 * MyHandle::BoolSignalType& BoolSignal()
119 * return mBoolSignal;
122 * MyHandle::ParamSignalType& ParamSignal()
124 * return mParamSignal;
130 * MyHandle::VoidSignalType mVoidSignal;
131 * MyHandle::BoolSignalType mBoolSignal;
132 * MyHandle::ParamSignalType mParamSignal;
139 template<typename _Signature>
148 * @brief Queries whether there are any connected slots.
151 * @return True if there are any slots connected to the signal
155 return mImpl ? mImpl->Empty() : true;
159 * @brief Queries the number of slots.
162 * @return The number of slots connected to this signal
164 std::size_t GetConnectionCount() const
166 return mImpl ? mImpl->GetConnectionCount() : 0;
174 mImpl = std::make_unique<BaseSignal>();
180 std::unique_ptr<BaseSignal> mImpl;
184 * @brief A template for Signals with no parameters or return value.
188 class Signal<void()> : public SignalMixin
192 * @brief Connects a function.
195 * @param[in] func The function to connect
197 void Connect(void (*func)())
199 Impl().OnConnect(MakeCallback(func));
203 * @brief Disconnects a function.
206 * @param[in] func The function to disconnect
208 void Disconnect(void (*func)())
210 Impl().OnDisconnect(MakeCallback(func));
214 * @brief Connects a member function.
217 * @param[in] obj An object which must implement the ConnectionTrackerInterface
218 * @param[in] func The member function to connect
221 void Connect(X* obj, void (X::*func)())
223 Impl().OnConnect(obj, MakeCallback(obj, func));
227 * @brief Disconnects a member function.
230 * @param[in] obj An object which must implement the ConnectionTrackerInterface
231 * @param[in] func The member function to disconnect
234 void Disconnect(X* obj, void (X::*func)())
236 Impl().OnDisconnect(obj, MakeCallback(obj, func));
240 * @brief Connects a member function.
243 * @param[in] delegate A slot delegate
244 * @param[in] func The member function to connect
247 void Connect(SlotDelegate<X>& delegate, void (X::*func)())
249 Impl().OnConnect(delegate.GetConnectionTracker(), MakeCallback(delegate.GetSlot(), func));
253 * @brief Disconnects a member function.
256 * @param[in] delegate A slot delegate
257 * @param[in] func The member function to disconnect
260 void Disconnect(SlotDelegate<X>& delegate, void (X::*func)())
262 Impl().OnDisconnect(delegate.GetConnectionTracker(), MakeCallback(delegate.GetSlot(), func));
266 * @brief Connects a function object.
269 * @param[in] connectionTracker A connection tracker which can be used to disconnect
270 * @param[in] func The function object to copy
273 void Connect(ConnectionTrackerInterface* connectionTracker, const X& func)
275 Impl().OnConnect(connectionTracker, new CallbackFunctor0<X>(func));
279 * @brief Connects a function object using FunctorDelegate.
282 * @param[in] connectionTracker A connection tracker which can be used to disconnect
283 * @param[in] delegate A newly allocated FunctorDelegate (ownership is taken)
285 void Connect(ConnectionTrackerInterface* connectionTracker, FunctorDelegate* delegate)
287 Impl().OnConnect(connectionTracker, new CallbackFunctorDelegate0(delegate));
291 * @brief Emits the signal.
301 * @brief A template for Signals with no parameters and a return value.
304 template<typename Ret>
305 class Signal<Ret()> : public SignalMixin
309 * @brief Connects a function.
312 * @param[in] func The function to connect
314 void Connect(Ret (*func)())
316 Impl().OnConnect(MakeCallback(func));
320 * @brief Disconnects a function.
323 * @param[in] func The function to disconnect
325 void Disconnect(Ret (*func)())
327 Impl().OnDisconnect(MakeCallback(func));
331 * @brief Connects a member function.
334 * @param[in] obj An object which must implement the ConnectionTrackerInterface
335 * @param[in] func The member function to connect
338 void Connect(X* obj, Ret (X::*func)())
340 Impl().OnConnect(obj, MakeCallback(obj, func));
344 * @brief Disconnects a member function.
347 * @param[in] obj An object which must implement the ConnectionTrackerInterface
348 * @param[in] func The member function to disconnect
351 void Disconnect(X* obj, Ret (X::*func)())
353 Impl().OnDisconnect(obj, MakeCallback(obj, func));
357 * @brief Connects a member function.
360 * @param[in] delegate A slot delegate
361 * @param[in] func The member function to connect
364 void Connect(SlotDelegate<X>& delegate, Ret (X::*func)())
366 Impl().OnConnect(delegate.GetConnectionTracker(), MakeCallback(delegate.GetSlot(), func));
370 * @brief Disconnects a member function.
373 * @param[in] delegate A slot delegate
374 * @param[in] func The member function to disconnect
377 void Disconnect(SlotDelegate<X>& delegate, Ret (X::*func)())
379 Impl().OnDisconnect(delegate.GetConnectionTracker(), MakeCallback(delegate.GetSlot(), func));
383 * @brief Connects a function object.
386 * @param[in] connectionTracker A connection tracker which can be used to disconnect
387 * @param[in] func The function object to copy
390 void Connect(ConnectionTrackerInterface* connectionTracker, const X& func)
392 Impl().OnConnect(connectionTracker, new CallbackFunctorReturn0<X, Ret>(func));
396 * @brief Connects a function object using FunctorDelegate.
399 * @param[in] connectionTracker A connection tracker which can be used to disconnect
400 * @param[in] delegate A newly allocated FunctorDelegate (ownership is taken)
402 void Connect(ConnectionTrackerInterface* connectionTracker, FunctorDelegate* delegate)
404 Impl().OnConnect(connectionTracker, new CallbackFunctorDelegateReturn0<Ret>(delegate));
408 * @brief Emits the signal.
411 * @return The value returned by the last callback, or a default constructed value if no callbacks are connected
415 return Impl().template EmitReturn<Ret>();
420 * @brief A template for Signals with 1 parameter.
423 template<typename Arg0>
424 class Signal<void(Arg0)> : public SignalMixin
428 * @brief Connects a function.
431 * @param[in] func The function to connect
433 void Connect(void (*func)(Arg0 arg0))
435 Impl().OnConnect(MakeCallback(func));
439 * @brief Disconnects a function.
442 * @param[in] func The function to disconnect
444 void Disconnect(void (*func)(Arg0 arg0))
446 Impl().OnDisconnect(MakeCallback(func));
450 * @brief Connects a member function.
453 * @param[in] obj An object which must implement the ConnectionTrackerInterface
454 * @param[in] func The member function to connect
457 void Connect(X* obj, void (X::*func)(Arg0 arg0))
459 Impl().OnConnect(obj, MakeCallback(obj, func));
463 * @brief Disconnects a member function.
466 * @param[in] obj An object which must implement the ConnectionTrackerInterface
467 * @param[in] func The member function to disconnect
470 void Disconnect(X* obj, void (X::*func)(Arg0 arg0))
472 Impl().OnDisconnect(obj, MakeCallback(obj, func));
476 * @brief Connects a member function.
479 * @param[in] delegate A slot delegate
480 * @param[in] func The member function to connect
483 void Connect(SlotDelegate<X>& delegate, void (X::*func)(Arg0 arg0))
485 Impl().OnConnect(delegate.GetConnectionTracker(), MakeCallback(delegate.GetSlot(), func));
489 * @brief Disconnects a member function.
492 * @param[in] delegate A slot delegate
493 * @param[in] func The member function to disconnect
496 void Disconnect(SlotDelegate<X>& delegate, void (X::*func)(Arg0 arg0))
498 Impl().OnDisconnect(delegate.GetConnectionTracker(), MakeCallback(delegate.GetSlot(), func));
502 * @brief Connects a function object.
505 * @param[in] connectionTracker A connection tracker which can be used to disconnect
506 * @param[in] func The function object to copy
509 void Connect(ConnectionTrackerInterface* connectionTracker, const X& func)
511 Impl().OnConnect(connectionTracker, new CallbackFunctor1<X, Arg0>(func));
515 * @brief Connects a function object using FunctorDelegate.
518 * @param[in] connectionTracker A connection tracker which can be used to disconnect
519 * @param[in] delegate A newly allocated FunctorDelegate (ownership is taken)
521 void Connect(ConnectionTrackerInterface* connectionTracker, FunctorDelegate* delegate)
523 Impl().OnConnect(connectionTracker, new CallbackFunctorDelegate1<Arg0>(delegate));
527 * @brief Emits the signal.
530 * @param[in] arg0 The first value to pass to callbacks
534 Impl().template Emit<Arg0>(arg0);
539 * @brief A template for Signals with 1 parameter and a return value.
542 template<typename Ret, typename Arg0>
543 class Signal<Ret(Arg0)> : public SignalMixin
547 * @brief Connects a function.
550 * @param[in] func The function to connect
552 void Connect(Ret (*func)(Arg0 arg0))
554 Impl().OnConnect(MakeCallback(func));
558 * @brief Disconnects a function.
561 * @param[in] func The function to disconnect
563 void Disconnect(Ret (*func)(Arg0 arg0))
565 Impl().OnDisconnect(MakeCallback(func));
569 * @brief Connects a member function.
572 * @param[in] obj An object which must implement the ConnectionTrackerInterface
573 * @param[in] func The member function to connect
576 void Connect(X* obj, Ret (X::*func)(Arg0 arg0))
578 Impl().OnConnect(obj, MakeCallback(obj, func));
582 * @brief Disconnects a member function.
585 * @param[in] obj An object which must implement the ConnectionTrackerInterface
586 * @param[in] func The member function to disconnect
589 void Disconnect(X* obj, Ret (X::*func)(Arg0 arg0))
591 Impl().OnDisconnect(obj, MakeCallback(obj, func));
595 * @brief Connects a member function.
598 * @param[in] delegate A slot delegate
599 * @param[in] func The member function to connect
602 void Connect(SlotDelegate<X>& delegate, Ret (X::*func)(Arg0 arg0))
604 Impl().OnConnect(delegate.GetConnectionTracker(), MakeCallback(delegate.GetSlot(), func));
608 * @brief Disconnects a member function.
611 * @param[in] delegate A slot delegate
612 * @param[in] func The member function to disconnect
615 void Disconnect(SlotDelegate<X>& delegate, Ret (X::*func)(Arg0 arg0))
617 Impl().OnDisconnect(delegate.GetConnectionTracker(), MakeCallback(delegate.GetSlot(), func));
621 * @brief Connects a function object.
624 * @param[in] connectionTracker A connection tracker which can be used to disconnect
625 * @param[in] func The function object to copy
628 void Connect(ConnectionTrackerInterface* connectionTracker, const X& func)
630 Impl().OnConnect(connectionTracker, new CallbackFunctorReturn1<X, Arg0, Ret>(func));
634 * @brief Connects a function object using FunctorDelegate.
637 * @param[in] connectionTracker A connection tracker which can be used to disconnect
638 * @param[in] delegate A newly allocated FunctorDelegate (ownership is taken)
640 void Connect(ConnectionTrackerInterface* connectionTracker, FunctorDelegate* delegate)
642 Impl().OnConnect(connectionTracker, new CallbackFunctorDelegateReturn1<Arg0, Ret>(delegate));
646 * @brief Emits the signal.
649 * @param[in] arg0 The first value to pass to callbacks
650 * @return The value returned by the last callback, or a default constructed value if no callbacks are connected
654 return Impl().template EmitReturn<Ret, Arg0>(arg0);
659 * @brief A template for Signals with 2 parameters.
663 template<typename Arg0, typename Arg1>
664 class Signal<void(Arg0, Arg1)> : public SignalMixin
668 * @brief Connects a function.
671 * @param[in] func The function to connect
673 void Connect(void (*func)(Arg0 arg0, Arg1 arg1))
675 Impl().OnConnect(MakeCallback(func));
679 * @brief Disconnects a function.
682 * @param[in] func The function to disconnect
684 void Disconnect(void (*func)(Arg0 arg0, Arg1 arg1))
686 Impl().OnDisconnect(MakeCallback(func));
690 * @brief Connects a member function.
693 * @param[in] obj An object which must implement the ConnectionTrackerInterface
694 * @param[in] func The member function to connect
697 void Connect(X* obj, void (X::*func)(Arg0 arg0, Arg1 arg1))
699 Impl().OnConnect(obj, MakeCallback(obj, func));
703 * @brief Disconnects a member function.
706 * @param[in] obj An object which must implement the ConnectionTrackerInterface
707 * @param[in] func The member function to disconnect
710 void Disconnect(X* obj, void (X::*func)(Arg0 arg0, Arg1 arg1))
712 Impl().OnDisconnect(obj, MakeCallback(obj, func));
716 * @brief Connects a member function.
719 * @param[in] delegate A slot delegate
720 * @param[in] func The member function to connect
723 void Connect(SlotDelegate<X>& delegate, void (X::*func)(Arg0 arg0, Arg1 arg1))
725 Impl().OnConnect(delegate.GetConnectionTracker(), MakeCallback(delegate.GetSlot(), func));
729 * @brief Disconnects a member function.
732 * @param[in] delegate A slot delegate
733 * @param[in] func The member function to disconnect
736 void Disconnect(SlotDelegate<X>& delegate, void (X::*func)(Arg0 arg0, Arg1 arg1))
738 Impl().OnDisconnect(delegate.GetConnectionTracker(), MakeCallback(delegate.GetSlot(), func));
742 * @brief Connects a function object.
745 * @param[in] connectionTracker A connection tracker which can be used to disconnect
746 * @param[in] func The function object to copy
749 void Connect(ConnectionTrackerInterface* connectionTracker, const X& func)
751 Impl().OnConnect(connectionTracker, new CallbackFunctor2<X, Arg0, Arg1>(func));
755 * @brief Connects a function object using FunctorDelegate.
758 * @param[in] connectionTracker A connection tracker which can be used to disconnect
759 * @param[in] delegate A newly allocated FunctorDelegate (ownership is taken)
761 void Connect(ConnectionTrackerInterface* connectionTracker, FunctorDelegate* delegate)
763 Impl().OnConnect(connectionTracker, new CallbackFunctorDelegate2<Arg0, Arg1>(delegate));
767 * @brief Emits the signal.
770 * @param[in] arg0 The first value to pass to callbacks
771 * @param[in] arg1 The second value to pass to callbacks
773 void Emit(Arg0 arg0, Arg1 arg1)
775 Impl().template Emit<Arg0, Arg1>(arg0, arg1);
780 * @brief A template for Signals with 2 parameters and a return value.
783 template<typename Ret, typename Arg0, typename Arg1>
784 class Signal<Ret(Arg0, Arg1)> : public SignalMixin
788 * @brief Connects a function.
790 * @param[in] func The function to connect
792 void Connect(Ret (*func)(Arg0 arg0, Arg1 arg1))
794 Impl().OnConnect(MakeCallback(func));
798 * @brief Disconnects a function.
801 * @param[in] func The function to disconnect
803 void Disconnect(Ret (*func)(Arg0 arg0, Arg1 arg1))
805 Impl().OnDisconnect(MakeCallback(func));
809 * @brief Connects a member function.
812 * @param[in] obj An object which must implement the ConnectionTrackerInterface
813 * @param[in] func The member function to connect
816 void Connect(X* obj, Ret (X::*func)(Arg0 arg0, Arg1 arg1))
818 Impl().OnConnect(obj, MakeCallback(obj, func));
822 * @brief Disconnects a member function.
825 * @param[in] obj An object which must implement the ConnectionTrackerInterface
826 * @param[in] func The member function to disconnect
829 void Disconnect(X* obj, Ret (X::*func)(Arg0 arg0, Arg1 arg1))
831 Impl().OnDisconnect(obj, MakeCallback(obj, func));
835 * @brief Connects a member function.
838 * @param[in] delegate A slot delegate
839 * @param[in] func The member function to connect
842 void Connect(SlotDelegate<X>& delegate, Ret (X::*func)(Arg0 arg0, Arg1 arg1))
844 Impl().OnConnect(delegate.GetConnectionTracker(), MakeCallback(delegate.GetSlot(), func));
848 * @brief Disconnects a member function.
851 * @param[in] delegate A slot delegate
852 * @param[in] func The member function to disconnect
855 void Disconnect(SlotDelegate<X>& delegate, Ret (X::*func)(Arg0 arg0, Arg1 arg1))
857 Impl().OnDisconnect(delegate.GetConnectionTracker(), MakeCallback(delegate.GetSlot(), func));
861 * @brief Connects a function object.
864 * @param[in] connectionTracker A connection tracker which can be used to disconnect
865 * @param[in] func The function object to copy
868 void Connect(ConnectionTrackerInterface* connectionTracker, const X& func)
870 Impl().OnConnect(connectionTracker, new CallbackFunctorReturn2<X, Arg0, Arg1, Ret>(func));
874 * @brief Connects a function object using FunctorDelegate.
877 * @param[in] connectionTracker A connection tracker which can be used to disconnect
878 * @param[in] delegate A newly allocated FunctorDelegate (ownership is taken)
880 void Connect(ConnectionTrackerInterface* connectionTracker, FunctorDelegate* delegate)
882 Impl().OnConnect(connectionTracker, new CallbackFunctorDelegateReturn2<Arg0, Arg1, Ret>(delegate));
886 * @brief Emits the signal.
889 * @param[in] arg0 The first value to pass to callbacks
890 * @param[in] arg1 The second value to pass to callbacks
891 * @return The value returned by the last callback, or a default constructed value if no callbacks are connected
893 Ret Emit(Arg0 arg0, Arg1 arg1)
895 return Impl().template EmitReturn<Ret, Arg0, Arg1>(arg0, arg1);
900 * @brief A template for Signals with 3 parameters.
903 template<typename Arg0, typename Arg1, typename Arg2>
904 class Signal<void(Arg0, Arg1, Arg2)> : public SignalMixin
908 * @brief Connects a function.
911 * @param[in] func The function to connect
913 void Connect(void (*func)(Arg0 arg0, Arg1 arg1, Arg2 arg2))
915 Impl().OnConnect(MakeCallback(func));
919 * @brief Disconnects a function.
922 * @param[in] func The function to disconnect
924 void Disconnect(void (*func)(Arg0 arg0, Arg1 arg1, Arg2 arg2))
926 Impl().OnDisconnect(MakeCallback(func));
930 * @brief Connects a member function.
933 * @param[in] obj An object which must implement the ConnectionTrackerInterface
934 * @param[in] func The member function to connect
937 void Connect(X* obj, void (X::*func)(Arg0 arg0, Arg1 arg1, Arg2 arg2))
939 Impl().OnConnect(obj, MakeCallback(obj, func));
943 * @brief Disconnects a member function.
946 * @param[in] obj An object which must implement the ConnectionTrackerInterface
947 * @param[in] func The member function to disconnect
950 void Disconnect(X* obj, void (X::*func)(Arg0 arg0, Arg1 arg1, Arg2 arg2))
952 Impl().OnDisconnect(obj, MakeCallback(obj, func));
956 * @brief Connects a member function.
959 * @param[in] delegate A slot delegate
960 * @param[in] func The member function to connect
963 void Connect(SlotDelegate<X>& delegate, void (X::*func)(Arg0 arg0, Arg1 arg1, Arg2 arg2))
965 Impl().OnConnect(delegate.GetConnectionTracker(), MakeCallback(delegate.GetSlot(), func));
969 * @brief Disconnects a member function.
972 * @param[in] delegate A slot delegate
973 * @param[in] func The member function to disconnect
976 void Disconnect(SlotDelegate<X>& delegate, void (X::*func)(Arg0 arg0, Arg1 arg1, Arg2 arg2))
978 Impl().OnDisconnect(delegate.GetConnectionTracker(), MakeCallback(delegate.GetSlot(), func));
982 * @brief Connects a function object.
985 * @param[in] connectionTracker A connection tracker which can be used to disconnect
986 * @param[in] func The function object to copy
989 void Connect(ConnectionTrackerInterface* connectionTracker, const X& func)
991 Impl().OnConnect(connectionTracker, new CallbackFunctor3<X, Arg0, Arg1, Arg2>(func));
995 * @brief Connects a function object using FunctorDelegate.
998 * @param[in] connectionTracker A connection tracker which can be used to disconnect
999 * @param[in] delegate A newly allocated FunctorDelegate (ownership is taken)
1001 void Connect(ConnectionTrackerInterface* connectionTracker, FunctorDelegate* delegate)
1003 Impl().OnConnect(connectionTracker, new CallbackFunctorDelegate3<Arg0, Arg1, Arg2>(delegate));
1007 * @brief Emits the signal.
1010 * @param[in] arg0 The first value to pass to callbacks
1011 * @param[in] arg1 The second value to pass to callbacks
1012 * @param[in] arg2 The third value to pass to callbacks
1014 void Emit(Arg0 arg0, Arg1 arg1, Arg2 arg2)
1016 Impl().template Emit<Arg0, Arg1, Arg2>(arg0, arg1, arg2);
1021 * @brief A template for Signals with 2 parameters and a return value.
1024 template<typename Ret, typename Arg0, typename Arg1, typename Arg2>
1025 class Signal<Ret(Arg0, Arg1, Arg2)> : public SignalMixin
1029 * @brief Connects a function.
1032 * @param[in] func The function to connect
1034 void Connect(Ret (*func)(Arg0 arg0, Arg1 arg1, Arg2 arg2))
1036 Impl().OnConnect(MakeCallback(func));
1040 * @brief Disconnects a function.
1043 * @param[in] func The function to disconnect
1045 void Disconnect(Ret (*func)(Arg0 arg0, Arg1 arg1, Arg2 arg2))
1047 Impl().OnDisconnect(MakeCallback(func));
1051 * @brief Connects a member function.
1054 * @param[in] obj An object which must implement the ConnectionTrackerInterface
1055 * @param[in] func The member function to connect
1058 void Connect(X* obj, Ret (X::*func)(Arg0 arg0, Arg1 arg1, Arg2 arg2))
1060 Impl().OnConnect(obj, MakeCallback(obj, func));
1064 * @brief Disconnects a member function.
1067 * @param[in] obj An object which must implement the ConnectionTrackerInterface
1068 * @param[in] func The member function to disconnect
1071 void Disconnect(X* obj, Ret (X::*func)(Arg0 arg0, Arg1 arg1, Arg2 arg2))
1073 Impl().OnDisconnect(obj, MakeCallback(obj, func));
1077 * @brief Connects a member function.
1080 * @param[in] delegate A slot delegate
1081 * @param[in] func The member function to connect
1084 void Connect(SlotDelegate<X>& delegate, Ret (X::*func)(Arg0 arg0, Arg1 arg1, Arg2 arg2))
1086 Impl().OnConnect(delegate.GetConnectionTracker(), MakeCallback(delegate.GetSlot(), func));
1090 * @brief Disconnects a member function.
1093 * @param[in] delegate A slot delegate
1094 * @param[in] func The member function to disconnect
1097 void Disconnect(SlotDelegate<X>& delegate, Ret (X::*func)(Arg0 arg0, Arg1 arg1, Arg2 arg2))
1099 Impl().OnDisconnect(delegate.GetConnectionTracker(), MakeCallback(delegate.GetSlot(), func));
1103 * @brief Connects a function object.
1106 * @param[in] connectionTracker A connection tracker which can be used to disconnect
1107 * @param[in] func The function object to copy
1110 void Connect(ConnectionTrackerInterface* connectionTracker, const X& func)
1112 Impl().OnConnect(connectionTracker, new CallbackFunctorReturn3<X, Arg0, Arg1, Arg2, Ret>(func));
1116 * @brief Connects a function object using FunctorDelegate.
1119 * @param[in] connectionTracker A connection tracker which can be used to disconnect
1120 * @param[in] delegate A newly allocated FunctorDelegate (ownership is taken)
1122 void Connect(ConnectionTrackerInterface* connectionTracker, FunctorDelegate* delegate)
1124 Impl().OnConnect(connectionTracker, new CallbackFunctorDelegateReturn3<Arg0, Arg1, Arg2, Ret>(delegate));
1128 * @brief Emits the signal.
1131 * @param[in] arg0 The first value to pass to callbacks
1132 * @param[in] arg1 The second value to pass to callbacks
1133 * @param[in] arg2 The third value to pass to callbacks
1134 * @return The value returned by the last callback, or a default constructed value if no callbacks are connected
1136 Ret Emit(Arg0 arg0, Arg1 arg1, Arg2 arg2)
1138 return Impl().template EmitReturn<Ret, Arg0, Arg1, Arg2>(arg0, arg1, arg2);
1147 #endif // DALI_SIGNAL_H