Tizen 2.0 Release
[apps/osp/Phone.git] / src / PhnSettingsMoreOptionsForm.cpp
1 //
2 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
3 //
4 // Licensed under the Flora License, Version 1.0 (the License);
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 //
8 //     http://floralicense.org/license/
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an AS IS BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15 //
16
17 /**
18  * @file    PhnSettingsMoreOptionsForm.cpp
19  * @brief   Setting More option form
20  */
21 #include <FApp.h>
22 #include "PhnSettingsMoreOptionsForm.h"
23 #include "PhnSettingsConstants.h"
24 #include "PhnAppUtility.h"
25 #include "PhnSettingsPresentationModel.h"
26 #include "PhnSceneRegister.h"
27
28 using namespace Tizen::App;
29 using namespace Tizen::Base;
30 using namespace Tizen::Base::Collection;
31 using namespace Tizen::Ui;
32 using namespace Tizen::Ui::Controls;
33 using namespace Tizen::Ui::Scenes;
34 using namespace Tizen::Graphics;
35
36 static const wchar_t* IDL_SETTINGS_MOREOPTIONS_FORM = L"IDL_SETTINGS_MOREOPTIONS_FORM";
37
38 SettingsMoreOptionsForm::SettingsMoreOptionsForm(void)
39         : __pSettingsPresentor(null)
40         , __isCallerIdExpanded(false)
41         , __isCallAlertExpanded(false)
42         , __autoAreaCode(L"")
43 {
44 }
45
46 SettingsMoreOptionsForm::~SettingsMoreOptionsForm(void)
47 {
48 }
49
50 bool
51 SettingsMoreOptionsForm::Initialize(void)
52 {
53         Construct(IDL_SETTINGS_MOREOPTIONS_FORM);
54         return true;
55 }
56
57 result
58 SettingsMoreOptionsForm::OnInitializing(void)
59 {
60         result r = E_SUCCESS;
61         __pSettingsPresentor = SettingsPresentationModel::GetInstance();
62         // Setup back event listener
63         SetFormBackEventListener(this);
64         //Footer
65         Footer* pFooter = GetFooter();
66         if (pFooter)
67         {
68                 pFooter->SetButtonColor(BUTTON_ITEM_STATUS_NORMAL, pFooter->GetColor());
69                 pFooter->AddActionEventListener(*this);
70         }
71         //Initialize list view
72         r = InitializeGroupedTableView();
73         return r;
74 }
75
76 result
77 SettingsMoreOptionsForm::OnTerminating(void)
78 {
79         result r = E_SUCCESS;
80         __pSettingsPresentor = null;
81         return r;
82 }
83
84 void
85 SettingsMoreOptionsForm::OnActionPerformed(const Control& source, int actionId)
86 {
87         switch (actionId)
88         {
89         default:
90                 break;
91         }
92 }
93
94 void
95 SettingsMoreOptionsForm::OnFormBackRequested(Form& source)
96 {
97         SceneManager* pSceneManager = SceneManager::GetInstance();
98         AppAssert(pSceneManager != null);
99         pSceneManager->GoForward(ForwardSceneTransition(IDSCN_SCENE_MAIN_SETTING_MENU), null);
100 }
101
102 void
103 SettingsMoreOptionsForm::OnSceneActivatedN(const SceneId& previousSceneId, const SceneId& currentSceneId, IList* pArgs)
104 {
105         __autoAreaCode.Clear();
106         GroupedTableView* pMoreOptionsTableView = static_cast<GroupedTableView*>(GetControl(IDC_GROUPEDTABLEVIEW));
107         if(__pSettingsPresentor != null && pMoreOptionsTableView != null)
108         {
109                 //set status for 'GROUP_CALLERID_OPTIONS'
110                 CallLineIdentity lineIdentity;
111                 __pSettingsPresentor->GetCallLineIdentity(lineIdentity);
112                 pMoreOptionsTableView->SetItemChecked(GROUP_CALLERID_OPTIONS, (GroupCallerIdOptionsItems) lineIdentity, true);
113                 pMoreOptionsTableView->RefreshItem(GROUP_CALLERID, CALLERID_CALLER_SETTING, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
114
115                 //set status for 'GROUP_CALL_ALERT_OPTIONS'
116                 CallAlertStatus alertStatus;
117                 __pSettingsPresentor->GetCallAlertStatus(alertStatus);
118                 pMoreOptionsTableView->SetItemChecked(GROUP_CALL_ALERT_OPTIONS, (GroupCallAlertOptionsItems) alertStatus, true);
119                 pMoreOptionsTableView->RefreshItem(GROUP_CALL_ALERT, CALLALERT_SETTING, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
120
121                 //update auto area code status
122                 result r = __pSettingsPresentor->GetActivePrefixDialNumber(__autoAreaCode);
123                 pMoreOptionsTableView->RefreshItem(GROUP_AREACODE, AREACODE_AUTO_AREA_CODE, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
124                 if(r == E_SUCCESS && __autoAreaCode.IsEmpty() == false)
125                 {
126                         pMoreOptionsTableView->SetItemChecked(GROUP_AREACODE, AREACODE_AUTO_AREA_CODE, true);
127                 }
128                 else
129                 {
130                         pMoreOptionsTableView->SetItemChecked(GROUP_AREACODE, AREACODE_AUTO_AREA_CODE, false);
131                 }
132         }
133 }
134
135 void
136 SettingsMoreOptionsForm::OnSceneDeactivated(const SceneId& currentSceneId, const SceneId& nextSceneId)
137 {
138 }
139
140 result
141 SettingsMoreOptionsForm::InitializeGroupedTableView(void)
142 {
143         result r = E_FAILURE;
144         GroupedTableView* pMoreOptionsTableView = static_cast<GroupedTableView*>(GetControl(IDC_GROUPEDTABLEVIEW));
145         if (pMoreOptionsTableView != null)
146         {
147                 pMoreOptionsTableView->SetGroupedLookEnabled(true);
148                 pMoreOptionsTableView->SetItemProvider(this);
149                 r = pMoreOptionsTableView->AddGroupedTableViewItemEventListener(*this);
150                 pMoreOptionsTableView->UpdateTableView();
151                 CollapseSelectiveGroups(pMoreOptionsTableView);
152         }
153         return r;
154 }
155
156 void
157 SettingsMoreOptionsForm::CollapseSelectiveGroups(GroupedTableView* pMoreOptionsTableView)
158 {
159         //This function should be called only from "InitializeGroupedTableView()".
160         //since collapsing individual groups while GroupTableView construction causes flicker.
161         pMoreOptionsTableView->CollapseAllGroup();
162         //Expand other groups
163         pMoreOptionsTableView->ExpandGroup(GROUP_CALLERID);
164         pMoreOptionsTableView->ExpandGroup(GROUP_CALL_SETTINGS);
165         pMoreOptionsTableView->ExpandGroup(GROUP_CALL_SETTINGS_HLPTXT);
166         pMoreOptionsTableView->ExpandGroup(GROUP_CALL_REMINDER);
167         pMoreOptionsTableView->ExpandGroup(GROUP_CALL_REMINDER_HLPTXT);
168         pMoreOptionsTableView->ExpandGroup(GROUP_CALL_ALERT);
169         pMoreOptionsTableView->ExpandGroup(GROUP_AREACODE);
170         pMoreOptionsTableView->ExpandGroup(GROUP_AREACODE_HLPTXT);
171         pMoreOptionsTableView->UpdateTableView();
172 }
173
174 void
175 SettingsMoreOptionsForm::OnGroupedTableViewItemStateChanged(GroupedTableView& tableView, int groupIndex, int itemIndex, TableViewItem* pItem, TableViewItemStatus status)
176 {
177         switch (groupIndex)
178         {
179         case GROUP_CALLERID:
180         {
181                 if (tableView.IsGroupExpanded(GROUP_CALLERID_OPTIONS))
182                 {
183                         tableView.CollapseGroup(GROUP_CALLERID_OPTIONS);
184                         __isCallerIdExpanded = false;
185                 }
186                 else
187                 {
188                         tableView.ExpandGroup(GROUP_CALLERID_OPTIONS);
189                         __isCallerIdExpanded = true;
190                 }
191                 //Change icon
192                 tableView.RefreshItem(GROUP_CALLERID, CALLERID_CALLER_SETTING, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
193         }
194         break;
195
196         case GROUP_CALLERID_OPTIONS:
197         {
198                 HandleSelectedCallerIdOptions(tableView, itemIndex, status);
199         }
200         break;
201
202         case GROUP_CALL_ALERT:
203         {
204                 if (tableView.IsGroupExpanded(GROUP_CALL_ALERT_OPTIONS))
205                 {
206                         tableView.CollapseGroup(GROUP_CALL_ALERT_OPTIONS);
207                         __isCallAlertExpanded = false;
208                 }
209                 else
210                 {
211                         tableView.ExpandGroup(GROUP_CALL_ALERT_OPTIONS);
212                         __isCallAlertExpanded = true;
213                 }
214                 //Change icon
215                 tableView.RefreshItem(GROUP_CALL_ALERT, CALLALERT_SETTING, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
216         }
217         break;
218
219         case GROUP_CALL_ALERT_OPTIONS:
220         {
221                 HandleSelectedCallAlertOptions(tableView, itemIndex, status);
222         }
223         break;
224
225         case GROUP_CALL_SETTINGS:
226         case GROUP_CALL_REMINDER:
227         case GROUP_AREACODE:
228         {
229                 HandleSelectedSettings(groupIndex, itemIndex);
230         }
231         break;
232
233         default:
234                 break;
235         }
236 }
237
238 int
239 SettingsMoreOptionsForm::GetGroupCount(void)
240 {
241         return GROUP_TOTALCOUNT;
242 }
243
244 int
245 SettingsMoreOptionsForm::GetItemCount(int groupIndex)
246 {
247         int itemCount = 0;
248         switch (groupIndex)
249         {
250         case GROUP_CALLERID:
251         {
252                 itemCount = CALLERID_TOTALCOUNT;
253         }
254         break;
255
256         case GROUP_CALLERID_OPTIONS:
257         {
258                 itemCount = CALLEROPTIONS_TOTALCOUNT;
259         }
260         break;
261
262         case GROUP_CALL_SETTINGS:
263         {
264                 itemCount = CALLSETTINGS_TOTALCOUNT;
265         }
266         break;
267
268         case GROUP_CALL_REMINDER:
269         {
270                 itemCount = CALLREMINDER_TOTALCOUNT;
271         }
272         break;
273
274         case GROUP_CALL_ALERT:
275         {
276                 itemCount = CALLALERT_TOTALCOUNT;
277         }
278         break;
279
280         case GROUP_CALL_ALERT_OPTIONS:
281         {
282                 itemCount = CALLALERT_OPTIONS_TOTALCOUNT;
283         }
284         break;
285
286         case GROUP_AREACODE:
287         {
288                 itemCount = AREACODE_TOTALCOUNT;
289         }
290         break;
291
292         case GROUP_CALL_SETTINGS_HLPTXT:
293         case GROUP_CALL_REMINDER_HLPTXT:
294         case GROUP_AREACODE_HLPTXT:
295         {
296                 itemCount = 0;
297         }
298         break;
299
300         default:
301                 break;
302         }
303         return itemCount;
304 }
305
306 TableViewGroupItem*
307 SettingsMoreOptionsForm::CreateGroupItem(int groupIndex, int itemWidth)
308 {
309         String helpText(L"");
310         switch (groupIndex)
311         {
312         case GROUP_CALL_SETTINGS_HLPTXT:
313         {
314                 helpText.Append(AppUtility::GetResourceString(IDS_SETTING_WAITING_HLP_STRING));
315         }
316         break;
317
318         case GROUP_CALL_REMINDER_HLPTXT:
319         {
320                 helpText.Append(AppUtility::GetResourceString(IDS_SETTING_STATUS_TONES_HLP_STRING));
321         }
322         break;
323
324         case GROUP_AREACODE_HLPTXT:
325         {
326                 helpText.Append(AppUtility::GetResourceString(IDS_SETTING_AUTO_AREACODE_HLP_STRING));
327         }
328         break;
329
330         default:
331         break;
332         }
333
334         TableViewGroupItem* pItem = new (std::nothrow) TableViewGroupItem();
335         if (helpText.IsEmpty() == true)
336         {
337                 pItem->Construct(Dimension(itemWidth, H_LIST_HIDDENGROUP_ITEM));
338                 pItem->SetBackgroundColor(COLOR_GROUP_ITEM_BG, TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL);
339         }
340         else
341         {
342                 pItem->Construct(Dimension(itemWidth, H_LIST_MENU_SINGLELINE_HLPTXT_ITEM));
343                 //help text item rectangle
344                 Rectangle helpItemRect(X_LIST_MENU_HLPTXT_ITEM, Y_LIST_MENU_HLPTXT_ITEM,
345                                                            (itemWidth - X_LIST_MENU_HLPTXT_ITEM), (H_LIST_MENU_SINGLELINE_HLPTXT_ITEM - Y_LIST_MENU_HLPTXT_ITEM));
346                 Label* pItemLbl = new (std::nothrow) Label();
347                 pItemLbl->Construct(helpItemRect, helpText);
348                 pItemLbl->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
349                 pItemLbl->SetTextVerticalAlignment(ALIGNMENT_MIDDLE);
350                 pItemLbl->SetTextConfig(FONT_SIZE_HELP_TXT, LABEL_TEXT_STYLE_NORMAL);
351                 pItemLbl->SetTextColor(COLOR_HELP_TXT);
352                 pItem->AddControl(*pItemLbl);
353                 pItem->SetEnabled(false);
354                 pItem->SetBackgroundColor(COLOR_HELP_ITEM_BG, TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL);
355                 pItem->SetBackgroundColor(COLOR_HELP_ITEM_BG, TABLE_VIEW_ITEM_DRAWING_STATUS_PRESSED);
356         }
357
358         return pItem;
359 }
360
361 bool
362 SettingsMoreOptionsForm::DeleteGroupItem(int groupIndex, TableViewGroupItem* pItem)
363 {
364         delete pItem;
365         pItem = null;
366         return true;
367 }
368
369 void
370 SettingsMoreOptionsForm::UpdateGroupItem(int groupIndex, TableViewGroupItem* pItem)
371 {
372         return;
373 }
374
375 TableViewItem*
376 SettingsMoreOptionsForm::CreateItem(int groupIndex, int itemIndex, int itemWidth)
377 {
378         TableViewItem* pItem = null;
379
380         switch (groupIndex)
381         {
382         case GROUP_CALLERID:
383         case GROUP_CALL_ALERT:
384         {
385                 pItem = CreateExpandableItem(groupIndex, itemIndex, itemWidth);
386         }
387         break;
388
389         case GROUP_CALLERID_OPTIONS:
390         {
391                 pItem = CreateCallerIdOptionsItem(itemIndex, itemWidth);
392         }
393         break;
394
395         case GROUP_CALL_ALERT_OPTIONS:
396         {
397                 pItem = CreateCallerAlertOptionsItem(itemIndex, itemWidth);
398
399         }
400         break;
401
402         case GROUP_CALL_SETTINGS:
403         case GROUP_CALL_REMINDER:
404         case GROUP_AREACODE:
405         {
406                 pItem = CreateSettingMenuItem(groupIndex, itemIndex, itemWidth);
407         }
408         break;
409
410         default:
411                 break;
412         }
413         return pItem;
414 }
415
416 bool
417 SettingsMoreOptionsForm::DeleteItem(int groupIndex, int itemIndex, TableViewItem* pItem)
418 {
419         delete pItem;
420         pItem = null;
421         return true;
422 }
423
424 void
425 SettingsMoreOptionsForm::UpdateItem(int groupIndex, int itemIndex, TableViewItem* pItem)
426 {
427         if(groupIndex == GROUP_CALLERID || groupIndex == GROUP_CALL_ALERT)
428         {
429                 String subText(L"");
430                 bool isExpanded = false;
431                 switch (groupIndex)
432                 {
433                 case GROUP_CALLERID:
434                 {
435                         subText.Append(FetchSubTextForSelectedCallerId());
436                         isExpanded = __isCallerIdExpanded;
437                 }
438                 break;
439
440                 case GROUP_CALL_ALERT:
441                 {
442                         subText.Append(FetchSubTextForSelectedCallerAlert());
443                         isExpanded = __isCallAlertExpanded;
444                 }
445                 break;
446                 }
447                 //sub text item
448                 Label* pSubTxtLbl = static_cast<Label*>(pItem->GetControl(IDC_SELECTEDOPTION_SUBTEXT_LABEL, true));
449                 pSubTxtLbl->SetText(subText);
450                 pSubTxtLbl->Invalidate(true);
451                 //set Drop-down icon to item
452                 SetExpandIconToItem(pItem, isExpanded);
453                 pItem->Invalidate(true);
454         }
455         else if(groupIndex == GROUP_AREACODE)
456         {
457                 if(__autoAreaCode.IsEmpty() == true)
458                 {
459                         __autoAreaCode.Append(AppUtility::GetResourceString(IDS_NOT_ASSIGNED_STR));
460                 }
461                 //sub text item
462                 Label* pSubTxtLbl = static_cast<Label*>(pItem->GetControl(IDC_SELECTEDOPTION_SUBTEXT_LABEL, true));
463                 pSubTxtLbl->SetText(__autoAreaCode);
464                 pSubTxtLbl->Invalidate(true);
465                 pItem->Invalidate(true);
466         }
467 }
468
469 int
470 SettingsMoreOptionsForm::GetDefaultGroupItemHeight(void)
471 {
472         return H_LIST_HIDDENGROUP_ITEM;
473 }
474
475 int
476 SettingsMoreOptionsForm::GetDefaultItemHeight(void)
477 {
478         return H_LIST_NORMAL_MENU_ITEM;
479 }
480
481 TableViewItem*
482 SettingsMoreOptionsForm::CreateExpandableItem(int groupIndex, int itemIndex, int itemWidth)
483 {
484         String mainText(L"");
485         String subText(L"");
486
487         switch (groupIndex)
488         {
489         case GROUP_CALLERID:
490         {
491                 mainText.Append(AppUtility::GetResourceString(IDS_SETTING_CALLERID_MAIN_STR));
492                 subText.Append(FetchSubTextForSelectedCallerId());
493         }
494         break;
495
496         case GROUP_CALL_ALERT:
497         {
498                 mainText.Append(AppUtility::GetResourceString(IDS_SETTING_CALL_ALERT_MAIN_STR));
499                 subText.Append(FetchSubTextForSelectedCallerAlert());
500         }
501         break;
502         }
503
504         TableViewItem* pItem = new (std::nothrow) TableViewItem();
505         pItem->Construct(Dimension(itemWidth, H_LIST_DROPDOWN_MENU_ITEM), TABLE_VIEW_ANNEX_STYLE_NORMAL);
506
507         //main text item
508         Rectangle mainItemRect(X_LIST_MENU_TEXT_ITEM, Y_LIST_MENU_TEXT_ITEM, (itemWidth - (2 * X_LIST_MENU_TEXT_ITEM) - W_EXPAND_ICON),
509                                                            H_LIST_DROPDOWN_TXT_ITEM);
510         Label* pMainTxtLbl = new (std::nothrow) Label();
511         pMainTxtLbl->Construct(mainItemRect, mainText);
512         pMainTxtLbl->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
513         pMainTxtLbl->SetTextVerticalAlignment(ALIGNMENT_MIDDLE);
514         pMainTxtLbl->SetTextConfig(FONT_SIZE_MAIN_TXT, LABEL_TEXT_STYLE_NORMAL);
515         pMainTxtLbl->SetTextColor(COLOR_NORMAL_MAIN_TXT);
516         pItem->AddControl(*pMainTxtLbl);
517
518         //sub text item
519         Rectangle subItemRect(X_LIST_MENU_TEXT_ITEM, (Y_LIST_MENU_TEXT_ITEM + H_LIST_DROPDOWN_TXT_ITEM),
520                                                   (itemWidth - (2 * X_LIST_MENU_TEXT_ITEM) - W_EXPAND_ICON), H_LIST_DROPDOWN_TXT_ITEM);
521         Label* pSubTxtLbl = new (std::nothrow) Label();
522         pSubTxtLbl->Construct(subItemRect, subText);
523         pSubTxtLbl->SetName(IDC_SELECTEDOPTION_SUBTEXT_LABEL);
524         pSubTxtLbl->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
525         pSubTxtLbl->SetTextVerticalAlignment(ALIGNMENT_MIDDLE);
526         pSubTxtLbl->SetTextConfig(FONT_SIZE_SUB_TXT, LABEL_TEXT_STYLE_NORMAL);
527         pSubTxtLbl->SetTextColor(COLOR_NORMAL_SUB_TXT);
528         pItem->AddControl(*pSubTxtLbl);
529
530         pItem->SetBackgroundColor(COLOR_LIST_MENU_ITEM, TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL);
531         //set Drop-down icon to item
532         SetExpandIconToItem(pItem, true);
533         return pItem;
534 }
535
536 String
537 SettingsMoreOptionsForm::FetchSubTextForSelectedCallerId()
538 {
539         //default text
540         String subText(L"");
541         CallLineIdentity lineIdentity;
542         __pSettingsPresentor->GetCallLineIdentity(lineIdentity);
543         //Fetch text for selected item
544         GroupCallerIdOptionsItems selectedIndex = (GroupCallerIdOptionsItems)lineIdentity;
545         switch(selectedIndex)
546         {
547         case CALLEROPTIONS_BY_NETWORK:
548                 subText.Append(AppUtility::GetResourceString(IDS_CALLERID_BYNETWORK_STRING));
549                 break;
550
551         case CALLEROPTIONS_SHOW:
552                 subText.Append(AppUtility::GetResourceString(IDS_CALLERID_SHOW_STRING));
553                 break;
554
555         case CALLEROPTIONS_HIDE:
556                 subText.Append(AppUtility::GetResourceString(IDS_CALLERID_HIDE_STRING));
557                 break;
558
559         default:
560                 break;
561         }
562         return subText;
563 }
564
565 String
566 SettingsMoreOptionsForm::FetchSubTextForSelectedCallerAlert()
567 {
568         //default text
569         String subText(L"");
570         CallAlertStatus alertStatus;
571         __pSettingsPresentor->GetCallAlertStatus(alertStatus);
572         //Fetch text for selected item
573         GroupCallAlertOptionsItems selectedIndex = (GroupCallAlertOptionsItems) alertStatus;
574         switch(selectedIndex)
575         {
576         case CALLALERT_OPTIONS_OFF:
577                 subText.Append(AppUtility::GetResourceString(IDS_SETTING_CALLALERT_OFF_STRING));
578                 break;
579
580         case CALLALERT_OPTIONS_SOUND:
581                 subText.Append(AppUtility::GetResourceString(IDS_SETTING_CALLALERT_SOUND_STRING));
582                 break;
583
584         case CALLALERT_OPTIONS_VIBRATION:
585                 subText.Append(AppUtility::GetResourceString(IDS_SETTING_CALLALERT_VIBRATE_STRING));
586                 break;
587
588         default:
589                 break;
590         }
591         return subText;
592 }
593
594
595
596 void
597 SettingsMoreOptionsForm::SetExpandIconToItem(TableViewItem* pItem, bool isExpanded)
598 {
599         Bitmap* pNormalIcon = null;
600         Bitmap* pPressIcon = null;
601
602         if (!isExpanded)
603         {
604                 pNormalIcon = AppUtility::GetBitmapFromResourcesN(IDB_LIST_EXPAND, W_EXPAND_ICON, H_EXPAND_ICON);
605                 pPressIcon = AppUtility::GetBitmapFromResourcesN(IDB_LIST_EXPAND_PRESSED, W_EXPAND_ICON, H_EXPAND_ICON);
606         }
607         else
608         {
609                 pNormalIcon = AppUtility::GetBitmapFromResourcesN(IDB_LIST_OPENED, W_EXPAND_ICON, H_EXPAND_ICON);
610                 pPressIcon = AppUtility::GetBitmapFromResourcesN(IDB_LIST_OPENED_PRESSED, W_EXPAND_ICON, H_EXPAND_ICON);
611         }
612
613         int itemWidth = pItem->GetWidth();
614         Rectangle iconRect((itemWidth - W_EXPAND_ICON - X_LIST_MENU_TEXT_ITEM),
615                                            ((H_LIST_DROPDOWN_MENU_ITEM - H_EXPAND_ICON) / 2), W_EXPAND_ICON, H_EXPAND_ICON);
616         //for drawing blue bg header rectangle on left side.
617         Rectangle blueHeaderRect(0,0,W_LEFT_HEADER_EXPAND_ITEMS,pItem->GetHeight());
618         //normal canvas
619         Canvas* pBgCanvas = new (std::nothrow) Canvas();
620         pBgCanvas->Construct(Rectangle(0,0, pItem->GetBounds().width, pItem->GetBounds().height));
621         pBgCanvas->DrawBitmap(iconRect, *pNormalIcon);
622         pBgCanvas->FillRectangle(COLOR_LEFT_HEADER_EXPAND_ITEMS, blueHeaderRect);
623         Bitmap* pActualBgBmp = new (std::nothrow) Bitmap();
624         pActualBgBmp->Construct(*pBgCanvas,pBgCanvas->GetBounds());
625         pItem->SetBackgroundBitmap(pActualBgBmp, TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL);
626         delete pBgCanvas;
627         delete pActualBgBmp;
628
629         //pressed canvas
630         pBgCanvas = new (std::nothrow) Canvas();
631         pBgCanvas->Construct(Rectangle(0,0, pItem->GetBounds().width, pItem->GetBounds().height));
632         pBgCanvas->DrawBitmap(iconRect, *pPressIcon);
633         pBgCanvas->FillRectangle(COLOR_LEFT_HEADER_EXPAND_ITEMS, blueHeaderRect);
634         pActualBgBmp = new (std::nothrow) Bitmap();
635         pActualBgBmp->Construct(*pBgCanvas,pBgCanvas->GetBounds());
636         pItem->SetBackgroundBitmap(pActualBgBmp, TABLE_VIEW_ITEM_DRAWING_STATUS_PRESSED);
637         delete pBgCanvas;
638         delete pActualBgBmp;
639
640         delete pNormalIcon;
641         pNormalIcon = null;
642         delete pPressIcon;
643         pPressIcon = null;
644 }
645
646 TableViewItem*
647 SettingsMoreOptionsForm::CreateCallerIdOptionsItem(int itemIndex, int itemWidth)
648 {
649         //create a new item
650         TableViewItem* pItem = new (std::nothrow) TableViewItem();
651         pItem->Construct(Dimension(itemWidth, H_LIST_NORMAL_MENU_ITEM), TABLE_VIEW_ANNEX_STYLE_RADIO);
652         pItem->SetBackgroundColor(COLOR_SECONDDEPTH_ITEM_BG, TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL);
653
654         //text item rectangle
655         Rectangle itemRect(X_LIST_MENU_TEXT_ITEM, 0, (itemWidth - X_LIST_MENU_TEXT_ITEM), H_LIST_NORMAL_MENU_ITEM);
656         //Option item name
657         String itemName(L"");
658         switch (itemIndex)
659         {
660         case CALLEROPTIONS_BY_NETWORK:
661                 itemName.Append(AppUtility::GetResourceString(IDS_CALLERID_BYNETWORK_STRING));
662                 break;
663
664         case CALLEROPTIONS_SHOW:
665                 itemName.Append(AppUtility::GetResourceString(IDS_CALLERID_SHOW_STRING));
666                 break;
667
668         case CALLEROPTIONS_HIDE:
669                 itemName.Append(AppUtility::GetResourceString(IDS_CALLERID_HIDE_STRING));
670                 break;
671         }
672
673         Label* pItemLbl = new (std::nothrow) Label();
674         pItemLbl->Construct(itemRect, itemName);
675         pItemLbl->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
676         pItemLbl->SetTextVerticalAlignment(ALIGNMENT_MIDDLE);
677         pItemLbl->SetTextConfig(FONT_SIZE_MAIN_TXT, LABEL_TEXT_STYLE_NORMAL);
678         pItemLbl->SetTextColor(COLOR_NORMAL_MAIN_TXT);//COLOR_PRESS_MAIN_TXT
679         pItem->AddControl(*pItemLbl);
680
681         return pItem;
682 }
683
684 TableViewItem*
685 SettingsMoreOptionsForm::CreateCallerAlertOptionsItem(int itemIndex, int itemWidth)
686 {
687         //create a new item
688         TableViewItem* pItem = new (std::nothrow) TableViewItem();
689         pItem->Construct(Dimension(itemWidth, H_LIST_NORMAL_MENU_ITEM), TABLE_VIEW_ANNEX_STYLE_RADIO);
690         pItem->SetBackgroundColor(COLOR_SECONDDEPTH_ITEM_BG, TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL);
691
692         //text item rectangle
693         Rectangle itemRect(X_LIST_MENU_TEXT_ITEM, 0, (itemWidth - X_LIST_MENU_TEXT_ITEM), H_LIST_NORMAL_MENU_ITEM);
694         //Option item name
695         String itemName(L"");
696         switch (itemIndex)
697         {
698         case CALLALERT_OPTIONS_OFF:
699                 itemName.Append(AppUtility::GetResourceString(IDS_SETTING_CALLALERT_OFF_STRING));
700                 break;
701
702         case CALLALERT_OPTIONS_SOUND:
703                 itemName.Append(AppUtility::GetResourceString(IDS_SETTING_CALLALERT_SOUND_STRING));
704                 break;
705
706         case CALLALERT_OPTIONS_VIBRATION:
707                 itemName.Append(AppUtility::GetResourceString(IDS_SETTING_CALLALERT_VIBRATE_STRING));
708                 break;
709         }
710
711         Label* pItemLbl = new (std::nothrow) Label();
712         pItemLbl->Construct(itemRect, itemName);
713         pItemLbl->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
714         pItemLbl->SetTextVerticalAlignment(ALIGNMENT_MIDDLE);
715         pItemLbl->SetTextConfig(FONT_SIZE_MAIN_TXT, LABEL_TEXT_STYLE_NORMAL);
716         pItemLbl->SetTextColor(COLOR_NORMAL_MAIN_TXT);//COLOR_PRESS_MAIN_TXT
717         pItem->AddControl(*pItemLbl);
718         return pItem;
719 }
720
721 TableViewItem*
722 SettingsMoreOptionsForm::CreateSettingMenuItem(int groupIndex, int itemIndex, int itemWidth)
723 {
724         //text item rectangle
725         Rectangle itemNameRect(X_LIST_MENU_TEXT_ITEM, 0, (itemWidth - X_LIST_MENU_TEXT_ITEM), H_LIST_NORMAL_MENU_ITEM);
726
727         TableViewItem* pItem = new (std::nothrow) TableViewItem();
728         TableViewAnnexStyle style = TABLE_VIEW_ANNEX_STYLE_NORMAL;
729
730         String itemName(L"");
731         String subText(L"");
732         if(groupIndex == GROUP_CALL_SETTINGS)
733         {
734                 switch (itemIndex)
735                 {
736                 case CALLSETTINGS_CALL_BARRING:
737                 {
738                         itemName.Append(AppUtility::GetResourceString(IDS_SETTING_BARRING_STRING));
739                 }
740                 break;
741
742                 case CALLSETTINGS_CALL_WAITING:
743                 {
744                         itemName.Append(AppUtility::GetResourceString(IDS_SETTING_WAITING_STRING));
745                 }
746                 break;
747
748                 default:
749                 break;
750                 }
751         }
752         else if(groupIndex == GROUP_CALL_REMINDER)
753         {
754                 itemName.Append(AppUtility::GetResourceString(IDS_SETTING_STATUS_TONES_STRING));
755         }
756         else if(groupIndex == GROUP_AREACODE)
757         {
758                 style = TABLE_VIEW_ANNEX_STYLE_ONOFF_SLIDING;
759                 itemName.Append(AppUtility::GetResourceString(IDS_SETTING_AUTO_AREACODE_STRING));
760                 if(__autoAreaCode.IsEmpty() == true)
761                 {
762                         subText.Append(AppUtility::GetResourceString(IDS_NOT_ASSIGNED_STR));
763                 }
764                 else
765                 {
766                         subText.Append(__autoAreaCode);
767                 }
768                 //update itemName rectangle
769                 itemNameRect.y = Y_LIST_MENU_TEXT_ITEM;
770                 itemNameRect.height = H_LIST_NORMAL_TXT_ITEM;
771                 itemNameRect.width = (itemWidth - X_LIST_MENU_TEXT_ITEM - W_SLIDER_ICON);
772         }
773
774         pItem->Construct(Dimension(itemWidth, H_LIST_NORMAL_MENU_ITEM), style);
775
776         Label* pItemLbl = new (std::nothrow) Label();
777         pItemLbl->Construct(itemNameRect, itemName);
778         pItemLbl->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
779         pItemLbl->SetTextVerticalAlignment(ALIGNMENT_MIDDLE);
780         pItemLbl->SetTextConfig(FONT_SIZE_MAIN_TXT, LABEL_TEXT_STYLE_NORMAL);
781         pItemLbl->SetTextColor(COLOR_NORMAL_MAIN_TXT);//COLOR_PRESS_MAIN_TXT
782         pItem->AddControl(*pItemLbl);
783         pItem->SetBackgroundColor(COLOR_LIST_MENU_ITEM, TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL);
784
785         if(subText.IsEmpty() == false)
786         {
787                 //sub text item
788                 Rectangle subItemRect(X_LIST_MENU_TEXT_ITEM, (Y_LIST_MENU_TEXT_ITEM + H_LIST_NORMAL_TXT_ITEM),
789                                                           (itemWidth - X_LIST_MENU_TEXT_ITEM - W_SLIDER_ICON), H_LIST_SUB_TXT_ITEM);
790                 Label* pSubTxtLbl = new (std::nothrow) Label();
791                 pSubTxtLbl->Construct(subItemRect, subText);
792                 pSubTxtLbl->SetName(IDC_SELECTEDOPTION_SUBTEXT_LABEL);
793                 pSubTxtLbl->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
794                 pSubTxtLbl->SetTextVerticalAlignment(ALIGNMENT_MIDDLE);
795                 pSubTxtLbl->SetTextConfig(FONT_SIZE_SUB_TXT, LABEL_TEXT_STYLE_NORMAL);
796                 pSubTxtLbl->SetTextColor(COLOR_NORMAL_SUB_TXT);
797                 pItem->AddControl(*pSubTxtLbl);
798         }
799
800         return pItem;
801 }
802
803 void
804 SettingsMoreOptionsForm::HandleSelectedCallerIdOptions(GroupedTableView& tableView, int itemIndex, TableViewItemStatus state)
805 {
806         //check if already checked item is selected
807         if(state == TABLE_VIEW_ITEM_STATUS_UNCHECKED)
808         {
809                 tableView.SetItemChecked(GROUP_CALLERID_OPTIONS, itemIndex, true);
810                 return;
811         }
812         //uncheck previous selection
813         CallLineIdentity oldLineIdentity;
814         __pSettingsPresentor->GetCallLineIdentity(oldLineIdentity);
815         tableView.SetItemChecked(GROUP_CALLERID_OPTIONS, oldLineIdentity, false);
816         tableView.RefreshItem(GROUP_CALLERID_OPTIONS, oldLineIdentity, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
817
818         //send information to network / save data for checked item index.
819         CallLineIdentity updateLineIndentity = (CallLineIdentity)itemIndex;
820         __pSettingsPresentor->SetCallLineIdentity(updateLineIndentity);
821         //update status for group
822         tableView.RefreshItem(GROUP_CALLERID, CALLERID_CALLER_SETTING, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
823 }
824
825 void
826 SettingsMoreOptionsForm::HandleSelectedCallAlertOptions(GroupedTableView& tableView, int itemIndex, TableViewItemStatus state)
827 {
828         //check if already checked item is selected
829         if(state == TABLE_VIEW_ITEM_STATUS_UNCHECKED)
830         {
831                 tableView.SetItemChecked(GROUP_CALL_ALERT_OPTIONS, itemIndex, true);
832                 return;
833         }
834         //uncheck previous selection
835         CallAlertStatus oldAlertStatus;
836         __pSettingsPresentor->GetCallAlertStatus(oldAlertStatus);
837         tableView.SetItemChecked(GROUP_CALL_ALERT_OPTIONS, oldAlertStatus, false);
838         tableView.RefreshItem(GROUP_CALL_ALERT_OPTIONS, oldAlertStatus, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
839
840         //send information to network / save data  for checked item index.
841         CallAlertStatus updateAlertStatus = (CallAlertStatus)itemIndex;
842         __pSettingsPresentor->SetCallAlertStatus(updateAlertStatus);
843         //update status for group
844         tableView.RefreshItem(GROUP_CALL_ALERT, CALLALERT_SETTING, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
845 }
846
847 void
848 SettingsMoreOptionsForm::HandleSelectedSettings(int groupIndex, int itemIndex)
849 {
850         SceneManager* pSceneManager = SceneManager::GetInstance();
851         AppAssert(pSceneManager != null);
852
853         switch (groupIndex)
854         {
855         case GROUP_CALL_SETTINGS:
856         {
857                 if(itemIndex == CALLSETTINGS_CALL_BARRING)
858                 {
859                         //switch to form - CALLSETTINGS_CALL_BARRING
860                         pSceneManager->GoForward(ForwardSceneTransition(IDSCN_SCENE_CALLTYPE_BARRING), null);
861                 }
862                 else
863                 {
864                         //switch to form - CALLSETTINGS_CALL_WAITING
865                         pSceneManager->GoForward(ForwardSceneTransition(IDSCN_SCENE_CALL_WAITING_OPTIONS), null);
866                 }
867         }
868         break;
869
870         case GROUP_CALL_REMINDER:
871         {
872                 //switch to form - CALLREMINDER_STATUS_TONES
873                 pSceneManager->GoForward(ForwardSceneTransition(IDSCN_SCENE_CALL_STATUSTONES), null);
874         }
875         break;
876
877         case GROUP_AREACODE:
878         {
879                 //switch to form - AREACODE_AUTO_AREA_CODE
880                 pSceneManager->GoForward(ForwardSceneTransition(IDSCN_SCENE_AUTO_AREA_CODE), null);
881         }
882         break;
883
884         default:
885                 break;
886         }
887 }