2 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
4 // Licensed under the Flora License, Version 1.1 (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
8 // http://floralicense.org/license/
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.
18 * @file StDateTimeForm.cpp
19 * @brief This is the implementation file for DateTimeForm class.
22 #include "StDateTimeForm.h"
23 #include "StResourceManager.h"
24 #include "StSettingScenesList.h"
27 using namespace Tizen::Base;
28 using namespace Tizen::Base::Runtime;
29 using namespace Tizen::Graphics;
30 using namespace Tizen::Locales;
31 using namespace Tizen::System;
32 using namespace Tizen::Ui;
33 using namespace Tizen::Ui::Controls;
34 using namespace Tizen::Ui::Scenes;
36 static const int ID_GROUP_DATE_AND_TIME_MAIN = 0;
37 static const int ID_GROUP_DATE_AND_TIME_MAIN_ITEM_COUNT = 1;
38 static const int ID_ITEM_DATE_AND_TIME_MAIN_AUTOMATIC_UPDATE = 0;
40 static const int ID_GROUP_DATE_AND_TIME_LOCAL_TIME = 1;
41 static const int ID_GROUP_DATE_AND_TIME_LOCAL_TIME_ITEM_COUNT = 2;
42 static const int ID_ITEM_DATE_AND_TIME_TIME_ZONE = 0;
43 static const int ID_ITEM_DATE_AND_TIME_DATE_AND_TIME = 1;
45 static const int ID_GROUP_DATE_AND_TIME_FORMAT = 2;
46 static const int ID_GROUP_DATE_AND_TIME_FORMAT_ITEM_COUNT = 1;
48 static const int ID_GROUP_DATE_AND_TIME_FORMAT_LIST = 3;
49 static const int ID_GROUP_DATE_AND_TIME_FORMAT_LIST_ITEM_COUNT = 2;
50 static const int ID_ITEM_DATE_AND_TIME_FORMAT_12_HOURS = 0;
51 static const int ID_ITEM_DATE_AND_TIME_FORMAT_24_HOURS = 1;
53 static const int ID_GROUP_DATE_AND_TIME_FIRST_DAY = 4;
54 static const int ID_GROUP_DATE_AND_TIME_FIRST_DAY_ITEM_COUNT = 1;
56 static const int ID_GROUP_DATE_AND_TIME_FIRST_DAY_LIST = 5;
57 static const int ID_GROUP_DATE_AND_TIME_FIRST_DAY_LIST_ITEM_COUNT = 2;
58 static const int ID_ITEM_DATE_AND_TIME_FORMAT_FIRST_DAY_MONDAY = 0;
59 static const int ID_ITEM_DATE_AND_TIME_FORMAT_FIRST_DAY_SUNDAY = 1;
61 static const int ID_GROUP_COUNT = 4;
63 static const int SIXTY_MINUTES_TO_HOUR = 60;
64 static const int H_GROUP_ITEM_EDITFIELD_DEFAULT = 120;
66 static const int NEXT_INDEX = 1;
67 static const int W_RESIZE_LABEL_GAP = 170;
68 static const int H_TIME_FIELD = 150;
70 static const int SECOND_CONTROL_ITEM = 1;
71 static const int SECOND_TEXT_ITEM = 2;
72 static const int MIN_YEAR = 1980;
73 static const int MAX_YEAR = 2035;
74 static const float RESIZE_RATE = 5.5;
75 static const int DIVIDE_BY_TEN = 10;
76 static const int NO_OF_SECONDS = 60;
77 static const int ONE_SECOND_TIME_INTERVAL = 1000;
79 static const wchar_t* EDIT_TIME_CONTROL = L"EditTime";
80 static const wchar_t* EDIT_DATE_CONTROL = L"EditDate";
81 static const wchar_t* SUB_TEXT_CONTROL = L"SubText";
83 DateTimeForm::DateTimeForm(void)
88 DateTimeForm::~DateTimeForm(void)
93 DateTimeForm::CreateFooter(void)
95 Footer* pFooter = GetFooter();
98 pFooter->SetStyle(FOOTER_STYLE_BUTTON_TEXT);
99 pFooter->AddActionEventListener(*this);
101 SetFormBackEventListener(this);
105 DateTimeForm::OnInitializing(void)
107 AppLogDebug("ENTER");
108 CreateHeader(ResourceManager::GetString(L"IDS_ST_BODY_DATE_AND_TIME"));
115 DateTimeForm::OnTerminating(void)
119 SetFormBackEventListener(null);
124 DateTimeForm::OnSceneActivatedN(const Tizen::Ui::Scenes::SceneId& previousSceneId, const Tizen::Ui::Scenes::SceneId& currentSceneId, Tizen::Base::Collection::IList* pArgs)
127 bool automaticUpdate = false;
128 bool hourFormat = false;
129 __pTableView->UpdateTableView();
130 __pTableView->CollapseGroup(ID_GROUP_DATE_AND_TIME_FORMAT_LIST);
131 __pTableView->RefreshItem(ID_GROUP_DATE_AND_TIME_FORMAT, 0, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
132 __pTableView->RefreshItem(ID_GROUP_DATE_AND_TIME_LOCAL_TIME, ID_ITEM_DATE_AND_TIME_DATE_AND_TIME, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
134 r = SettingInfo::GetValue(SETTING_INFO_KEY_LOCALE_UPDATE_AUTO, automaticUpdate);
137 AppLogException("GetValue(locale.update.auto) failed(%s)", GetErrorMessage(r));
141 __pTableView->SetItemChecked(ID_GROUP_DATE_AND_TIME_MAIN, ID_ITEM_DATE_AND_TIME_MAIN_AUTOMATIC_UPDATE, automaticUpdate);
142 __pTableView->SetItemEnabled(ID_GROUP_DATE_AND_TIME_LOCAL_TIME, ID_ITEM_DATE_AND_TIME_TIME_ZONE, !automaticUpdate);
143 __pTableView->SetItemEnabled(ID_GROUP_DATE_AND_TIME_LOCAL_TIME, ID_ITEM_DATE_AND_TIME_DATE_AND_TIME, !automaticUpdate);
146 r = SettingInfo::GetValue(SETTING_INFO_KEY_LOCALE_TIME_FORMAT_24HOUR, hourFormat);
149 AppLogException("GetValue(locale.time.format.24hour) failed(%s)", GetErrorMessage(r));
153 if (hourFormat == false)
155 __pTableView->SetItemChecked(ID_GROUP_DATE_AND_TIME_FORMAT_LIST, ID_ITEM_DATE_AND_TIME_FORMAT_12_HOURS, true);
156 __pTableView->SetItemChecked(ID_GROUP_DATE_AND_TIME_FORMAT_LIST, ID_ITEM_DATE_AND_TIME_FORMAT_24_HOURS, false);
160 __pTableView->SetItemChecked(ID_GROUP_DATE_AND_TIME_FORMAT_LIST, ID_ITEM_DATE_AND_TIME_FORMAT_24_HOURS, true);
161 __pTableView->SetItemChecked(ID_GROUP_DATE_AND_TIME_FORMAT_LIST, ID_ITEM_DATE_AND_TIME_FORMAT_12_HOURS, false);
165 DateTime currentDateTime;
166 SystemTime::GetCurrentTime(currentDateTime);
167 int interval = ONE_SECOND_TIME_INTERVAL;
168 interval *= (NO_OF_SECONDS - currentDateTime.GetSecond());
169 __pTimer = new (std::nothrow) Timer();
170 __pTimer->Construct(*this);
171 __pTimer->Start(interval);
175 DateTimeForm::OnSceneDeactivated(const Tizen::Ui::Scenes::SceneId& currentSceneId, const Tizen::Ui::Scenes::SceneId& nextSceneId)
177 if (__pTimer != null)
185 DateTimeForm::OnFormBackRequested(Tizen::Ui::Controls::Form& source)
187 SceneManager* pSceneManager = SceneManager::GetInstance();
188 AppAssert(pSceneManager);
190 __pTableView->CollapseGroup(ID_GROUP_DATE_AND_TIME_FORMAT_LIST);
191 pSceneManager->GoBackward(BackwardSceneTransition(SCENE_TRANSITION_ANIMATION_TYPE_RIGHT), null);
195 DateTimeForm::GetGroupCount(void)
197 AppLogDebug("ENTER");
198 return ID_GROUP_COUNT;
202 DateTimeForm::GetItemCount(int groupIndex)
208 case ID_GROUP_DATE_AND_TIME_MAIN:
210 itemCount = ID_GROUP_DATE_AND_TIME_MAIN_ITEM_COUNT;
214 case ID_GROUP_DATE_AND_TIME_LOCAL_TIME:
216 itemCount = ID_GROUP_DATE_AND_TIME_LOCAL_TIME_ITEM_COUNT;
220 case ID_GROUP_DATE_AND_TIME_FORMAT:
222 itemCount = ID_GROUP_DATE_AND_TIME_FORMAT_ITEM_COUNT;
226 case ID_GROUP_DATE_AND_TIME_FORMAT_LIST:
228 itemCount = ID_GROUP_DATE_AND_TIME_FORMAT_LIST_ITEM_COUNT;
232 case ID_GROUP_DATE_AND_TIME_FIRST_DAY:
234 itemCount = ID_GROUP_DATE_AND_TIME_FIRST_DAY_ITEM_COUNT;
238 case ID_GROUP_DATE_AND_TIME_FIRST_DAY_LIST:
240 itemCount = ID_GROUP_DATE_AND_TIME_FIRST_DAY_LIST_ITEM_COUNT;
247 AppLogDebug("GetItemCount %d", itemCount);
253 DateTimeForm::CreateGroupItem(int groupIndex, int itemWidth)
255 AppLogDebug("ENTER");
257 int itemHeight = H_GROUP_INDEX_NO_TITLE_DEFAULT;
258 int yItemOffset = H_GROUP_INDEX_HELP_TEXT_TOP_GAP;
259 LabelTextStyle style = LABEL_TEXT_STYLE_BOLD;
260 Rectangle itemMainRectangle;
262 Label* pLabel = null;
264 TableViewGroupItem* pItem = new (std::nothrow) TableViewGroupItem();
268 case ID_GROUP_DATE_AND_TIME_MAIN:
270 case ID_GROUP_DATE_AND_TIME_FORMAT:
272 yItemOffset = Y_GROUP_INDEX_DEFAULT;
273 itemHeight = H_GROUP_INDEX_NO_TITLE_DEFAULT;
277 case ID_GROUP_DATE_AND_TIME_LOCAL_TIME:
279 style = LABEL_TEXT_STYLE_NORMAL;
280 yItemOffset = H_GROUP_INDEX_HELP_TEXT_TOP_GAP;
281 itemHeight = H_GROUP_INDEX_DEFAULT;
282 groupText = ResourceManager::GetString(L"IDS_ST_BODY_USE_TIME_PROVIDED_BY_NETWORK");
286 case ID_GROUP_DATE_AND_TIME_FIRST_DAY:
292 case ID_GROUP_DATE_AND_TIME_FORMAT_LIST:
294 case ID_GROUP_DATE_AND_TIME_FIRST_DAY_LIST:
302 yItemOffset = Y_GROUP_INDEX_DEFAULT;
303 itemHeight = H_GROUP_INDEX_NO_TITLE_DEFAULT;
308 itemMainRectangle.x = X_GROUP_INDEX_DEFAULT_LABEL;
309 itemMainRectangle.y = yItemOffset;
310 itemMainRectangle.width = itemWidth;
311 itemMainRectangle.height = itemHeight;
313 RelativeLayout relativeLayout;
314 relativeLayout.Construct();
316 pItem->Construct(relativeLayout, Dimension(itemWidth, itemHeight));
318 pLabel = new (std::nothrow) Label();
319 pLabel->Construct(itemMainRectangle, groupText);
320 pLabel->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
321 pLabel->SetTextVerticalAlignment(ALIGNMENT_TOP);
322 pLabel->SetTextConfig(FONT_SIZE_GROUP_TITLE_TEXT, style);
323 pLabel->SetTextColor(COLOR_GROUP_TITLE_TEXT);
325 pItem->AddControl(pLabel);
326 relativeLayout.SetMargin(*pLabel, itemMainRectangle.x, RELATIVE_LAYOUT_RIGHT_MARGIN, 0, 0);
327 relativeLayout.SetRelation(*pLabel, pItem, RECT_EDGE_RELATION_LEFT_TO_LEFT);
328 relativeLayout.SetRelation(*pLabel, pItem, RECT_EDGE_RELATION_RIGHT_TO_RIGHT);
329 pItem->SetBackgroundColor(COLOR_BG_GROUP_INDEX_DEFAULT);
330 pItem->SetEnabled(false);
336 DateTimeForm::CreateItem(int groupIndex, int itemIndex, int itemWidth)
338 AppLogDebug("group[%d] index[%d]", groupIndex, itemIndex);
341 bool isEnabled = true;
342 bool isSecondLine = false;
343 Rectangle itemMainRectangle;
344 Rectangle itemSubRectangle;
345 TableViewAnnexStyle style = TABLE_VIEW_ANNEX_STYLE_NORMAL;
350 Label* pLabel = null;
351 int itemHeight = H_GROUP_ITEM_DEFAULT;
352 int fontSize = GetFontSize();
354 ItemTypeOneLine(itemMainRectangle);
355 TableViewItem* pItem = new (std::nothrow) TableViewItem();
359 case ID_GROUP_DATE_AND_TIME_MAIN:
361 bool automaticUpdate = false;
362 style = TABLE_VIEW_ANNEX_STYLE_ONOFF_SLIDING;
363 itemMainText = ResourceManager::GetString(L"IDS_ST_BODY_AUTOMATIC_UPDATE");
364 itemMainRectangle.width -= W_RESIZE_LABEL_GAP;
366 r = SettingInfo::GetValue(SETTING_INFO_KEY_LOCALE_UPDATE_AUTO, automaticUpdate);
369 AppLogException("GetValue(locale.update.auto) failed(%s)", GetErrorMessage(r));
373 __pTableView->SetItemChecked(groupIndex, itemIndex, automaticUpdate);
378 case ID_GROUP_DATE_AND_TIME_LOCAL_TIME:
382 LocaleManager localeManager;
383 localeManager.Construct();
384 TimeZone timeZone = localeManager.GetSystemTimeZone();
385 int rawOffset = timeZone.GetRawOffset();
389 case ID_ITEM_DATE_AND_TIME_TIME_ZONE:
391 itemSubText = timeZone.GetId();
392 itemSubText.IndexOf(L"/", 0, slashIndex);
393 itemSubText.Remove(0, slashIndex + NEXT_INDEX);
394 itemSubText.Replace(L"_", L" ");
397 itemSubText.Insert(L", GMT +", itemSubText.GetLength());
401 itemSubText.Insert(L", GMT ", itemSubText.GetLength());
403 itemSubText.Insert((rawOffset / SIXTY_MINUTES_TO_HOUR), (itemSubText.GetLength()));
404 int minutes = rawOffset % SIXTY_MINUTES_TO_HOUR;
407 int minusMinutes = 0;
410 minusMinutes -= (minusMinutes + minutes);
411 itemSubText.Insert(L":", itemSubText.GetLength());
412 itemSubText.Insert((minusMinutes), (itemSubText.GetLength()));
416 itemSubText.Insert(L":", itemSubText.GetLength());
417 itemSubText.Insert((minutes), (itemSubText.GetLength()));
420 itemMainText = ResourceManager::GetString(L"IDS_ST_BODY_TIME_ZONE");
422 bool automaticUpdateStatus = false;
424 r = SettingInfo::GetValue(SETTING_INFO_KEY_LOCALE_UPDATE_AUTO, automaticUpdateStatus);
427 AppLogException("GetValue(locale.update.auto) failed(%s)", GetErrorMessage(r));
431 isEnabled = !automaticUpdateStatus;
436 case ID_ITEM_DATE_AND_TIME_DATE_AND_TIME:
438 ItemTypeOneLine(itemMainRectangle);
439 itemHeight = H_GROUP_ITEM_EDITFIELD_DEFAULT;
440 itemMainText = ResourceManager::GetString(L"IDS_ST_BODY_DATE_AND_TIME");
450 case ID_GROUP_DATE_AND_TIME_FORMAT:
452 bool hourFormat = false;
455 if (SettingInfo::GetValue(SETTING_INFO_KEY_LOCALE_TIME_FORMAT_24HOUR, hourFormat) != E_SUCCESS)
457 AppLogDebug("SettingInfo::GetValue() fail(%s)", GetErrorMessage(GetLastResult()));
462 itemSubText = ResourceManager::GetString(L"IDS_COM_BODY_12_HOURS");
466 itemSubText = ResourceManager::GetString(L"IDS_ST_BODY_24_HOURS");
469 itemMainText = ResourceManager::GetString(L"IDS_ST_BODY_TIME_FORMAT");
473 case ID_GROUP_DATE_AND_TIME_FORMAT_LIST:
475 bool hourFormat = false;
476 style = TABLE_VIEW_ANNEX_STYLE_RADIO;
477 isSecondLine = false;
479 if (SettingInfo::GetValue(SETTING_INFO_KEY_LOCALE_TIME_FORMAT_24HOUR, hourFormat) != E_SUCCESS)
481 AppLogDebug("SettingInfo::GetValue() fail(%s)", GetErrorMessage(GetLastResult()));
486 case ID_ITEM_DATE_AND_TIME_FORMAT_12_HOURS:
488 itemMainText = ResourceManager::GetString(L"IDS_COM_BODY_12_HOURS");
490 if (hourFormat == false)
492 __pTableView->SetItemChecked(groupIndex, itemIndex, true);
497 case ID_ITEM_DATE_AND_TIME_FORMAT_24_HOURS:
499 itemMainText = ResourceManager::GetString(L"IDS_ST_BODY_24_HOURS");
501 if (hourFormat == true)
503 __pTableView->SetItemChecked(groupIndex, itemIndex, true);
514 case ID_GROUP_DATE_AND_TIME_FIRST_DAY:
516 String firstDayOfWeek;
519 if (SettingInfo::GetValue(SETTING_INFO_KEY_LOCALE_TIME_FORMAT_FIRSTDAY, firstDayOfWeek) != E_SUCCESS)
521 AppLogDebug("SettingInfo::GetValue() fail(%s)", GetErrorMessage(GetLastResult()));
523 itemSubText = firstDayOfWeek;
527 case ID_GROUP_DATE_AND_TIME_FIRST_DAY_LIST:
529 String firstDayOfWeek;
530 style = TABLE_VIEW_ANNEX_STYLE_RADIO;
531 isSecondLine = false;
533 if (SettingInfo::GetValue(SETTING_INFO_KEY_LOCALE_TIME_FORMAT_FIRSTDAY, firstDayOfWeek) != E_SUCCESS)
535 AppLogDebug("SettingInfo::GetValue() fail(%s)", GetErrorMessage(GetLastResult()));
540 case ID_ITEM_DATE_AND_TIME_FORMAT_FIRST_DAY_MONDAY:
542 itemMainText = ResourceManager::GetString(L"IDS_ST_BODY_MONDAY");
544 if (firstDayOfWeek.Equals(L"Sunday", false) == false)
546 __pTableView->SetItemChecked(groupIndex, itemIndex, true);
551 case ID_ITEM_DATE_AND_TIME_FORMAT_FIRST_DAY_SUNDAY:
553 itemMainText = ResourceManager::GetString(L"IDS_ST_BODY_SUNDAY");
554 if (firstDayOfWeek.Equals(L"Sunday", false))
556 __pTableView->SetItemChecked(groupIndex, itemIndex, true);
571 if ((groupIndex == ID_GROUP_DATE_AND_TIME_LOCAL_TIME) && (itemIndex == ID_ITEM_DATE_AND_TIME_DATE_AND_TIME))
573 pItem->Construct(Dimension(itemWidth, H_TIME_FIELD), style);
574 pItem->SetBackgroundColor(COLOR_BG_GROUP_ITEM_DEFAULT);
576 bool hourFormat = false;
578 EditDate* pEditDate = new (std::nothrow) EditDate();
579 pEditDate->Construct(Point(0, 0), itemMainText);
580 pEditDate->SetCurrentDate();
582 int minYear = MIN_YEAR;
583 int maxYear = MAX_YEAR;
585 if (pEditDate->GetYear() < MIN_YEAR)
587 minYear = pEditDate->GetYear();
590 if (pEditDate->GetYear() > MAX_YEAR)
592 maxYear = pEditDate->GetYear();
595 pEditDate->SetYearRange(minYear, maxYear);
596 pEditDate->AddDateChangeEventListener(*this);
597 pEditDate->SetName(EDIT_DATE_CONTROL);
599 pItem->AddControl(pEditDate);
601 EditTime* pEditTime = new (std::nothrow) EditTime();
602 pEditTime->Construct(Point(pEditDate->GetWidth(), 0), L" ");
603 pEditTime->SetCurrentTime();
605 if (SettingInfo::GetValue(SETTING_INFO_KEY_LOCALE_TIME_FORMAT_24HOUR, hourFormat) == E_SUCCESS)
607 pEditTime->Set24HourNotationEnabled(hourFormat);
610 pEditTime->AddTimeChangeEventListener(*this);
611 pEditTime->SetName(EDIT_TIME_CONTROL);
613 pItem->AddControl(pEditTime);
614 pItem->SetIndividualSelectionEnabled(pEditDate, true);
615 pItem->SetIndividualSelectionEnabled(pEditTime, true);
617 else if (isSecondLine == true)
619 ItemTypeTwoLine(itemMainRectangle, itemSubRectangle, fontSize);
620 itemHeight = (itemMainRectangle.height + itemSubRectangle.height);
622 RelativeLayout relativeLayout;
623 relativeLayout.Construct();
625 pItem->Construct(relativeLayout, Dimension(itemWidth, itemHeight), style);
626 pItem->SetBackgroundColor(COLOR_BG_GROUP_ITEM_DEFAULT);
628 pLabel = new (std::nothrow) Label();
629 pLabel->Construct(itemMainRectangle, itemMainText);
630 pLabel->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
631 pLabel->SetTextConfig(fontSize, LABEL_TEXT_STYLE_NORMAL);
632 pLabel->SetTextColor(COLOR_MAIN_TEXT);
634 pItem->AddControl(pLabel);
635 if (groupIndex == ID_GROUP_DATE_AND_TIME_FORMAT)
637 relativeLayout.SetMargin(*pLabel, itemMainRectangle.x, RELATIVE_LAYOUT_RIGHT_MARGIN_DETAIL_BUTTON, 0, 0);
641 relativeLayout.SetMargin(*pLabel, itemMainRectangle.x, RELATIVE_LAYOUT_RIGHT_MARGIN, 0, 0);
643 relativeLayout.SetRelation(*pLabel, pItem, RECT_EDGE_RELATION_LEFT_TO_LEFT);
644 relativeLayout.SetRelation(*pLabel, pItem, RECT_EDGE_RELATION_RIGHT_TO_RIGHT);
646 if (groupIndex == ID_GROUP_DATE_AND_TIME_FORMAT)
648 Rectangle detailArrow;
649 Bitmap* pBitmap = null;
650 if (__pTableView->IsGroupExpanded(ID_GROUP_DATE_AND_TIME_FORMAT_LIST))
652 pBitmap = ResourceManager::GetBitmapN(IDB_DETAIL_BUTTON_EXPAND_OPENED);
656 pBitmap = ResourceManager::GetBitmapN(IDB_DETAIL_BUTTON_EXPAND_CLOSED);
659 detailArrow = itemMainRectangle;
660 detailArrow.y = itemMainRectangle.y + ((itemHeight - W_DETAIL_ARROW_BUTTON) / DIVIDE_BY_TWO);
661 detailArrow.height = W_DETAIL_ARROW_BUTTON;
662 detailArrow.width = W_DETAIL_ARROW_BUTTON;
664 pLabel = new (std::nothrow) Label();
665 pLabel->Construct(detailArrow, L"");
667 pLabel->SetBackgroundBitmap(*pBitmap);
669 pItem->AddControl(pLabel);
670 relativeLayout.SetMargin(*pLabel, itemMainRectangle.x, RELATIVE_LAYOUT_RIGHT_MARGIN_DETAIL_ARROW_BUTTON, 0, 0);
671 relativeLayout.SetRelation(*pLabel, pItem, RECT_EDGE_RELATION_RIGHT_TO_RIGHT);
674 pLabel = new (std::nothrow) Label();
675 pLabel->Construct(itemSubRectangle, itemSubText);
676 pLabel->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
677 pLabel->SetTextVerticalAlignment(ALIGNMENT_TOP);
678 pLabel->SetTextConfig(FONT_SIZE_SUB_TEXT, LABEL_TEXT_STYLE_NORMAL);
679 pLabel->SetName(SUB_TEXT_CONTROL);
682 pLabel->SetTextColor(COLOR_SUB_TEXT);
686 pLabel->SetTextColor(COLOR_SUB_DISABLED_TEXT);
689 pItem->AddControl(pLabel);
690 relativeLayout.SetMargin(*pLabel, itemSubRectangle.x, RELATIVE_LAYOUT_RIGHT_MARGIN, 0, 0);
691 relativeLayout.SetRelation(*pLabel, pItem, RECT_EDGE_RELATION_LEFT_TO_LEFT);
692 relativeLayout.SetRelation(*pLabel, pItem, RECT_EDGE_RELATION_RIGHT_TO_RIGHT);
696 RelativeLayout relativeLayout;
697 relativeLayout.Construct();
699 pItem->Construct(relativeLayout, Dimension(itemWidth, itemHeight), style);
700 pItem->SetBackgroundColor(COLOR_BG_GROUP_ITEM_DEFAULT);
702 pLabel = new (std::nothrow) Label();
703 pLabel->Construct(itemMainRectangle, itemMainText);
704 pLabel->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
705 pLabel->SetTextConfig(fontSize, LABEL_TEXT_STYLE_NORMAL);
706 pLabel->SetTextColor(COLOR_MAIN_TEXT);
708 pItem->AddControl(pLabel);
712 case TABLE_VIEW_ANNEX_STYLE_RADIO:
714 relativeLayout.SetMargin(*pLabel, RELATIVE_LAYOUT_LEFT_MARGIN, RELATIVE_LAYOUT_RIGHT_MARGIN, 0, 0);
718 case TABLE_VIEW_ANNEX_STYLE_ONOFF_SLIDING:
720 relativeLayout.SetMargin(*pLabel, itemMainRectangle.x, RELATIVE_LAYOUT_RIGHT_MARGIN_ONOFF_SLIDING, 0, 0);
726 relativeLayout.SetMargin(*pLabel, itemMainRectangle.x, RELATIVE_LAYOUT_RIGHT_MARGIN, 0, 0);
731 relativeLayout.SetRelation(*pLabel, pItem, RECT_EDGE_RELATION_LEFT_TO_LEFT);
732 relativeLayout.SetRelation(*pLabel, pItem, RECT_EDGE_RELATION_RIGHT_TO_RIGHT);
739 DateTimeForm::DeleteGroupItem(int groupIndex, TableViewGroupItem* pItem)
741 AppLogDebug("ENTER");
750 DateTimeForm::DeleteItem(int groupIndex, int itemIndex, TableViewItem* pItem)
752 AppLogDebug("ENTER");
761 DateTimeForm::OnGroupedTableViewItemStateChanged(Tizen::Ui::Controls::GroupedTableView& tableView, int groupIndex, int itemIndex, Tizen::Ui::Controls::TableViewItem* pItem, Tizen::Ui::Controls::TableViewItemStatus status)
763 SceneManager* pSceneManager = SceneManager::GetInstance();
764 AppAssert(pSceneManager);
766 AppLogDebug("group[%d] index[%d]", groupIndex, itemIndex);
772 case ID_GROUP_DATE_AND_TIME_MAIN:
774 bool automaticUpdateStatus = tableView.IsItemChecked(groupIndex, itemIndex);
776 if (status == TABLE_VIEW_ITEM_STATUS_SELECTED)
778 automaticUpdateStatus = (!(automaticUpdateStatus));
781 r = SettingInfo::SetValue(SETTING_INFO_KEY_LOCALE_UPDATE_AUTO, automaticUpdateStatus);
784 AppLogException("SetValue(locale.update.auto) failed(%s)", GetErrorMessage(r));
788 tableView.SetItemChecked(groupIndex, itemIndex, automaticUpdateStatus);
789 tableView.SetItemEnabled(ID_GROUP_DATE_AND_TIME_LOCAL_TIME, ID_ITEM_DATE_AND_TIME_TIME_ZONE, !automaticUpdateStatus);
790 tableView.SetItemEnabled(ID_GROUP_DATE_AND_TIME_LOCAL_TIME, ID_ITEM_DATE_AND_TIME_DATE_AND_TIME, !automaticUpdateStatus);
791 tableView.RefreshAllItems();
796 case ID_GROUP_DATE_AND_TIME_LOCAL_TIME:
798 if (itemIndex == ID_ITEM_DATE_AND_TIME_TIME_ZONE)
800 __pTableView->CollapseGroup(ID_GROUP_DATE_AND_TIME_FORMAT_LIST);
801 pSceneManager->GoForward(ForwardSceneTransition(IDSCN_TIME_ZONE, SCENE_TRANSITION_ANIMATION_TYPE_LEFT));
803 else if (itemIndex == ID_ITEM_DATE_AND_TIME_DATE_AND_TIME)
805 //TODO: make operation time and date
810 case ID_GROUP_DATE_AND_TIME_FORMAT:
812 AppLogDebug("ID_ITEM_DATE_AND_TIME_FORMAT_TIME_FORMAT Detail");
814 if (tableView.IsGroupExpanded(ID_GROUP_DATE_AND_TIME_FORMAT_LIST) == true)
816 tableView.CollapseGroup(ID_GROUP_DATE_AND_TIME_FORMAT_LIST);
820 tableView.ExpandGroup(ID_GROUP_DATE_AND_TIME_FORMAT_LIST);
822 tableView.RefreshItem(groupIndex, itemIndex, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
823 tableView.ScrollToItem(groupIndex, itemIndex);
827 case ID_GROUP_DATE_AND_TIME_FIRST_DAY:
829 if (tableView.IsGroupExpanded(ID_GROUP_DATE_AND_TIME_FIRST_DAY_LIST) == true)
831 tableView.CollapseGroup(ID_GROUP_DATE_AND_TIME_FIRST_DAY_LIST);
835 tableView.ExpandGroup(ID_GROUP_DATE_AND_TIME_FIRST_DAY_LIST);
840 case ID_GROUP_DATE_AND_TIME_FIRST_DAY_LIST:
844 if (itemIndex == ID_ITEM_DATE_AND_TIME_FORMAT_FIRST_DAY_MONDAY)
846 firstDay = L"Monday";
850 firstDay = L"Sunday";
853 if (SettingInfo::SetValue(SETTING_INFO_KEY_LOCALE_TIME_FORMAT_FIRSTDAY, firstDay) != E_SUCCESS)
855 AppLogDebug("SettingInfo::GetValue() fail(%s)", GetErrorMessage(GetLastResult()));
860 case ID_GROUP_DATE_AND_TIME_FORMAT_LIST:
862 bool timeFormat = false;
866 case ID_ITEM_DATE_AND_TIME_FORMAT_12_HOURS:
869 tableView.SetItemChecked(groupIndex, ID_ITEM_DATE_AND_TIME_FORMAT_12_HOURS, true);
870 tableView.SetItemChecked(groupIndex, ID_ITEM_DATE_AND_TIME_FORMAT_24_HOURS, false);
874 case ID_ITEM_DATE_AND_TIME_FORMAT_24_HOURS:
877 tableView.SetItemChecked(groupIndex, ID_ITEM_DATE_AND_TIME_FORMAT_12_HOURS, false);
878 tableView.SetItemChecked(groupIndex, ID_ITEM_DATE_AND_TIME_FORMAT_24_HOURS, true);
886 if (SettingInfo::SetValue(SETTING_INFO_KEY_LOCALE_TIME_FORMAT_24HOUR, timeFormat) != E_SUCCESS)
888 AppLogDebug("SettingInfo::GetValue() fail(%s)", GetErrorMessage(GetLastResult()));
891 tableView.RefreshAllItems();
901 DateTimeForm::OnDateChanged(const Tizen::Ui::Control& source, int year, int month, int day)
903 LocaleManager localeManager;
904 localeManager.Construct();
905 TimeZone timeZone = localeManager.GetSystemTimeZone();
909 SystemTime::GetCurrentTime(TIME_MODE_WALL, wallTime);
911 wallTime.SetValue(year, month, day, wallTime.GetHour(), wallTime.GetMinute(), wallTime.GetSecond());
912 utcTime = timeZone.WallTimeToUtcTime(wallTime);
914 SystemTime::SetCurrentTime(utcTime);
915 DateTime currentDateTime;
916 SystemTime::GetCurrentTime(currentDateTime);
917 int interval = ONE_SECOND_TIME_INTERVAL;
918 interval *= (NO_OF_SECONDS - currentDateTime.GetSecond());
920 __pTimer->Start(interval);
924 DateTimeForm::OnDateChangeCanceled(const Tizen::Ui::Control& source)
929 DateTimeForm::OnTimeChanged(const Control& source, int hour, int minute)
931 LocaleManager localeManager;
932 localeManager.Construct();
933 TimeZone timeZone = localeManager.GetSystemTimeZone();
937 SystemTime::GetCurrentTime(TIME_MODE_WALL, wallTime);
939 wallTime.SetValue(wallTime.GetYear(), wallTime.GetMonth(), wallTime.GetDay(), hour, minute, 0);
940 utcTime = timeZone.WallTimeToUtcTime(wallTime);
942 SystemTime::SetCurrentTime(utcTime);
944 __pTimer->Start(NO_OF_SECONDS * ONE_SECOND_TIME_INTERVAL);
948 DateTimeForm::OnTimeChangeCanceled(const Control& source)
953 DateTimeForm::GetDefaultGroupItemHeight(void)
955 return H_GROUP_INDEX_NO_TITLE_DEFAULT;
959 DateTimeForm::GetDefaultItemHeight(void)
961 return H_GROUP_ITEM_DEFAULT;
965 DateTimeForm::UpdateGroupItem(int groupIndex, Tizen::Ui::Controls::TableViewGroupItem* pItem)
970 DateTimeForm::UpdateItem(int groupIndex, int itemIndex, Tizen::Ui::Controls::TableViewItem* pItem)
972 if (groupIndex == ID_GROUP_DATE_AND_TIME_LOCAL_TIME)
974 if (itemIndex == ID_ITEM_DATE_AND_TIME_DATE_AND_TIME)
976 EditTime* pEditTime = static_cast<EditTime*>(pItem->GetControl(EDIT_TIME_CONTROL));
977 if (pEditTime == null)
979 AppLogDebug("pEditTime update Fail");
982 bool hourFormat = false;
983 if (SettingInfo::GetValue(SETTING_INFO_KEY_LOCALE_TIME_FORMAT_24HOUR, hourFormat) == E_SUCCESS)
985 pEditTime->Set24HourNotationEnabled(hourFormat);
988 Rectangle editTimeRectangle = pEditTime->GetBounds();
989 Rectangle itemRectangle = pItem->GetBounds();
990 int pos = ((itemRectangle.width * RESIZE_RATE) / DIVIDE_BY_TEN);
991 pEditTime->SetSize(pos, editTimeRectangle.height);
992 pEditTime->SetPosition(pos, 0);
993 pEditTime->SetCurrentTime();
995 EditDate* pEditDate = static_cast<EditDate*>(pItem->GetControl(EDIT_DATE_CONTROL));
996 if (pEditTime == null)
998 AppLogDebug("pEditDate update Fail");
1001 pEditDate->SetCurrentDate();
1003 else if (itemIndex == ID_ITEM_DATE_AND_TIME_TIME_ZONE)
1005 Label* pLabelSub = static_cast<Label*>(pItem->GetControl(SUB_TEXT_CONTROL));
1007 if (__pTableView->IsItemEnabled(ID_GROUP_DATE_AND_TIME_LOCAL_TIME, ID_ITEM_DATE_AND_TIME_TIME_ZONE))
1009 pLabelSub->SetTextColor(COLOR_SUB_TEXT);
1013 pLabelSub->SetTextColor(COLOR_SUB_DISABLED_TEXT);
1016 pItem->Invalidate(true);
1018 else if (groupIndex == ID_GROUP_DATE_AND_TIME_FORMAT)
1021 Label* pLabelSecondLine = static_cast<Label*>(pItem->GetControl(SECOND_TEXT_ITEM));
1022 Label* pLabelBitmap = static_cast<Label*>(pItem->GetControl(SECOND_CONTROL_ITEM));
1023 Bitmap* pBitmap = null;
1025 if (__pTableView->IsGroupExpanded(ID_GROUP_DATE_AND_TIME_FORMAT_LIST))
1027 pBitmap = ResourceManager::GetBitmapN(IDB_DETAIL_BUTTON_EXPAND_OPENED);
1031 pBitmap = ResourceManager::GetBitmapN(IDB_DETAIL_BUTTON_EXPAND_CLOSED);
1034 bool hourFormat = false;
1036 if (SettingInfo::GetValue(SETTING_INFO_KEY_LOCALE_TIME_FORMAT_24HOUR, hourFormat) != E_SUCCESS)
1038 AppLogDebug("SettingInfo::GetValue() fail(%s)", GetErrorMessage(GetLastResult()));
1041 if (hourFormat == 0)
1043 timeFormat = ResourceManager::GetString(L"IDS_COM_BODY_12_HOURS");
1047 timeFormat = ResourceManager::GetString(L"IDS_ST_BODY_24_HOURS");
1050 pLabelSecondLine->SetText(timeFormat);
1051 pLabelSecondLine->Invalidate(false);
1053 pLabelBitmap->SetBackgroundBitmap(*pBitmap);
1054 pLabelBitmap->Invalidate(false);
1057 pItem->Invalidate(false);
1061 DateTimeForm::OnGroupedTableViewContextItemActivationStateChanged(Tizen::Ui::Controls::GroupedTableView& tableView, int groupIndex, int itemIndex, Tizen::Ui::Controls::TableViewContextItem* pContextItem, bool activated)
1066 DateTimeForm::OnGroupedTableViewGroupItemStateChanged(Tizen::Ui::Controls::GroupedTableView& tableView, int groupIndex, Tizen::Ui::Controls::TableViewGroupItem* pItem, Tizen::Ui::Controls::TableViewItemStatus status)
1071 DateTimeForm::OnOrientationChanged(const Tizen::Ui::Control& source, Tizen::Ui::OrientationStatus orientationStatus)
1073 BaseForm::OnOrientationChanged(source, orientationStatus);
1074 __pTableView->RefreshItem(ID_GROUP_DATE_AND_TIME_LOCAL_TIME, ID_ITEM_DATE_AND_TIME_DATE_AND_TIME, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
1078 DateTimeForm::OnUserEventReceivedN(RequestId requestId, Tizen::Base::Collection::IList* pArgs)
1080 if (requestId == REFRESH_REQUEST_EVENT)
1084 bool hourFormat = false;
1086 if (SettingInfo::GetValue(SETTING_INFO_KEY_LOCALE_TIME_FORMAT_24HOUR, hourFormat) != E_SUCCESS)
1088 AppLogDebug("SettingInfo::GetValue() fail(%s)", GetErrorMessage(GetLastResult()));
1091 if (hourFormat == false)
1093 __pTableView->SetItemChecked(ID_GROUP_DATE_AND_TIME_FORMAT_LIST, ID_ITEM_DATE_AND_TIME_FORMAT_12_HOURS, true);
1094 __pTableView->SetItemChecked(ID_GROUP_DATE_AND_TIME_FORMAT_LIST, ID_ITEM_DATE_AND_TIME_FORMAT_24_HOURS, false);
1098 __pTableView->SetItemChecked(ID_GROUP_DATE_AND_TIME_FORMAT_LIST, ID_ITEM_DATE_AND_TIME_FORMAT_24_HOURS, true);
1099 __pTableView->SetItemChecked(ID_GROUP_DATE_AND_TIME_FORMAT_LIST, ID_ITEM_DATE_AND_TIME_FORMAT_12_HOURS, false);
1101 __pTableView->RefreshAllItems();
1105 pArgs->RemoveAll(true);
1112 DateTimeForm::OnTimerExpired(Timer& timer)
1114 __pTableView->RefreshItem(ID_GROUP_DATE_AND_TIME_LOCAL_TIME, ID_ITEM_DATE_AND_TIME_DATE_AND_TIME, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
1115 __pTimer->Start(NO_OF_SECONDS * ONE_SECOND_TIME_INTERVAL);