2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
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
9 // http://floralicense.org/license/
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.
19 * @file FUiCtrl_TableViewItemProvider.cpp
20 * @brief This file implements the _TableViewItemProvider class.
23 #include <FUiCtrlTableView.h>
24 #include <FUiCtrlITableViewItemProvider.h>
25 #include <FUiCtrlIGroupedTableViewItemProvider.h>
26 #include <FUiCtrlISectionTableViewItemProvider.h>
27 #include <FUiCtrlITableViewItemProviderF.h>
28 #include <FUiCtrlIGroupedTableViewItemProviderF.h>
29 #include <FUiCtrlISectionTableViewItemProviderF.h>
30 #include <FUiCtrlTableViewItem.h>
31 #include <FUiCtrlTableViewGroupItem.h>
32 #include "FUiCtrl_TableViewItemProvider.h"
33 #include "FUi_ResourceManager.h"
34 #include "FUi_CoordinateSystemUtils.h"
36 using namespace Tizen::Base;
37 using namespace Tizen::Ui;
39 namespace Tizen { namespace Ui { namespace Controls
42 _TableViewItemProvider::_TableViewItemProvider(TableViewStyle style, bool useFloatingPoint)
43 : __pSimpleProvider(null)
44 , __pGroupedProvider(null)
45 , __pSectionProvider(null)
46 , __pSimpleProviderF(null)
47 , __pGroupedProviderF(null)
48 , __pSectionProviderF(null)
50 , __onProcessing(false)
51 , __useFloatingPoint(useFloatingPoint)
56 _TableViewItemProvider::~_TableViewItemProvider(void)
58 __pSimpleProvider = null;
59 __pGroupedProvider = null;
60 __pSectionProvider = null;
63 _TableViewItemProvider*
64 _TableViewItemProvider::CreateTableViewItemProviderN(TableViewStyle style, bool useFloatingPoint)
68 _TableViewItemProvider* pProvider = new (std::nothrow) _TableViewItemProvider(style, useFloatingPoint);
69 SysTryReturn(NID_UI_CTRL, pProvider != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
75 _TableViewItemProvider::SetSimpleStyleItemProvider(ITableViewItemProvider* pProvider)
77 SysTryReturn(NID_UI_CTRL, __style == TABLE_VIEW_STYLE_SIMPLE, E_INVALID_OPERATION, E_INVALID_OPERATION, "[E_INVALID_OPERATION] The style of TableView is not TABLE_VIEW_STYLE_SECTION");
79 if (__useFloatingPoint)
81 return E_INVALID_OPERATION;
84 __pSimpleProvider = pProvider;
90 _TableViewItemProvider::SetGroupedStyleItemProvider(IGroupedTableViewItemProvider* pProvider)
92 SysTryReturn(NID_UI_CTRL, __style == TABLE_VIEW_STYLE_GROUPED, E_INVALID_OPERATION, E_INVALID_OPERATION, "[E_INVALID_OPERATION] The style of TableView is not TABLE_VIEW_STYLE_SECTION");
94 if (__useFloatingPoint)
96 return E_INVALID_OPERATION;
99 __pGroupedProvider = pProvider;
105 _TableViewItemProvider::SetSectionStyleItemProvider(ISectionTableViewItemProvider* pProvider)
107 SysTryReturn(NID_UI_CTRL, __style == TABLE_VIEW_STYLE_SECTION, E_INVALID_OPERATION, E_INVALID_OPERATION, "[E_INVALID_OPERATION] The style of TableView is not TABLE_VIEW_STYLE_SECTION");
109 if (__useFloatingPoint)
111 return E_INVALID_OPERATION;
114 __pSectionProvider = pProvider;
120 _TableViewItemProvider::SetSimpleStyleItemProviderF(ITableViewItemProviderF* pProvider)
122 SysTryReturn(NID_UI_CTRL, __style == TABLE_VIEW_STYLE_SIMPLE, E_INVALID_OPERATION, E_INVALID_OPERATION, "[E_INVALID_OPERATION] The style of TableView is not TABLE_VIEW_STYLE_SECTION");
124 if (!__useFloatingPoint)
126 return E_INVALID_OPERATION;
129 __pSimpleProviderF = pProvider;
135 _TableViewItemProvider::SetGroupedStyleItemProviderF(IGroupedTableViewItemProviderF* pProvider)
137 SysTryReturn(NID_UI_CTRL, __style == TABLE_VIEW_STYLE_GROUPED, E_INVALID_OPERATION, E_INVALID_OPERATION, "[E_INVALID_OPERATION] The style of TableView is not TABLE_VIEW_STYLE_SECTION");
139 if (!__useFloatingPoint)
141 return E_INVALID_OPERATION;
144 __pGroupedProviderF = pProvider;
150 _TableViewItemProvider::SetSectionStyleItemProviderF(ISectionTableViewItemProviderF* pProvider)
152 SysTryReturn(NID_UI_CTRL, __style == TABLE_VIEW_STYLE_SECTION, E_INVALID_OPERATION, E_INVALID_OPERATION, "[E_INVALID_OPERATION] The style of TableView is not TABLE_VIEW_STYLE_SECTION");
154 if (!__useFloatingPoint)
156 return E_INVALID_OPERATION;
159 __pSectionProviderF = pProvider;
166 _TableViewItemProvider::GetGroupCount(void)
169 __onProcessing = true;
171 if (__useFloatingPoint)
175 case TABLE_VIEW_STYLE_SIMPLE:
179 case TABLE_VIEW_STYLE_GROUPED:
180 count = __pGroupedProviderF->GetGroupCount();
183 case TABLE_VIEW_STYLE_SECTION:
184 count = __pSectionProviderF->GetSectionCount();
192 case TABLE_VIEW_STYLE_SIMPLE:
196 case TABLE_VIEW_STYLE_GROUPED:
197 count = __pGroupedProvider->GetGroupCount();
200 case TABLE_VIEW_STYLE_SECTION:
201 count = __pSectionProvider->GetSectionCount();
206 __onProcessing = false;
212 _TableViewItemProvider::GetItemCount(int groupIndex)
216 __onProcessing = true;
218 if (__useFloatingPoint)
222 case TABLE_VIEW_STYLE_SIMPLE:
223 count = __pSimpleProviderF->GetItemCount();
226 case TABLE_VIEW_STYLE_GROUPED:
227 count = __pGroupedProviderF->GetItemCount(groupIndex);
230 case TABLE_VIEW_STYLE_SECTION:
231 count = __pSectionProviderF->GetItemCount(groupIndex);
239 case TABLE_VIEW_STYLE_SIMPLE:
240 count = __pSimpleProvider->GetItemCount();
243 case TABLE_VIEW_STYLE_GROUPED:
244 count = __pGroupedProvider->GetItemCount(groupIndex);
247 case TABLE_VIEW_STYLE_SECTION:
248 count = __pSectionProvider->GetItemCount(groupIndex);
253 __onProcessing = false;
259 _TableViewItemProvider::GetGroupItemHeight(int groupIndex)
261 return GetDefaultGroupItemHeight();
265 _TableViewItemProvider::GetItemHeight(const TableViewItemTag& itemTag)
267 return GetDefaultItemHeight();
271 _TableViewItemProvider::GetDefaultItemHeight(void)
275 __onProcessing = true;
277 if (__useFloatingPoint)
281 case TABLE_VIEW_STYLE_SIMPLE:
282 height = __pSimpleProviderF->GetDefaultItemHeight();
285 case TABLE_VIEW_STYLE_GROUPED:
286 height = __pGroupedProviderF->GetDefaultItemHeight();
289 case TABLE_VIEW_STYLE_SECTION:
290 height = __pSectionProviderF->GetDefaultItemHeight();
299 case TABLE_VIEW_STYLE_SIMPLE:
300 heightInt = __pSimpleProvider->GetDefaultItemHeight();
303 case TABLE_VIEW_STYLE_GROUPED:
304 heightInt = __pGroupedProvider->GetDefaultItemHeight();
307 case TABLE_VIEW_STYLE_SECTION:
308 heightInt = __pSectionProvider->GetDefaultItemHeight();
312 height = _CoordinateSystemUtils::ConvertToFloat(heightInt);
315 __onProcessing = false;
321 _TableViewItemProvider::GetDefaultGroupItemHeight(void)
326 __onProcessing = true;
330 case TABLE_VIEW_STYLE_SIMPLE:
334 case TABLE_VIEW_STYLE_GROUPED:
335 if (__useFloatingPoint)
337 height = __pGroupedProviderF->GetDefaultGroupItemHeight();
341 heightInt = __pGroupedProvider->GetDefaultGroupItemHeight();
343 height = _CoordinateSystemUtils::ConvertToFloat(heightInt);
347 case TABLE_VIEW_STYLE_SECTION:
349 GET_SHAPE_CONFIG(TABLEVIEW::GROUPITEM_DEFAULT_HEIGHT, _CONTROL_ORIENTATION_PORTRAIT, height);
354 __onProcessing = false;
361 _TableViewItemProvider::CreateGroupItem(int groupIndex, float itemWidth)
363 TableViewGroupItem* pItem = null;
365 __onProcessing = true;
369 case TABLE_VIEW_STYLE_SIMPLE:
373 case TABLE_VIEW_STYLE_GROUPED:
374 if (__useFloatingPoint)
376 pItem = __pGroupedProviderF->CreateGroupItem(groupIndex, itemWidth);
380 int itemWidthInt = _CoordinateSystemUtils::ConvertToInteger(itemWidth);
381 pItem = __pGroupedProvider->CreateGroupItem(groupIndex, itemWidthInt);
385 case TABLE_VIEW_STYLE_SECTION:
390 __onProcessing = false;
396 _TableViewItemProvider::DeleteGroupItem(int groupIndex, TableViewGroupItem* pItem)
400 __onProcessing = true;
404 case TABLE_VIEW_STYLE_SIMPLE:
409 case TABLE_VIEW_STYLE_GROUPED:
410 if (__useFloatingPoint)
412 value = __pGroupedProviderF->DeleteGroupItem(groupIndex, pItem);
416 value = __pGroupedProvider->DeleteGroupItem(groupIndex, pItem);
419 case TABLE_VIEW_STYLE_SECTION:
424 __onProcessing = false;
430 _TableViewItemProvider::CreateItem(const TableViewItemTag& itemTag, float itemWidth)
432 TableViewItem* pItem = null;
434 __onProcessing = true;
436 if (__useFloatingPoint)
440 case TABLE_VIEW_STYLE_SIMPLE:
441 pItem = __pSimpleProviderF->CreateItem(itemTag.itemIndex, itemWidth);
444 case TABLE_VIEW_STYLE_GROUPED:
445 pItem = __pGroupedProviderF->CreateItem(itemTag.groupIndex, itemTag.itemIndex, itemWidth);
448 case TABLE_VIEW_STYLE_SECTION:
449 pItem = __pSectionProviderF->CreateItem(itemTag.groupIndex, itemTag.itemIndex, itemWidth);
455 int itemWidthInt = _CoordinateSystemUtils::ConvertToInteger(itemWidth);
459 case TABLE_VIEW_STYLE_SIMPLE:
460 pItem = __pSimpleProvider->CreateItem(itemTag.itemIndex, itemWidthInt);
463 case TABLE_VIEW_STYLE_GROUPED:
464 pItem = __pGroupedProvider->CreateItem(itemTag.groupIndex, itemTag.itemIndex, itemWidthInt);
467 case TABLE_VIEW_STYLE_SECTION:
468 pItem = __pSectionProvider->CreateItem(itemTag.groupIndex, itemTag.itemIndex, itemWidthInt);
473 __onProcessing = false;
479 _TableViewItemProvider::DeleteItem(const TableViewItemTag& itemTag, TableViewItem* pItem)
483 __onProcessing = true;
485 if (__useFloatingPoint)
489 case TABLE_VIEW_STYLE_SIMPLE:
490 value = __pSimpleProviderF->DeleteItem(itemTag.itemIndex, pItem);
493 case TABLE_VIEW_STYLE_GROUPED:
494 value = __pGroupedProviderF->DeleteItem(itemTag.groupIndex, itemTag.itemIndex, pItem);
497 case TABLE_VIEW_STYLE_SECTION:
498 value = __pSectionProviderF->DeleteItem(itemTag.groupIndex, itemTag.itemIndex, pItem);
506 case TABLE_VIEW_STYLE_SIMPLE:
507 value = __pSimpleProvider->DeleteItem(itemTag.itemIndex, pItem);
510 case TABLE_VIEW_STYLE_GROUPED:
511 value = __pGroupedProvider->DeleteItem(itemTag.groupIndex, itemTag.itemIndex, pItem);
514 case TABLE_VIEW_STYLE_SECTION:
515 value = __pSectionProvider->DeleteItem(itemTag.groupIndex, itemTag.itemIndex, pItem);
520 __onProcessing = false;
526 _TableViewItemProvider::UpdateItem(const TableViewItemTag& itemTag, TableViewItem *pItem)
528 __onProcessing = true;
530 if (__useFloatingPoint)
534 case TABLE_VIEW_STYLE_SIMPLE:
535 __pSimpleProviderF->UpdateItem(itemTag.itemIndex, pItem);
538 case TABLE_VIEW_STYLE_GROUPED:
539 __pGroupedProviderF->UpdateItem(itemTag.groupIndex, itemTag.itemIndex, pItem);
542 case TABLE_VIEW_STYLE_SECTION:
543 __pSectionProviderF->UpdateItem(itemTag.groupIndex, itemTag.itemIndex, pItem);
551 case TABLE_VIEW_STYLE_SIMPLE:
552 __pSimpleProvider->UpdateItem(itemTag.itemIndex, pItem);
555 case TABLE_VIEW_STYLE_GROUPED:
556 __pGroupedProvider->UpdateItem(itemTag.groupIndex, itemTag.itemIndex, pItem);
559 case TABLE_VIEW_STYLE_SECTION:
560 __pSectionProvider->UpdateItem(itemTag.groupIndex, itemTag.itemIndex, pItem);
565 __onProcessing = false;
571 _TableViewItemProvider::UpdateGroupItem(int groupIndex, TableViewGroupItem *pItem)
574 __onProcessing = true;
578 case TABLE_VIEW_STYLE_SIMPLE:
582 case TABLE_VIEW_STYLE_GROUPED:
583 if (__useFloatingPoint)
585 __pGroupedProviderF->UpdateGroupItem(groupIndex, pItem);
589 __pGroupedProvider->UpdateGroupItem(groupIndex, pItem);
594 case TABLE_VIEW_STYLE_SECTION:
599 __onProcessing = false;
605 _TableViewItemProvider::IsReorderable(int groupIndexFrom, int groupIndexTo)
611 case TABLE_VIEW_STYLE_SIMPLE:
615 case TABLE_VIEW_STYLE_GROUPED:
616 if (__useFloatingPoint)
618 value = __pGroupedProviderF->IsReorderable(groupIndexFrom, groupIndexTo);
622 value = __pGroupedProvider->IsReorderable(groupIndexFrom, groupIndexTo);
625 case TABLE_VIEW_STYLE_SECTION:
634 _TableViewItemProvider::IsOnProcessing()
636 return __onProcessing;
640 _TableViewItemProvider::GetSectionHeader(int groupIndex)
642 SysTryReturn(NID_UI_CTRL, __style == TABLE_VIEW_STYLE_SECTION, String(""), E_INVALID_OPERATION, "[E_INVALID_OPERATION] The style of TableView is not TABLE_VIEW_STYLE_SECTION");
644 String sectionHeader;
646 if (__useFloatingPoint)
648 sectionHeader = __pSectionProviderF->GetSectionHeader(groupIndex);
652 sectionHeader = __pSectionProvider->GetSectionHeader(groupIndex);
655 return sectionHeader;
659 _TableViewItemProvider::HasSectionHeader(int groupIndex)
661 SysTryReturn(NID_UI_CTRL, __style == TABLE_VIEW_STYLE_SECTION, false, E_INVALID_OPERATION, "[E_INVALID_OPERATION] The style of TableView is not TABLE_VIEW_STYLE_SECTION");
663 bool hasSectionHeader;
665 if (__useFloatingPoint)
667 hasSectionHeader = __pSectionProviderF->HasSectionHeader(groupIndex);
671 hasSectionHeader = __pSectionProvider->HasSectionHeader(groupIndex);
674 return hasSectionHeader;
678 _TableViewItemProvider::GetSectionFooter(int groupIndex)
680 SysTryReturn(NID_UI_CTRL, __style == TABLE_VIEW_STYLE_SECTION, String(""), E_INVALID_OPERATION, "[E_INVALID_OPERATION] The style of TableView is not TABLE_VIEW_STYLE_SECTION");
682 String sectionFooter;
684 if (__useFloatingPoint)
686 sectionFooter = __pSectionProviderF->GetSectionFooter(groupIndex);
690 sectionFooter = __pSectionProvider->GetSectionFooter(groupIndex);
693 return sectionFooter;
697 _TableViewItemProvider::HasSectionFooter(int groupIndex)
699 SysTryReturn(NID_UI_CTRL, __style == TABLE_VIEW_STYLE_SECTION, false, E_INVALID_OPERATION, "[E_INVALID_OPERATION] The style of TableView is not TABLE_VIEW_STYLE_SECTION");
701 bool hasSectionFooter;
703 if (__useFloatingPoint)
705 hasSectionFooter = __pSectionProviderF->HasSectionFooter(groupIndex);
709 hasSectionFooter = __pSectionProvider->HasSectionFooter(groupIndex);
712 return hasSectionFooter;
715 }}} // Tizen::Ui::Controls