1 #ifndef __DALI_PROPERTY_NOTIFICATION_H__
2 #define __DALI_PROPERTY_NOTIFICATION_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/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>
30 * @addtogroup dali_core_object
34 namespace Internal DALI_INTERNAL
36 class PropertyNotification;
40 * @brief This is used to issue a notification upon a condition of the property being met.
42 * For example checking if Actor::POSITION_X > 100.0.
44 * @see Dali::PropertyCondition
46 class DALI_IMPORT_API PropertyNotification : public BaseHandle
50 * @brief Enumeration to describe how to check condition
55 Disabled, ///< Don't notify, regardless of result of Condition @SINCE_1_0.0
56 NotifyOnTrue, ///< Notify whenever condition changes from false to true. @SINCE_1_0.0
57 NotifyOnFalse, ///< Notify whenever condition changes from true to false. @SINCE_1_0.0
58 NotifyOnChanged ///< Notify whenever condition changes (false to true, and true to false) @SINCE_1_0.0
64 * @brief Create an uninitialized PropertyNotification; this can be initialized with PropertyNotification::New().
66 * Calling member functions with an uninitialized Dali::Object is not allowed.
69 PropertyNotification();
72 * @brief Downcast a handle to PropertyNotification handle.
74 * If handle points to an PropertyNotification object the downcast
75 * produces valid handle. If not the returned handle is left
79 * @param[in] handle to An object
80 * @return handle to a PropertyNotification object or an uninitialized handle
82 static PropertyNotification DownCast( BaseHandle handle );
87 * This is non-virtual since derived Handle types must not contain data or virtual methods.
90 ~PropertyNotification();
93 * @brief This copy constructor is required for (smart) pointer semantics.
96 * @param [in] handle A reference to the copied handle
98 PropertyNotification(const PropertyNotification& handle);
101 * @brief This assignment operator is required for (smart) pointer semantics.
104 * @param [in] rhs A reference to the copied handle
105 * @return A reference to this
107 PropertyNotification& operator=(const PropertyNotification& rhs);
110 * @brief Get the condition of this notification
113 * @return The condition is returned
115 PropertyCondition GetCondition();
118 * @brief Get the condition of this notification
121 * @return The condition is returned
123 const PropertyCondition& GetCondition() const;
126 * @brief Get the target handle that this notification is observing.
128 * @return The target handle
130 Dali::Handle GetTarget() const;
133 * @brief Get the target handle's property index that this notification
137 * @return The target property.
139 Property::Index GetTargetProperty() const;
142 * @brief Sets the Notification mode.
144 * This determines how the property
145 * notification should respond to the result of a condition.
148 * @param[in] mode Notification mode (Default is PropertyNotification::NotifyOnTrue)
150 void SetNotifyMode( NotifyMode mode );
153 * @brief Retrieves the current Notification mode.
156 * @return Notification mode.
158 NotifyMode GetNotifyMode();
161 * @brief Gets the result of the last condition check that caused a signal emit,
162 * useful when using NotifyOnChanged mode and need to know what it changed to.
165 * @return whether condition result that triggered last emit was true or false
167 bool GetNotifyResult() const;
170 * @brief Connect to this signal to be notified when the notification has occurred.
173 * @return A signal object to Connect() with.
175 PropertyNotifySignalType& NotifySignal();
177 public: // Not intended for use by Application developers
181 * @brief This constructor is used by Dali New() methods.
184 * @param [in] propertyNotification A pointer to a newly allocated Dali resource
186 explicit DALI_INTERNAL PropertyNotification(Internal::PropertyNotification* propertyNotification);
195 #endif // __DALI_PROPERTY_NOTIFICATION_H__