1 #ifndef DALI_PROPERTY_HELPER_DEVEL_H
2 #define DALI_PROPERTY_HELPER_DEVEL_H
5 * Copyright (c) 2020 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/type-registry-helper.h>
25 * @brief These macros are used internally by the property macros.
26 * Use the the property macros in the section below this one (without the _INTERNAL postfix) when defining properties.
27 * These internal macros exist as to perform the compile-time check on the enumeration order, the __COUNTER__ macro is used twice.
28 * Using it twice within the same macro would result in two different values.
30 #define DALI_DEVEL_PROPERTY_REGISTRATION_INTERNAL(count, typeRegistrationObject, objectNamespace, objectType, develNamespace, text, valueType, enumIndex) \
31 Dali::PropertyRegistration DALI_TOKEN_PASTE(property, count)(typeRegistrationObject, text, objectNamespace::develNamespace ::Property::enumIndex, Dali::Property::valueType, &objectType::SetProperty, &objectType::GetProperty); \
32 static_assert((objectNamespace::develNamespace ::Property::enumIndex - objectNamespace::objectType::PROPERTY_START_INDEX) == count);
34 #define DALI_DEVEL_PROPERTY_REGISTRATION_INTERNAL_READ_ONLY(count, typeRegistrationObject, objectNamespace, objectType, develNamespace, text, valueType, enumIndex) \
35 Dali::PropertyRegistration DALI_TOKEN_PASTE(property, count)(typeRegistrationObject, text, objectNamespace::develNamespace ::Property::enumIndex, Dali::Property::valueType, NULL, &objectType::GetProperty); \
36 static_assert((objectNamespace::develNamespace ::Property::enumIndex - objectNamespace::objectType::PROPERTY_START_INDEX) == count);
39 * @brief These macros are used to define properties for implementations of CustomActor.
41 * These macros should be used when defining devel properties
42 * They provide the following benefits:
43 * - A standard and consistent way to define properties.
44 * - Concise definition promotes readability, especially with large numbers of properties.
45 * - Provides a built-in compile-time check. This checks the order of the properties within the enumeration match the order of the property macros. Note: This check is not performed for animatable properties.
46 * - Enforces how properties are enumerated in the object handles header file.
48 * Note: The compile-type check will produce the following message on failure:
49 * error: invalid application of 'sizeof' to incomplete type 'Dali::CompileTimeAssertBool<false>'
51 * Macro usage example:
53 * Within the your object's implementation cpp:
55 * #include <dali/public-api/object/devel-property-helper.h>
57 * DALI_TYPE_REGISTRATION_BEGIN( MyApp::MyCustomActor, Dali::CustomActor, Create )
58 * DALI_DEVEL_PROPERTY_REGISTRATION( MyApp, MyCustomActor, "myProperty", INTEGER, MY_DEVEL_PROPERTY )
59 * DALI_TYPE_REGISTRATION_END()
62 * Within your handle's header:
65 * #include <dali/public-api/common/dali-common.h>
68 * ///< @brief The start and end property ranges for this control.
71 * PROPERTY_START_INDEX = Dali::PROPERTY_REGISTRATION_START_INDEX,
72 * PROPERTY_END_INDEX = PROPERTY_START_INDEX + 1000
75 * ///< @brief An enumeration of properties belonging to the Button class.
80 * MY_PROPERTY = PROPERTY_START_INDEX ///< @brief name "myProperty", type Integer
85 * Using these macros have certain prerequisites on how the property enumeration is defined.
86 * Please see the Programming Guide (within the generated Doxygen) for full details.
88 #define DALI_DEVEL_PROPERTY_REGISTRATION(objectNamespace, objectType, text, valueType, enumIndex) \
89 DALI_DEVEL_PROPERTY_REGISTRATION_INTERNAL(__COUNTER__, typeRegistration, objectNamespace, objectType, DALI_TOKEN_PASTE(Devel, objectType), text, valueType, enumIndex)
92 * @copydoc DALI_DEVEL_PROPERTY_REGISTRATION
94 * @note For Read Only properties
96 #define DALI_DEVEL_PROPERTY_REGISTRATION_READ_ONLY(objectNamespace, objectType, text, valueType, enumIndex) \
97 DALI_DEVEL_PROPERTY_REGISTRATION_INTERNAL_READ_ONLY(__COUNTER__, typeRegistration, objectNamespace, objectType, DALI_TOKEN_PASTE(Devel, objectType), text, valueType, enumIndex)
100 * @copydoc DALI_DEVEL_PROPERTY_REGISTRATION
102 * @note Animatable property registration
104 #define DALI_DEVEL_ANIMATABLE_PROPERTY_REGISTRATION(objectNamespace, objectType, text, valueType, enumIndex) \
105 DALI_ANIMATABLE_PROPERTY_REGISTRATION_INTERNAL(__COUNTER__, typeRegistration, objectNamespace, objectType, DALI_TOKEN_PASTE(Devel, objectType), text, valueType, enumIndex)
108 * @copydoc DALI_DEVEL_PROPERTY_REGISTRATION
110 * @note Animatable property registration with default value
113 #define DALI_DEVEL_ANIMATABLE_PROPERTY_REGISTRATION_WITH_DEFAULT(objectNamespace, objectType, text, value, enumIndex) \
114 DALI_ANIMATABLE_PROPERTY_REGISTRATION_WITH_DEFAULT_INTERNAL(__COUNTER__, typeRegistration, objectNamespace, DALI_TOKEN_PASTE(Devel, objectType), text, value, enumIndex)
117 * @copydoc DALI_DEVEL_PROPERTY_REGISTRATION
119 * @note Component registration for a Devel Animatable property
122 #define DALI_DEVEL_ANIMATABLE_PROPERTY_COMPONENT_REGISTRATION(objectNamespace, objectType, text, enumIndex, baseEnumIndex, componentIndex) \
123 DALI_ANIMATABLE_PROPERTY_COMPONENT_REGISTRATION_INTERNAL(__COUNTER__, typeRegistration, objectNamespace, DALI_TOKEN_PASTE(Devel, objectType), text, enumIndex, baseEnumIndex, componentIndex)
125 #endif // DALI_PROPERTY_HELPER_DEVEL_H