1 #ifndef __DALI_INTERNAL_PROPERTY_METADATA_H__
2 #define __DALI_INTERNAL_PROPERTY_METADATA_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.
26 #include <dali/public-api/common/constants.h>
27 #include <dali/public-api/object/property.h>
41 * An entry in a property metadata lookup.
42 * The type field should be queried, before accessing the scene-graph property:
45 * void Example(PropertyEntry entry)
47 * if (entry.type == Property::VECTOR3)
49 * SceneGraph::AnimatableProperty<Vector3>* property = dynamic_cast< SceneGraph::AnimatableProperty<Vector3>* >( entry.property );
55 class PropertyMetadata
60 * Constructor for an uninitalized property metadata
63 : type(Property::NONE),
65 componentIndex(Property::INVALID_COMPONENT_INDEX),
71 * Constructor for property metadata
72 * @param [in] newProperty A pointer to the property metadata.
74 PropertyMetadata(const SceneGraph::PropertyBase* newProperty)
75 : type(Property::NONE),
76 value(), // value is held by newProperty
77 componentIndex(Property::INVALID_COMPONENT_INDEX),
78 mProperty(newProperty)
80 DALI_ASSERT_DEBUG(mProperty && "Uninitialized scenegraph property") ;
84 * Constructor for property metadata
85 * @param [in] newValue The value of the scene-graph owned property.
87 PropertyMetadata(Property::Value newValue)
88 : type(newValue.GetType()),
90 componentIndex(Property::INVALID_COMPONENT_INDEX),
96 * Destructor for property metadata
98 virtual ~PropertyMetadata()
103 * @return true if the property is animatable (i.e. if its a scene graph property)
105 bool IsAnimatable(void) const
107 return NULL != mProperty;
111 * @return true if the property can be written to
113 virtual bool IsWritable(void) const = 0;
116 * @return the scene graph property
118 const SceneGraph::PropertyBase* GetSceneGraphProperty() const
120 DALI_ASSERT_DEBUG(mProperty && "Accessing uninitialized SceneGraph property") ;
124 Property::Type type; ///< The type of the property
125 Property::Value value; ///< The property value for a non animatable and custom property
126 int componentIndex; ///< The index of the property component
131 PropertyMetadata( const PropertyMetadata& );
132 PropertyMetadata& operator=( const PropertyMetadata& );
134 const SceneGraph::PropertyBase* mProperty; ///< A pointer to a scene-graph property; should not be modified from actor-thread.
139 * An entry in an animatable property metadata lookup.
140 * The type field should be queried, before accessing the animatable property:
142 class AnimatablePropertyMetadata : public PropertyMetadata
147 * Constructor for metadata of animatable property
148 * @param [in] newIndex The index of the animatable property.
149 * @param [in] newType The type ID of the animatable property.
150 * @param [in] newProperty A pointer to the scene-graph owned property.
152 AnimatablePropertyMetadata( Property::Index newIndex,
153 int newComponentIndex,
154 Property::Type newType,
155 const SceneGraph::PropertyBase* newProperty )
158 componentIndex = newComponentIndex;
160 mProperty = newProperty;
161 DALI_ASSERT_DEBUG(mProperty && "Uninitialized scenegraph property") ;
165 * Constructor for metadata of animatable property
166 * @param [in] newIndex The index of the animatable property.
167 * @param [in] newValue The value of the scene-graph owned property.
169 AnimatablePropertyMetadata( Property::Index newIndex,
170 int newComponentIndex,
171 Property::Value newValue )
174 componentIndex = newComponentIndex;
175 type = newValue.GetType();
180 * @return true if the property can be written to
182 virtual bool IsWritable(void) const
187 Property::Index index; ///< The index of the property
192 AnimatablePropertyMetadata();
193 AnimatablePropertyMetadata( const AnimatablePropertyMetadata& );
194 AnimatablePropertyMetadata& operator=( const AnimatablePropertyMetadata& );
197 class CustomPropertyMetadata : public PropertyMetadata
202 * Constructor for metadata of scene graph based properties
203 * @param [in] newName The name of the custom property.
204 * @param [in] newType The type ID of the custom property.
205 * @param [in] newProperty A pointer to the scene-graph owned property.
207 CustomPropertyMetadata( const std::string& newName,
208 Property::Type newType,
209 const SceneGraph::PropertyBase* newProperty)
211 mAccessMode(Property::ANIMATABLE)
214 mProperty = newProperty;
215 DALI_ASSERT_DEBUG(mProperty && "Uninitialized scenegraph property") ;
219 * Constructor for metadata of event side only properties
220 * @param [in] newName The name of the custom property.
221 * @param [in] newValue The value of the custom property.
222 * @param [in] accessMode The access mode of the custom property (writable, animatable etc).
224 CustomPropertyMetadata( const std::string& newName,
225 Property::Value newValue,
226 Property::AccessMode accessMode )
228 mAccessMode(accessMode)
230 type = newValue.GetType();
232 DALI_ASSERT_DEBUG(accessMode != Property::ANIMATABLE && "Animatable must have scenegraph property") ;
236 * @return true if the property can be written to
238 virtual bool IsWritable(void) const
240 return (mAccessMode == Property::ANIMATABLE) || (mAccessMode == Property::READ_WRITE) ;
243 std::string name; ///< The name of the property
248 CustomPropertyMetadata();
249 CustomPropertyMetadata( const CustomPropertyMetadata& );
250 CustomPropertyMetadata& operator=( const CustomPropertyMetadata& );
253 Property::AccessMode mAccessMode; ///< The mode of the property
256 } // namespace Internal
260 #endif // __DALI_INTERNAL_PROPERTY_METADATA_H__