Tizen 2.1 base
[framework/osp/uifw.git] / src / ui / FUiHorizontalBoxLayout.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                FUiHorizontalBoxLayout.cpp
19  * @brief       This is the implementation file for HorizontalBoxLayout class.
20  *
21  * This file contains the implementation of HorizontalBoxLayout class.
22  */
23
24 #include <FUiHorizontalBoxLayout.h>
25 #include <FUiControl.h>
26 #include <FApp_AppInfo.h>
27 #include "FUi_HorizontalBoxLayoutImpl.h"
28
29 namespace Tizen { namespace Ui
30 {
31
32 namespace
33 {
34 #define GET_CONTROL_IMPL(control) \
35         _ControlImpl * pControlImpl = null;     \
36         pControlImpl = _ControlImpl::GetInstance(control); \
37         SysTryReturn(NID_UI, pControlImpl, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] pControlImpl is not allocated yet.\n")
38 }
39
40 HorizontalBoxLayout::HorizontalBoxLayout()
41 {
42 }
43
44 HorizontalBoxLayout::~HorizontalBoxLayout()
45 {
46 }
47
48 result
49 HorizontalBoxLayout::Construct(HorizontalDirection direction)
50 {
51         ClearLastResult();
52
53         _HorizontalBoxLayoutImpl* pHorizontalBoxLayoutImpl = _HorizontalBoxLayoutImpl::GetInstance(*this);
54         SysAssertf(pHorizontalBoxLayoutImpl == null, "Already constructed. Calling Construct() twice or more on a same instance is not allowed for this class.");
55
56         pHorizontalBoxLayoutImpl = _HorizontalBoxLayoutImpl::CreateHorizontalBoxLayoutImplN(this, direction);
57         result r = GetLastResult();
58         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
59
60         _LayoutImpl::SetLayoutImpl(this, pHorizontalBoxLayoutImpl);
61
62         return E_SUCCESS;
63 }
64
65 Tizen::Ui::LayoutType
66 HorizontalBoxLayout::GetLayoutType(void) const
67 {
68         return LAYOUT_HORIZONTAL_BOX;
69 }
70
71 result
72 HorizontalBoxLayout::GetDirection(HorizontalDirection& direction) const
73 {
74         ClearLastResult();
75
76         const _HorizontalBoxLayoutImpl* pHorizontalBoxLayoutImpl = _HorizontalBoxLayoutImpl::GetInstance(*this);
77         SysAssertf(pHorizontalBoxLayoutImpl != null, "Not yet constructed. Construct() should be called before use.");
78
79         result r = pHorizontalBoxLayoutImpl->GetDirection(direction);
80         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
81
82         return r;
83 }
84
85 result
86 HorizontalBoxLayout::SetVerticalAlignment(Control& childControl, LayoutVerticalAlignment alignment)
87 {
88         ClearLastResult();
89
90         _HorizontalBoxLayoutImpl* pHorizontalBoxLayoutImpl = _HorizontalBoxLayoutImpl::GetInstance(*this);
91         SysAssertf(pHorizontalBoxLayoutImpl != null, "Not yet constructed. Construct() should be called before use.");
92
93         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(childControl);
94         SysTryReturn(NID_UI, pControlImpl, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] This instance is not constructed.");
95
96         result r = pHorizontalBoxLayoutImpl->SetVerticalAlignment(*pControlImpl, alignment);
97         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
98
99         return r;
100 }
101
102 result
103 HorizontalBoxLayout::SetSpacing(Control& childControl, int space)
104 {
105         ClearLastResult();
106
107         SysTryReturn(NID_UI, space >= 0, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] The given parameter is invalid.");
108
109         _HorizontalBoxLayoutImpl* pHorizontalBoxLayoutImpl = _HorizontalBoxLayoutImpl::GetInstance(*this);
110         SysAssertf(pHorizontalBoxLayoutImpl != null, "Not yet constructed. Construct() should be called before use.");
111
112         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(childControl);
113         SysTryReturn(NID_UI, pControlImpl, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] This instance is not constructed.");
114
115         result r = pHorizontalBoxLayoutImpl->SetSpacing(*pControlImpl, space);
116         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
117
118         return r;
119 }
120
121 result
122 HorizontalBoxLayout::SetVerticalMargin(Control& childControl, int top, int bottom)
123 {
124         ClearLastResult();
125
126         SysTryReturn(NID_UI, (top >= 0) && (bottom >= 0), E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] The given parameter is invalid.");
127
128         _HorizontalBoxLayoutImpl* pHorizontalBoxLayoutImpl = _HorizontalBoxLayoutImpl::GetInstance(*this);
129         SysAssertf(pHorizontalBoxLayoutImpl != null, "Not yet constructed. Construct() should be called before use.");
130
131         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(childControl);
132         SysTryReturn(NID_UI, pControlImpl, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] This instance is not constructed.");
133
134         result r = pHorizontalBoxLayoutImpl->SetVerticalMargin(*pControlImpl, top, bottom);
135         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
136
137         return r;
138 }
139
140 result
141 HorizontalBoxLayout::SetWidth(Control& childControl, int width)
142 {
143         ClearLastResult();
144
145         SysTryReturn(NID_UI, width >= 0, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] The given parameter is invalid.");
146
147         _HorizontalBoxLayoutImpl* pHorizontalBoxLayoutImpl = _HorizontalBoxLayoutImpl::GetInstance(*this);
148         SysAssertf(pHorizontalBoxLayoutImpl != null, "Not yet constructed. Construct() should be called before use.");
149
150         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(childControl);
151         SysTryReturn(NID_UI, pControlImpl, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] This instance is not constructed.");
152
153         result r = pHorizontalBoxLayoutImpl->SetWidth(*pControlImpl, width);
154         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
155
156         return r;
157 }
158
159 result
160 HorizontalBoxLayout::SetHorizontalFitPolicy(Control& childControl, FitPolicy policy)
161 {
162         ClearLastResult();
163
164         _HorizontalBoxLayoutImpl* pHorizontalBoxLayoutImpl = _HorizontalBoxLayoutImpl::GetInstance(*this);
165         SysAssertf(pHorizontalBoxLayoutImpl != null, "Not yet constructed. Construct() should be called before use.");
166
167         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(childControl);
168         SysTryReturn(NID_UI, pControlImpl, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] This instance is not constructed.");
169
170         if (!Tizen::App::_AppInfo::IsOspCompat())
171         {
172                 if (policy == FIT_POLICY_PARENT)
173                 {
174                         return E_SUCCESS;
175                 }
176
177         }
178
179         result r = pHorizontalBoxLayoutImpl->SetItemHorizontalFitPolicy(*pControlImpl, policy);
180         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
181
182         return r;
183 }
184
185 result
186 HorizontalBoxLayout::SetHeight(Control& childControl, int height)
187 {
188         ClearLastResult();
189
190         SysTryReturn(NID_UI, height >= 0, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] The given parameter is invalid.");
191
192         _HorizontalBoxLayoutImpl* pHorizontalBoxLayoutImpl = _HorizontalBoxLayoutImpl::GetInstance(*this);
193         SysAssertf(pHorizontalBoxLayoutImpl != null, "Not yet constructed. Construct() should be called before use.");
194
195         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(childControl);
196         SysTryReturn(NID_UI, pControlImpl, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] This instance is not constructed.");
197
198         result r = pHorizontalBoxLayoutImpl->SetHeight(*pControlImpl, height);
199         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
200
201         return r;
202 }
203
204 result
205 HorizontalBoxLayout::SetVerticalFitPolicy(Control& childControl, FitPolicy policy)
206 {
207         ClearLastResult();
208
209         _HorizontalBoxLayoutImpl* pHorizontalBoxLayoutImpl = _HorizontalBoxLayoutImpl::GetInstance(*this);
210         SysAssertf(pHorizontalBoxLayoutImpl != null, "Not yet constructed. Construct() should be called before use.");
211
212         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(childControl);
213         SysTryReturn(NID_UI, pControlImpl, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] This instance is not constructed.");
214
215         result r = pHorizontalBoxLayoutImpl->SetItemVerticalFitPolicy(*pControlImpl, policy);
216         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
217
218         return r;
219 }
220
221 result
222 HorizontalBoxLayout::SetWeight(Control& childControl, float weight)
223 {
224         ClearLastResult();
225
226         _HorizontalBoxLayoutImpl* pHorizontalBoxLayoutImpl = _HorizontalBoxLayoutImpl::GetInstance(*this);
227         SysAssertf(pHorizontalBoxLayoutImpl != null, "Not yet constructed. Construct() should be called before use.");
228
229         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(childControl);
230         SysTryReturn(NID_UI, pControlImpl, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] This instance is not constructed.");
231
232         result r = pHorizontalBoxLayoutImpl->SetWeight(*pControlImpl, weight);
233         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
234
235         return r;
236 }
237
238 }} // Tizen::Ui