1 #ifndef __DALI_TOOLKIT_CLUSTER_H__
2 #define __DALI_TOOLKIT_CLUSTER_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/animation/alpha-functions.h>
23 #include <dali/public-api/animation/time-period.h>
26 #include <dali-toolkit/public-api/controls/control.h>
34 namespace Internal DALI_INTERNAL
42 * @brief Cluster is a container of grouped actors positioned in different cluster styles.
45 * | %Action Name | Method |
46 * |---------------------------|---------------------------|
47 * | expand | DoExpandAction() |
48 * | collapse | DoCollapseAction() |
49 * | transform | DoTransformAction() |
51 class DALI_IMPORT_API Cluster : public Control
57 static const std::string CLUSTER_ACTOR_DEPTH; ///< Property, name "cluster-actor-depth", type FLOAT
62 * Create a Cluster handle; this can be initialised with Cluster::New()
63 * Calling member functions with an uninitialised handle is not allowed.
70 Cluster( const Cluster& cluster );
73 * Assignment Operator.
75 Cluster& operator=( const Cluster& cluster );
80 * This is non-virtual since derived Handle types must not contain data or virtual methods.
85 * Create the Cluster control with the given style.
86 * @param[in] style The style of the cluster
87 * @return A handle to the Cluster control.
89 static Cluster New( ClusterStyle& style );
92 * Downcast an Object handle to Cluster. If handle points to a Cluster the
93 * downcast produces valid handle. If not the returned handle is left uninitialized.
94 * @param[in] handle Handle to an object
95 * @return handle to a Cluster or an uninitialized handle
97 static Cluster DownCast( BaseHandle handle );
100 * Adds a child to the Cluster
101 * Will automatically choose a position for the child.
102 * @pre The child actor has been initialized.
103 * @param[in] child The child to add
105 void AddChild( Actor child );
108 * Adds a child to the Cluster
109 * User specifies the position for the child.
110 * @pre The child actor has been initialized.
111 * @param[in] child The child to add
112 * @param[in] positionIndex The position for this child
114 void AddChild( Actor child, unsigned int positionIndex );
117 * Adds a child to the Cluster to be inserted at a specified
119 * Will automatically choose a position for the child.
120 * @pre The child actor has been initialized.
121 * @param[in] child The child to add
122 * @param[in] index The depth position for this child
124 void AddChildAt( Actor child, unsigned int index );
127 * Adds a child to the Cluster to be inserted at a specified
129 * User specifies the position for the child.
130 * @pre The child actor has been initialized.
131 * @param[in] child The child to add
132 * @param[in] positionIndex The position for this child
133 * @param[in] index The depth position for this child
135 void AddChildAt( Actor child, unsigned int positionIndex, unsigned int index );
138 * Returns a child from the given layout position
139 * Note! if there is no child in this layout position this method returns an uninitialized
141 * @param[in] index The child index in the cluster
142 * @return The child that was in the layout position or an uninitialized handle
144 Actor GetChildAt( unsigned int index );
147 * Removes a child from the given layout position
148 * Note! if there is no child in this layout position this method does nothing
149 * @param[in] index The index of the child to remove
150 * @return The child that was removed or an uninitialized handle
152 Actor RemoveChildAt( unsigned int index );
156 * A child will move away from the cluster.
157 * @param[in] index The child position index to expand
159 void ExpandChild( unsigned int index );
162 * Expands all children
163 * All children that have been collapsed will
164 * move away from the cluster
166 void ExpandAllChildren();
170 * A child that has been expanded will move
171 * back to its original positions.
172 * @param[in] index The child index to collapse
173 * @param[in] front Whether to move child to the front or
174 * back of cluster (depth).
176 void CollapseChild( unsigned int index, bool front = false );
179 * Collapses all children.
180 * All children that have been expanded will move
181 * back to their original positions.
182 * @param[in] front Whether to move child to the front or
183 * back of cluster (depth).
185 void CollapseAllChildren( bool front = false );
188 * Transforms Actor from default transform to new transform
189 * @param[in] index The child index to move
190 * @param[in] position The position to move to
191 * @param[in] scale The scale to change to
192 * @param[in] rotation The rotation to change to
193 * @param[in] alpha The alpha function to use to tween to this transform
194 * @param[in] period The duration for this transformation to take
196 void TransformChild( unsigned int index, const Vector3& position, const Vector3& scale, const Quaternion& rotation, AlphaFunction alpha, const TimePeriod& period );
199 * Restores Actor to the default transform (based on current style)
200 * @param[in] index The child index to move back
201 * @param[in] alpha The alpha function to use to tween to this transform
202 * @param[in] period The duration for this transformation to take
203 * @param[in] front Whether to move child to the front or
204 * back of cluster (depth).
206 void RestoreChild( unsigned int index, AlphaFunction alpha, const TimePeriod& period, bool front = false );
209 * Sets the background image.
210 * @param[in] image The background image.
212 void SetBackgroundImage( Actor image );
217 * @param[in] text Title text.
219 void SetTitle( Actor text );
222 * Sets the style of the cluster
223 * @param[in] style The style of the cluster
225 void SetStyle(ClusterStyle style);
228 * Gets the style of the cluster
229 * @return style of the cluster
231 ClusterStyle GetStyle() const;
234 * Gets the number of children that have been expanded in this cluster.
235 * @return the number of children expanded.
237 unsigned int GetExpandedCount() const;
240 * Gets the number of children that have been added to this cluster.
241 * @return the total number of children.
243 unsigned int GetTotalCount() const;
245 public: // Not intended for application developers
248 * Creates a handle using the Toolkit::Internal implementation.
249 * @param[in] implementation The Control implementation.
251 DALI_INTERNAL Cluster( Internal::Cluster& implementation );
254 * Allows the creation of this Control from an Internal::CustomActor pointer.
255 * @param[in] internal A pointer to the internal CustomActor.
257 explicit DALI_INTERNAL Cluster( Dali::Internal::CustomActor* internal );
260 } // namespace Toolkit
264 #endif // __DALI_TOOLKIT_CLUSTER_H__