Tizen 2.1 base
[framework/osp/uifw.git] / src / ui / controls / FUiCtrl_TableViewItemImpl.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 /**
19  * @file        FUiCtrl_TableViewItemImpl.cpp
20  * @brief       This is the implementation file for _TableViewItemImpl class.
21  *
22  * This file contains the implementation of _TableViewItemImpl class.
23  */
24
25 #include <FUiAnimControlAnimator.h>
26 #include <FUiCtrlTableViewContextItem.h>
27 #include "FUiCtrl_TableViewItemImpl.h"
28 #include "FUiCtrl_TableViewItem.h"
29 #include "FUi_LayoutImpl.h"
30 #include "FUi_ResourceManager.h"
31 #include "FUi_ResourceSizeInfo.h"
32 #include "FUi_ResourceManager.h"
33
34 using namespace Tizen::Base;
35 using namespace Tizen::Graphics;
36
37 namespace Tizen { namespace Ui { namespace Controls
38 {
39
40 Tizen::Graphics::Dimension
41 _TableViewItemImpl::TableViewItemSizeInfo::GetDefaultMinimumSize(_ControlOrientation orientation) const
42 {
43         return Dimension(0, 0);
44 }
45
46 _TableViewItemImpl*
47 _TableViewItemImpl::GetInstance(TableViewItemBase& tableViewItem)
48 {
49         return static_cast <_TableViewItemImpl*>(tableViewItem._pControlImpl);
50 }
51
52 const _TableViewItemImpl*
53 _TableViewItemImpl::GetInstance(const TableViewItemBase& tableViewItem)
54 {
55         return static_cast <const _TableViewItemImpl*>(tableViewItem._pControlImpl);
56 }
57
58 _TableViewItemImpl::_TableViewItemImpl(TableViewItemBase* pPublic, _TableViewItem* pCore, Layout* pPublicPortraitLayout, Layout* pPublicLandscapeLayout)
59         : _ContainerImpl(pPublic, pCore, pPublicPortraitLayout, pPublicLandscapeLayout)
60 {
61 }
62
63 _TableViewItemImpl::~_TableViewItemImpl(void)
64 {
65
66 }
67
68 const char*
69 _TableViewItemImpl::GetPublicClassName(void) const
70 {
71         return "Tizen::Ui::Controls::TableViewItem";
72 }
73
74 const TableViewItem&
75 _TableViewItemImpl::GetPublic(void) const
76 {
77         return static_cast <const TableViewItem&>(_ContainerImpl::GetPublic());
78 }
79
80 TableViewItem&
81 _TableViewItemImpl::GetPublic(void)
82 {
83         return static_cast <TableViewItem&>(_ContainerImpl::GetPublic());
84 }
85
86 const _TableViewItem&
87 _TableViewItemImpl::GetCore(void) const
88 {
89         return static_cast <const _TableViewItem&>(_ControlImpl::GetCore());
90 }
91
92 _TableViewItem&
93 _TableViewItemImpl::GetCore(void)
94 {
95         return static_cast <_TableViewItem&>(_ControlImpl::GetCore());
96 }
97
98 _TableViewItemImpl*
99 _TableViewItemImpl::CreateTableViewItemImplN(TableViewItemBase* pPublic, const Dimension& itemSize, const TableViewAnnexStyle style, Layout* pPublicPortraitLayout, Layout* pPublicLandscapeLayout)
100 {
101         result r = E_SUCCESS;
102
103         r = GET_SIZE_INFO(TableViewItem).CheckInitialSizeValid(Dimension(itemSize.width, itemSize.height), _CONTROL_ORIENTATION_PORTRAIT);
104         SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
105
106         if (pPublicPortraitLayout != null)
107         {
108                 _LayoutImpl* pPortraitLayoutImpl = _LayoutImpl::GetInstance(*pPublicPortraitLayout);
109                 SysTryReturn(NID_UI_CTRL, pPortraitLayoutImpl != null, null, E_INVALID_ARG, "[E_INVALID_ARG] Portrait layout is invalid object");
110         }
111
112         if (pPublicLandscapeLayout != null)
113         {
114                 _LayoutImpl* pLandscapeLayoutImpl = _LayoutImpl::GetInstance(*pPublicLandscapeLayout);
115                 SysTryReturn(NID_UI_CTRL, pLandscapeLayoutImpl != null, null, E_INVALID_ARG, "[E_INVALID_ARG] Landscape layout is invalid object");
116         }
117
118         _TableViewItem* pCore = _TableViewItem::CreateTableViewItemN(itemSize.height);
119         SysTryReturn(NID_UI_CTRL, pCore != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] The memory is insufficient.");
120
121         _TableViewItemImpl* pImpl = new (std::nothrow) _TableViewItemImpl(pPublic, pCore, pPublicPortraitLayout, pPublicLandscapeLayout);
122         SysTryReturn(NID_UI_CTRL, pImpl != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] The memory is insufficient.");
123
124         r = pImpl->Construct(itemSize, style);
125         SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
126
127         r = pImpl->SetSize(itemSize);
128         SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
129
130         return pImpl;
131
132 CATCH:
133         delete pImpl;
134         delete pCore;
135         return null;
136 }
137
138
139 result
140 _TableViewItemImpl::Construct(const Dimension& itemSize, const TableViewAnnexStyle style)
141 {
142         result r = E_SUCCESS;
143
144         SysTryReturn(NID_UI_CTRL, (itemSize.width >= 0 && itemSize.height >= 0), E_INVALID_ARG, E_INVALID_ARG, ("[E_INVALID_ARG] The item size should be greater than 0"));
145
146         GetCore().SetItemStyle(style);
147         GetCore().SetItemWidth(itemSize.width);
148
149         return r;
150 }
151
152 result
153 _TableViewItemImpl::SetContextItem(_TableViewItemImpl* pItem)
154 {
155         if (pItem == null)
156         {
157                 GetCore().SetContextItem(null);
158                 return E_SUCCESS;
159         }
160
161         GetCore().SetContextItem(&pItem->GetCore());
162
163         _TableViewItemImpl* pItemImpl = pItem;
164
165         TableViewContextItem* pContextItem = static_cast <TableViewContextItem*>(&pItemImpl->_ContainerImpl::GetPublic());
166         pItemImpl->GetCore().SetAppInfo(pContextItem);
167
168         return E_SUCCESS;
169 }
170
171 result
172 _TableViewItemImpl::SetSelectionStyle(TableViewItemSelectionStyle style)
173 {
174         return GetCore().SetSelectionStyle(style);
175 }
176
177 TableViewItemSelectionStyle
178 _TableViewItemImpl::GetSelectionStyle(void) const
179 {
180         return GetCore().GetSelectionStyle();
181 }
182
183 result
184 _TableViewItemImpl::SetBackgroundBitmap(TableViewItemDrawingStatus status, const Bitmap* pBitmap)
185 {
186         SysTryReturn(NID_UI_CTRL, pBitmap, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] It is invalid argument");
187
188         ListItemState itemState;
189
190         switch (status)
191         {
192         case TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL:
193                 itemState = LIST_ITEM_STATE_NORMAL;
194                 break;
195
196         case TABLE_VIEW_ITEM_DRAWING_STATUS_PRESSED:
197                 itemState = LIST_ITEM_STATE_PRESSED;
198                 break;
199
200         case TABLE_VIEW_ITEM_DRAWING_STATUS_HIGHLIGHTED:
201                 itemState = LIST_ITEM_STATE_HIGHLIGHTED;
202                 break;
203
204         default:
205                 return E_SYSTEM;
206         }
207
208         GetCore().SetItemBackgroundBitmap(itemState, pBitmap);
209
210         return E_SUCCESS;
211 }
212
213 result
214 _TableViewItemImpl::SetBackgroundColor(TableViewItemDrawingStatus status, const Color& color)
215 {
216         ListItemState itemState;
217
218         switch (status)
219         {
220         case TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL:
221                 itemState = LIST_ITEM_STATE_NORMAL;
222                 break;
223
224         case TABLE_VIEW_ITEM_DRAWING_STATUS_PRESSED:
225                 itemState = LIST_ITEM_STATE_PRESSED;
226                 break;
227
228         case TABLE_VIEW_ITEM_DRAWING_STATUS_HIGHLIGHTED:
229                 itemState = LIST_ITEM_STATE_HIGHLIGHTED;
230                 break;
231
232         default:
233                 return E_SYSTEM;
234         }
235
236         GetCore().SetItemBackgroundColor(itemState, color);
237
238         return E_SUCCESS;
239 }
240
241 Color
242 _TableViewItemImpl::GetBackgroundColor(TableViewItemDrawingStatus status) const
243 {
244         ListItemState itemState;
245         switch (status)
246         {
247         case TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL:
248                 itemState = LIST_ITEM_STATE_NORMAL;
249                 break;
250
251         case TABLE_VIEW_ITEM_DRAWING_STATUS_PRESSED:
252                 itemState = LIST_ITEM_STATE_PRESSED;
253                 break;
254
255         case TABLE_VIEW_ITEM_DRAWING_STATUS_HIGHLIGHTED:
256                 itemState = LIST_ITEM_STATE_HIGHLIGHTED;
257                 break;
258
259         default:
260                 return Color(0);
261         }
262
263         return GetCore().GetItemBackgroundColor(itemState);
264 }
265
266 result
267 _TableViewItemImpl::SetSimpleItemContents(const Tizen::Base::String& text, const Tizen::Graphics::Bitmap* pBitmap, bool groupType)
268 {
269         return GetCore().SetSimpleItemContents(text, pBitmap, groupType);
270 }
271
272 result
273 _TableViewItemImpl::SetSimpleItemTextColor(const Tizen::Graphics::Color& color, TableViewItemDrawingStatus status)
274 {
275         return GetCore().SetSimpleTextColor(color, status);
276 }
277
278 Tizen::Graphics::Color
279 _TableViewItemImpl::GetSimpleItemTextColor(TableViewItemDrawingStatus status) const
280 {
281         return GetCore().GetSimpleItemTextColor(status);
282 }
283
284 result
285 _TableViewItemImpl::SetSimpleItemTextSize(int size)
286 {
287         return GetCore().SetSimpleItemTextSize(size);
288 }
289
290 int
291 _TableViewItemImpl::GetSimpleItemTextSize(void) const
292 {
293         return GetCore().GetSimpleItemTextSize();
294 }
295
296 int
297 _TableViewItemImpl::GetAnnexWidth(TableViewAnnexStyle style)
298 {
299         int annexWidth = 0;
300
301         switch (style)
302         {
303         case TABLE_VIEW_ANNEX_STYLE_NORMAL:
304                 annexWidth = 0;
305                 break;
306
307         case TABLE_VIEW_ANNEX_STYLE_MARK:
308                 GET_SHAPE_CONFIG(TABLEVIEW::ITEM_ANNEX_WIDTH, _CONTROL_ORIENTATION_PORTRAIT, annexWidth);
309                 break;
310
311         case TABLE_VIEW_ANNEX_STYLE_RADIO:
312                 GET_SHAPE_CONFIG(TABLEVIEW::ITEM_ANNEX_WIDTH, _CONTROL_ORIENTATION_PORTRAIT, annexWidth);
313                 break;
314
315         case TABLE_VIEW_ANNEX_STYLE_ONOFF_SLIDING:
316                 GET_SHAPE_CONFIG(TABLEVIEW::ITEM_ANNEX_ONOFF_WIDTH, _CONTROL_ORIENTATION_PORTRAIT, annexWidth);
317                 break;
318
319         case TABLE_VIEW_ANNEX_STYLE_DETAILED:
320                 GET_SHAPE_CONFIG(TABLEVIEW::ITEM_ANNEX_MORE_WIDTH, _CONTROL_ORIENTATION_PORTRAIT, annexWidth);
321                 break;
322
323         default:
324                 break;
325         }
326
327         return annexWidth;
328 }
329
330 result
331 _TableViewItemImpl::SetIndividualSelectionEnabled(const Tizen::Ui::_ControlImpl& controlImpl, bool enable)
332 {
333         return GetCore().SetIndividualSelectionEnabled(controlImpl.GetCore(), enable);
334 }
335
336 bool
337 _TableViewItemImpl::IsIndividualSelectionEnabled(const Tizen::Ui::_ControlImpl& controlImpl)
338 {
339         return GetCore().IsIndividualSelectionEnabled(controlImpl.GetCore());
340 }
341
342
343 }}} // Tizen::Ui::Controls