1 #ifndef __DALI_INTERNAL_SCENE_GRAPH_PROPERTY_NOTIFICATION_H__
2 #define __DALI_INTERNAL_SCENE_GRAPH_PROPERTY_NOTIFICATION_H__
5 * Copyright (c) 2014 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/property-notification.h>
23 #include <dali/internal/event/common/property-notification-impl.h>
24 #include <dali/internal/update/common/property-base.h>
25 #include <dali/internal/common/owner-container.h>
26 #include <dali/internal/common/message.h>
27 #include <dali/internal/update/common/double-buffered.h>
36 class PropertyNotification;
41 class PropertyNotification;
43 typedef OwnerContainer< PropertyNotification* > PropertyNotificationContainer;
44 typedef PropertyNotificationContainer::Iterator PropertyNotificationIter;
45 typedef PropertyNotificationContainer::ConstIterator PropertyNotificationConstIter;
46 typedef bool(*ConditionFunction)(const Dali::PropertyInput& value, Dali::Internal::PropertyNotification::RawArgumentContainer& args);
49 * PropertyNotifications are used to inspect properties of scene graph objects, as part of a scene
50 * managers "update" phase. When a condition has been met the application receives a notification signal.
52 class PropertyNotification
56 typedef Dali::PropertyNotification::NotifyMode NotifyMode;
57 typedef Dali::Internal::PropertyNotification::ConditionType ConditionType;
58 typedef Dali::Internal::PropertyNotification::RawArgumentContainer RawArgumentContainer;
59 typedef const void *(*GetPropertyFunction)( const SceneGraph::PropertyBase*, int );
62 * Construct a new PropertyNotification
63 * @param[in] proxy The proxy for a scene-graph object to inspect.
64 * @param[in] propertyIndex The index of a property provided by the object.
65 * @param[in] propertyType The type of property we're inspecting.
66 * @param[in] componentIndex Index to the component of a complex property such as a Vector
67 * @param[in] condition The condition type (e.g. LessThan, GreaterThan...)
68 * @param[in] arguments The arguments which accompany the condition.
69 * @param[in] notifyMode The notification mode setting
70 * @return A new PropertyNotification object.
72 static PropertyNotification* New(ProxyObject& proxy,
73 Property::Index propertyIndex,
74 Property::Type propertyType,
76 ConditionType condition,
77 RawArgumentContainer& arguments,
78 NotifyMode notifyMode);
83 virtual ~PropertyNotification();
86 * Sets Notify Mode, whether to notify if the condition is true
87 * and if the condition is false.
89 * @param[in] notifyMode The notification mode setting
91 void SetNotifyMode( NotifyMode notifyMode );
94 * Check this property notification condition,
95 * and if true then dispatch notification.
96 * @param[in] bufferIndex The current update buffer index.
97 * @return Whether the validity of this notification has changed.
99 bool Check( BufferIndex bufferIndex );
102 * Returns the validity of the last condition check
104 * @return the validity
106 bool GetValidity() const;
111 * Construct the PropertyNotification
112 * @param[in] proxy The proxy for a scene-graph object to inspect.
113 * @param[in] propertyIndex The index of a property provided by the object.
114 * @param[in] propertyType The type of property we're inspecting.
115 * @param[in] componentIndex Index to the component of a complex property such as a Vector
116 * @param[in] condition The condition type (e.g. LessThan, GreaterThan...)
117 * @param[in] arguments The arguments which accompany the condition.
118 * @param[in] notifyMode The notification mode setting
120 PropertyNotification(ProxyObject& proxy,
121 Property::Index propertyIndex,
122 Property::Type propertyType,
124 ConditionType condition,
125 RawArgumentContainer& arguments,
126 NotifyMode notifyMode);
131 * Checks if bool is LessThan
132 * @param[in] value The value being examined.
133 * @param[in] arg The supplied arguments for the condition.
134 * @return Condition result (true if condition met, false if not)
136 static bool EvalFalse( const Dali::PropertyInput& value, Dali::Internal::PropertyNotification::RawArgumentContainer& arg );
139 PropertyNotification(const PropertyNotification&);
142 PropertyNotification& operator=(const PropertyNotification& rhs);
146 ProxyObject* mProxy; ///< Not owned by the property notification. Valid until ProxyDestroyed() is called.
147 Property::Index mPropertyIndex; ///< The index of this property.
148 Property::Type mPropertyType; ///< The type of property this is.
149 const PropertyInputImpl* mProperty; ///< The scene graph property
150 int mComponentIndex; ///< Used for accessing float components of Vector3/4
151 ConditionType mConditionType; ///< The ConditionType
152 RawArgumentContainer mArguments; ///< The arguments.
153 bool mValid; ///< Whether this property notification is currently valid or not.
154 NotifyMode mNotifyMode; ///< Whether to notify on invalid and/or valid
155 ConditionFunction mConditionFunction; ///< The Condition Function pointer to be evaluated.
158 // Messages for PropertyNotification
160 } // namespace SceneGraph
162 } // namespace Internal
166 #endif // __DALI_INTERNAL_SCENE_GRAPH_PROPERTY_NOTIFICATION_H__