1 #ifndef DALI_TOOLKIT_LAYOUTING_LAYOUT_GROUP_H
2 #define DALI_TOOLKIT_LAYOUTING_LAYOUT_GROUP_H
4 * Copyright (c) 2018 Samsung Electronics Co., Ltd.
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
20 #include <dali/public-api/common/dali-common.h>
21 #include <dali/public-api/actors/actor-enumerations.h>
22 #include <dali-toolkit/devel-api/layouting/layout-item.h>
23 #include <dali-toolkit/devel-api/layouting/measure-spec.h>
24 #include <dali-toolkit/public-api/dali-toolkit-common.h>
38 * A layout that has layout children. Implements LayoutItem.
39 * It can both layout it's children, and be laid out by a parent container.
41 * A layout group automatically handles adding a Control container's children to itself,
42 * both on startup and on child add/remove. If this functionality is not desired, this needs
43 * splitting into two classes; one that manages just the layout part, and the other which
44 * handles Actor hierarchy. (@todo Consider doing this anyway...)
46 * This handle class allows the application to set up layout properties for the layout group;
47 * it doesn't access measure/layout directly.
49 * To write a new layout, inherit from both LayoutGroup handle and Internal::LayoutGroup body.
52 class DALI_TOOLKIT_API LayoutGroup : public LayoutItem
55 using LayoutId = unsigned int;
56 static const unsigned int UNKNOWN_ID = 0;
60 CHILD_PROPERTY_START_INDEX = CHILD_PROPERTY_REGISTRATION_START_INDEX+100,
61 CHILD_PROPERTY_END_INDEX = CHILD_PROPERTY_START_INDEX+1000
68 MARGIN_SPECIFICATION = CHILD_PROPERTY_START_INDEX,
74 * @brief Creates an uninitialized LayoutGroup handle.
76 * LayoutGroup is intended as a base class, and as such, does not have a New method.
78 * Calling member functions with an uninitialized handle is not allowed.
83 * @brief Default Destructor.
85 * This is non-virtual since derived Handle types must not contain data or virtual methods.
87 ~LayoutGroup() = default;
90 * @brief Copy constructor
92 LayoutGroup(const LayoutGroup& copy) = default;
95 * @brief Assigment operator
97 LayoutGroup& operator=(const LayoutGroup& rhs) = default;
100 * @brief Downcasts a handle to a LayoutGroup handle.
102 * If handle points to a LayoutGroup, the downcast produces a valid handle.
103 * If not, the returned handle is left uninitialized.
105 * @param[in] handle to an object
106 * @return Handle to a LayoutGroup or an uninitialized handle
108 static LayoutGroup DownCast( BaseHandle handle );
111 * @brief Add a child layout to the layout group
113 * @param[in] childLayout The layout to add.
114 * @return an Id of the child.
116 LayoutId Add( LayoutItem& childLayout );
119 * @brief Add a child layout to the layout group
121 * @param[in] childId the id of the child to remove
123 void Remove( LayoutId childId );
126 * @brief Remove a child layout from the layout group
128 * @param[in] childLayout The layout to remove.
130 void Remove( LayoutItem& childLayout );
133 * @brief Get the child at the given index.
135 * @param[in] index The index of the child.
137 LayoutItem GetChildAt( unsigned int index ) const;
140 * @brief Get the count of the children of the layout
142 * @return the count of the children of the layout
144 unsigned int GetChildCount() const ;
147 * @brief Get the child referenced by childId.
149 * @param[in] childId The id of the child to get
150 * @return A handle to the child layout, or empty if not found
152 LayoutItem GetChild( LayoutId childId ) const ;
155 * Delete template method to remove implicit casting to integer types.
157 template <typename T>
158 LayoutItem GetChild( T childId ) = delete;
163 * @brief This constructor is used by LayoutGroup::New() methods.
165 * @param[in] actor A pointer to a newly allocated Dali resource
167 explicit LayoutGroup( Internal::LayoutGroup* layoutGroup );
172 } // namespace Toolkit
175 #endif // DALI_TOOLKIT_LAYOUTING_LAYOUT_GROUP_H