Apply new indicator UI.
[platform/framework/native/uifw.git] / src / ui / FUi_RelativeLayoutImpl.cpp
1 //
2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
4 //
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
8 //
9 //     http://floralicense.org/license/
10 //
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.
16 //
17 /**
18  * @file                FUi_RelativeLayoutImpl.cpp
19  * @brief       This is the implementation file for _RelativeLayoutImpl class.
20  *
21  * This file contains the implementation of _RelativeLayoutImpl class.
22  */
23
24 #include "FUi_RelativeLayoutImpl.h"
25
26 namespace Tizen { namespace Ui
27 {
28
29 namespace
30 {
31
32 _Layout::RelativeLayoutEdge
33 ConvertEnum(CenterAlignmentType var)
34 {
35         switch (var)
36         {
37         case CENTER_ALIGN_HORIZONTAL:
38                 return _Layout::EDGE_HCENTER;
39
40         case CENTER_ALIGN_VERTICAL:
41                 return _Layout::EDGE_VCENTER;
42
43         default:
44                 return _Layout::EDGE_NONE;
45         }
46 }
47
48 _Layout::RelativeLayoutEdge
49 ConvertEnum(RectangleEdgeType var)
50 {
51         switch (var)
52         {
53         case RECT_EDGE_LEFT:
54                 return _Layout::EDGE_LEFT;
55
56         case RECT_EDGE_RIGHT:
57                 return _Layout::EDGE_RIGHT;
58
59         case RECT_EDGE_TOP:
60                 return _Layout::EDGE_TOP;
61
62         case RECT_EDGE_BOTTOM:
63                 return _Layout::EDGE_BOTTOM;
64
65         default:
66                 return _Layout::EDGE_NONE;
67         }
68 }
69
70 }
71
72 // _RelativelayoutImpl implementation
73 _RelativeLayoutImpl::_RelativeLayoutImpl(RelativeLayout* pPublicLayout, _Layout::RelativeLayout* pCoreLayout)
74         : _LayoutImpl(pPublicLayout, pCoreLayout)
75 {
76 }
77
78 _RelativeLayoutImpl::~_RelativeLayoutImpl(void)
79 {
80 }
81
82 Tizen::Ui::LayoutType
83 _RelativeLayoutImpl::GetLayoutType(void) const
84 {
85         return LAYOUT_RELATIVE;
86 }
87
88 _RelativeLayoutImpl*
89 _RelativeLayoutImpl::CreateRelativeLayoutImplN(RelativeLayout* pPublicLayout)
90 {
91         ClearLastResult();
92
93         _Layout::RelativeLayout* pCoreLayout = null;
94         _RelativeLayoutImpl* pImplLayout = null;
95         result r = E_SUCCESS;
96
97         pCoreLayout = _Layout::RelativeLayout::CreateRelativeLayoutN();
98         r = GetLastResult();
99         SysTryReturn(NID_UI, pCoreLayout != null, null, r, "[%s] Propagating.", GetErrorMessage(r));
100
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));
104
105         return pImplLayout;
106 }
107
108 const char*
109 _RelativeLayoutImpl::GetPublicClassName(void) const
110 {
111         return "Tizen::Ui::RelativeLayout";
112 }
113
114 const RelativeLayout&
115 _RelativeLayoutImpl::GetPublic(void) const
116 {
117         return static_cast <const RelativeLayout&>(_LayoutImpl::GetPublic());
118 }
119
120 RelativeLayout&
121 _RelativeLayoutImpl::GetPublic(void)
122 {
123         return static_cast <RelativeLayout&>(_LayoutImpl::GetPublic());
124 }
125
126 const _Layout::RelativeLayout&
127 _RelativeLayoutImpl::GetCore(void) const
128 {
129         return static_cast <const _Layout::RelativeLayout&>(_LayoutImpl::GetCore());
130 }
131
132 _Layout::RelativeLayout&
133 _RelativeLayoutImpl::GetCore(void)
134 {
135         return static_cast <_Layout::RelativeLayout&>(_LayoutImpl::GetCore());
136 }
137
138 const _RelativeLayoutImpl*
139 _RelativeLayoutImpl::GetInstance(const RelativeLayout& layout)
140 {
141         return static_cast <const _RelativeLayoutImpl*>(_LayoutImpl::GetInstance(layout));
142 }
143
144 _RelativeLayoutImpl*
145 _RelativeLayoutImpl::GetInstance(RelativeLayout& layout)
146 {
147         return static_cast <_RelativeLayoutImpl*>(_LayoutImpl::GetInstance(layout));
148 }
149
150 result
151 _RelativeLayoutImpl::SetCenterAligned(_ControlImpl& control, CenterAlignmentType alignment)
152 {
153         ClearLastResult();
154
155         _Layout::LayoutItem& layoutItem = control.GetLayoutContainer();
156
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.");
160
161         result r = GetCore().SetRelation(layoutItem, edge);
162
163         return r;
164 }
165
166 result
167 _RelativeLayoutImpl::SetRelation(_ControlImpl& childControl, _ControlImpl& targetControl, RectangleEdgeRelation edgeRelation)
168 {
169         ClearLastResult();
170
171         _Layout::LayoutItem& childItem = childControl.GetLayoutContainer();
172         _Layout::LayoutItem& targetItem = targetControl.GetLayoutContainer();
173
174         _Layout::RelativeLayoutEdge sourceEdge;
175         _Layout::RelativeLayoutEdge targetEdge;
176         switch (edgeRelation)
177         {
178         case RECT_EDGE_RELATION_LEFT_TO_LEFT:
179                 sourceEdge = _Layout::EDGE_LEFT;
180                 targetEdge = _Layout::EDGE_LEFT;
181                 break;
182
183         case RECT_EDGE_RELATION_LEFT_TO_RIGHT:
184                 sourceEdge = _Layout::EDGE_LEFT;
185                 targetEdge = _Layout::EDGE_RIGHT;
186                 break;
187
188         case RECT_EDGE_RELATION_RIGHT_TO_RIGHT:
189                 sourceEdge = _Layout::EDGE_RIGHT;
190                 targetEdge = _Layout::EDGE_RIGHT;
191                 break;
192
193         case RECT_EDGE_RELATION_RIGHT_TO_LEFT:
194                 sourceEdge = _Layout::EDGE_RIGHT;
195                 targetEdge = _Layout::EDGE_LEFT;
196                 break;
197
198         case RECT_EDGE_RELATION_TOP_TO_TOP:
199                 sourceEdge = _Layout::EDGE_TOP;
200                 targetEdge = _Layout::EDGE_TOP;
201                 break;
202
203         case RECT_EDGE_RELATION_TOP_TO_BOTTOM:
204                 sourceEdge = _Layout::EDGE_TOP;
205                 targetEdge = _Layout::EDGE_BOTTOM;
206                 break;
207
208         case RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM:
209                 sourceEdge = _Layout::EDGE_BOTTOM;
210                 targetEdge = _Layout::EDGE_BOTTOM;
211                 break;
212
213         case RECT_EDGE_RELATION_BOTTOM_TO_TOP:
214                 sourceEdge = _Layout::EDGE_BOTTOM;
215                 targetEdge = _Layout::EDGE_TOP;
216                 break;
217
218         default:
219                 SysTryReturn(NID_UI, false, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] The rectangle edge is invalid argument.");
220                 break;
221         }
222
223         return GetCore().SetRelation(childItem, sourceEdge, &targetItem, targetEdge);
224 }
225
226 result
227 _RelativeLayoutImpl::ResetCenterAligned(_ControlImpl& control, CenterAlignmentType alignment)
228 {
229         ClearLastResult();
230
231         _Layout::LayoutItem& layoutItem = control.GetLayoutContainer();
232
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.");
236
237         result r = GetCore().UnsetRelation(layoutItem, edge);
238
239         return r;
240 }
241
242 result
243 _RelativeLayoutImpl::ResetRelation(_ControlImpl& control, RectangleEdgeType edgeType)
244 {
245         ClearLastResult();
246
247         _Layout::LayoutItem& layoutItem = control.GetLayoutContainer();
248
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.");
252
253         result r = GetCore().UnsetRelation(layoutItem, edge);
254
255         return r;
256 }
257
258 result
259 _RelativeLayoutImpl::SetHeight(_ControlImpl& control, float height)
260 {
261         ClearLastResult();
262
263         result r = SetVerticalFitPolicy(control, FIT_POLICY_FIXED);
264         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
265
266         _Layout::LayoutRect rect;
267         r = GetItemBaseRect(control, rect);
268         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
269
270         rect.h = height;
271         r = SetItemBaseRect(control, rect);
272         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
273
274         return r;
275 }
276
277 result
278 _RelativeLayoutImpl::SetWidth(_ControlImpl& control, float width)
279 {
280         ClearLastResult();
281
282         result r = SetHorizontalFitPolicy(control, FIT_POLICY_FIXED);
283         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
284
285         _Layout::LayoutRect rect;
286         r = GetItemBaseRect(control, rect);
287         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
288
289         rect.w = width;
290         r = SetItemBaseRect(control, rect);
291         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
292
293         return r;
294 }
295
296 result
297 _RelativeLayoutImpl::SetItemMargin(const _ControlImpl& item, float left, float right, float top, float bottom)
298 {
299         return _LayoutImpl::SetMargin(item, left, right, top, bottom);
300 }
301
302 result
303 _RelativeLayoutImpl::SetItemHorizontalFitPolicy(const _ControlImpl& item, const FitPolicy policy)
304 {
305         return _LayoutImpl::SetHorizontalFitPolicy(item, policy);
306 }
307
308 result
309 _RelativeLayoutImpl::SetItemVerticalFitPolicy(const _ControlImpl& item, FitPolicy policy)
310 {
311         return _LayoutImpl::SetVerticalFitPolicy(item, policy);
312 }
313
314 }} // Tizen::Ui