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 CreateHeader(ResourceManager::GetString(L"IDS_ST_BODY_DATE_AND_TIME"));
110 AppLogDebug("ENTER");
116 DateTimeForm::OnTerminating(void)
120 SetFormBackEventListener(null);
125 DateTimeForm::OnSceneActivatedN(const Tizen::Ui::Scenes::SceneId& previousSceneId, const Tizen::Ui::Scenes::SceneId& currentSceneId, Tizen::Base::Collection::IList* pArgs)
128 bool automaticUpdate = false;
129 bool hourFormat = false;
130 __pTableView->UpdateTableView();
131 __pTableView->CollapseGroup(ID_GROUP_DATE_AND_TIME_FORMAT_LIST);
132 __pTableView->RefreshItem(ID_GROUP_DATE_AND_TIME_FORMAT, 0, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
133 __pTableView->RefreshItem(ID_GROUP_DATE_AND_TIME_LOCAL_TIME, ID_ITEM_DATE_AND_TIME_DATE_AND_TIME, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
135 r = SettingInfo::GetValue(SETTING_INFO_KEY_LOCALE_UPDATE_AUTO, automaticUpdate);
138 AppLogException("GetValue(locale.update.auto) failed(%s)", GetErrorMessage(r));
142 __pTableView->SetItemChecked(ID_GROUP_DATE_AND_TIME_MAIN, ID_ITEM_DATE_AND_TIME_MAIN_AUTOMATIC_UPDATE, automaticUpdate);
143 __pTableView->SetItemEnabled(ID_GROUP_DATE_AND_TIME_LOCAL_TIME, ID_ITEM_DATE_AND_TIME_TIME_ZONE, !automaticUpdate);
144 __pTableView->SetItemEnabled(ID_GROUP_DATE_AND_TIME_LOCAL_TIME, ID_ITEM_DATE_AND_TIME_DATE_AND_TIME, !automaticUpdate);
147 r = SettingInfo::GetValue(SETTING_INFO_KEY_LOCALE_TIME_FORMAT_24HOUR, hourFormat);
150 AppLogException("GetValue(locale.time.format.24hour) failed(%s)", GetErrorMessage(r));
154 if (hourFormat == false)
156 __pTableView->SetItemChecked(ID_GROUP_DATE_AND_TIME_FORMAT_LIST, ID_ITEM_DATE_AND_TIME_FORMAT_12_HOURS, true);
157 __pTableView->SetItemChecked(ID_GROUP_DATE_AND_TIME_FORMAT_LIST, ID_ITEM_DATE_AND_TIME_FORMAT_24_HOURS, false);
161 __pTableView->SetItemChecked(ID_GROUP_DATE_AND_TIME_FORMAT_LIST, ID_ITEM_DATE_AND_TIME_FORMAT_24_HOURS, true);
162 __pTableView->SetItemChecked(ID_GROUP_DATE_AND_TIME_FORMAT_LIST, ID_ITEM_DATE_AND_TIME_FORMAT_12_HOURS, false);
166 DateTime currentDateTime;
167 SystemTime::GetCurrentTime(currentDateTime);
168 int interval = ONE_SECOND_TIME_INTERVAL;
169 interval *= (NO_OF_SECONDS - currentDateTime.GetSecond());
170 __pTimer = new (std::nothrow) Timer();
171 __pTimer->Construct(*this);
172 __pTimer->Start(interval);
176 DateTimeForm::OnSceneDeactivated(const Tizen::Ui::Scenes::SceneId& currentSceneId, const Tizen::Ui::Scenes::SceneId& nextSceneId)
178 if (__pTimer != null)
186 DateTimeForm::OnFormBackRequested(Tizen::Ui::Controls::Form& source)
188 SceneManager* pSceneManager = SceneManager::GetInstance();
189 AppAssert(pSceneManager);
191 __pTableView->CollapseGroup(ID_GROUP_DATE_AND_TIME_FORMAT_LIST);
192 pSceneManager->GoBackward(BackwardSceneTransition(SCENE_TRANSITION_ANIMATION_TYPE_RIGHT), null);
196 DateTimeForm::GetGroupCount(void)
198 AppLogDebug("ENTER");
199 return ID_GROUP_COUNT;
203 DateTimeForm::GetItemCount(int groupIndex)
209 case ID_GROUP_DATE_AND_TIME_MAIN:
211 itemCount = ID_GROUP_DATE_AND_TIME_MAIN_ITEM_COUNT;
215 case ID_GROUP_DATE_AND_TIME_LOCAL_TIME:
217 itemCount = ID_GROUP_DATE_AND_TIME_LOCAL_TIME_ITEM_COUNT;
221 case ID_GROUP_DATE_AND_TIME_FORMAT:
223 itemCount = ID_GROUP_DATE_AND_TIME_FORMAT_ITEM_COUNT;
227 case ID_GROUP_DATE_AND_TIME_FORMAT_LIST:
229 itemCount = ID_GROUP_DATE_AND_TIME_FORMAT_LIST_ITEM_COUNT;
233 case ID_GROUP_DATE_AND_TIME_FIRST_DAY:
235 itemCount = ID_GROUP_DATE_AND_TIME_FIRST_DAY_ITEM_COUNT;
239 case ID_GROUP_DATE_AND_TIME_FIRST_DAY_LIST:
241 itemCount = ID_GROUP_DATE_AND_TIME_FIRST_DAY_LIST_ITEM_COUNT;
248 AppLogDebug("GetItemCount %d", itemCount);
254 DateTimeForm::CreateGroupItem(int groupIndex, int itemWidth)
256 AppLogDebug("ENTER");
258 int itemHeight = H_GROUP_INDEX_NO_TITLE_DEFAULT;
259 int yItemOffset = H_GROUP_INDEX_HELP_TEXT_TOP_GAP;
260 LabelTextStyle style = LABEL_TEXT_STYLE_BOLD;
261 Rectangle itemMainRectangle;
263 Label* pLabel = null;
265 TableViewGroupItem* pItem = new (std::nothrow) TableViewGroupItem();
269 case ID_GROUP_DATE_AND_TIME_MAIN:
271 case ID_GROUP_DATE_AND_TIME_FORMAT:
273 yItemOffset = Y_GROUP_INDEX_DEFAULT;
274 itemHeight = H_GROUP_INDEX_NO_TITLE_DEFAULT;
278 case ID_GROUP_DATE_AND_TIME_LOCAL_TIME:
280 style = LABEL_TEXT_STYLE_NORMAL;
281 yItemOffset = H_GROUP_INDEX_HELP_TEXT_TOP_GAP;
282 itemHeight = H_GROUP_INDEX_DEFAULT;
283 groupText = ResourceManager::GetString(L"IDS_ST_BODY_USE_TIME_PROVIDED_BY_NETWORK");
287 case ID_GROUP_DATE_AND_TIME_FIRST_DAY:
293 case ID_GROUP_DATE_AND_TIME_FORMAT_LIST:
295 case ID_GROUP_DATE_AND_TIME_FIRST_DAY_LIST:
303 yItemOffset = Y_GROUP_INDEX_DEFAULT;
304 itemHeight = H_GROUP_INDEX_NO_TITLE_DEFAULT;
309 itemMainRectangle.x = X_GROUP_INDEX_DEFAULT_LABEL;
310 itemMainRectangle.y = yItemOffset;
311 itemMainRectangle.width = itemWidth;
312 itemMainRectangle.height = itemHeight;
314 RelativeLayout relativeLayout;
315 relativeLayout.Construct();
317 pItem->Construct(relativeLayout, Dimension(itemWidth, itemHeight));
319 pLabel = new (std::nothrow) Label();
320 pLabel->Construct(itemMainRectangle, groupText);
321 pLabel->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
322 pLabel->SetTextVerticalAlignment(ALIGNMENT_TOP);
323 pLabel->SetTextConfig(FONT_SIZE_GROUP_TITLE_TEXT, style);
324 pLabel->SetTextColor(COLOR_GROUP_TITLE_TEXT);
326 pItem->AddControl(pLabel);
327 relativeLayout.SetMargin(*pLabel, itemMainRectangle.x, RELATIVE_LAYOUT_RIGHT_MARGIN, 0, 0);
328 relativeLayout.SetRelation(*pLabel, pItem, RECT_EDGE_RELATION_LEFT_TO_LEFT);
329 relativeLayout.SetRelation(*pLabel, pItem, RECT_EDGE_RELATION_RIGHT_TO_RIGHT);
330 pItem->SetBackgroundColor(COLOR_BG_GROUP_INDEX_DEFAULT);
331 pItem->SetEnabled(false);
337 DateTimeForm::CreateItem(int groupIndex, int itemIndex, int itemWidth)
339 AppLogDebug("group[%d] index[%d]", groupIndex, itemIndex);
342 bool isEnabled = true;
343 bool isSecondLine = false;
344 Rectangle itemMainRectangle;
345 Rectangle itemSubRectangle;
346 TableViewAnnexStyle style = TABLE_VIEW_ANNEX_STYLE_NORMAL;
351 Label* pLabel = null;
352 int itemHeight = H_GROUP_ITEM_DEFAULT;
353 int fontSize = GetFontSize();
355 ItemTypeOneLine(itemMainRectangle);
356 TableViewItem* pItem = new (std::nothrow) TableViewItem();
360 case ID_GROUP_DATE_AND_TIME_MAIN:
362 bool automaticUpdate = false;
363 style = TABLE_VIEW_ANNEX_STYLE_ONOFF_SLIDING;
364 itemMainText = ResourceManager::GetString(L"IDS_ST_BODY_AUTOMATIC_UPDATE");
365 itemMainRectangle.width -= W_RESIZE_LABEL_GAP;
367 r = SettingInfo::GetValue(SETTING_INFO_KEY_LOCALE_UPDATE_AUTO, automaticUpdate);
370 AppLogException("GetValue(locale.update.auto) failed(%s)", GetErrorMessage(r));
374 __pTableView->SetItemChecked(groupIndex, itemIndex, automaticUpdate);
379 case ID_GROUP_DATE_AND_TIME_LOCAL_TIME:
383 LocaleManager localeManager;
384 localeManager.Construct();
385 TimeZone timeZone = localeManager.GetSystemTimeZone();
386 int rawOffset = timeZone.GetRawOffset();
390 case ID_ITEM_DATE_AND_TIME_TIME_ZONE:
392 itemSubText = timeZone.GetId();
393 itemSubText.IndexOf(L"/", 0, slashIndex);
394 itemSubText.Remove(0, slashIndex + NEXT_INDEX);
395 itemSubText.Replace(L"_", L" ");
398 itemSubText.Insert(L", GMT +", itemSubText.GetLength());
402 itemSubText.Insert(L", GMT ", itemSubText.GetLength());
404 itemSubText.Insert((rawOffset / SIXTY_MINUTES_TO_HOUR), (itemSubText.GetLength()));
405 int minutes = rawOffset % SIXTY_MINUTES_TO_HOUR;
408 int minusMinutes = 0;
411 minusMinutes -= (minusMinutes + minutes);
412 itemSubText.Insert(L":", itemSubText.GetLength());
413 itemSubText.Insert((minusMinutes), (itemSubText.GetLength()));
417 itemSubText.Insert(L":", itemSubText.GetLength());
418 itemSubText.Insert((minutes), (itemSubText.GetLength()));
421 itemMainText = ResourceManager::GetString(L"IDS_ST_BODY_TIME_ZONE");
423 bool automaticUpdateStatus = false;
425 r = SettingInfo::GetValue(SETTING_INFO_KEY_LOCALE_UPDATE_AUTO, automaticUpdateStatus);
428 AppLogException("GetValue(locale.update.auto) failed(%s)", GetErrorMessage(r));
432 isEnabled = !automaticUpdateStatus;
437 case ID_ITEM_DATE_AND_TIME_DATE_AND_TIME:
439 ItemTypeOneLine(itemMainRectangle);
440 itemHeight = H_GROUP_ITEM_EDITFIELD_DEFAULT;
441 itemMainText = ResourceManager::GetString(L"IDS_ST_BODY_DATE_AND_TIME");
451 case ID_GROUP_DATE_AND_TIME_FORMAT:
453 bool hourFormat = false;
456 if (SettingInfo::GetValue(SETTING_INFO_KEY_LOCALE_TIME_FORMAT_24HOUR, hourFormat) != E_SUCCESS)
458 AppLogDebug("SettingInfo::GetValue() fail(%s)", GetErrorMessage(GetLastResult()));
463 itemSubText = ResourceManager::GetString(L"IDS_COM_BODY_12_HOURS");
467 itemSubText = ResourceManager::GetString(L"IDS_ST_BODY_24_HOURS");
470 itemMainText = ResourceManager::GetString(L"IDS_ST_BODY_TIME_FORMAT");
474 case ID_GROUP_DATE_AND_TIME_FORMAT_LIST:
476 bool hourFormat = false;
477 style = TABLE_VIEW_ANNEX_STYLE_RADIO;
478 isSecondLine = false;
480 if (SettingInfo::GetValue(SETTING_INFO_KEY_LOCALE_TIME_FORMAT_24HOUR, hourFormat) != E_SUCCESS)
482 AppLogDebug("SettingInfo::GetValue() fail(%s)", GetErrorMessage(GetLastResult()));
487 case ID_ITEM_DATE_AND_TIME_FORMAT_12_HOURS:
489 itemMainText = ResourceManager::GetString(L"IDS_COM_BODY_12_HOURS");
491 if (hourFormat == false)
493 __pTableView->SetItemChecked(groupIndex, itemIndex, true);
498 case ID_ITEM_DATE_AND_TIME_FORMAT_24_HOURS:
500 itemMainText = ResourceManager::GetString(L"IDS_ST_BODY_24_HOURS");
502 if (hourFormat == true)
504 __pTableView->SetItemChecked(groupIndex, itemIndex, true);
515 case ID_GROUP_DATE_AND_TIME_FIRST_DAY:
517 String firstDayOfWeek;
520 if (SettingInfo::GetValue(SETTING_INFO_KEY_LOCALE_TIME_FORMAT_FIRSTDAY, firstDayOfWeek) != E_SUCCESS)
522 AppLogDebug("SettingInfo::GetValue() fail(%s)", GetErrorMessage(GetLastResult()));
524 itemSubText = firstDayOfWeek;
528 case ID_GROUP_DATE_AND_TIME_FIRST_DAY_LIST:
530 String firstDayOfWeek;
531 style = TABLE_VIEW_ANNEX_STYLE_RADIO;
532 isSecondLine = false;
534 if (SettingInfo::GetValue(SETTING_INFO_KEY_LOCALE_TIME_FORMAT_FIRSTDAY, firstDayOfWeek) != E_SUCCESS)
536 AppLogDebug("SettingInfo::GetValue() fail(%s)", GetErrorMessage(GetLastResult()));
541 case ID_ITEM_DATE_AND_TIME_FORMAT_FIRST_DAY_MONDAY:
543 itemMainText = ResourceManager::GetString(L"IDS_ST_BODY_MONDAY");
545 if (firstDayOfWeek.Equals(L"Sunday", false) == false)
547 __pTableView->SetItemChecked(groupIndex, itemIndex, true);
552 case ID_ITEM_DATE_AND_TIME_FORMAT_FIRST_DAY_SUNDAY:
554 itemMainText = ResourceManager::GetString(L"IDS_ST_BODY_SUNDAY");
555 if (firstDayOfWeek.Equals(L"Sunday", false))
557 __pTableView->SetItemChecked(groupIndex, itemIndex, true);
572 if ((groupIndex == ID_GROUP_DATE_AND_TIME_LOCAL_TIME) && (itemIndex == ID_ITEM_DATE_AND_TIME_DATE_AND_TIME))
574 pItem->Construct(Dimension(itemWidth, H_TIME_FIELD), style);
575 pItem->SetBackgroundColor(COLOR_BG_GROUP_ITEM_DEFAULT);
577 bool hourFormat = false;
579 EditDate* pEditDate = new (std::nothrow) EditDate();
580 pEditDate->Construct(Point(0, 0), itemMainText);
581 pEditDate->SetCurrentDate();
583 int minYear = MIN_YEAR;
584 int maxYear = MAX_YEAR;
586 if (pEditDate->GetYear() < MIN_YEAR)
588 minYear = pEditDate->GetYear();
591 if (pEditDate->GetYear() > MAX_YEAR)
593 maxYear = pEditDate->GetYear();
596 pEditDate->SetYearRange(minYear, maxYear);
597 pEditDate->AddDateChangeEventListener(*this);
598 pEditDate->SetName(EDIT_DATE_CONTROL);
600 pItem->AddControl(pEditDate);
602 EditTime* pEditTime = new (std::nothrow) EditTime();
603 pEditTime->Construct(Point(pEditDate->GetWidth(), 0), L" ");
604 pEditTime->SetCurrentTime();
606 if (SettingInfo::GetValue(SETTING_INFO_KEY_LOCALE_TIME_FORMAT_24HOUR, hourFormat) == E_SUCCESS)
608 pEditTime->Set24HourNotationEnabled(hourFormat);
611 pEditTime->AddTimeChangeEventListener(*this);
612 pEditTime->SetName(EDIT_TIME_CONTROL);
614 pItem->AddControl(pEditTime);
615 pItem->SetIndividualSelectionEnabled(pEditDate, true);
616 pItem->SetIndividualSelectionEnabled(pEditTime, true);
618 else if (isSecondLine == true)
620 ItemTypeTwoLine(itemMainRectangle, itemSubRectangle, fontSize);
621 itemHeight = (itemMainRectangle.height + itemSubRectangle.height);
623 RelativeLayout relativeLayout;
624 relativeLayout.Construct();
626 pItem->Construct(relativeLayout, Dimension(itemWidth, itemHeight), style);
627 pItem->SetBackgroundColor(COLOR_BG_GROUP_ITEM_DEFAULT);
629 pLabel = new (std::nothrow) Label();
630 pLabel->Construct(itemMainRectangle, itemMainText);
631 pLabel->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
632 pLabel->SetTextConfig(fontSize, LABEL_TEXT_STYLE_NORMAL);
633 pLabel->SetTextColor(COLOR_MAIN_TEXT);
635 pItem->AddControl(pLabel);
636 if (groupIndex == ID_GROUP_DATE_AND_TIME_FORMAT)
638 relativeLayout.SetMargin(*pLabel, itemMainRectangle.x, RELATIVE_LAYOUT_RIGHT_MARGIN_DETAIL_BUTTON, 0, 0);
642 relativeLayout.SetMargin(*pLabel, itemMainRectangle.x, RELATIVE_LAYOUT_RIGHT_MARGIN, 0, 0);
644 relativeLayout.SetRelation(*pLabel, pItem, RECT_EDGE_RELATION_LEFT_TO_LEFT);
645 relativeLayout.SetRelation(*pLabel, pItem, RECT_EDGE_RELATION_RIGHT_TO_RIGHT);
647 if (groupIndex == ID_GROUP_DATE_AND_TIME_FORMAT)
649 Rectangle detailArrow;
650 Bitmap* pBitmap = null;
651 if (__pTableView->IsGroupExpanded(ID_GROUP_DATE_AND_TIME_FORMAT_LIST))
653 pBitmap = ResourceManager::GetBitmapN(IDB_DETAIL_BUTTON_EXPAND_OPENED);
657 pBitmap = ResourceManager::GetBitmapN(IDB_DETAIL_BUTTON_EXPAND_CLOSED);
660 detailArrow = itemMainRectangle;
661 detailArrow.y = itemMainRectangle.y + ((itemHeight - W_DETAIL_ARROW_BUTTON) / DIVIDE_BY_TWO);
662 detailArrow.height = W_DETAIL_ARROW_BUTTON;
663 detailArrow.width = W_DETAIL_ARROW_BUTTON;
665 pLabel = new (std::nothrow) Label();
666 pLabel->Construct(detailArrow, L"");
668 pLabel->SetBackgroundBitmap(*pBitmap);
670 pItem->AddControl(pLabel);
671 relativeLayout.SetMargin(*pLabel, itemMainRectangle.x, RELATIVE_LAYOUT_RIGHT_MARGIN_DETAIL_ARROW_BUTTON, 0, 0);
672 relativeLayout.SetRelation(*pLabel, pItem, RECT_EDGE_RELATION_RIGHT_TO_RIGHT);
675 pLabel = new (std::nothrow) Label();
676 pLabel->Construct(itemSubRectangle, itemSubText);
677 pLabel->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
678 pLabel->SetTextVerticalAlignment(ALIGNMENT_TOP);
679 pLabel->SetTextConfig(FONT_SIZE_SUB_TEXT, LABEL_TEXT_STYLE_NORMAL);
680 pLabel->SetName(SUB_TEXT_CONTROL);
683 pLabel->SetTextColor(COLOR_SUB_TEXT);
687 pLabel->SetTextColor(COLOR_SUB_DISABLED_TEXT);
690 pItem->AddControl(pLabel);
691 relativeLayout.SetMargin(*pLabel, itemSubRectangle.x, RELATIVE_LAYOUT_RIGHT_MARGIN, 0, 0);
692 relativeLayout.SetRelation(*pLabel, pItem, RECT_EDGE_RELATION_LEFT_TO_LEFT);
693 relativeLayout.SetRelation(*pLabel, pItem, RECT_EDGE_RELATION_RIGHT_TO_RIGHT);
697 RelativeLayout relativeLayout;
698 relativeLayout.Construct();
700 pItem->Construct(relativeLayout, Dimension(itemWidth, itemHeight), style);
701 pItem->SetBackgroundColor(COLOR_BG_GROUP_ITEM_DEFAULT);
703 pLabel = new (std::nothrow) Label();
704 pLabel->Construct(itemMainRectangle, itemMainText);
705 pLabel->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
706 pLabel->SetTextConfig(fontSize, LABEL_TEXT_STYLE_NORMAL);
707 pLabel->SetTextColor(COLOR_MAIN_TEXT);
709 pItem->AddControl(pLabel);
713 case TABLE_VIEW_ANNEX_STYLE_RADIO:
715 relativeLayout.SetMargin(*pLabel, RELATIVE_LAYOUT_LEFT_MARGIN, RELATIVE_LAYOUT_RIGHT_MARGIN, 0, 0);
719 case TABLE_VIEW_ANNEX_STYLE_ONOFF_SLIDING:
721 relativeLayout.SetMargin(*pLabel, itemMainRectangle.x, RELATIVE_LAYOUT_RIGHT_MARGIN_ONOFF_SLIDING, 0, 0);
727 relativeLayout.SetMargin(*pLabel, itemMainRectangle.x, RELATIVE_LAYOUT_RIGHT_MARGIN, 0, 0);
732 relativeLayout.SetRelation(*pLabel, pItem, RECT_EDGE_RELATION_LEFT_TO_LEFT);
733 relativeLayout.SetRelation(*pLabel, pItem, RECT_EDGE_RELATION_RIGHT_TO_RIGHT);
740 DateTimeForm::DeleteGroupItem(int groupIndex, TableViewGroupItem* pItem)
742 AppLogDebug("ENTER");
751 DateTimeForm::DeleteItem(int groupIndex, int itemIndex, TableViewItem* pItem)
753 AppLogDebug("ENTER");
762 DateTimeForm::OnGroupedTableViewItemStateChanged(Tizen::Ui::Controls::GroupedTableView& tableView, int groupIndex, int itemIndex, Tizen::Ui::Controls::TableViewItem* pItem, Tizen::Ui::Controls::TableViewItemStatus status)
764 SceneManager* pSceneManager = SceneManager::GetInstance();
765 AppAssert(pSceneManager);
767 AppLogDebug("group[%d] index[%d]", groupIndex, itemIndex);
773 case ID_GROUP_DATE_AND_TIME_MAIN:
775 bool automaticUpdateStatus = tableView.IsItemChecked(groupIndex, itemIndex);
777 if (status == TABLE_VIEW_ITEM_STATUS_SELECTED)
779 automaticUpdateStatus = (!(automaticUpdateStatus));
782 r = SettingInfo::SetValue(SETTING_INFO_KEY_LOCALE_UPDATE_AUTO, automaticUpdateStatus);
785 AppLogException("SetValue(locale.update.auto) failed(%s)", GetErrorMessage(r));
789 tableView.SetItemChecked(groupIndex, itemIndex, automaticUpdateStatus);
790 tableView.SetItemEnabled(ID_GROUP_DATE_AND_TIME_LOCAL_TIME, ID_ITEM_DATE_AND_TIME_TIME_ZONE, !automaticUpdateStatus);
791 tableView.SetItemEnabled(ID_GROUP_DATE_AND_TIME_LOCAL_TIME, ID_ITEM_DATE_AND_TIME_DATE_AND_TIME, !automaticUpdateStatus);
792 tableView.RefreshAllItems();
797 case ID_GROUP_DATE_AND_TIME_LOCAL_TIME:
799 if (itemIndex == ID_ITEM_DATE_AND_TIME_TIME_ZONE)
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);