Merge "(FrameCallback) All values now local & baking of the value supported" into...
[platform/core/uifw/dali-core.git] / dali / public-api / object / property.h
1 #ifndef __DALI_PROPERTY_H__
2 #define __DALI_PROPERTY_H__
3
4 /*
5  * Copyright (c) 2018 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 // EXTERNAL INCLUDES
22 #include <string>
23 #include <utility>
24
25 // INTERNAL INCLUDES
26 #include <dali/public-api/common/dali-common.h>
27 #include <dali/public-api/common/dali-vector.h>
28
29 namespace Dali
30 {
31 /**
32  * @addtogroup dali_core_object
33  * @{
34  */
35
36 class Handle;
37
38 /**
39  * @brief An object + property pair.
40  * @SINCE_1_0.0
41  */
42 struct DALI_CORE_API Property
43 {
44   /**
45    * @brief A valid property index is zero or greater.
46    * @SINCE_1_0.0
47    */
48   typedef int Index;
49
50   static const int INVALID_INDEX; ///< -1 is not a valid property index
51   static const int INVALID_KEY;   ///< -1 is not a valid property key
52   static const int INVALID_COMPONENT_INDEX; ///< -1 is not a valid property index
53
54   typedef Dali::Vector< Index > IndexContainer; ///< A vector of property indices @SINCE_1_0.0
55
56   /**
57    * @brief A value-type representing a property value.
58    */
59   class Value;
60
61   /**
62    * @brief A Key used by Map
63    */
64   struct Key;
65
66   /**
67    * @brief A Map of property values.
68    */
69   class Map;
70
71   /**
72    * @brief An Array of property values.
73    */
74   class Array;
75
76   /**
77    * @brief Enumeration for the property types supported.
78    * @SINCE_1_0.0
79    */
80   enum Type
81   {
82     NONE,            ///< No type @SINCE_1_0.0
83
84     BOOLEAN,         ///< A boolean type @SINCE_1_0.0
85     FLOAT,           ///< A float type @SINCE_1_0.0
86     INTEGER,         ///< An integer type @SINCE_1_0.0
87     VECTOR2,         ///< a vector array of size=2 with float precision @SINCE_1_0.0
88     VECTOR3,         ///< a vector array of size=3 with float precision @SINCE_1_0.0
89     VECTOR4,         ///< a vector array of size=4 with float precision @SINCE_1_0.0
90     MATRIX3,         ///< a 3x3 matrix @SINCE_1_0.0
91     MATRIX,          ///< a 4x4 matrix @SINCE_1_0.0
92     RECTANGLE,       ///< an integer array of size=4 @SINCE_1_0.0
93     ROTATION,        ///< either a quaternion or an axis angle rotation @SINCE_1_0.0
94     STRING,          ///< A string type @SINCE_1_0.0
95     ARRAY,           ///< an array of Property::Value @SINCE_1_0.0
96     MAP,             ///< a string key to Property:value mapping @SINCE_1_0.0
97     EXTENTS          ///< a collection of 4 x uint16_t @SINCE_1_2.62
98   };
99
100   /**
101    * @brief Enumeration for the access mode for custom properties.
102    * @SINCE_1_0.0
103    */
104   enum AccessMode
105   {
106     READ_ONLY,          ///< if the property is read-only @SINCE_1_0.0
107     READ_WRITE,         ///< If the property is read/writeable @SINCE_1_0.0
108     ANIMATABLE,         ///< If the property can be animated or constrained @SINCE_1_0.0
109     ACCESS_MODE_COUNT   ///< The number of access modes @SINCE_1_0.0
110   };
111
112
113   /**
114    * @brief Creates a Property instance.
115    *
116    * @SINCE_1_0.0
117    * @param[in] object A valid handle to the target object
118    * @param[in] propertyIndex The index of a property
119    */
120   Property( Handle& object, Property::Index propertyIndex );
121
122
123   /**
124    * @brief Creates a Property instance.
125    *
126    * @SINCE_1_0.0
127    * @param[in] object A valid handle to the target object.
128    * @param[in] propertyIndex The index of a property.
129    * @param[in] componentIndex Index to a sub component of a property, for use with Vector2, Vector3 and Vector4. -1 for main property (default is -1)
130    */
131   Property( Handle& object, Property::Index propertyIndex, int componentIndex );
132
133   /**
134    * @brief Creates a Property instance.
135    *
136    * @SINCE_1_0.0
137    * @param[in] object A valid handle to the target object
138    * @param[in] propertyName The property name
139    * @note This performs a property index query and is therefore slower than
140    * constructing a Property directly with the index.
141    */
142   Property( Handle& object, const std::string& propertyName );
143
144   /**
145    * @brief Creates a Property instance.
146    *
147    * @SINCE_1_0.0
148    * @param[in] object A valid handle to the target object
149    * @param[in] propertyName The property name
150    * @param[in] componentIndex Index to a sub component of a property, for use with Vector2, Vector3 and Vector4. -1 for main property (default is -1)
151    * @note This performs a property index query and is therefore slower than
152    * constructing a Property directly with the index.
153    */
154   Property( Handle& object, const std::string& propertyName, int componentIndex );
155
156   /**
157    * @brief Non-virtual destructor; Property is not intended as a base class.
158    * @SINCE_1_0.0
159    */
160   ~Property();
161
162   Handle& object; ///< A valid handle to the target object.
163
164   Index propertyIndex; ///< The index of a property provided by object.
165
166   int componentIndex; ///< Index of a property sub component, for use with Vector2, Vector3 and Vector4, -1 if using main property
167 };
168
169 /**
170  * @}
171  */
172 } // namespace Dali
173
174 #endif // __DALI_PROPERTY_H__