Merge "Remove the actor from exclusive list in RenderTaskList when the actor is destr...
[platform/core/uifw/dali-core.git] / dali / public-api / object / property-notification.h
1 #ifndef __DALI_PROPERTY_NOTIFICATION_H__
2 #define __DALI_PROPERTY_NOTIFICATION_H__
3
4 /*
5  * Copyright (c) 2015 Samsung Electronics Co., Ltd.
6  *
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
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
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.
18  *
19  */
20
21 // INTERNAL INCLUDES
22 #include <dali/public-api/object/base-handle.h>
23 #include <dali/public-api/object/property-notification-declarations.h>
24 #include <dali/public-api/object/property-conditions.h>
25 #include <dali/public-api/object/property.h>
26
27 namespace Dali
28 {
29 /**
30  * @addtogroup dali_core_object
31  * @{
32  */
33
34 namespace Internal DALI_INTERNAL
35 {
36 class PropertyNotification;
37 }
38
39 /**
40  * @brief This is used to issue a notification upon a condition of the property being met.
41  *
42  * For example checking if Actor::POSITION_X > 100.0.
43  * @see Dali::PropertyCondition
44  */
45 class DALI_IMPORT_API PropertyNotification : public BaseHandle
46 {
47 public:
48   /**
49    * @brief Enumeration to describe how to check condition
50    */
51   enum NotifyMode
52   {
53     Disabled,                             ///< Don't notify, regardless of result of Condition
54     NotifyOnTrue,                         ///< Notify whenever condition changes from false to true.
55     NotifyOnFalse,                        ///< Notify whenever condition changes from true to false.
56     NotifyOnChanged                       ///< Notify whenever condition changes (false to true, and true to false)
57   };
58
59 public:
60
61   /**
62    * @brief Create an uninitialized PropertyNotification; this can be initialized with PropertyNotification::New().
63    *
64    * Calling member functions with an uninitialized Dali::Object is not allowed.
65    */
66   PropertyNotification();
67
68   /**
69    * @brief Downcast an Object handle to PropertyNotification.
70    *
71    * If handle points to an PropertyNotification object the downcast
72    * produces valid handle. If not the returned handle is left
73    * uninitialized.
74    *
75    * @param[in] handle to An object
76    * @return handle to a PropertyNotification object or an uninitialized handle
77    */
78   static PropertyNotification DownCast( BaseHandle handle );
79
80   /**
81    * @brief Destructor
82    *
83    * This is non-virtual since derived Handle types must not contain data or virtual methods.
84    */
85   ~PropertyNotification();
86
87   /**
88    * @brief This copy constructor is required for (smart) pointer semantics.
89    *
90    * @param [in] handle A reference to the copied handle
91    */
92   PropertyNotification(const PropertyNotification& handle);
93
94   /**
95    * @brief This assignment operator is required for (smart) pointer semantics.
96    *
97    * @param [in] rhs  A reference to the copied handle
98    * @return A reference to this
99    */
100   PropertyNotification& operator=(const PropertyNotification& rhs);
101
102   /**
103    * @brief Get the condition of this notification
104    *
105    * @return The condition is returned
106    */
107   PropertyCondition GetCondition();
108
109   /**
110    * @brief Get the condition of this notification
111    *
112    * @return The condition is returned
113    */
114   const PropertyCondition& GetCondition() const;
115
116   /**
117    * @brief Get the target handle that this notification is observing.
118    */
119   Dali::Handle GetTarget() const;
120
121   /**
122    * @brief Get the target handle's property index that this notification
123    * is observing.
124    *
125    * @return The target property.
126    */
127   Property::Index GetTargetProperty() const;
128
129   /**
130    * @brief Sets the Notification mode. This determines how the property
131    * notification should respond to the result of a condition.
132    *
133    * @param[in] mode Notification mode (Default is PropertyNotification::NotifyOnTrue)
134    */
135   void SetNotifyMode( NotifyMode mode );
136
137   /**
138    * @brief Retrieves the current Notification mode.
139    *
140    * @return Notification mode.
141    */
142   NotifyMode GetNotifyMode();
143
144   /**
145    * @brief Gets the result of the last condition check that caused a signal emit,
146    * useful when using NotifyOnChanged mode and need to know what it changed to.
147    *
148    * @return whether condition result that triggered last emit was true or false
149    */
150   bool GetNotifyResult() const;
151
152   /**
153    * @brief Connect to this signal to be notified when the notification has occurred.
154    *
155    * @return A signal object to Connect() with.
156    */
157   PropertyNotifySignalType& NotifySignal();
158
159 public: // Not intended for use by Application developers
160
161   /**
162    * @brief This constructor is used by Dali New() methods.
163    *
164    * @param [in] propertyNotification A pointer to a newly allocated Dali resource
165    */
166   explicit DALI_INTERNAL PropertyNotification(Internal::PropertyNotification* propertyNotification);
167 };
168
169 /**
170  * @}
171  */
172 } // namespace Dali
173
174 #endif // __DALI_PROPERTY_NOTIFICATION_H__