Tizen 2.1 base
[framework/osp/uifw.git] / src / ui / controls / FUiCtrl_TableViewItemProvider.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_TableViewItemProvider.cpp
20  * @brief               This file implements the _TableViewItemProvider class.
21  * @version             3.0
22  */
23
24 #include <FUiCtrlTableView.h>
25 #include <FUiCtrlITableViewItemProvider.h>
26 #include <FUiCtrlIGroupedTableViewItemProvider.h>
27 #include <FUiCtrlISectionTableViewItemProvider.h>
28 #include <FUiCtrlTableViewItem.h>
29 #include <FUiCtrlTableViewGroupItem.h>
30 #include "FUiCtrl_TableViewItemProvider.h"
31 #include "FUi_ResourceManager.h"
32
33 using namespace Tizen::Base;
34 using namespace Tizen::Ui;
35
36 namespace Tizen { namespace Ui { namespace Controls
37 {
38
39 _TableViewItemProvider::_TableViewItemProvider(TableViewStyle style)
40         : __pSimpleProvider(null)
41         , __pGroupedProvider(null)
42         , __pSectionProvider(null)
43         , __style(style)
44         , __onProcessing(false)
45 {
46
47 }
48
49 _TableViewItemProvider::~_TableViewItemProvider(void)
50 {
51         __pSimpleProvider = null;
52         __pGroupedProvider = null;
53         __pSectionProvider = null;
54 }
55
56 _TableViewItemProvider*
57 _TableViewItemProvider::CreateTableViewItemProviderN(TableViewStyle style)
58 {
59         ClearLastResult();
60
61         _TableViewItemProvider* pProvider = new (std::nothrow) _TableViewItemProvider(style);
62         SysTryReturn(NID_UI_CTRL, pProvider != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
63
64         return pProvider;
65 }
66
67 result
68 _TableViewItemProvider::SetSimpleStyleItemProvider(ITableViewItemProvider* pProvider)
69 {
70         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");
71
72         __pSimpleProvider = pProvider;
73
74         return E_SUCCESS;
75 }
76
77 result
78 _TableViewItemProvider::SetGroupedStyleItemProvider(IGroupedTableViewItemProvider* pProvider)
79 {
80         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");
81
82         __pGroupedProvider = pProvider;
83
84         return E_SUCCESS;
85 }
86
87 result
88 _TableViewItemProvider::SetSectionStyleItemProvider(ISectionTableViewItemProvider* pProvider)
89 {
90         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");
91
92         __pSectionProvider = pProvider;
93
94         return E_SUCCESS;
95 }
96
97 int
98 _TableViewItemProvider::GetGroupCount(void)
99 {
100         int count = 0;
101         __onProcessing = true;
102
103         switch (__style)
104         {
105         case TABLE_VIEW_STYLE_SIMPLE:
106                 count = 1;
107                 break;
108
109         case TABLE_VIEW_STYLE_GROUPED:
110                 count = __pGroupedProvider->GetGroupCount();
111                 break;
112
113         case TABLE_VIEW_STYLE_SECTION:
114                 count = __pSectionProvider->GetSectionCount();
115                 break;
116         }
117
118         __onProcessing = false;
119
120         return count;
121 }
122
123 int
124 _TableViewItemProvider::GetItemCount(int groupIndex)
125 {
126         int count = 0;
127
128         __onProcessing = true;
129
130         switch (__style)
131         {
132         case TABLE_VIEW_STYLE_SIMPLE:
133                 count = __pSimpleProvider->GetItemCount();
134                 break;
135
136         case TABLE_VIEW_STYLE_GROUPED:
137                 count = __pGroupedProvider->GetItemCount(groupIndex);
138                 break;
139
140         case TABLE_VIEW_STYLE_SECTION:
141                 count = __pSectionProvider->GetItemCount(groupIndex);
142                 break;
143         }
144
145         __onProcessing = false;
146
147         return count;
148 }
149
150 int
151 _TableViewItemProvider::GetGroupItemHeight(int groupIndex)
152 {
153         return GetDefaultGroupItemHeight();
154 }
155
156 int
157 _TableViewItemProvider::GetItemHeight(const TableViewItemTag& itemTag)
158 {
159         return GetDefaultItemHeight();
160 }
161
162 int
163 _TableViewItemProvider::GetDefaultItemHeight(void)
164 {
165         int height = 0;
166
167         __onProcessing = true;
168
169         switch (__style)
170         {
171         case TABLE_VIEW_STYLE_SIMPLE:
172                 height = __pSimpleProvider->GetDefaultItemHeight();
173                 break;
174
175         case TABLE_VIEW_STYLE_GROUPED:
176                 height = __pGroupedProvider->GetDefaultItemHeight();
177                 break;
178
179         case TABLE_VIEW_STYLE_SECTION:
180                 height = __pSectionProvider->GetDefaultItemHeight();
181                 break;
182         }
183
184         __onProcessing = false;
185
186         return height;
187 }
188 int
189 _TableViewItemProvider::GetDefaultGroupItemHeight(void)
190 {
191         int height = 0;
192
193         __onProcessing = true;
194
195         switch (__style)
196         {
197         case TABLE_VIEW_STYLE_SIMPLE:
198                 height = 0;
199                 break;
200
201         case TABLE_VIEW_STYLE_GROUPED:
202                 height = __pGroupedProvider->GetDefaultGroupItemHeight();
203                 break;
204
205         case TABLE_VIEW_STYLE_SECTION:
206                 GET_SHAPE_CONFIG(TABLEVIEW::GROUPITEM_DEFAULT_HEIGHT, _CONTROL_ORIENTATION_PORTRAIT, height);
207                 break;
208         }
209
210         __onProcessing = false;
211
212         return height;
213 }
214
215
216 TableViewGroupItem*
217 _TableViewItemProvider::CreateGroupItem(int groupIndex, int itemWidth)
218 {
219         TableViewGroupItem* pItem = null;
220
221         __onProcessing = true;
222
223         switch (__style)
224         {
225         case TABLE_VIEW_STYLE_SIMPLE:
226                 pItem = null;
227                 break;
228
229         case TABLE_VIEW_STYLE_GROUPED:
230                 pItem = __pGroupedProvider->CreateGroupItem(groupIndex, itemWidth);
231                 break;
232
233         case TABLE_VIEW_STYLE_SECTION:
234                 pItem = null;
235                 break;
236         }
237
238         __onProcessing = false;
239
240         return pItem;
241 }
242
243 bool
244 _TableViewItemProvider::DeleteGroupItem(int groupIndex, TableViewGroupItem* pItem)
245 {
246         bool value = false;
247
248         __onProcessing = true;
249
250         switch (__style)
251         {
252         case TABLE_VIEW_STYLE_SIMPLE:
253                 delete pItem;
254                 value = true;
255                 break;
256
257         case TABLE_VIEW_STYLE_GROUPED:
258                 value = __pGroupedProvider->DeleteGroupItem(groupIndex, pItem);
259                 break;
260
261         case TABLE_VIEW_STYLE_SECTION:
262                 delete pItem;
263                 value = true;
264                 break;
265         }
266         __onProcessing = false;
267
268         return value;
269 }
270
271 TableViewItem*
272 _TableViewItemProvider::CreateItem(const TableViewItemTag& itemTag, int itemWidth)
273 {
274         TableViewItem* pItem = null;
275
276         __onProcessing = true;
277
278         switch (__style)
279         {
280         case TABLE_VIEW_STYLE_SIMPLE:
281                 pItem = __pSimpleProvider->CreateItem(itemTag.itemIndex, itemWidth);
282                 break;
283
284         case TABLE_VIEW_STYLE_GROUPED:
285                 pItem = __pGroupedProvider->CreateItem(itemTag.groupIndex, itemTag.itemIndex, itemWidth);
286                 break;
287
288         case TABLE_VIEW_STYLE_SECTION:
289                 pItem = __pSectionProvider->CreateItem(itemTag.groupIndex, itemTag.itemIndex, itemWidth);
290                 break;
291         }
292
293         __onProcessing = false;
294
295         return pItem;
296 }
297
298 bool
299 _TableViewItemProvider::DeleteItem(const TableViewItemTag& itemTag, TableViewItem* pItem)
300 {
301         bool value = false;
302
303         __onProcessing = true;
304
305         switch (__style)
306         {
307         case TABLE_VIEW_STYLE_SIMPLE:
308                 value = __pSimpleProvider->DeleteItem(itemTag.itemIndex, pItem);
309                 break;
310
311         case TABLE_VIEW_STYLE_GROUPED:
312                 value = __pGroupedProvider->DeleteItem(itemTag.groupIndex, itemTag.itemIndex, pItem);
313                 break;
314
315         case TABLE_VIEW_STYLE_SECTION:
316                 value = __pSectionProvider->DeleteItem(itemTag.groupIndex, itemTag.itemIndex, pItem);
317                 break;
318         }
319
320         __onProcessing = false;
321
322         return value;
323 }
324
325 bool
326 _TableViewItemProvider::UpdateItem(const TableViewItemTag& itemTag, TableViewItem *pItem)
327 {
328         __onProcessing = true;
329
330         switch (__style)
331         {
332         case TABLE_VIEW_STYLE_SIMPLE:
333                 __pSimpleProvider->UpdateItem(itemTag.itemIndex, pItem);
334                 break;
335
336         case TABLE_VIEW_STYLE_GROUPED:
337                 __pGroupedProvider->UpdateItem(itemTag.groupIndex, itemTag.itemIndex, pItem);
338                 break;
339
340         case TABLE_VIEW_STYLE_SECTION:
341                 __pSectionProvider->UpdateItem(itemTag.groupIndex, itemTag.itemIndex, pItem);
342                 break;
343         }
344
345         __onProcessing = false;
346
347         return true;
348 }
349
350 bool
351 _TableViewItemProvider::UpdateGroupItem(int groupIndex, TableViewGroupItem *pItem)
352 {
353         bool value = false;
354         __onProcessing = true;
355
356         switch (__style)
357         {
358         case TABLE_VIEW_STYLE_SIMPLE:
359                 value = false;
360                 break;
361
362         case TABLE_VIEW_STYLE_GROUPED:
363                 __pGroupedProvider->UpdateGroupItem(groupIndex, pItem);
364                 value = true;
365                 break;
366
367         case TABLE_VIEW_STYLE_SECTION:
368                 value = false;
369                 break;
370         }
371
372         __onProcessing = false;
373
374         return value;
375 }
376
377 bool
378 _TableViewItemProvider::IsReorderable(int groupIndexFrom, int groupIndexTo)
379 {
380         bool value = false;
381
382         switch (__style)
383         {
384         case TABLE_VIEW_STYLE_SIMPLE:
385                 value = false;
386                 break;
387
388         case TABLE_VIEW_STYLE_GROUPED:
389                 //value = __pGroupedProvider->IsReorderable(groupIndexFrom, groupIndexTo);
390                 value =  false;
391                 break;
392
393         case TABLE_VIEW_STYLE_SECTION:
394                 value = false;
395                 break;
396         }
397
398         return value;
399 }
400
401 bool
402 _TableViewItemProvider::IsOnProcessing()
403 {
404         return __onProcessing;
405 }
406
407 Tizen::Base::String
408 _TableViewItemProvider::GetSectionHeader(int groupIndex)
409 {
410         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");
411
412         return __pSectionProvider->GetSectionHeader(groupIndex);
413 }
414
415 bool
416 _TableViewItemProvider::HasSectionHeader(int groupIndex)
417 {
418         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");
419
420         return __pSectionProvider->HasSectionHeader(groupIndex);
421 }
422
423 Tizen::Base::String
424 _TableViewItemProvider::GetSectionFooter(int groupIndex)
425 {
426         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");
427
428         return __pSectionProvider->GetSectionFooter(groupIndex);
429 }
430
431 bool
432 _TableViewItemProvider::HasSectionFooter(int groupIndex)
433 {
434         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");
435
436         return __pSectionProvider->HasSectionFooter(groupIndex);
437 }
438
439 }}}   // Tizen::Ui::Controls
440