Tizen 2.1 base
[framework/osp/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 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                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
28 namespace Tizen { namespace Ui
29 {
30
31 GridLayout::GridLayout()
32 {
33 }
34
35 GridLayout::~GridLayout()
36 {
37 }
38
39 result
40 GridLayout::Construct(int maxRow, int maxColumn)
41 {
42         ClearLastResult();
43
44         SysTryReturn(NID_UI, (maxRow - 1 >= 0) && (maxColumn - 1 >= 0), E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] The given parameter is invalid.");
45
46         _GridLayoutImpl* pGridLayoutImpl = _GridLayoutImpl::GetInstance(*this);
47         SysAssertf(pGridLayoutImpl == null, "Already constructed. Calling Construct() twice or more on a same instance is not allowed for this class.");
48
49         pGridLayoutImpl = _GridLayoutImpl::CreateGridLayoutImplN(this, maxRow, maxColumn);
50         result r = GetLastResult();
51         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
52
53         _LayoutImpl::SetLayoutImpl(this, pGridLayoutImpl);
54
55         return E_SUCCESS;
56 }
57
58 Tizen::Ui::LayoutType
59 GridLayout::GetLayoutType(void) const
60 {
61         return LAYOUT_GRID;
62 }
63
64 int
65 GridLayout::GetRowCount() const
66 {
67         ClearLastResult();
68
69         const _GridLayoutImpl* pGridLayoutImpl = _GridLayoutImpl::GetInstance(*this);
70         SysAssertf(pGridLayoutImpl != null, "Not yet constructed. Construct() should be called before use.");
71
72         return pGridLayoutImpl->GetRowCount();
73 }
74
75 int
76 GridLayout::GetColumnCount() const
77 {
78         ClearLastResult();
79
80         const _GridLayoutImpl* pGridLayoutImpl = _GridLayoutImpl::GetInstance(*this);
81         SysAssertf(pGridLayoutImpl != null, "Not yet constructed. Construct() should be called before use.");
82
83         return pGridLayoutImpl->GetColumnCount();
84 }
85
86 result
87 GridLayout::SetColumnStretchable(int columnIndex, bool stretchable)
88 {
89         ClearLastResult();
90
91         _GridLayoutImpl* pGridLayoutImpl = _GridLayoutImpl::GetInstance(*this);
92         SysAssertf(pGridLayoutImpl != null, "Not yet constructed. Construct() should be called before use.");
93
94         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.");
95
96         result r = pGridLayoutImpl->SetColumnStretchable(columnIndex, stretchable);
97         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
98
99         return r;
100 }
101
102 result
103 GridLayout::SetColumnShrinkable(int columnIndex, bool shrinkable)
104 {
105         ClearLastResult();
106
107         _GridLayoutImpl* pGridLayoutImpl = _GridLayoutImpl::GetInstance(*this);
108         SysAssertf(pGridLayoutImpl != null, "Not yet constructed. Construct() should be called before use.");
109
110         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.");
111
112         result r = pGridLayoutImpl->SetColumnShrinkable(columnIndex, shrinkable);
113         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
114
115         return r;
116 }
117
118 result
119 GridLayout::SetColumnCollapsed(int columnIndex, bool collapsed)
120 {
121         ClearLastResult();
122
123         _GridLayoutImpl* pGridLayoutImpl = _GridLayoutImpl::GetInstance(*this);
124         SysAssertf(pGridLayoutImpl != null, "Not yet constructed. Construct() should be called before use.");
125
126         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.");
127
128         result r = pGridLayoutImpl->SetColumnCollapsed(columnIndex, collapsed);
129         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
130
131         return r;
132 }
133
134 result
135 GridLayout::SetAllColumnsStretchable(bool stretchable)
136 {
137         ClearLastResult();
138
139         _GridLayoutImpl* pGridLayoutImpl = _GridLayoutImpl::GetInstance(*this);
140         SysAssertf(pGridLayoutImpl != null, "Not yet constructed. Construct() should be called before use.");
141
142         result r = pGridLayoutImpl->SetAllColumnsStretchable(stretchable);
143         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
144
145         return r;
146 }
147
148 result
149 GridLayout::SetAllColumnsShrinkable(bool shrinkable)
150 {
151         ClearLastResult();
152
153         _GridLayoutImpl* pGridLayoutImpl = _GridLayoutImpl::GetInstance(*this);
154         SysAssertf(pGridLayoutImpl != null, "Not yet constructed. Construct() should be called before use.");
155
156         result r = pGridLayoutImpl->SetAllColumnsShrinkable(shrinkable);
157         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
158
159         return r;
160 }
161
162 result
163 GridLayout::SetColumnSpacing(int columnIndex, int space)
164 {
165         ClearLastResult();
166
167         _GridLayoutImpl* pGridLayoutImpl = _GridLayoutImpl::GetInstance(*this);
168         SysAssertf(pGridLayoutImpl != null, "Not yet constructed. Construct() should be called before use.");
169
170         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.");
171         SysTryReturn(NID_UI, space >= 0, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] The given parameter is invalid.");
172
173         result r = pGridLayoutImpl->SetColumnSpacing(columnIndex, space);
174         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
175
176         return r;
177 }
178
179 result
180 GridLayout::SetRowStretchable(int rowIndex, bool stretchable)
181 {
182         ClearLastResult();
183
184         _GridLayoutImpl* pGridLayoutImpl = _GridLayoutImpl::GetInstance(*this);
185         SysAssertf(pGridLayoutImpl != null, "Not yet constructed. Construct() should be called before use.");
186
187         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.");
188
189         result r = pGridLayoutImpl->SetRowStretchable(rowIndex, stretchable);
190         SysTryReturn(NID_UI, GetLastResult() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(r));
191
192         return r;
193 }
194
195 result
196 GridLayout::SetRowShrinkable(int rowIndex, bool shrinkable)
197 {
198         ClearLastResult();
199
200         _GridLayoutImpl* pGridLayoutImpl = _GridLayoutImpl::GetInstance(*this);
201         SysAssertf(pGridLayoutImpl != null, "Not yet constructed. Construct() should be called before use.");
202
203         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.");
204
205         result r = pGridLayoutImpl->SetRowShrinkable(rowIndex, shrinkable);
206         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
207
208         return r;
209 }
210
211 result
212 GridLayout::SetRowCollapsed(int rowIndex, bool collapsed)
213 {
214         ClearLastResult();
215
216         _GridLayoutImpl* pGridLayoutImpl = _GridLayoutImpl::GetInstance(*this);
217         SysAssertf(pGridLayoutImpl != null, "Not yet constructed. Construct() should be called before use.");
218
219         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.");
220
221         result r = pGridLayoutImpl->SetRowCollapsed(rowIndex, collapsed);
222         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
223
224         return r;
225 }
226
227 result
228 GridLayout::SetAllRowsStretchable(bool stretchable)
229 {
230         ClearLastResult();
231
232         _GridLayoutImpl* pGridLayoutImpl = _GridLayoutImpl::GetInstance(*this);
233         SysAssertf(pGridLayoutImpl != null, "Not yet constructed. Construct() should be called before use.");
234
235         result r = pGridLayoutImpl->SetAllRowsStretchable(stretchable);
236         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
237
238         return r;
239 }
240
241 result
242 GridLayout::SetAllRowsShrinkable(bool shrinkable)
243 {
244         ClearLastResult();
245         _GridLayoutImpl* pGridLayoutImpl = _GridLayoutImpl::GetInstance(*this);
246         SysAssertf(pGridLayoutImpl != null, "Not yet constructed. Construct() should be called before use.");
247
248         result r = pGridLayoutImpl->SetAllRowsShrinkable(shrinkable);
249         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
250
251         return r;
252 }
253
254 result
255 GridLayout::SetRowSpacing(int rowIndex, int space)
256 {
257         ClearLastResult();
258
259         _GridLayoutImpl* pGridLayoutImpl = _GridLayoutImpl::GetInstance(*this);
260         SysAssertf(pGridLayoutImpl != null, "Not yet constructed. Construct() should be called before use.");
261
262         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.");
263         SysTryReturn(NID_UI, space >= 0, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] The given parameter is invalid.");
264
265         result r = pGridLayoutImpl->SetRowSpacing(rowIndex, space);
266         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
267
268         return r;
269 }
270
271 result
272 GridLayout::SetPosition(Control& childControl, int rowStartIndex, int columnStartIndex, int rowSpan, int columnSpan)
273 {
274         ClearLastResult();
275
276         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(childControl);
277         SysTryReturn(NID_UI, pControlImpl, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] This instance is not constructed.");
278
279         _GridLayoutImpl* pGridLayoutImpl = _GridLayoutImpl::GetInstance(*this);
280         SysAssertf(pGridLayoutImpl != null, "Not yet constructed. Construct() should be called before use.");
281
282         result r = pGridLayoutImpl->SetPosition(*pControlImpl, rowStartIndex, columnStartIndex, rowSpan, columnSpan);
283         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
284
285         return r;
286 }
287
288 result
289 GridLayout::SetAlignment(Control& childControl, LayoutHorizontalAlignment horAlign, LayoutVerticalAlignment vertAlign)
290 {
291         ClearLastResult();
292
293         _GridLayoutImpl* pGridLayoutImpl = _GridLayoutImpl::GetInstance(*this);
294         SysAssertf(pGridLayoutImpl != null, "Not yet constructed. Construct() should be called before use.");
295
296         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(childControl);
297         SysTryReturn(NID_UI, pControlImpl, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] This instance is not constructed.");
298
299         result r = pGridLayoutImpl->SetAlignment(*pControlImpl, horAlign, vertAlign);
300         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
301
302         return r;
303 }
304
305 result
306 GridLayout::SetMargin(Control& childControl, int left, int right, int top, int bottom)
307 {
308         ClearLastResult();
309
310         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.");
311
312         _GridLayoutImpl* pGridLayoutImpl = _GridLayoutImpl::GetInstance(*this);
313         SysAssertf(pGridLayoutImpl != null, "Not yet constructed. Construct() should be called before use.");
314
315         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(childControl);
316         SysTryReturn(NID_UI, pControlImpl, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] This instance is not constructed.");
317
318         result r = pGridLayoutImpl->SetMargin(*pControlImpl, left, right, top, bottom);
319         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
320
321         return r;
322 }
323
324 }} // Tizen::Ui