04a52fe98e4b6600269433e9588d3357932a3e05
[platform/framework/native/uifw.git] / src / ui / controls / FUiCtrl_IconListImpl.cpp
1 //
2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
4 //
5 // Licensed under the Apache License, Version 2.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://www.apache.org/licenses/LICENSE-2.0/
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_IconListImpl.cpp
20  * @brief       This is the implementation file for _IconListImpl class
21  *
22  * This file contains the implementation of _IconListImpl class
23  */
24
25 #include <new>
26 #include "FUiCtrl_IconListImpl.h"
27 #include "FUiCtrl_IconListItemProvider.h"
28 #include "FUiCtrl_IconListData.h"
29 #include "FUi_ResourceManager.h"
30 #include "FUiCtrl_ListListener.h"
31 //UiBuilder
32 #include "FUi_UiBuilder.h"
33
34 using namespace Tizen::Base;
35 using namespace Tizen::Ui;
36 using namespace Tizen::Ui::Controls;
37 using namespace Tizen::Graphics;
38
39 namespace Tizen { namespace Ui { namespace Controls
40 {
41
42 _IconListImpl*
43 _IconListImpl::GetInstance(IconList& iconList)
44 {
45         return static_cast< _IconListImpl* >(iconList._pControlImpl);
46 }
47
48 const _IconListImpl*
49 _IconListImpl::GetInstance(const IconList& iconList)
50 {
51         return static_cast< const _IconListImpl* >(iconList._pControlImpl);
52 }
53
54 _IconListImpl::_IconListImpl(Control* pList, _IconListView* pCore)
55         : _ControlImpl(pList, pCore)
56         , __pIconListItemProvider(null)
57         , __annexStyle(ICON_LIST_VIEW_STYLE_NORMAL)
58 {
59 }
60
61 _IconListImpl::~_IconListImpl(void)
62 {
63         __iconList.RemoveAll(true);
64         __iconListenersList.RemoveAll(true);
65
66         delete __pIconListItemProvider;
67         __pIconListItemProvider = null;
68 }
69
70 const char*
71 _IconListImpl::GetPublicClassName(void) const
72 {
73         return "Tizen::Ui::Controls::IconList";
74 }
75
76 const IconList&
77 _IconListImpl::GetPublic(void) const
78 {
79         return static_cast< const IconList& >(_ControlImpl::GetPublic());
80 }
81
82 IconList&
83 _IconListImpl::GetPublic(void)
84 {
85         return static_cast< IconList& >(_ControlImpl::GetPublic());
86 }
87
88 const _IconListView&
89 _IconListImpl::GetCore(void) const
90 {
91         return static_cast< const _IconListView& >(_ControlImpl::GetCore());
92 }
93
94 _IconListView&
95 _IconListImpl::GetCore(void)
96 {
97         return static_cast< _IconListView& >(_ControlImpl::GetCore());
98 }
99
100 _IconListImpl*
101 _IconListImpl::CreateIconListImplN(IconList* pControl)
102 {
103         _IconListView* pCore = _IconListView::CreateIconListViewN();
104         SysTryReturn(NID_UI_CTRL, (pCore != null), null, GetLastResult(), "[%s] Creating iconListView instance failed", GetErrorMessage(GetLastResult()));
105
106         _IconListImpl* pImpl = new (std::nothrow) _IconListImpl(pControl, pCore);
107         SysTryCatch(NID_UI_CTRL, (pImpl != null), , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
108
109         return pImpl;
110
111 CATCH:
112         delete pCore;
113         return null;
114 }
115
116 result
117 _IconListImpl::SetIconListStyle(IconListStyle style)
118 {
119         result r = E_SUCCESS;
120
121         switch (style)
122         {
123         case ICON_LIST_STYLE_NORMAL:
124                 __annexStyle = ICON_LIST_VIEW_STYLE_NORMAL;
125                 break;
126
127         case ICON_LIST_STYLE_RADIO:
128                 __annexStyle = ICON_LIST_VIEW_STYLE_RADIO;
129                 break;
130
131         case ICON_LIST_STYLE_MARK:
132                 __annexStyle = ICON_LIST_VIEW_STYLE_MARK;
133                 break;
134
135         default:
136                 r = E_INVALID_ARG;
137                 break;
138         }
139
140         SysTryReturnResult(NID_UI_CTRL, (r == E_SUCCESS), r, "Invalid Icon List style" );
141
142         r = GetCore().SetStyle(__annexStyle);
143         SysTryReturnResult(NID_UI_CTRL, (r == E_SUCCESS), r, "[%s] Failed to set style", GetErrorMessage(r));
144
145         return r;
146 }
147
148 result
149 _IconListImpl::InitializeIconList(int itemWidth, int itemHeight)
150 {
151         result r = E_SUCCESS;
152         int initialTextSize = itemHeight >> 2;
153         int minSize = 0;
154         int topMargin = 0;
155         int rightMargin = 0;
156         int leftMargin = 0;
157
158         GET_FIXED_VALUE_CONFIG(ICONLIST::MINIMUM_FONT_SIZE, GetCore().GetOrientation(), minSize);
159         GET_SHAPE_CONFIG(ICONLIST::LIST1X_TOP_MARGIN, GetCore().GetOrientation(), topMargin);
160         GET_SHAPE_CONFIG(ICONLIST::LIST1X_LEFT_MARGIN, GetCore().GetOrientation(), leftMargin);
161         GET_SHAPE_CONFIG(ICONLIST::LIST1X_RIGHT_MARGIN, GetCore().GetOrientation(), rightMargin);
162
163         if (initialTextSize < minSize)
164         {
165                 initialTextSize = minSize;
166         }
167
168         r = GetCore().SetItemTextSize(initialTextSize);
169         SysTryReturnResult(NID_UI_CTRL, (r == E_SUCCESS), r, "[%s] Failed to set item text size", GetErrorMessage(r));
170
171         r = GetCore().SetScrollDirection(ICON_LIST_VIEW_SCROLL_DIRECTION_VERTICAL);
172         SysTryReturnResult(NID_UI_CTRL, (r == E_SUCCESS), r, "[%s] Failed to set scroll direction", GetErrorMessage(r));
173
174         r = GetCore().SetItemBitmapBounds(Rectangle(0, 0, itemWidth, itemHeight));
175         SysTryReturnResult(NID_UI_CTRL, (r == E_SUCCESS), r, "[%s] Failed to set bitmap bounds", GetErrorMessage(r));
176
177         r = GetCore().SetItemBorderStyle(ICON_LIST_VIEW_ITEM_BORDER_STYLE_OUTLINE);
178         SysTryReturnResult(NID_UI_CTRL, (r == E_SUCCESS), r, "[%s] Failed to set border style", GetErrorMessage(r));
179
180         r = GetCore().SetItemSpacing(rightMargin, topMargin);
181         SysTryReturnResult(NID_UI_CTRL, (r == E_SUCCESS), r, "[%s] Failed to set item spacing", GetErrorMessage(r));
182
183         r = GetCore().SetMargin(MARGIN_TYPE_TOP, topMargin);
184         SysTryReturnResult(NID_UI_CTRL, (r == E_SUCCESS), r, "[%s] Failed to set top margin", GetErrorMessage(r));
185
186         r = GetCore().SetMargin(MARGIN_TYPE_LEFT, leftMargin);
187         SysTryReturnResult(NID_UI_CTRL, (r == E_SUCCESS), r, "[%s] Failed to set left margin", GetErrorMessage(r));
188
189         r = GetCore().SetMargin(MARGIN_TYPE_RIGHT, rightMargin);
190         SysTryReturnResult(NID_UI_CTRL, (r == E_SUCCESS), r, "[%s] Failed to set right margin", GetErrorMessage(r));
191
192         r = GetCore().SetMargin(MARGIN_TYPE_BOTTOM, 0);
193         SysTryReturnResult(NID_UI_CTRL, (r == E_SUCCESS), r, "[%s] Failed to set bottom margin", GetErrorMessage(r));
194
195         return r;
196 }
197
198 result
199 _IconListImpl::SetItemProvider(void)
200 {
201         __pIconListItemProvider = new (std::nothrow) _IconListItemProvider(this);
202         SysTryReturnResult(NID_UI_CTRL, __pIconListItemProvider, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
203
204         return GetCore().SetItemProvider(*__pIconListItemProvider);
205 }
206
207 result
208 _IconListImpl::SetNonSlidable(void)
209 {
210         return GetCore().SetNonSlidableList();
211 }
212
213 result
214 _IconListImpl::SetListener(void)
215 {
216         result r = E_SUCCESS;
217         r = GetCore().AddIconListItemEventListener(*this);
218         SysTryReturnResult(NID_UI_CTRL, (r == E_SUCCESS), r, "[%s] Failed to set IconListItemEvent listener", GetErrorMessage(r));
219
220         return r;
221 }
222
223 void
224 _IconListImpl::AddItemEventListener(IItemEventListener& listener)
225 {
226         _ListListener* pIconListListener = new (std::nothrow) _ListListener();
227         SysTryReturnVoidResult(NID_UI_CTRL, pIconListListener, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
228
229         pIconListListener->pListener = &listener;
230
231         __iconListenersList.Add(*pIconListListener);
232 }
233
234 void
235 _IconListImpl::RemoveItemEventListener(IItemEventListener& listener)
236 {
237         _ListListener* pIconListListener = null;
238
239         for (int listenerCount = 0; listenerCount < __iconListenersList.GetCount(); listenerCount++)
240         {
241                 pIconListListener = dynamic_cast< _ListListener* >(__iconListenersList.GetAt(listenerCount));
242
243                 if ((pIconListListener != null) && (pIconListListener->pListener == &listener))
244                 {
245                         __iconListenersList.RemoveAt(listenerCount, true);
246                         break;
247                 }
248         }
249
250 }
251
252 void
253 _IconListImpl::SetBackgroundBitmap(const Bitmap& bitmap)
254 {
255         result r = E_SUCCESS;
256
257         r = GetCore().SetBackgroundBitmap(&bitmap);
258         SysTryReturnVoidResult(NID_UI_CTRL, r == E_SUCCESS, E_SYSTEM, "[E_SYSTEM] SetBackgroundBitmap failed.");
259 }
260
261 result
262 _IconListImpl::SetMargin(int topMargin, int leftMargin)
263 {
264         result r = E_SUCCESS;
265
266         r = GetCore().SetMargin(MARGIN_TYPE_TOP, topMargin);
267         SysTryReturnResult(NID_UI_CTRL, (r == E_SUCCESS), E_SYSTEM, "[%s] Failed to set Margin", GetErrorMessage(r));
268
269         r = GetCore().SetMargin(MARGIN_TYPE_LEFT, leftMargin);
270         SysTryReturnResult(NID_UI_CTRL, (r == E_SUCCESS), E_SYSTEM, "[%s] Failed to set Margin", GetErrorMessage(r));
271
272         return r;
273 }
274
275 int
276 _IconListImpl::GetTopMargin(void) const
277 {
278         return GetCore().GetMargin(MARGIN_TYPE_TOP);
279 }
280
281 int
282 _IconListImpl::GetLeftMargin(void) const
283 {
284         return GetCore().GetMargin(MARGIN_TYPE_LEFT);
285 }
286
287 result
288 _IconListImpl::AddItem(const String* pText, const Bitmap* pNormalBitmap, const Bitmap* pFocusedBitmap, int itemId)
289 {
290         result r = E_SUCCESS;
291
292         _IconListData* pIconListData = CreateIconListItemN(pText, pNormalBitmap, pFocusedBitmap, itemId);
293         SysTryReturnResult(NID_UI_CTRL, pIconListData, E_SYSTEM, "[E_SYSTEM]  This Item instance is null.");
294
295         r = __iconList.Add(*pIconListData);
296         SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , E_SYSTEM, "[E_SYSTEM] Add failed.");
297
298         r = GetCore().RefreshList(__iconList.GetCount() - 1, LIST_REFRESH_TYPE_ITEM_ADD);
299         SysTryReturnResult(NID_UI_CTRL, E_SUCCESS == r, E_SYSTEM, "[E_SYSTEM]  Could not able to Add an Item.");
300
301         return r;
302
303 CATCH:
304         delete pIconListData;
305         pIconListData = null;
306         return E_SYSTEM;
307 }
308
309 result
310 _IconListImpl::InsertItemAt(int index, const String* pText, const Bitmap* pNormalBitmap, const Bitmap* pFocusedBitmap, int itemId)
311 {
312         result r = E_SUCCESS;
313
314         SysTryReturnResult(NID_UI_CTRL, (index >= 0 && index <= __iconList.GetCount()),
315                                           E_SYSTEM, "[E_INVALID_ARG] Index passed is invalid");
316
317         if (index == __iconList.GetCount())
318         {
319                 return AddItem(pText, pNormalBitmap, pFocusedBitmap, itemId);
320         }
321
322         _IconListData* pIconListData = CreateIconListItemN(pText, pNormalBitmap, pFocusedBitmap, itemId);
323         SysTryReturnResult(NID_UI_CTRL, pIconListData, E_SYSTEM, "[E_SYSTEM]  This Item instance is null.");
324
325         r = __iconList.InsertAt(*pIconListData, index);
326         SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , E_SYSTEM, "[E_SYSTEM] InsertAt failed.");
327
328         r = GetCore().RefreshList(index, LIST_REFRESH_TYPE_ITEM_ADD);
329         SysTryReturnResult(NID_UI_CTRL, E_SUCCESS == r, E_SYSTEM, "[E_SYSTEM]  Item could not be inserted into list.");
330
331         return r;
332
333 CATCH:
334         delete pIconListData;
335         pIconListData = null;
336         return E_SYSTEM;
337 }
338
339 result
340 _IconListImpl::SetItemAt(int index, const String* pText, const Bitmap* pNormalBitmap, const Bitmap* pFocusedBitmap, int itemId)
341 {
342         result r = E_SUCCESS;
343
344         SysTryReturnResult(NID_UI_CTRL, (index >= 0 && index < __iconList.GetCount()),
345                                           E_SYSTEM, "[E_INVALID_ARG] The index should not be less than 0 and greater than ItemCount");
346
347         _IconListData* pIconListData = CreateIconListItemN(pText, pNormalBitmap, pFocusedBitmap, itemId);
348         SysTryReturnResult(NID_UI_CTRL, pIconListData, E_SYSTEM, "[E_SYSTEM]  This Item instance is null.");
349
350         r = __iconList.SetAt(*pIconListData, index, true);
351         SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , E_SYSTEM, "[E_SYSTEM] SetAt failed.");
352
353         r = GetCore().RefreshList(index, LIST_REFRESH_TYPE_ITEM_MODIFY);
354         SysTryReturnResult(NID_UI_CTRL, E_SUCCESS == r, E_SYSTEM, "[E_SYSTEM]  Item could not be modified.");
355
356         return r;
357
358 CATCH:
359         delete pIconListData;
360         pIconListData = null;
361         return E_SYSTEM;
362 }
363
364 result
365 _IconListImpl::RemoveItemAt(int index)
366 {
367         result r = E_SUCCESS;
368
369         SysTryReturnResult(NID_UI_CTRL, (index >= 0 && index < __iconList.GetCount()),
370                                           E_SYSTEM, "[E_INVALID_ARG] Index passed is invalid");
371
372         __iconList.RemoveAt(index, true);
373
374         r = GetCore().RefreshList(index, LIST_REFRESH_TYPE_ITEM_REMOVE);
375         SysTryReturnResult(NID_UI_CTRL, E_SUCCESS == r, E_SYSTEM, "[E_SYSTEM]  Could not able to Remove an Item.");
376
377         return r;
378 }
379
380 result
381 _IconListImpl::RemoveAllItems(void)
382 {
383         result r = E_SUCCESS;
384         result finalResult = E_SUCCESS;
385
386         for (int index = __iconList.GetCount() - 1; index >= 0; index--)
387         {
388                 r = RemoveItemAt(index);
389                 if (r != E_SUCCESS)
390                 {
391                         finalResult = r;
392                         SysLog(NID_UI_CTRL, "[E_SYSTEM] Item at %d index not removed successfully", index);
393                 }
394         }
395
396         return finalResult;
397 }
398
399 int
400 _IconListImpl::GetColumnCount(void) const
401 {
402         return GetCore().GetItemCountPerAxis();
403 }
404
405 int
406 _IconListImpl::GetItemCount(void) const
407 {
408         return __iconList.GetCount();
409 }
410
411 result
412 _IconListImpl::SetItemChecked(int index, bool check)
413 {
414         result r = E_SUCCESS;
415
416         SysTryReturnResult(NID_UI_CTRL, (index >= 0 && index < __iconList.GetCount()), E_INVALID_ARG, "[E_INVALID_ARG] Index passed is invalid");
417         SysTryReturnResult(NID_UI_CTRL, (__annexStyle != ICON_LIST_VIEW_STYLE_NORMAL), E_SYSTEM, "[E_SYSTEM] Invalid operation for ICON_LIST_VIEW_STYLE_NORMAL.");
418
419         r = GetCore().SetItemChecked(index, check);
420         SysTryReturnResult(NID_UI_CTRL, E_SUCCESS == r, r, "SetItemChecked failed.");
421
422         r = GetCore().RefreshList(index, LIST_REFRESH_TYPE_ITEM_MODIFY);
423         SysTryReturnResult(NID_UI_CTRL, E_SUCCESS == r, r, "[E_SYSTEM] Item Not removed SuccessFully.");
424
425         return r;
426 }
427
428 bool
429 _IconListImpl::IsItemChecked(int index) const
430 {
431         SysTryReturn(NID_UI_CTRL, (__annexStyle != ICON_LIST_VIEW_STYLE_NORMAL),
432                                 false, E_SYSTEM, "[E_SYSTEM] list style should not be ICON_LIST_VIEW_STYLE_NORMAL.");
433
434         SysTryReturnResult(NID_UI_CTRL, (index >= 0 && index < __iconList.GetCount()),
435                                           false, "[E_INVALID_ARG] Index passed is invalid");
436
437         return GetCore().IsItemChecked(index);
438 }
439
440 result
441 _IconListImpl::SetAllItemsChecked(bool check)
442 {
443         SysTryReturnResult(NID_UI_CTRL, (__annexStyle != ICON_LIST_VIEW_STYLE_RADIO && __annexStyle != ICON_LIST_VIEW_STYLE_NORMAL),
444                                           E_SYSTEM, "[E_SYSTEM] Invalid Operation.");
445
446         result r = E_SUCCESS;
447
448         for (int index = 0; index < __iconList.GetCount(); index++)
449         {
450                 r = GetCore().SetItemChecked(index, check);
451                 if (r != E_SUCCESS)
452                 {
453                         SysLog(NID_UI_CTRL, "[E_SYSTEM] Item Not checked Properly");
454                 }
455                 GetCore().RefreshList(index, LIST_REFRESH_TYPE_ITEM_MODIFY);
456         }
457
458         return r;
459 }
460
461 result
462 _IconListImpl::RemoveAllCheckedItems(void)
463 {
464         SysTryReturnResult(NID_UI_CTRL, (__annexStyle != ICON_LIST_VIEW_STYLE_RADIO && __annexStyle != ICON_LIST_VIEW_STYLE_NORMAL),
465                                           E_SYSTEM, "[E_SYSTEM] Invalid Operation.");
466
467         result r = E_SUCCESS;
468         result finalResult = E_SUCCESS;
469
470         for (int index = __iconList.GetCount() - 1; index >= 0 ; index--)
471         {
472                 if (GetCore().IsItemChecked(index))
473                 {
474                         r = RemoveItemAt(index);
475                         if (r != E_SUCCESS)
476                         {
477                                 finalResult = r;
478                                 SysLog(NID_UI_CTRL, "[E_SYSTEM] Item at %d index not removed successfully", index);
479                         }
480                 }
481         }
482
483         return finalResult;
484 }
485
486 int
487 _IconListImpl::GetFirstCheckedItemIndex(void) const
488 {
489         const _Control& control = GetCore();
490         _IconListView* pList = dynamic_cast< _IconListView* >(const_cast< _Control* >(&control));
491         SysTryReturn(NID_UI_CTRL, (pList != null), INVALID_INDEX, E_SYSTEM, "[E_SYSTEM] System error occurred.");
492
493         SysTryReturn(NID_UI_CTRL, (__annexStyle != ICON_LIST_VIEW_STYLE_NORMAL), INVALID_INDEX, E_SYSTEM, "[E_SYSTEM] Invalid operation for ICON_LIST_VIEW_STYLE_NORMAL.");
494
495         for (int index = 0; index < __iconList.GetCount(); index++)
496         {
497                 if (GetCore().IsItemChecked(index))
498                 {
499                         return index;
500                 }
501         }
502
503         return INVALID_INDEX;
504 }
505
506 int
507 _IconListImpl::GetLastCheckedItemIndex(void) const
508 {
509         const _Control& control = GetCore();
510         _IconListView* pList = dynamic_cast< _IconListView* >(const_cast< _Control* >(&control));
511         SysTryReturn(NID_UI_CTRL, (pList != null), INVALID_INDEX, E_SYSTEM, "[E_SYSTEM] System error occurred.");
512
513         SysTryReturn(NID_UI_CTRL, (__annexStyle != ICON_LIST_VIEW_STYLE_NORMAL), INVALID_INDEX, E_SYSTEM, "[E_SYSTEM] Invalid operation for ICON_LIST_VIEW_STYLE_NORMAL.");
514
515         for (int index = __iconList.GetCount() - 1; index >= 0; index--)
516         {
517                 if (GetCore().IsItemChecked(index))
518                 {
519                         return index;
520                 }
521         }
522
523         return INVALID_INDEX;
524 }
525
526 int
527 _IconListImpl::GetNextCheckedItemIndexAfter(int index) const
528 {
529         const _Control& control = GetCore();
530         _IconListView* pList = dynamic_cast< _IconListView* >(const_cast< _Control* >(&control));
531         SysTryReturn(NID_UI_CTRL, (pList != null), E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System error occurred.");
532         SysTryReturn(NID_UI_CTRL, (index >= 0 && index < __iconList.GetCount()), INVALID_INDEX, INVALID_INDEX, "[INVALID_INDEX] Invalid index(%d)", index);
533
534         SysTryReturn(NID_UI_CTRL, (__annexStyle != ICON_LIST_VIEW_STYLE_NORMAL), INVALID_INDEX, E_SYSTEM, "[E_SYSTEM] Invalid operation for ICON_LIST_VIEW_STYLE_NORMAL.");
535
536         for (int i = index + 1; i < __iconList.GetCount(); i++)
537         {
538                 if (GetCore().IsItemChecked(i))
539                 {
540                         return i;
541                 }
542
543         }
544
545         return INVALID_INDEX;
546 }
547
548 int
549 _IconListImpl::GetItemIndexFromPosition(int x, int y) const
550 {
551         SysTryReturn(NID_UI_CTRL, (x >= 0 && y >= 0), INVALID_INDEX, E_INVALID_ARG, "[E_INVALID_ARG] Invalid Co-ordinates");
552
553         return GetCore().GetItemIndexFromPosition(Point(x, y));
554 }
555
556 int
557 _IconListImpl::GetItemIndexFromPosition(const Point& position) const
558 {
559         return GetCore().GetItemIndexFromPosition(position);
560 }
561
562 void
563 _IconListImpl::SetTextHorizontalAlignment(HorizontalAlignment alignment)
564 {
565         if (!(alignment >= ALIGNMENT_LEFT && alignment <= ALIGNMENT_RIGHT))
566         {
567                 SetLastResult(E_INVALID_ARG);
568                 //SetLastLog("[E_INVALID_ARG] Cannot set text Horizontal align");
569                 return;
570         }
571
572         GetCore().SetTextHorizontalAlignment(alignment);
573 }
574
575 void
576 _IconListImpl::SetTextVerticalAlignment(VerticalAlignment alignment)
577 {
578         if (!(alignment >= ALIGNMENT_TOP && alignment <= ALIGNMENT_BOTTOM))
579         {
580                 SetLastResult(E_INVALID_ARG);
581                 //SetLastLog("[E_INVALID_ARG] Cannot set text vertical align");
582                 return;
583         }
584
585         switch (alignment)
586         {
587         case ALIGNMENT_TOP:
588         {
589                 GetCore().SetTextVerticalAlignment(ICON_LIST_VIEW_ITEM_TEXT_VERTICAL_ALIGNMENT_INSIDE_TOP);
590         }
591         break;
592
593         case ALIGNMENT_MIDDLE:
594         {
595                 GetCore().SetTextVerticalAlignment(ICON_LIST_VIEW_ITEM_TEXT_VERTICAL_ALIGNMENT_INSIDE_MIDDLE);
596         }
597         break;
598
599         case ALIGNMENT_BOTTOM:
600         {
601                 GetCore().SetTextVerticalAlignment(ICON_LIST_VIEW_ITEM_TEXT_VERTICAL_ALIGNMENT_INSIDE_BOTTOM);
602         }
603         break;
604         }
605 }
606
607 HorizontalAlignment
608 _IconListImpl::GetTextHorizontalAlignment(void) const
609 {
610         return GetCore().GetTextHorizontalAlignment();
611
612 }
613
614 VerticalAlignment
615 _IconListImpl::GetTextVerticalAlignment(void) const
616 {
617         switch (GetCore().GetTextVerticalAlignment())
618         {
619         case ICON_LIST_VIEW_ITEM_TEXT_VERTICAL_ALIGNMENT_INSIDE_TOP:
620         {
621                 return ALIGNMENT_TOP;
622         }
623         break;
624
625         case ICON_LIST_VIEW_ITEM_TEXT_VERTICAL_ALIGNMENT_INSIDE_MIDDLE:
626         {
627                 return ALIGNMENT_MIDDLE;
628         }
629         break;
630
631         case ICON_LIST_VIEW_ITEM_TEXT_VERTICAL_ALIGNMENT_INSIDE_BOTTOM:
632         {
633                 return ALIGNMENT_BOTTOM;
634         }
635         break;
636
637         default:
638         {
639                 return ALIGNMENT_TOP;
640         }
641         break;
642         }
643 }
644
645 void
646 _IconListImpl::SetTextOfEmptyList(const String& text)
647 {
648         GetCore().SetTextOfEmptyList(text);
649 }
650
651 void
652 _IconListImpl::SetTextColorOfEmptyList(const Color& color)
653 {
654         GetCore().SetTextColorOfEmptyList(color);
655 }
656
657 Tizen::Graphics::Color
658 _IconListImpl::GetTextColorOfEmptyList(void) const
659 {
660         return GetCore().GetTextColorOfEmptyList();
661 }
662
663 void
664 _IconListImpl::SetItemTextColor(const Color& textColor)
665 {
666         GetCore().SetItemTextColor(ICON_LIST_VIEW_ITEM_DRAWING_STATUS_NORMAL, textColor);
667 }
668
669 Tizen::Graphics::Color
670 _IconListImpl::GetItemTextColor(void) const
671 {
672         return GetCore().GetItemTextColor(ICON_LIST_VIEW_ITEM_DRAWING_STATUS_NORMAL);
673 }
674
675 void
676 _IconListImpl::SetTextSize(int size)
677 {
678         GetCore().SetItemTextSize(size);
679 }
680
681 int
682 _IconListImpl::GetTextSize(void) const
683 {
684         return GetCore().GetItemTextSize();
685 }
686
687 int
688 _IconListImpl::GetItemIndexFromItemId(int itemId) const
689 {
690         _IconListData* pIconListData = null;
691
692         for (int index = 0; index < __iconList.GetCount(); index++)
693         {
694                 pIconListData = dynamic_cast< _IconListData* >(const_cast< Object* >(__iconList.GetAt(index)));
695                 if (pIconListData != null)
696                 {
697                         if (pIconListData->GetItemId() == itemId)
698                         {
699                                 return index;
700                         }
701                 }
702         }
703
704         return INVALID_INDEX;
705 }
706
707 int
708 _IconListImpl::GetItemIdAt(int index) const
709 {
710         SysTryReturn(NID_UI_CTRL, (index < __iconList.GetCount()),
711                                 INVALID_INDEX, E_INVALID_ARG, ("[E_INVALID_ARG] Index passed is invalid"));
712
713         _IconListData* pIconListData = null;
714         pIconListData = dynamic_cast< _IconListData* >(const_cast< Object* >(__iconList.GetAt(index)));
715         if (pIconListData != null)
716         {
717                 return pIconListData->GetItemId();
718         }
719
720         return INVALID_INDEX;
721 }
722
723 void
724 _IconListImpl::SetCheckBoxPosition(IconListCheckBoxPosition position)
725 {
726         SysTryReturnVoidResult(NID_UI_CTRL, (__annexStyle == ICON_LIST_VIEW_STYLE_RADIO || __annexStyle == ICON_LIST_VIEW_STYLE_MARK),
727                                         E_INVALID_OPERATION, "[E_INVALID_OPERATION] Can not set position of CheckBox.");
728
729         if (!(position >= ICON_LIST_CHECK_BOX_POSITION_TOP_LEFT && position <= ICON_LIST_CHECK_BOX_POSITION_BOTTOM_RIGHT))
730         {
731                 SetLastResult(E_INVALID_ARG);
732                 //SetLastLog("[E_INVALID_ARG] Cannot set text Horizontal align");
733                 return;
734         }
735
736         switch (position)
737         {
738         case ICON_LIST_CHECK_BOX_POSITION_TOP_LEFT:
739         {
740                 GetCore().SetCheckBoxPosition(ICON_LIST_VIEW_CHECK_BOX_POSITION_TOP_LEFT);
741         }
742         break;
743
744         case ICON_LIST_CHECK_BOX_POSITION_TOP_RIGHT:
745         {
746                 GetCore().SetCheckBoxPosition(ICON_LIST_VIEW_CHECK_BOX_POSITION_TOP_RIGHT);
747         }
748         break;
749
750         case ICON_LIST_CHECK_BOX_POSITION_BOTTOM_LEFT:
751         {
752                 GetCore().SetCheckBoxPosition(ICON_LIST_VIEW_CHECK_BOX_POSITION_BOTTOM_LEFT);
753         }
754         break;
755
756         case ICON_LIST_CHECK_BOX_POSITION_BOTTOM_RIGHT:
757         {
758                 GetCore().SetCheckBoxPosition(ICON_LIST_VIEW_CHECK_BOX_POSITION_BOTTOM_RIGHT);
759         }
760         break;
761         }
762 }
763
764 IconListCheckBoxPosition
765 _IconListImpl::GetCheckBoxPosition(void) const
766 {
767         switch (GetCore().GetCheckBoxPosition())
768         {
769         case ICON_LIST_VIEW_CHECK_BOX_POSITION_TOP_LEFT:
770         {
771                 return ICON_LIST_CHECK_BOX_POSITION_TOP_LEFT;
772         }
773         break;
774
775         case ICON_LIST_VIEW_CHECK_BOX_POSITION_TOP_RIGHT:
776         {
777                 return ICON_LIST_CHECK_BOX_POSITION_TOP_RIGHT;
778         }
779         break;
780
781         case ICON_LIST_VIEW_CHECK_BOX_POSITION_BOTTOM_LEFT:
782         {
783                 return ICON_LIST_CHECK_BOX_POSITION_BOTTOM_LEFT;
784         }
785         break;
786
787         case ICON_LIST_VIEW_CHECK_BOX_POSITION_BOTTOM_RIGHT:
788         {
789                 return ICON_LIST_CHECK_BOX_POSITION_BOTTOM_RIGHT;
790         }
791         break;
792
793         default:
794         {
795                 return ICON_LIST_CHECK_BOX_POSITION_TOP_RIGHT;
796         }
797         break;
798         }
799 }
800
801 void
802 _IconListImpl::SetFocusAnimationEnabled(bool enable)
803 {
804         GetCore().SetTouchAnimationEnabled(enable);
805 }
806
807 void
808 _IconListImpl::ScrollToBottom(void)
809 {
810         GetCore().ScrollToItem(__iconList.GetCount() - 1);
811 }
812
813 void
814 _IconListImpl::ScrollToTop(void)
815 {
816         GetCore().ScrollToItem(0);
817 }
818
819 result
820 _IconListImpl::ScrollToTop(int itemIndex)
821 {
822         SysTryReturnResult(NID_UI_CTRL, (itemIndex >= 0 && itemIndex < __iconList.GetCount()), E_INVALID_ARG, "[E_INVALID_ARG] Invalid index(%d)", itemIndex);
823
824         return GetCore().ScrollToItem(itemIndex);
825 }
826
827 result
828 _IconListImpl::RefreshItem(int index)
829 {
830         SysTryReturnResult(NID_UI_CTRL, (index >= 0 && index < __iconList.GetCount()), E_INVALID_ARG, "[E_INVALID_ARG] Invalid index(%d)", index);
831
832         return GetCore().RefreshList(index, LIST_REFRESH_TYPE_ITEM_MODIFY);
833 }
834
835 void
836 _IconListImpl::OnIconListItemStateChanged(_IconListViewItemEventArg* pArg)
837 {
838         SysTryReturnVoidResult(NID_UI_CTRL, (__iconListenersList.GetCount() > 0), E_SYSTEM, "[E_SYSTEM] No listeners added.");
839         int index = pArg->GetIndex();
840         _IconListData* pIconListData = dynamic_cast< _IconListData* >(__iconList.GetAt(index));
841         SysTryReturnVoidResult(NID_UI_CTRL, pIconListData != null, E_SYSTEM, "[E_SYSTEM] Failed to get IconListdata at %d index.", index);
842
843         ItemStatus itemStatus = ITEM_HIGHLIGHTED;
844
845         switch (pArg->GetStatus())
846         {
847         case ICON_LIST_VIEW_ITEM_CHECKED:
848         {
849                 itemStatus = ITEM_CHECKED;
850         }
851         break;
852
853         case ICON_LIST_VIEW_ITEM_UNCHECKED:
854         {
855                 itemStatus = ITEM_UNCHECKED;
856         }
857         break;
858
859         case ICON_LIST_VIEW_ITEM_SELECTED:
860         {
861                 itemStatus = ITEM_SELECTED;
862         }
863         break;
864
865         case ICON_LIST_VIEW_ITEM_HIGHLIGHTED:
866         {
867                 itemStatus = ITEM_HIGHLIGHTED;
868         }
869         break;
870
871         default:
872                 SysLog(NID_UI_CTRL, "IconListViewItemStatus is invalid.");
873                 break;
874         }
875
876         _ListListener* pIconListListener = null;
877         Tizen::Ui::IItemEventListener* pItemEventListener = null;
878         for (int listenerCount = 0; listenerCount < __iconListenersList.GetCount(); listenerCount++)
879         {
880                 pIconListListener = dynamic_cast< _ListListener* >(__iconListenersList.GetAt(listenerCount));
881                 SysTryReturnVoidResult(NID_UI_CTRL, (pIconListListener != null), E_SYSTEM, "[E_SYSTEM] Failed to get ListListener");
882
883                 pItemEventListener = dynamic_cast< IItemEventListener* >(pIconListListener->pListener);
884                 SysTryReturnVoidResult(NID_UI_CTRL, (pItemEventListener != null), E_SYSTEM, "[E_SYSTEM] Failed to get EventListener");
885
886                 pItemEventListener->OnItemStateChanged(GetPublic(), index, pIconListData->GetItemId(), itemStatus);
887         }
888
889 }
890
891 _IconListData*
892 _IconListImpl::CreateIconListItemN(const String* pText, const Bitmap* pNormalBitmap, const Bitmap* pFocusedBitmap, int itemId)
893 {
894         SysTryReturn(NID_UI_CTRL, (pText != null), null, E_SYSTEM, "[E_SYSTEM] pText is null");
895
896         _IconListData* pIconListData = null;
897         pIconListData = new (std::nothrow) _IconListData();
898         SysTryReturn(NID_UI_CTRL, pIconListData, null, E_SYSTEM, "[E_SYSTEM]  This instance is not constructed.");
899
900         pIconListData->SetLabelText(*pText);
901         pIconListData->SetItemId(itemId);
902         pIconListData->SetNormalBitmap(pNormalBitmap);
903         pIconListData->SetFocusedBitmap(pFocusedBitmap);
904
905         return pIconListData;
906 }
907
908
909 class _IconListMaker
910         : public _UiBuilderControlMaker
911 {
912 public:
913         _IconListMaker(_UiBuilder* uibuilder)
914                 : _UiBuilderControlMaker(uibuilder){};
915         virtual ~_IconListMaker(){};
916         static _UiBuilderControlMaker*
917         GetInstance(_UiBuilder* uibuilder)
918         {
919                 _IconListMaker* pIconListMaker = new (std::nothrow) _IconListMaker(uibuilder);
920                 return pIconListMaker;
921         };
922 protected:
923         virtual Control*
924         Make(_UiBuilderControl* pControl)
925         {
926                 result r = E_SYSTEM;
927                 _UiBuilderControlLayout* pControlProperty = null;
928                 IconList* pIconList = null;
929                 Rectangle rect;
930                 Rectangle rectMin;
931                 Dimension dimMin;
932
933                 IconListStyle style = ICON_LIST_STYLE_NORMAL;
934                 Tizen::Base::String elementString;
935                 int tempItemWidth = 0;
936                 int tempItemHeight = 0;
937
938                 Color color;
939
940                 GetProperty(pControl, &pControlProperty);
941                 if (pControlProperty == null)
942                 {
943                         return null;
944                 }
945
946                 pIconList = new (std::nothrow) IconList();
947                 if (pIconList == null)
948                 {
949                         return null;
950                 }
951
952                 rect = pControlProperty->GetRect();
953
954                 if (pControl->GetElement(L"itemWidth", elementString))
955                 {
956                         Base::Integer::Parse(elementString, tempItemWidth);
957                 }
958
959                 if (pControl->GetElement(L"itemHeight", elementString))
960                 {
961                         Base::Integer::Parse(elementString, tempItemHeight);
962                 }
963
964                 if (tempItemHeight < 1)
965                 {
966                         tempItemHeight = rect.height >> 2;
967                 }
968                 if (tempItemWidth < 1)
969                 {
970                         tempItemWidth = rect.width >> 2;
971                 }
972
973                 Tizen::Base::String styleString;
974                 styleString = pControlProperty->GetStyle();
975
976                 if (styleString.Equals(L"ICON_LIST_STYLE_NORMAL", false))
977                 {
978                         style = ICON_LIST_STYLE_NORMAL;
979                 }
980                 else if (styleString.Equals(L"ICON_LIST_STYLE_RADIO", false))
981                 {
982                         style = ICON_LIST_STYLE_RADIO;
983                 }
984                 else if (styleString.Equals(L"ICON_LIST_STYLE_MARK", false))
985                 {
986                         style = ICON_LIST_STYLE_MARK;
987                 }
988
989                 r = pIconList->Construct(rect, style, tempItemWidth, tempItemHeight);
990                 if (r != E_SUCCESS)
991                 {
992                         delete pIconList;
993                         pIconList = null;
994                         return null;
995                 }
996
997                 if (pControl->GetElement(L"textOfEmptyList", elementString))
998                 {
999                         pIconList->SetTextOfEmptyList(elementString);
1000                 }
1001
1002                 if (pControl->GetElement(L"colorOfEmptyListText", elementString))
1003                 {
1004                         ConvertStringToColor(elementString, color);
1005                         pIconList->SetTextColorOfEmptyList(color);
1006                 }
1007
1008                 return pIconList;
1009         }
1010 private:
1011 };
1012
1013 _IconListRegister::_IconListRegister()
1014 {
1015         _UiBuilderControlTableManager* pUiBuilderControlTableManager = _UiBuilderControlTableManager::GetInstance();
1016         pUiBuilderControlTableManager->RegisterControl(L"IconList", _IconListMaker::GetInstance);
1017 }
1018 _IconListRegister::~_IconListRegister()
1019 {
1020         _UiBuilderControlTableManager* pUiBuilderControlTableManager = _UiBuilderControlTableManager::GetInstance();
1021         pUiBuilderControlTableManager->UnregisterControl(L"IconList");
1022 }
1023 static _IconListRegister IconListRegisterToUiBuilder;
1024 }}} // Tizen::Ui::Controls