2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
5 // Licensed under the Flora License, Version 1.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://floralicense.org/license/
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 result r = E_SUCCESS;
175 _Layout::RelativeLayoutEdge sourceEdge;
176 _Layout::RelativeLayoutEdge targetEdge;
177 switch (edgeRelation)
179 case RECT_EDGE_RELATION_LEFT_TO_LEFT:
180 sourceEdge = _Layout::EDGE_LEFT;
181 targetEdge = _Layout::EDGE_LEFT;
184 case RECT_EDGE_RELATION_LEFT_TO_RIGHT:
185 sourceEdge = _Layout::EDGE_LEFT;
186 targetEdge = _Layout::EDGE_RIGHT;
189 case RECT_EDGE_RELATION_RIGHT_TO_RIGHT:
190 sourceEdge = _Layout::EDGE_RIGHT;
191 targetEdge = _Layout::EDGE_RIGHT;
194 case RECT_EDGE_RELATION_RIGHT_TO_LEFT:
195 sourceEdge = _Layout::EDGE_RIGHT;
196 targetEdge = _Layout::EDGE_LEFT;
199 case RECT_EDGE_RELATION_TOP_TO_TOP:
200 sourceEdge = _Layout::EDGE_TOP;
201 targetEdge = _Layout::EDGE_TOP;
204 case RECT_EDGE_RELATION_TOP_TO_BOTTOM:
205 sourceEdge = _Layout::EDGE_TOP;
206 targetEdge = _Layout::EDGE_BOTTOM;
209 case RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM:
210 sourceEdge = _Layout::EDGE_BOTTOM;
211 targetEdge = _Layout::EDGE_BOTTOM;
214 case RECT_EDGE_RELATION_BOTTOM_TO_TOP:
215 sourceEdge = _Layout::EDGE_BOTTOM;
216 targetEdge = _Layout::EDGE_TOP;
221 SysTryReturn(NID_UI, false, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] The rectangle edge is invalid argument.");
225 r = GetCore().SetRelation(childItem, sourceEdge, &targetItem, targetEdge);
231 _RelativeLayoutImpl::ResetCenterAligned(_ControlImpl& control, CenterAlignmentType alignment)
235 _Layout::LayoutItem& layoutItem = control.GetLayoutContainer();
237 _Layout::RelativeLayoutEdge edge = ConvertEnum(alignment);
238 SysTryReturn(NID_UI, edge != _Layout::EDGE_NONE, E_INVALID_ARG, E_INVALID_ARG,
239 "[E_INVALID_ARG] The rectangle edge is invalid argument.");
241 result r = GetCore().UnsetRelation(layoutItem, edge);
247 _RelativeLayoutImpl::ResetRelation(_ControlImpl& control, RectangleEdgeType edgeType)
251 _Layout::LayoutItem& layoutItem = control.GetLayoutContainer();
253 _Layout::RelativeLayoutEdge edge = ConvertEnum(edgeType);
254 SysTryReturn(NID_UI, edge != _Layout::EDGE_NONE, E_INVALID_ARG, E_INVALID_ARG,
255 "[E_INVALID_ARG] The rectangle edge is invalid argument.");
257 result r = GetCore().UnsetRelation(layoutItem, edge);
263 _RelativeLayoutImpl::SetHeight(_ControlImpl& control, int height)
267 result r = SetVerticalFitPolicy(control, FIT_POLICY_FIXED);
268 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
270 _Layout::LayoutRect rect;
271 r = GetItemBaseRect(control, rect);
272 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
275 r = SetItemBaseRect(control, rect);
276 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
282 _RelativeLayoutImpl::SetWidth(_ControlImpl& control, int width)
286 result r = SetHorizontalFitPolicy(control, FIT_POLICY_FIXED);
287 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
289 _Layout::LayoutRect rect;
290 r = GetItemBaseRect(control, rect);
291 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
294 r = SetItemBaseRect(control, rect);
295 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
301 _RelativeLayoutImpl::SetItemMargin(const _ControlImpl& item, int left, int right, int top, int bottom)
303 return _LayoutImpl::SetMargin(item, left, right, top, bottom);
307 _RelativeLayoutImpl::GetItemMargin(const _ControlImpl& item, int& left, int& right, int& top, int& bottom)
309 return _LayoutImpl::GetMargin(item, left, right, top, bottom);
313 _RelativeLayoutImpl::SetItemHorizontalFitPolicy(const _ControlImpl& item, const FitPolicy policy)
315 return _LayoutImpl::SetHorizontalFitPolicy(item, policy);
319 _RelativeLayoutImpl::SetItemVerticalFitPolicy(const _ControlImpl& item, FitPolicy policy)
321 return _LayoutImpl::SetVerticalFitPolicy(item, policy);