modify license, permission and remove ^M char
[platform/framework/native/uifw.git] / src / ui / FUiGridLayout.cpp
1 //
2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
4 //
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
8 //
9 //     http://www.apache.org/licenses/LICENSE-2.0/
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                FUiGridLayout.cpp
19  * @brief       This is the implementation file for GridLayout class.
20  *
21  * This file contains the implementation of GridLayout class.
22  */
23
24 #include <FUiGridLayout.h>
25 #include <FUiControl.h>
26 #include "FUi_GridLayoutImpl.h"
27 #include "FUi_CoordinateSystemUtils.h"
28
29 namespace Tizen { namespace Ui
30 {
31
32 GridLayout::GridLayout()
33 {
34 }
35
36 GridLayout::~GridLayout()
37 {
38 }
39
40 result
41 GridLayout::Construct(int maxRow, int maxColumn)
42 {
43         ClearLastResult();
44
45         SysTryReturn(NID_UI, (maxRow - 1 >= 0) && (maxColumn - 1 >= 0), E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] The given parameter is invalid.");
46
47         _GridLayoutImpl* pGridLayoutImpl = _GridLayoutImpl::GetInstance(*this);
48         SysAssertf(pGridLayoutImpl == null, "Already constructed. Calling Construct() twice or more on a same instance is not allowed for this class.");
49
50         pGridLayoutImpl = _GridLayoutImpl::CreateGridLayoutImplN(this, maxRow, maxColumn);
51         result r = GetLastResult();
52         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
53
54         _LayoutImpl::SetLayoutImpl(this, pGridLayoutImpl);
55
56         return E_SUCCESS;
57 }
58
59 Tizen::Ui::LayoutType
60 GridLayout::GetLayoutType(void) const
61 {
62         return LAYOUT_GRID;
63 }
64
65 int
66 GridLayout::GetRowCount() const
67 {
68         ClearLastResult();
69
70         const _GridLayoutImpl* pGridLayoutImpl = _GridLayoutImpl::GetInstance(*this);
71         SysAssertf(pGridLayoutImpl != null, "Not yet constructed. Construct() should be called before use.");
72
73         return pGridLayoutImpl->GetRowCount();
74 }
75
76 int
77 GridLayout::GetColumnCount() const
78 {
79         ClearLastResult();
80
81         const _GridLayoutImpl* pGridLayoutImpl = _GridLayoutImpl::GetInstance(*this);
82         SysAssertf(pGridLayoutImpl != null, "Not yet constructed. Construct() should be called before use.");
83
84         return pGridLayoutImpl->GetColumnCount();
85 }
86
87 result
88 GridLayout::SetColumnStretchable(int columnIndex, bool stretchable)
89 {
90         ClearLastResult();
91
92         _GridLayoutImpl* pGridLayoutImpl = _GridLayoutImpl::GetInstance(*this);
93         SysAssertf(pGridLayoutImpl != null, "Not yet constructed. Construct() should be called before use.");
94
95         SysTryReturn(NID_UI, (columnIndex >= 0) && (columnIndex <= GetColumnCount() - 1), E_OUT_OF_RANGE, E_OUT_OF_RANGE, "[E_OUT_OF_RANGE] The given parameter is out of range.");
96
97         result r = pGridLayoutImpl->SetColumnStretchable(columnIndex, stretchable);
98         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
99
100         return r;
101 }
102
103 result
104 GridLayout::SetColumnShrinkable(int columnIndex, bool shrinkable)
105 {
106         ClearLastResult();
107
108         _GridLayoutImpl* pGridLayoutImpl = _GridLayoutImpl::GetInstance(*this);
109         SysAssertf(pGridLayoutImpl != null, "Not yet constructed. Construct() should be called before use.");
110
111         SysTryReturn(NID_UI, (columnIndex >= 0) && (columnIndex <= GetColumnCount() - 1), E_OUT_OF_RANGE, E_OUT_OF_RANGE, "[E_OUT_OF_RANGE] The given parameter is out of range.");
112
113         result r = pGridLayoutImpl->SetColumnShrinkable(columnIndex, shrinkable);
114         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
115
116         return r;
117 }
118
119 result
120 GridLayout::SetColumnCollapsed(int columnIndex, bool collapsed)
121 {
122         ClearLastResult();
123
124         _GridLayoutImpl* pGridLayoutImpl = _GridLayoutImpl::GetInstance(*this);
125         SysAssertf(pGridLayoutImpl != null, "Not yet constructed. Construct() should be called before use.");
126
127         SysTryReturn(NID_UI, (columnIndex >= 0) && (columnIndex <= GetColumnCount() - 1), E_OUT_OF_RANGE, E_OUT_OF_RANGE, "[E_OUT_OF_RANGE] The given parameter is out of range.");
128
129         result r = pGridLayoutImpl->SetColumnCollapsed(columnIndex, collapsed);
130         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
131
132         return r;
133 }
134
135 result
136 GridLayout::SetAllColumnsStretchable(bool stretchable)
137 {
138         ClearLastResult();
139
140         _GridLayoutImpl* pGridLayoutImpl = _GridLayoutImpl::GetInstance(*this);
141         SysAssertf(pGridLayoutImpl != null, "Not yet constructed. Construct() should be called before use.");
142
143         result r = pGridLayoutImpl->SetAllColumnsStretchable(stretchable);
144         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
145
146         return r;
147 }
148
149 result
150 GridLayout::SetAllColumnsShrinkable(bool shrinkable)
151 {
152         ClearLastResult();
153
154         _GridLayoutImpl* pGridLayoutImpl = _GridLayoutImpl::GetInstance(*this);
155         SysAssertf(pGridLayoutImpl != null, "Not yet constructed. Construct() should be called before use.");
156
157         result r = pGridLayoutImpl->SetAllColumnsShrinkable(shrinkable);
158         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
159
160         return r;
161 }
162
163 result
164 GridLayout::SetColumnSpacing(int columnIndex, int space)
165 {
166         ClearLastResult();
167
168         _GridLayoutImpl* pGridLayoutImpl = _GridLayoutImpl::GetInstance(*this);
169         SysAssertf(pGridLayoutImpl != null, "Not yet constructed. Construct() should be called before use.");
170
171         SysTryReturn(NID_UI, (columnIndex >= 0) && (columnIndex <= GetColumnCount() - 1), E_OUT_OF_RANGE, E_OUT_OF_RANGE, "[E_OUT_OF_RANGE] The given parameter is out of range.");
172         SysTryReturn(NID_UI, space >= 0, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] The given parameter is invalid.");
173
174         result r = pGridLayoutImpl->SetColumnSpacing(columnIndex, _CoordinateSystemUtils::ConvertToFloat(space));
175         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
176
177         return r;
178 }
179
180 result
181 GridLayout::SetColumnSpacing(int columnIndex, float space)
182 {
183         ClearLastResult();
184
185         _GridLayoutImpl* pGridLayoutImpl = _GridLayoutImpl::GetInstance(*this);
186         SysAssertf(pGridLayoutImpl != null, "Not yet constructed. Construct() should be called before use.");
187
188         SysTryReturn(NID_UI, (columnIndex >= 0) && (columnIndex <= GetColumnCount() - 1), E_OUT_OF_RANGE, E_OUT_OF_RANGE, "[E_OUT_OF_RANGE] The given parameter is out of range.");
189         SysTryReturn(NID_UI, space >= 0, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] The given parameter is invalid.");
190
191         result r = pGridLayoutImpl->SetColumnSpacing(columnIndex, space);
192         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
193
194         return r;
195 }
196
197 result
198 GridLayout::SetRowStretchable(int rowIndex, bool stretchable)
199 {
200         ClearLastResult();
201
202         _GridLayoutImpl* pGridLayoutImpl = _GridLayoutImpl::GetInstance(*this);
203         SysAssertf(pGridLayoutImpl != null, "Not yet constructed. Construct() should be called before use.");
204
205         SysTryReturn(NID_UI, (rowIndex >= 0) && (rowIndex <= GetRowCount() - 1), E_OUT_OF_RANGE, E_OUT_OF_RANGE, "[E_OUT_OF_RANGE] The given parameter is out of range.");
206
207         result r = pGridLayoutImpl->SetRowStretchable(rowIndex, stretchable);
208         SysTryReturn(NID_UI, GetLastResult() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(r));
209
210         return r;
211 }
212
213 result
214 GridLayout::SetRowShrinkable(int rowIndex, bool shrinkable)
215 {
216         ClearLastResult();
217
218         _GridLayoutImpl* pGridLayoutImpl = _GridLayoutImpl::GetInstance(*this);
219         SysAssertf(pGridLayoutImpl != null, "Not yet constructed. Construct() should be called before use.");
220
221         SysTryReturn(NID_UI, (rowIndex >= 0) && (rowIndex <= GetRowCount() - 1), E_OUT_OF_RANGE, E_OUT_OF_RANGE, "[E_OUT_OF_RANGE] The given parameter is out of range.");
222
223         result r = pGridLayoutImpl->SetRowShrinkable(rowIndex, shrinkable);
224         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
225
226         return r;
227 }
228
229 result
230 GridLayout::SetRowCollapsed(int rowIndex, bool collapsed)
231 {
232         ClearLastResult();
233
234         _GridLayoutImpl* pGridLayoutImpl = _GridLayoutImpl::GetInstance(*this);
235         SysAssertf(pGridLayoutImpl != null, "Not yet constructed. Construct() should be called before use.");
236
237         SysTryReturn(NID_UI, (rowIndex >= 0) && (rowIndex <= GetRowCount() - 1), E_OUT_OF_RANGE, E_OUT_OF_RANGE, "[E_OUT_OF_RANGE] The given parameter is out of range.");
238
239         result r = pGridLayoutImpl->SetRowCollapsed(rowIndex, collapsed);
240         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
241
242         return r;
243 }
244
245 result
246 GridLayout::SetAllRowsStretchable(bool stretchable)
247 {
248         ClearLastResult();
249
250         _GridLayoutImpl* pGridLayoutImpl = _GridLayoutImpl::GetInstance(*this);
251         SysAssertf(pGridLayoutImpl != null, "Not yet constructed. Construct() should be called before use.");
252
253         result r = pGridLayoutImpl->SetAllRowsStretchable(stretchable);
254         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
255
256         return r;
257 }
258
259 result
260 GridLayout::SetAllRowsShrinkable(bool shrinkable)
261 {
262         ClearLastResult();
263         _GridLayoutImpl* pGridLayoutImpl = _GridLayoutImpl::GetInstance(*this);
264         SysAssertf(pGridLayoutImpl != null, "Not yet constructed. Construct() should be called before use.");
265
266         result r = pGridLayoutImpl->SetAllRowsShrinkable(shrinkable);
267         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
268
269         return r;
270 }
271
272 result
273 GridLayout::SetRowSpacing(int rowIndex, int space)
274 {
275         ClearLastResult();
276
277         _GridLayoutImpl* pGridLayoutImpl = _GridLayoutImpl::GetInstance(*this);
278         SysAssertf(pGridLayoutImpl != null, "Not yet constructed. Construct() should be called before use.");
279
280         SysTryReturn(NID_UI, (rowIndex >= 0) && (rowIndex <= GetRowCount() - 1), E_OUT_OF_RANGE, E_OUT_OF_RANGE, "[E_OUT_OF_RANGE] The given parameter is out of range.");
281         SysTryReturn(NID_UI, space >= 0, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] The given parameter is invalid.");
282
283         result r = pGridLayoutImpl->SetRowSpacing(rowIndex, _CoordinateSystemUtils::ConvertToFloat(space));
284         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
285
286         return r;
287 }
288
289 result
290 GridLayout::SetRowSpacing(int rowIndex, float space)
291 {
292         ClearLastResult();
293
294         _GridLayoutImpl* pGridLayoutImpl = _GridLayoutImpl::GetInstance(*this);
295         SysAssertf(pGridLayoutImpl != null, "Not yet constructed. Construct() should be called before use.");
296
297         SysTryReturn(NID_UI, (rowIndex >= 0) && (rowIndex <= GetRowCount() - 1), E_OUT_OF_RANGE, E_OUT_OF_RANGE, "[E_OUT_OF_RANGE] The given parameter is out of range.");
298         SysTryReturn(NID_UI, space >= 0, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] The given parameter is invalid.");
299
300         result r = pGridLayoutImpl->SetRowSpacing(rowIndex, space);
301         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
302
303         return r;
304 }
305
306 result
307 GridLayout::SetPosition(Control& childControl, int rowStartIndex, int columnStartIndex, int rowSpan, int columnSpan)
308 {
309         ClearLastResult();
310
311         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(childControl);
312         SysTryReturn(NID_UI, pControlImpl, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] This instance is not constructed.");
313
314         _GridLayoutImpl* pGridLayoutImpl = _GridLayoutImpl::GetInstance(*this);
315         SysAssertf(pGridLayoutImpl != null, "Not yet constructed. Construct() should be called before use.");
316
317         result r = pGridLayoutImpl->SetPosition(*pControlImpl, rowStartIndex, columnStartIndex, rowSpan, columnSpan);
318         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
319
320         return r;
321 }
322
323 result
324 GridLayout::SetAlignment(Control& childControl, LayoutHorizontalAlignment horAlign, LayoutVerticalAlignment vertAlign)
325 {
326         ClearLastResult();
327
328         _GridLayoutImpl* pGridLayoutImpl = _GridLayoutImpl::GetInstance(*this);
329         SysAssertf(pGridLayoutImpl != null, "Not yet constructed. Construct() should be called before use.");
330
331         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(childControl);
332         SysTryReturn(NID_UI, pControlImpl, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] This instance is not constructed.");
333
334         result r = pGridLayoutImpl->SetAlignment(*pControlImpl, horAlign, vertAlign);
335         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
336
337         return r;
338 }
339
340 result
341 GridLayout::SetMargin(Control& childControl, int left, int right, int top, int bottom)
342 {
343         ClearLastResult();
344
345         SysTryReturn(NID_UI, (left >= 0) && (right >= 0) && (top >= 0) && (bottom >= 0), E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] The given parameter is invalid.");
346
347         _GridLayoutImpl* pGridLayoutImpl = _GridLayoutImpl::GetInstance(*this);
348         SysAssertf(pGridLayoutImpl != null, "Not yet constructed. Construct() should be called before use.");
349
350         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(childControl);
351         SysTryReturn(NID_UI, pControlImpl, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] This instance is not constructed.");
352
353         float floatLeft = _CoordinateSystemUtils::ConvertToFloat(left);
354         float floatRight = _CoordinateSystemUtils::ConvertToFloat(right);
355         float floatTop = _CoordinateSystemUtils::ConvertToFloat(top);
356         float floatBottom = _CoordinateSystemUtils::ConvertToFloat(bottom);
357         result r = pGridLayoutImpl->SetMargin(*pControlImpl, floatLeft, floatRight, floatTop, floatBottom);
358         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
359
360         return r;
361 }
362
363 result
364 GridLayout::SetMargin(Control& childControl, float left, float right, float top, float bottom)
365 {
366         ClearLastResult();
367
368         SysTryReturn(NID_UI, (left >= 0) && (right >= 0) && (top >= 0) && (bottom >= 0), E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] The given parameter is invalid.");
369
370         _GridLayoutImpl* pGridLayoutImpl = _GridLayoutImpl::GetInstance(*this);
371         SysAssertf(pGridLayoutImpl != null, "Not yet constructed. Construct() should be called before use.");
372
373         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(childControl);
374         SysTryReturn(NID_UI, pControlImpl, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] This instance is not constructed.");
375
376         result r = pGridLayoutImpl->SetMargin(*pControlImpl, left, right, top, bottom);
377         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
378
379         return r;
380 }
381
382
383 }} // Tizen::Ui