2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
5 // Licensed under the Apache License, Version 2.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
9 // http://www.apache.org/licenses/LICENSE-2.0/
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
18 * @file FUi_RelativeLayoutImpl.cpp
19 * @brief This is the implementation file for _RelativeLayoutImpl class.
21 * This file contains the implementation of _RelativeLayoutImpl class.
24 #include "FUi_RelativeLayoutImpl.h"
26 namespace Tizen { namespace Ui
32 _Layout::RelativeLayoutEdge
33 ConvertEnum(CenterAlignmentType var)
37 case CENTER_ALIGN_HORIZONTAL:
38 return _Layout::EDGE_HCENTER;
40 case CENTER_ALIGN_VERTICAL:
41 return _Layout::EDGE_VCENTER;
44 return _Layout::EDGE_NONE;
48 _Layout::RelativeLayoutEdge
49 ConvertEnum(RectangleEdgeType var)
54 return _Layout::EDGE_LEFT;
57 return _Layout::EDGE_RIGHT;
60 return _Layout::EDGE_TOP;
62 case RECT_EDGE_BOTTOM:
63 return _Layout::EDGE_BOTTOM;
66 return _Layout::EDGE_NONE;
72 // _RelativelayoutImpl implementation
73 _RelativeLayoutImpl::_RelativeLayoutImpl(RelativeLayout* pPublicLayout, _Layout::RelativeLayout* pCoreLayout)
74 : _LayoutImpl(pPublicLayout, pCoreLayout)
78 _RelativeLayoutImpl::~_RelativeLayoutImpl(void)
83 _RelativeLayoutImpl::GetLayoutType(void) const
85 return LAYOUT_RELATIVE;
89 _RelativeLayoutImpl::CreateRelativeLayoutImplN(RelativeLayout* pPublicLayout)
93 _Layout::RelativeLayout* pCoreLayout = null;
94 _RelativeLayoutImpl* pImplLayout = null;
97 pCoreLayout = _Layout::RelativeLayout::CreateRelativeLayoutN();
99 SysTryReturn(NID_UI, pCoreLayout != null, null, r, "[%s] Propagating.", GetErrorMessage(r));
101 pImplLayout = new (std::nothrow) _RelativeLayoutImpl(pPublicLayout, pCoreLayout);
102 r = CheckConstruction(pCoreLayout, pImplLayout);
103 SysTryReturn(NID_UI, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
109 _RelativeLayoutImpl::GetPublicClassName(void) const
111 return "Tizen::Ui::RelativeLayout";
114 const RelativeLayout&
115 _RelativeLayoutImpl::GetPublic(void) const
117 return static_cast <const RelativeLayout&>(_LayoutImpl::GetPublic());
121 _RelativeLayoutImpl::GetPublic(void)
123 return static_cast <RelativeLayout&>(_LayoutImpl::GetPublic());
126 const _Layout::RelativeLayout&
127 _RelativeLayoutImpl::GetCore(void) const
129 return static_cast <const _Layout::RelativeLayout&>(_LayoutImpl::GetCore());
132 _Layout::RelativeLayout&
133 _RelativeLayoutImpl::GetCore(void)
135 return static_cast <_Layout::RelativeLayout&>(_LayoutImpl::GetCore());
138 const _RelativeLayoutImpl*
139 _RelativeLayoutImpl::GetInstance(const RelativeLayout& layout)
141 return static_cast <const _RelativeLayoutImpl*>(_LayoutImpl::GetInstance(layout));
145 _RelativeLayoutImpl::GetInstance(RelativeLayout& layout)
147 return static_cast <_RelativeLayoutImpl*>(_LayoutImpl::GetInstance(layout));
151 _RelativeLayoutImpl::SetCenterAligned(_ControlImpl& control, CenterAlignmentType alignment)
155 _Layout::LayoutItem& layoutItem = control.GetLayoutContainer();
157 _Layout::RelativeLayoutEdge edge = ConvertEnum(alignment);
158 SysTryReturn(NID_UI, edge != _Layout::EDGE_NONE, E_INVALID_ARG, E_INVALID_ARG,
159 "[E_INVALID_ARG] The rectangle edge is invalid argument.");
161 result r = GetCore().SetRelation(layoutItem, edge);
167 _RelativeLayoutImpl::SetRelation(_ControlImpl& childControl, _ControlImpl& targetControl, RectangleEdgeRelation edgeRelation)
171 _Layout::LayoutItem& childItem = childControl.GetLayoutContainer();
172 _Layout::LayoutItem& targetItem = targetControl.GetLayoutContainer();
174 _Layout::RelativeLayoutEdge sourceEdge;
175 _Layout::RelativeLayoutEdge targetEdge;
176 switch (edgeRelation)
178 case RECT_EDGE_RELATION_LEFT_TO_LEFT:
179 sourceEdge = _Layout::EDGE_LEFT;
180 targetEdge = _Layout::EDGE_LEFT;
183 case RECT_EDGE_RELATION_LEFT_TO_RIGHT:
184 sourceEdge = _Layout::EDGE_LEFT;
185 targetEdge = _Layout::EDGE_RIGHT;
188 case RECT_EDGE_RELATION_RIGHT_TO_RIGHT:
189 sourceEdge = _Layout::EDGE_RIGHT;
190 targetEdge = _Layout::EDGE_RIGHT;
193 case RECT_EDGE_RELATION_RIGHT_TO_LEFT:
194 sourceEdge = _Layout::EDGE_RIGHT;
195 targetEdge = _Layout::EDGE_LEFT;
198 case RECT_EDGE_RELATION_TOP_TO_TOP:
199 sourceEdge = _Layout::EDGE_TOP;
200 targetEdge = _Layout::EDGE_TOP;
203 case RECT_EDGE_RELATION_TOP_TO_BOTTOM:
204 sourceEdge = _Layout::EDGE_TOP;
205 targetEdge = _Layout::EDGE_BOTTOM;
208 case RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM:
209 sourceEdge = _Layout::EDGE_BOTTOM;
210 targetEdge = _Layout::EDGE_BOTTOM;
213 case RECT_EDGE_RELATION_BOTTOM_TO_TOP:
214 sourceEdge = _Layout::EDGE_BOTTOM;
215 targetEdge = _Layout::EDGE_TOP;
219 SysTryReturn(NID_UI, false, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] The rectangle edge is invalid argument.");
223 return GetCore().SetRelation(childItem, sourceEdge, &targetItem, targetEdge);
227 _RelativeLayoutImpl::ResetCenterAligned(_ControlImpl& control, CenterAlignmentType alignment)
231 _Layout::LayoutItem& layoutItem = control.GetLayoutContainer();
233 _Layout::RelativeLayoutEdge edge = ConvertEnum(alignment);
234 SysTryReturn(NID_UI, edge != _Layout::EDGE_NONE, E_INVALID_ARG, E_INVALID_ARG,
235 "[E_INVALID_ARG] The rectangle edge is invalid argument.");
237 result r = GetCore().UnsetRelation(layoutItem, edge);
243 _RelativeLayoutImpl::ResetRelation(_ControlImpl& control, RectangleEdgeType edgeType)
247 _Layout::LayoutItem& layoutItem = control.GetLayoutContainer();
249 _Layout::RelativeLayoutEdge edge = ConvertEnum(edgeType);
250 SysTryReturn(NID_UI, edge != _Layout::EDGE_NONE, E_INVALID_ARG, E_INVALID_ARG,
251 "[E_INVALID_ARG] The rectangle edge is invalid argument.");
253 result r = GetCore().UnsetRelation(layoutItem, edge);
259 _RelativeLayoutImpl::SetHeight(_ControlImpl& control, float height)
263 result r = SetVerticalFitPolicy(control, FIT_POLICY_FIXED);
264 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
266 _Layout::LayoutRect rect;
267 r = GetItemBaseRect(control, rect);
268 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
271 r = SetItemBaseRect(control, rect);
272 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
278 _RelativeLayoutImpl::SetWidth(_ControlImpl& control, float width)
282 result r = SetHorizontalFitPolicy(control, FIT_POLICY_FIXED);
283 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
285 _Layout::LayoutRect rect;
286 r = GetItemBaseRect(control, rect);
287 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
290 r = SetItemBaseRect(control, rect);
291 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
297 _RelativeLayoutImpl::SetItemMargin(const _ControlImpl& item, float left, float right, float top, float bottom)
299 return _LayoutImpl::SetMargin(item, left, right, top, bottom);
303 _RelativeLayoutImpl::SetItemHorizontalFitPolicy(const _ControlImpl& item, const FitPolicy policy)
305 return _LayoutImpl::SetHorizontalFitPolicy(item, policy);
309 _RelativeLayoutImpl::SetItemVerticalFitPolicy(const _ControlImpl& item, FitPolicy policy)
311 return _LayoutImpl::SetVerticalFitPolicy(item, policy);