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 FUiRelativeLayout.cpp
19 * @brief This is the implementation file for RelativeLayout class.
21 * This file contains the implementation of RelativeLayout class.
24 #include <FUiRelativeLayout.h>
25 #include <FUiControl.h>
26 #include "FUi_RelativeLayoutImpl.h"
27 #include "FUi_CoordinateSystemUtils.h"
29 namespace Tizen { namespace Ui
32 RelativeLayout::RelativeLayout()
36 RelativeLayout::~RelativeLayout()
41 RelativeLayout::Construct(void)
45 _RelativeLayoutImpl* pRelativeLayoutImpl = _RelativeLayoutImpl::GetInstance(*this);
46 SysAssertf(pRelativeLayoutImpl == null, "Already constructed. Calling Construct() twice or more on a same instance is not allowed for this class.");
48 pRelativeLayoutImpl = _RelativeLayoutImpl::CreateRelativeLayoutImplN(this);
49 result r = GetLastResult();
50 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
52 _LayoutImpl::SetLayoutImpl(this, pRelativeLayoutImpl);
58 RelativeLayout::GetLayoutType(void) const
60 return LAYOUT_RELATIVE;
64 RelativeLayout::SetRelation(Control& childControl, const Control& targetControl, RectangleEdgeRelation edgeRelation)
68 _RelativeLayoutImpl* pRelativeLayoutImpl = _RelativeLayoutImpl::GetInstance(*this);
69 SysAssertf(pRelativeLayoutImpl != null, "Not yet constructed. Construct() should be called before use.");
71 _ControlImpl* pControlImpl = _ControlImpl::GetInstance(childControl);
72 SysTryReturn(NID_UI, pControlImpl, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] This instance is not constructed.");
74 _ControlImpl* pTargetControlImpl = const_cast<_ControlImpl*>(_ControlImpl::GetInstance(targetControl));
75 SysTryReturn(NID_UI, pTargetControlImpl, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] This instance is not constructed.");
77 result r = pRelativeLayoutImpl->SetRelation(*pControlImpl, *pTargetControlImpl, edgeRelation);
78 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
84 RelativeLayout::SetRelation(Control& childControl, Control* pTargetControl, RectangleEdgeRelation edgeRelation)
88 _RelativeLayoutImpl* pRelativeLayoutImpl = _RelativeLayoutImpl::GetInstance(*this);
89 SysAssertf(pRelativeLayoutImpl != null, "Not yet constructed. Construct() should be called before use.");
91 _ControlImpl* pControlImpl = _ControlImpl::GetInstance(childControl);
92 SysTryReturn(NID_UI, pControlImpl, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] This instance is not constructed.");
94 _ControlImpl* pTargetControlImpl = _ControlImpl::GetInstance(*pTargetControl);
95 SysTryReturn(NID_UI, pTargetControlImpl, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] This instance is not constructed.");
97 result r = pRelativeLayoutImpl->SetRelation(*pControlImpl, *pTargetControlImpl, edgeRelation);
98 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
104 RelativeLayout::ResetRelation(Control& childControl, RectangleEdgeType edgeType)
108 _RelativeLayoutImpl* pRelativeLayoutImpl = _RelativeLayoutImpl::GetInstance(*this);
109 SysAssertf(pRelativeLayoutImpl != null, "Not yet constructed. Construct() should be called before use.");
111 _ControlImpl* pControlImpl = _ControlImpl::GetInstance(childControl);
112 SysTryReturn(NID_UI, pControlImpl, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] This instance is not constructed.");
114 result r = pRelativeLayoutImpl->ResetRelation(*pControlImpl, edgeType);
115 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
121 RelativeLayout::SetCenterAligned(Control& childControl, CenterAlignmentType alignment)
125 _RelativeLayoutImpl* pRelativeLayoutImpl = _RelativeLayoutImpl::GetInstance(*this);
126 SysAssertf(pRelativeLayoutImpl != null, "Not yet constructed. Construct() should be called before use.");
128 _ControlImpl* pControlImpl = _ControlImpl::GetInstance(childControl);
129 SysTryReturn(NID_UI, pControlImpl, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] This instance is not constructed.");
131 result r = pRelativeLayoutImpl->SetCenterAligned(*pControlImpl, alignment);
132 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
138 RelativeLayout::ResetCenterAligned(Control& childControl, CenterAlignmentType alignment)
142 _RelativeLayoutImpl* pRelativeLayoutImpl = _RelativeLayoutImpl::GetInstance(*this);
143 SysAssertf(pRelativeLayoutImpl != null, "Not yet constructed. Construct() should be called before use.");
145 _ControlImpl* pControlImpl = _ControlImpl::GetInstance(childControl);
146 SysTryReturn(NID_UI, pControlImpl, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] This instance is not constructed.");
148 result r = pRelativeLayoutImpl->ResetCenterAligned(*pControlImpl, alignment);
149 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
155 RelativeLayout::SetMargin(Control& childControl, int left, int right, int top, int bottom)
159 _RelativeLayoutImpl* pRelativeLayoutImpl = _RelativeLayoutImpl::GetInstance(*this);
160 SysAssertf(pRelativeLayoutImpl != null, "Not yet constructed. Construct() should be called before use.");
162 _ControlImpl* pControlImpl = _ControlImpl::GetInstance(childControl);
163 SysTryReturn(NID_UI, pControlImpl, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] This instance is not constructed.");
165 float floatLeft = _CoordinateSystemUtils::ConvertToFloat(left);
166 float floatRight = _CoordinateSystemUtils::ConvertToFloat(right);
167 float floatTop = _CoordinateSystemUtils::ConvertToFloat(top);
168 float floatBottom = _CoordinateSystemUtils::ConvertToFloat(bottom);
169 result r = pRelativeLayoutImpl->SetItemMargin(*pControlImpl, floatLeft, floatRight, floatTop, floatBottom);
170 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
176 RelativeLayout::SetMargin(Control& childControl, float left, float right, float top, float bottom)
180 _RelativeLayoutImpl* pRelativeLayoutImpl = _RelativeLayoutImpl::GetInstance(*this);
181 SysAssertf(pRelativeLayoutImpl != null, "Not yet constructed. Construct() should be called before use.");
183 _ControlImpl* pControlImpl = _ControlImpl::GetInstance(childControl);
184 SysTryReturn(NID_UI, pControlImpl, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] This instance is not constructed.");
186 result r = pRelativeLayoutImpl->SetItemMargin(*pControlImpl, left, right, top, bottom);
187 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
193 RelativeLayout::SetWidth(Control& childControl, int width)
197 _RelativeLayoutImpl* pRelativeLayoutImpl = _RelativeLayoutImpl::GetInstance(*this);
198 SysAssertf(pRelativeLayoutImpl != null, "Not yet constructed. Construct() should be called before use.");
200 _ControlImpl* pControlImpl = _ControlImpl::GetInstance(childControl);
201 SysTryReturn(NID_UI, pControlImpl, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] This instance is not constructed.");
203 result r = pRelativeLayoutImpl->SetWidth(*pControlImpl, _CoordinateSystemUtils::ConvertToFloat(width));
204 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
210 RelativeLayout::SetWidth(Control& childControl, float width)
214 _RelativeLayoutImpl* pRelativeLayoutImpl = _RelativeLayoutImpl::GetInstance(*this);
215 SysAssertf(pRelativeLayoutImpl != null, "Not yet constructed. Construct() should be called before use.");
217 _ControlImpl* pControlImpl = _ControlImpl::GetInstance(childControl);
218 SysTryReturn(NID_UI, pControlImpl, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] This instance is not constructed.");
220 result r = pRelativeLayoutImpl->SetWidth(*pControlImpl, width);
221 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
227 RelativeLayout::SetHeight(Control& childControl, int height)
231 _RelativeLayoutImpl* pRelativeLayoutImpl = _RelativeLayoutImpl::GetInstance(*this);
232 SysAssertf(pRelativeLayoutImpl != null, "Not yet constructed. Construct() should be called before use.");
234 _ControlImpl* pControlImpl = _ControlImpl::GetInstance(childControl);
235 SysTryReturn(NID_UI, pControlImpl, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] This instance is not constructed.");
237 result r = pRelativeLayoutImpl->SetHeight(*pControlImpl, _CoordinateSystemUtils::ConvertToFloat(height));
238 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
244 RelativeLayout::SetHeight(Control& childControl, float height)
248 _RelativeLayoutImpl* pRelativeLayoutImpl = _RelativeLayoutImpl::GetInstance(*this);
249 SysAssertf(pRelativeLayoutImpl != null, "Not yet constructed. Construct() should be called before use.");
251 _ControlImpl* pControlImpl = _ControlImpl::GetInstance(childControl);
252 SysTryReturn(NID_UI, pControlImpl, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] This instance is not constructed.");
254 result r = pRelativeLayoutImpl->SetHeight(*pControlImpl, height);
255 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
261 RelativeLayout::SetHorizontalFitPolicy(Control& childControl, FitPolicy policy)
265 _RelativeLayoutImpl* pRelativeLayoutImpl = _RelativeLayoutImpl::GetInstance(*this);
266 SysAssertf(pRelativeLayoutImpl != null, "Not yet constructed. Construct() should be called before use.");
268 _ControlImpl* pControlImpl = _ControlImpl::GetInstance(childControl);
269 SysTryReturn(NID_UI, pControlImpl, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] This instance is not constructed.");
271 result r = pRelativeLayoutImpl->SetItemHorizontalFitPolicy(*pControlImpl, policy);
272 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
278 RelativeLayout::SetVerticalFitPolicy(Control& childControl, FitPolicy policy)
282 _RelativeLayoutImpl* pRelativeLayoutImpl = _RelativeLayoutImpl::GetInstance(*this);
283 SysAssertf(pRelativeLayoutImpl != null, "Not yet constructed. Construct() should be called before use.");
285 _ControlImpl* pControlImpl = _ControlImpl::GetInstance(childControl);
286 SysTryReturn(NID_UI, pControlImpl, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] This instance is not constructed.");
288 result r = pRelativeLayoutImpl->SetItemVerticalFitPolicy(*pControlImpl, policy);
289 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));