1 #ifndef __DALI_SLOT_DELEGATE_H__
2 #define __DALI_SLOT_DELEGATE_H__
5 * Copyright (c) 2015 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 #include <dali/public-api/common/dali-common.h>
23 #include <dali/public-api/signals/connection-tracker.h>
28 * @addtogroup dali_core_signals
33 * @brief SlotDelegates can be used to connect member functions to signals, without inheriting from SlotDelegateInterface.
35 * Note that the object providing the member function is expected to own the SlotDelegate; therefore when the object
36 * is destroyed, the SlotDelegate destructor will automatically disconnect.
40 * class Example // This does not inherit from SlotDelegateInterface!
45 * : mSlotDelegate( this )
51 * // mSlotDelegate disconnects automatically here
56 * Animation animation = Animation::New( 1.0f );
57 * animation.FinishedSignal().Connect( mSlotDelegate, &Example::OnAnimationFinished );
58 * animation.Play(); // fire & forget
61 * void OnAnimationFinished( Animation& animation )
63 * std::cout << "Animation Finished!" << std::endl;
68 * SlotDelegate<Example> mSlotDelegate;
74 template <typename Slot>
82 * @param[in] slot The object with a callback.
84 SlotDelegate( Slot* slot )
90 * @brief Non-virtual destructor.
98 * @brief Disconnect all signals from this object.
103 mConnectionTracker.DisconnectAll();
107 * @copydoc ConnectionTracker::GetConnectionCount
109 std::size_t GetConnectionCount() const
111 return mConnectionTracker.GetConnectionCount();
115 * @brief Retrieve the slot object.
117 * @return The object with a callback.
125 * @brief Retrieve the connection tracker component.
127 * @return The connection tracker component.
129 ConnectionTracker* GetConnectionTracker()
131 return &mConnectionTracker;
136 SlotDelegate( const SlotDelegate& ); ///< undefined copy constructor
137 SlotDelegate& operator=( const SlotDelegate& ); ///< undefined assignment operator
141 Slot* mSlot; ///< The slot object
143 // Use composition instead of inheritance (virtual methods don't mix well with templates)
144 ConnectionTracker mConnectionTracker; ///< A connection tracker
152 #endif // __DALI_SLOT_DELEGATE_H__