1 #ifndef __DALI_PROPERTY_CONDITIONS_H__
2 #define __DALI_PROPERTY_CONDITIONS_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/common/vector-wrapper.h>
23 #include <dali/public-api/object/base-handle.h>
24 #include <dali/public-api/object/property.h>
29 namespace Internal DALI_INTERNAL
31 class PropertyCondition;
35 * @brief This represents a condition that can be evaluated on a Property::Value.
37 class DALI_IMPORT_API PropertyCondition : public BaseHandle
42 * @brief Argument container, represents the arguments to be supplied to the condition function.
44 typedef std::vector<Property::Value> ArgumentContainer;
45 typedef ArgumentContainer::iterator ArgumentIter; ///< Iterator for Dali::PropertyCondition::ArgumentContainer
46 typedef ArgumentContainer::const_iterator ArgumentConstIter;///< Const Iterator for Dali::PropertyCondition::ArgumentContainer
51 * @brief Constructor for condition clause.
61 * @brief This copy constructor is required for (smart) pointer semantics.
63 * @param [in] handle A reference to the copied handle
65 PropertyCondition(const PropertyCondition& handle);
68 * @brief This assignment operator is required for (smart) pointer semantics.
70 * @param [in] rhs A reference to the copied handle
71 * @return A reference to this
73 PropertyCondition& operator=(const PropertyCondition& rhs);
78 * @brief Retrieve the arguments that this condition uses.
80 * @return The arguments used for this condition
82 ArgumentContainer GetArguments();
85 * @brief Retrieve the arguments that this condition uses.
87 * @return The arguments used for this condition
88 * @note The container will only be valid as long PropertyCondition is valid.
90 const ArgumentContainer& GetArguments() const;
95 * @brief LessThanCondition compares whether property is less than arg.
98 * bool (false = 0.0f, true = 1.0f)
100 * vector2 (the 2D length)
101 * vector3 (the 3D length)
102 * vector4 (the 4D length)
103 * @param[in] arg The argument for the condition
104 * @return A property condition function object
106 DALI_IMPORT_API PropertyCondition LessThanCondition(float arg);
109 * @brief GreaterThanCondition compares whether property is greater than arg.
112 * bool (false = 0.0f, true = 1.0f)
114 * vector2 (the 2D length)
115 * vector3 (the 3D length)
116 * vector4 (the 4D length)
117 * @param[in] arg The argument for the condition
118 * @return A property condition function object
120 DALI_IMPORT_API PropertyCondition GreaterThanCondition(float arg);
123 * @brief InsideCondition compares whether property is greater than arg0 and less than arg1.
126 * bool (false = 0.0f, true = 1.0f)
128 * vector2 (the 2D length)
129 * vector3 (the 3D length)
130 * vector4 (the 4D length)
131 * @param[in] arg0 The first argument for the condition
132 * @param[in] arg1 The second argument for the condition
133 * @return A property condition function object
135 DALI_IMPORT_API PropertyCondition InsideCondition(float arg0, float arg1);
138 * @brief OutsideCondition compares whether property is less than arg0 or greater than arg1.
141 * bool (false = 0.0f, true = 1.0f)
143 * vector2 (the 2D length)
144 * vector3 (the 3D length)
145 * vector4 (the 4D length)
146 * @param[in] arg0 The first argument for the condition
147 * @param[in] arg1 The second argument for the condition
148 * @return A property condition function object
150 DALI_IMPORT_API PropertyCondition OutsideCondition(float arg0, float arg1);
153 * @brief Detects when a property changes by stepAmount from initialValue, in both positive and negative directions. This will continue checking for multiples of stepAmount
157 * vector2 (the 2D length)
158 * vector3 (the 3D length)
159 * vector4 (the 4D length)
160 * @param[in] stepAmount The step size required to trigger condition
161 * @param[in] initialValue The initial value to step from
162 * @return A property condition function object
164 DALI_IMPORT_API PropertyCondition StepCondition(float stepAmount, float initialValue = 0.0f);
167 * @brief Receive notifications as a property goes above/below the inputted values. Values must be ordered and can be either ascending or descending
171 * vector2 (the 2D length)
172 * vector3 (the 3D length)
173 * vector4 (the 4D length)
174 * @param[in] steps List of values to receive notifications for as a property crosses them
175 * @return A property condition function object
177 DALI_IMPORT_API PropertyCondition VariableStepCondition(const std::vector<float>& steps);
181 #endif // __DALI_PROPERTY_CONDITIONS_H__