1 #ifndef DALI_INTERNAL_ACTOR_OBSERVER_H
2 #define DALI_INTERNAL_ACTOR_OBSERVER_H
5 * Copyright (c) 2021 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/internal/event/common/object-impl.h>
23 #include <dali/public-api/signals/callback.h>
32 * Stores an actor pointer and connects/disconnects to any required signals appropriately when set/unset.
34 struct ActorObserver : public Object::Observer
37 // Construction & Destruction
45 * Constructor with a callback which is called when the observed actor is removed from the scene.
47 * The callback should have the following signature:
49 * void MyCallback( Actor* actor );
51 * Where actor is a pointer to the object that has been removed from the scene.
53 * @param[in] callback The callback to connect to.
55 * @note Ownership of callback is passed onto this class.
57 ActorObserver(CallbackBase* callback);
60 * Non virtual destructor
62 ~ActorObserver() override;
69 * @param[in] other The object to move the data from
71 * @note The other's actor is appropriately disconnected.
72 * @note Ownership of callback is passed onto this class.
74 ActorObserver(ActorObserver&& other);
77 * Move assignment operator.
79 * @param[in] other The object to move the data from
81 * @note The other's actor is appropriately disconnected.
82 * @note Ownership of callback is passed onto this class.
84 ActorObserver& operator=(ActorObserver&& other);
88 ActorObserver(const ActorObserver&) = delete; ///< Deleted copy constructor.
89 ActorObserver& operator=(const ActorObserver&) = delete; ///< Deleted copy assignment operator.
94 * Return the stored Actor pointer.
95 * @return The Actor pointer.
96 * @note Returns nullptr while the observed actor is not on the scene.
98 Actor* GetActor() const;
101 * Assignment operator.
102 * This disconnects the required signals from the currently set actor and connects to the required
103 * signals for the the actor specified (if set).
105 void SetActor(Actor* actor);
108 * Resets the set actor and disconnects any connected signals.
114 * This will be called if an actor is added to the scene.
115 * @param[in] object The object object.
116 * @see Object::Observer::SceneObjectAdded()
118 void SceneObjectAdded(Object& object) override;
121 * This will be called when the actor is removed from the scene.
122 * @param[in] object The object object.
123 * @see Object::Observer::SceneObjectRemoved()
125 void SceneObjectRemoved(Object& object) override;
128 * This will be called when the actor is destroyed. We should clear the actor.
129 * No need to stop observing as the object is being destroyed anyway.
130 * @see Object::Observer::ObjectDestroyed()
132 void ObjectDestroyed(Object& object) override;
135 Actor* mActor; ///< Raw pointer to an Actor.
136 bool mActorDisconnected; ///< Indicates whether the actor has been disconnected from the scene
137 CallbackBase* mRemoveCallback; ///< Callback to call when the observed actor is removed from the scene
140 } // namespace Internal
144 #endif // DALI_INTERNAL_ACTOR_OBSERVER_H