bf6680f48cad35b7550c51d511b161f2d9198978
[apps/osp/Settings.git] / src / StDateTimeForm.cpp
1 //
2 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
3 //
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
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                StDateTimeForm.cpp
19  * @brief               This is the implementation file for DateTimeForm class.
20  */
21
22 #include "StDateTimeForm.h"
23 #include "StResourceManager.h"
24 #include "StSettingScenesList.h"
25 #include "StTypes.h"
26
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;
35
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;
39
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;
44
45 static const int ID_GROUP_DATE_AND_TIME_FORMAT = 2;
46 static const int ID_GROUP_DATE_AND_TIME_FORMAT_ITEM_COUNT = 1;
47
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;
52
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;
55
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;
60
61 static const int ID_GROUP_COUNT = 4;
62
63 static const int SIXTY_MINUTES_TO_HOUR = 60;
64 static const int H_GROUP_ITEM_EDITFIELD_DEFAULT = 120;
65
66 static const int NEXT_INDEX = 1;
67 static const int W_RESIZE_LABEL_GAP = 170;
68 static const int H_TIME_FIELD = 150;
69
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;
78
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";
82
83 DateTimeForm::DateTimeForm(void)
84         : __pTimer(null)
85 {
86 }
87
88 DateTimeForm::~DateTimeForm(void)
89 {
90 }
91
92 void
93 DateTimeForm::CreateFooter(void)
94 {
95         Footer* pFooter = GetFooter();
96         AppAssert(pFooter);
97
98         pFooter->SetStyle(FOOTER_STYLE_BUTTON_TEXT);
99         pFooter->AddActionEventListener(*this);
100
101         SetFormBackEventListener(this);
102 }
103
104 result
105 DateTimeForm::OnInitializing(void)
106 {
107         CreateHeader(ResourceManager::GetString(L"IDS_ST_BODY_DATE_AND_TIME"));
108         CreateTableView();
109
110         AppLogDebug("ENTER");
111
112         return E_SUCCESS;
113 }
114
115 result
116 DateTimeForm::OnTerminating(void)
117 {
118         __pTableView = null;
119
120         SetFormBackEventListener(null);
121         return E_SUCCESS;
122 }
123
124 void
125 DateTimeForm::OnSceneActivatedN(const Tizen::Ui::Scenes::SceneId& previousSceneId, const Tizen::Ui::Scenes::SceneId& currentSceneId, Tizen::Base::Collection::IList* pArgs)
126 {
127         result r;
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);
134
135         r = SettingInfo::GetValue(SETTING_INFO_KEY_LOCALE_UPDATE_AUTO, automaticUpdate);
136         if (IsFailed(r))
137         {
138                 AppLogException("GetValue(locale.update.auto) failed(%s)", GetErrorMessage(r));
139         }
140         else
141         {
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);
145         }
146
147         r = SettingInfo::GetValue(SETTING_INFO_KEY_LOCALE_TIME_FORMAT_24HOUR, hourFormat);
148         if (IsFailed(r))
149         {
150                 AppLogException("GetValue(locale.time.format.24hour) failed(%s)", GetErrorMessage(r));
151         }
152         else
153         {
154                 if (hourFormat == false)
155                 {
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);
158                 }
159                 else
160                 {
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);
163                 }
164         }
165
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);
173 }
174
175 void
176 DateTimeForm::OnSceneDeactivated(const Tizen::Ui::Scenes::SceneId& currentSceneId, const Tizen::Ui::Scenes::SceneId& nextSceneId)
177 {
178         if (__pTimer != null)
179         {
180                 __pTimer->Cancel();
181                 delete __pTimer;
182         }
183 }
184
185 void
186 DateTimeForm::OnFormBackRequested(Tizen::Ui::Controls::Form& source)
187 {
188         SceneManager* pSceneManager = SceneManager::GetInstance();
189         AppAssert(pSceneManager);
190
191         __pTableView->CollapseGroup(ID_GROUP_DATE_AND_TIME_FORMAT_LIST);
192         pSceneManager->GoBackward(BackwardSceneTransition(SCENE_TRANSITION_ANIMATION_TYPE_RIGHT), null);
193 }
194
195 int
196 DateTimeForm::GetGroupCount(void)
197 {
198         AppLogDebug("ENTER");
199         return ID_GROUP_COUNT;
200 }
201
202 int
203 DateTimeForm::GetItemCount(int groupIndex)
204 {
205         int itemCount = 0;
206
207         switch (groupIndex)
208         {
209         case ID_GROUP_DATE_AND_TIME_MAIN:
210                 {
211                         itemCount = ID_GROUP_DATE_AND_TIME_MAIN_ITEM_COUNT;
212                 }
213                 break;
214
215         case ID_GROUP_DATE_AND_TIME_LOCAL_TIME:
216                 {
217                         itemCount = ID_GROUP_DATE_AND_TIME_LOCAL_TIME_ITEM_COUNT;
218                 }
219                 break;
220
221         case ID_GROUP_DATE_AND_TIME_FORMAT:
222                 {
223                         itemCount = ID_GROUP_DATE_AND_TIME_FORMAT_ITEM_COUNT;
224                 }
225                 break;
226
227         case ID_GROUP_DATE_AND_TIME_FORMAT_LIST:
228                 {
229                         itemCount = ID_GROUP_DATE_AND_TIME_FORMAT_LIST_ITEM_COUNT;
230                 }
231                 break;
232
233         case ID_GROUP_DATE_AND_TIME_FIRST_DAY:
234                 {
235                         itemCount = ID_GROUP_DATE_AND_TIME_FIRST_DAY_ITEM_COUNT;
236                 }
237                 break;
238
239         case ID_GROUP_DATE_AND_TIME_FIRST_DAY_LIST:
240                 {
241                         itemCount = ID_GROUP_DATE_AND_TIME_FIRST_DAY_LIST_ITEM_COUNT;
242                 }
243                 break;
244
245         default:
246                 break;
247         }
248         AppLogDebug("GetItemCount %d", itemCount);
249
250         return itemCount;
251 }
252
253 TableViewGroupItem*
254 DateTimeForm::CreateGroupItem(int groupIndex, int itemWidth)
255 {
256         AppLogDebug("ENTER");
257
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;
262         String groupText;
263         Label* pLabel = null;
264
265         TableViewGroupItem* pItem = new (std::nothrow) TableViewGroupItem();
266
267         switch (groupIndex)
268         {
269         case ID_GROUP_DATE_AND_TIME_MAIN:
270                 // fall through
271         case ID_GROUP_DATE_AND_TIME_FORMAT:
272                 {
273                         yItemOffset = Y_GROUP_INDEX_DEFAULT;
274                         itemHeight = H_GROUP_INDEX_NO_TITLE_DEFAULT;
275                 }
276                 break;
277
278         case ID_GROUP_DATE_AND_TIME_LOCAL_TIME:
279                 {
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");
284                 }
285                 break;
286
287         case ID_GROUP_DATE_AND_TIME_FIRST_DAY:
288                 {
289                         itemHeight = 0;
290                 }
291                 break;
292
293         case ID_GROUP_DATE_AND_TIME_FORMAT_LIST:
294                 // fall through
295         case ID_GROUP_DATE_AND_TIME_FIRST_DAY_LIST:
296                 {
297                         itemHeight = 0;
298                 }
299                 break;
300
301         default:
302                 {
303                         yItemOffset = Y_GROUP_INDEX_DEFAULT;
304                         itemHeight = H_GROUP_INDEX_NO_TITLE_DEFAULT;
305                 }
306                 break;
307         }
308
309         itemMainRectangle.x = X_GROUP_INDEX_DEFAULT_LABEL;
310         itemMainRectangle.y = yItemOffset;
311         itemMainRectangle.width = itemWidth;
312         itemMainRectangle.height = itemHeight;
313
314         RelativeLayout relativeLayout;
315         relativeLayout.Construct();
316
317         pItem->Construct(relativeLayout, Dimension(itemWidth, itemHeight));
318
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);
325
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);
332
333         return pItem;
334 }
335
336 TableViewItem*
337 DateTimeForm::CreateItem(int groupIndex, int itemIndex, int itemWidth)
338 {
339         AppLogDebug("group[%d] index[%d]", groupIndex, itemIndex);
340
341         result r;
342         bool isEnabled = true;
343         bool isSecondLine = false;
344         Rectangle itemMainRectangle;
345         Rectangle itemSubRectangle;
346         TableViewAnnexStyle style = TABLE_VIEW_ANNEX_STYLE_NORMAL;
347         String itemMainText;
348         String itemSubText;
349         String key;
350         String Value;
351         Label* pLabel = null;
352         int itemHeight = H_GROUP_ITEM_DEFAULT;
353         int fontSize = GetFontSize();
354
355         ItemTypeOneLine(itemMainRectangle);
356         TableViewItem* pItem = new (std::nothrow) TableViewItem();
357
358         switch (groupIndex)
359         {
360         case ID_GROUP_DATE_AND_TIME_MAIN:
361                 {
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;
366
367                         r = SettingInfo::GetValue(SETTING_INFO_KEY_LOCALE_UPDATE_AUTO, automaticUpdate);
368                         if (IsFailed(r))
369                         {
370                                 AppLogException("GetValue(locale.update.auto) failed(%s)", GetErrorMessage(r));
371                         }
372                         else
373                         {
374                                 __pTableView->SetItemChecked(groupIndex, itemIndex, automaticUpdate);
375                         }
376                 }
377                 break;
378
379         case ID_GROUP_DATE_AND_TIME_LOCAL_TIME:
380                 {
381                         int slashIndex = 0;
382                         isSecondLine = true;
383                         LocaleManager localeManager;
384                         localeManager.Construct();
385                         TimeZone timeZone = localeManager.GetSystemTimeZone();
386                         int rawOffset = timeZone.GetRawOffset();
387
388                         switch (itemIndex)
389                         {
390                         case ID_ITEM_DATE_AND_TIME_TIME_ZONE:
391                                 {
392                                         itemSubText = timeZone.GetId();
393                                         itemSubText.IndexOf(L"/", 0, slashIndex);
394                                         itemSubText.Remove(0, slashIndex + NEXT_INDEX);
395                                         itemSubText.Replace(L"_", L" ");
396                                         if (rawOffset >= 0)
397                                         {
398                                                 itemSubText.Insert(L", GMT +", itemSubText.GetLength());
399                                         }
400                                         else
401                                         {
402                                                 itemSubText.Insert(L", GMT ", itemSubText.GetLength());
403                                         }
404                                         itemSubText.Insert((rawOffset / SIXTY_MINUTES_TO_HOUR), (itemSubText.GetLength()));
405                                         int minutes = rawOffset % SIXTY_MINUTES_TO_HOUR;
406                                         if (minutes != 0)
407                                         {
408                                                 int minusMinutes = 0;
409                                                 if (minutes < 0)
410                                                 {
411                                                         minusMinutes -= (minusMinutes + minutes);
412                                                         itemSubText.Insert(L":", itemSubText.GetLength());
413                                                         itemSubText.Insert((minusMinutes), (itemSubText.GetLength()));
414                                                 }
415                                                 else
416                                                 {
417                                                         itemSubText.Insert(L":", itemSubText.GetLength());
418                                                         itemSubText.Insert((minutes), (itemSubText.GetLength()));
419                                                 }
420                                         }
421                                         itemMainText = ResourceManager::GetString(L"IDS_ST_BODY_TIME_ZONE");
422
423                                         bool automaticUpdateStatus = false;
424
425                                         r = SettingInfo::GetValue(SETTING_INFO_KEY_LOCALE_UPDATE_AUTO, automaticUpdateStatus);
426                                         if (IsFailed(r))
427                                         {
428                                                 AppLogException("GetValue(locale.update.auto) failed(%s)", GetErrorMessage(r));
429                                         }
430                                         else
431                                         {
432                                                 isEnabled = !automaticUpdateStatus;
433                                         }
434                                 }
435                                 break;
436
437                         case ID_ITEM_DATE_AND_TIME_DATE_AND_TIME:
438                                 {
439                                         ItemTypeOneLine(itemMainRectangle);
440                                         itemHeight = H_GROUP_ITEM_EDITFIELD_DEFAULT;
441                                         itemMainText = ResourceManager::GetString(L"IDS_ST_BODY_DATE_AND_TIME");
442                                 }
443                                 break;
444
445                         default:
446                                 break;
447                         }
448                 }
449                 break;
450
451         case ID_GROUP_DATE_AND_TIME_FORMAT:
452                 {
453                         bool hourFormat = false;
454                         isSecondLine = true;
455
456                         if (SettingInfo::GetValue(SETTING_INFO_KEY_LOCALE_TIME_FORMAT_24HOUR, hourFormat) != E_SUCCESS)
457                         {
458                                 AppLogDebug("SettingInfo::GetValue() fail(%s)", GetErrorMessage(GetLastResult()));
459                         }
460
461                         if (hourFormat == 0)
462                         {
463                                 itemSubText = ResourceManager::GetString(L"IDS_COM_BODY_12_HOURS");
464                         }
465                         else
466                         {
467                                 itemSubText = ResourceManager::GetString(L"IDS_ST_BODY_24_HOURS");
468                         }
469
470                         itemMainText = ResourceManager::GetString(L"IDS_ST_BODY_TIME_FORMAT");
471                 }
472                 break;
473         
474         case ID_GROUP_DATE_AND_TIME_FORMAT_LIST:
475                 {
476                         bool hourFormat = false;
477                         style = TABLE_VIEW_ANNEX_STYLE_RADIO;
478                         isSecondLine = false;
479
480                         if (SettingInfo::GetValue(SETTING_INFO_KEY_LOCALE_TIME_FORMAT_24HOUR, hourFormat) != E_SUCCESS)
481                         {
482                                 AppLogDebug("SettingInfo::GetValue() fail(%s)", GetErrorMessage(GetLastResult()));
483                         }
484
485                         switch (itemIndex)
486                         {
487                         case ID_ITEM_DATE_AND_TIME_FORMAT_12_HOURS:
488                                 {
489                                         itemMainText = ResourceManager::GetString(L"IDS_COM_BODY_12_HOURS");
490
491                                         if (hourFormat == false)
492                                         {
493                                                 __pTableView->SetItemChecked(groupIndex, itemIndex, true);
494                                         }
495                                 }
496                                 break;
497
498                         case ID_ITEM_DATE_AND_TIME_FORMAT_24_HOURS:
499                                 {
500                                         itemMainText = ResourceManager::GetString(L"IDS_ST_BODY_24_HOURS");
501
502                                         if (hourFormat == true)
503                                         {
504                                                 __pTableView->SetItemChecked(groupIndex, itemIndex, true);
505                                         }
506                                 }
507                                 break;
508
509                         default:
510                                 break;
511                         }
512                 }
513                 break;
514
515         case ID_GROUP_DATE_AND_TIME_FIRST_DAY:
516                 {
517                         String firstDayOfWeek;
518                         isSecondLine = true;
519
520                         if (SettingInfo::GetValue(SETTING_INFO_KEY_LOCALE_TIME_FORMAT_FIRSTDAY, firstDayOfWeek) != E_SUCCESS)
521                         {
522                                 AppLogDebug("SettingInfo::GetValue() fail(%s)", GetErrorMessage(GetLastResult()));
523                         }
524                         itemSubText = firstDayOfWeek;
525                 }
526                 break;
527
528         case ID_GROUP_DATE_AND_TIME_FIRST_DAY_LIST:
529                 {
530                         String firstDayOfWeek;
531                         style = TABLE_VIEW_ANNEX_STYLE_RADIO;
532                         isSecondLine = false;
533
534                         if (SettingInfo::GetValue(SETTING_INFO_KEY_LOCALE_TIME_FORMAT_FIRSTDAY, firstDayOfWeek) != E_SUCCESS)
535                         {
536                                 AppLogDebug("SettingInfo::GetValue() fail(%s)", GetErrorMessage(GetLastResult()));
537                         }
538
539                         switch (itemIndex)
540                         {
541                         case ID_ITEM_DATE_AND_TIME_FORMAT_FIRST_DAY_MONDAY:
542                                 {
543                                         itemMainText = ResourceManager::GetString(L"IDS_ST_BODY_MONDAY");
544
545                                         if (firstDayOfWeek.Equals(L"Sunday", false) == false)
546                                         {
547                                                 __pTableView->SetItemChecked(groupIndex, itemIndex, true);
548                                         }
549                                 }
550                                 break;
551
552                         case ID_ITEM_DATE_AND_TIME_FORMAT_FIRST_DAY_SUNDAY:
553                                 {
554                                         itemMainText = ResourceManager::GetString(L"IDS_ST_BODY_SUNDAY");
555                                         if (firstDayOfWeek.Equals(L"Sunday", false))
556                                         {
557                                                 __pTableView->SetItemChecked(groupIndex, itemIndex, true);
558                                         }
559                                 }
560                                 break;
561
562                         default:
563                                 break;
564                         }
565                 }
566                 break;
567
568         default:
569                 break;
570         }
571
572         if ((groupIndex == ID_GROUP_DATE_AND_TIME_LOCAL_TIME) && (itemIndex == ID_ITEM_DATE_AND_TIME_DATE_AND_TIME))
573         {
574                 pItem->Construct(Dimension(itemWidth, H_TIME_FIELD), style);
575                 pItem->SetBackgroundColor(COLOR_BG_GROUP_ITEM_DEFAULT);
576
577                 bool hourFormat = false;
578
579                 EditDate* pEditDate = new (std::nothrow) EditDate();
580                 pEditDate->Construct(Point(0, 0), itemMainText);
581                 pEditDate->SetCurrentDate();
582
583                 int minYear = MIN_YEAR;
584                 int maxYear = MAX_YEAR;
585
586                 if (pEditDate->GetYear() < MIN_YEAR)
587                 {
588                         minYear = pEditDate->GetYear();
589                 }
590
591                 if (pEditDate->GetYear() > MAX_YEAR)
592                 {
593                         maxYear = pEditDate->GetYear();
594                 }
595
596                 pEditDate->SetYearRange(minYear, maxYear);
597                 pEditDate->AddDateChangeEventListener(*this);
598                 pEditDate->SetName(EDIT_DATE_CONTROL);
599
600                 pItem->AddControl(pEditDate);
601
602                 EditTime* pEditTime = new (std::nothrow) EditTime();
603                 pEditTime->Construct(Point(pEditDate->GetWidth(), 0), L" ");
604                 pEditTime->SetCurrentTime();
605
606                 if (SettingInfo::GetValue(SETTING_INFO_KEY_LOCALE_TIME_FORMAT_24HOUR, hourFormat) == E_SUCCESS)
607                 {
608                         pEditTime->Set24HourNotationEnabled(hourFormat);
609                 }
610
611                 pEditTime->AddTimeChangeEventListener(*this);
612                 pEditTime->SetName(EDIT_TIME_CONTROL);
613
614                 pItem->AddControl(pEditTime);
615                 pItem->SetIndividualSelectionEnabled(pEditDate, true);
616                 pItem->SetIndividualSelectionEnabled(pEditTime, true);
617         }
618         else if (isSecondLine == true)
619         {
620                 ItemTypeTwoLine(itemMainRectangle, itemSubRectangle, fontSize);
621                 itemHeight = (itemMainRectangle.height + itemSubRectangle.height);
622
623                 RelativeLayout relativeLayout;
624                 relativeLayout.Construct();
625
626                 pItem->Construct(relativeLayout, Dimension(itemWidth, itemHeight), style);
627                 pItem->SetBackgroundColor(COLOR_BG_GROUP_ITEM_DEFAULT);
628
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);
634
635                 pItem->AddControl(pLabel);
636                 if (groupIndex == ID_GROUP_DATE_AND_TIME_FORMAT)
637                 {
638                         relativeLayout.SetMargin(*pLabel, itemMainRectangle.x, RELATIVE_LAYOUT_RIGHT_MARGIN_DETAIL_BUTTON, 0, 0);
639                 }
640                 else
641                 {
642                         relativeLayout.SetMargin(*pLabel, itemMainRectangle.x, RELATIVE_LAYOUT_RIGHT_MARGIN, 0, 0);
643                 }
644                 relativeLayout.SetRelation(*pLabel, pItem, RECT_EDGE_RELATION_LEFT_TO_LEFT);
645                 relativeLayout.SetRelation(*pLabel, pItem, RECT_EDGE_RELATION_RIGHT_TO_RIGHT);
646
647                 if (groupIndex == ID_GROUP_DATE_AND_TIME_FORMAT)
648                 {
649                         Rectangle detailArrow;
650                         Bitmap* pBitmap = null;
651                         if (__pTableView->IsGroupExpanded(ID_GROUP_DATE_AND_TIME_FORMAT_LIST))
652                         {
653                                 pBitmap = ResourceManager::GetBitmapN(IDB_DETAIL_BUTTON_EXPAND_OPENED);
654                         }
655                         else
656                         {
657                                 pBitmap = ResourceManager::GetBitmapN(IDB_DETAIL_BUTTON_EXPAND_CLOSED);
658                         }
659
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;
664
665                         pLabel = new (std::nothrow) Label();
666                         pLabel->Construct(detailArrow, L"");
667
668                         pLabel->SetBackgroundBitmap(*pBitmap);
669
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);
673                 }
674
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);
681                 if (isEnabled)
682                 {
683                         pLabel->SetTextColor(COLOR_SUB_TEXT);
684                 }
685                 else
686                 {
687                         pLabel->SetTextColor(COLOR_SUB_DISABLED_TEXT);
688                 }
689
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);
694         }
695         else
696         {
697                 RelativeLayout relativeLayout;
698                 relativeLayout.Construct();
699
700                 pItem->Construct(relativeLayout, Dimension(itemWidth, itemHeight), style);
701                 pItem->SetBackgroundColor(COLOR_BG_GROUP_ITEM_DEFAULT);
702
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);
708
709                 pItem->AddControl(pLabel);
710
711                 switch (style)
712                 {
713                 case TABLE_VIEW_ANNEX_STYLE_RADIO:
714                         {
715                                 relativeLayout.SetMargin(*pLabel, RELATIVE_LAYOUT_LEFT_MARGIN, RELATIVE_LAYOUT_RIGHT_MARGIN, 0, 0);
716                         }
717                         break;
718
719                 case TABLE_VIEW_ANNEX_STYLE_ONOFF_SLIDING:
720                         {
721                                 relativeLayout.SetMargin(*pLabel, itemMainRectangle.x, RELATIVE_LAYOUT_RIGHT_MARGIN_ONOFF_SLIDING, 0, 0);
722                         }
723                         break;
724
725                 default:
726                         {
727                                 relativeLayout.SetMargin(*pLabel, itemMainRectangle.x, RELATIVE_LAYOUT_RIGHT_MARGIN, 0, 0);
728                         }
729                         break;
730                 }
731
732                 relativeLayout.SetRelation(*pLabel, pItem, RECT_EDGE_RELATION_LEFT_TO_LEFT);
733                 relativeLayout.SetRelation(*pLabel, pItem, RECT_EDGE_RELATION_RIGHT_TO_RIGHT);
734         }
735
736         return pItem;
737 }
738
739 bool
740 DateTimeForm::DeleteGroupItem(int groupIndex, TableViewGroupItem* pItem)
741 {
742         AppLogDebug("ENTER");
743
744         delete pItem;
745         pItem = null;
746
747         return true;
748 }
749
750 bool
751 DateTimeForm::DeleteItem(int groupIndex, int itemIndex, TableViewItem* pItem)
752 {
753         AppLogDebug("ENTER");
754
755         delete pItem;
756         pItem = null;   
757
758         return true;
759 }
760
761 void
762 DateTimeForm::OnGroupedTableViewItemStateChanged(Tizen::Ui::Controls::GroupedTableView& tableView, int groupIndex, int itemIndex, Tizen::Ui::Controls::TableViewItem* pItem, Tizen::Ui::Controls::TableViewItemStatus status)
763 {
764         SceneManager* pSceneManager = SceneManager::GetInstance();
765         AppAssert(pSceneManager);
766
767         AppLogDebug("group[%d] index[%d]", groupIndex, itemIndex);
768
769         result r;
770
771         switch (groupIndex)
772         {
773         case ID_GROUP_DATE_AND_TIME_MAIN:
774                 {
775                         bool automaticUpdateStatus = tableView.IsItemChecked(groupIndex, itemIndex);
776
777                         if (status == TABLE_VIEW_ITEM_STATUS_SELECTED)
778                         {
779                                 automaticUpdateStatus = (!(automaticUpdateStatus));
780                         }
781
782                         r = SettingInfo::SetValue(SETTING_INFO_KEY_LOCALE_UPDATE_AUTO, automaticUpdateStatus);
783                         if (IsFailed(r))
784                         {
785                                 AppLogException("SetValue(locale.update.auto) failed(%s)", GetErrorMessage(r));
786                         }
787                         else
788                         {
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();
793                         }
794                 }
795                 break;
796
797         case ID_GROUP_DATE_AND_TIME_LOCAL_TIME:
798                 {
799                         if (itemIndex == ID_ITEM_DATE_AND_TIME_TIME_ZONE)
800                         {
801                                 pSceneManager->GoForward(ForwardSceneTransition(IDSCN_TIME_ZONE, SCENE_TRANSITION_ANIMATION_TYPE_LEFT));
802                         }
803                         else if (itemIndex == ID_ITEM_DATE_AND_TIME_DATE_AND_TIME)
804                         {
805                                 //TODO: make operation time and date
806                         }
807                 }
808                 break;
809
810         case ID_GROUP_DATE_AND_TIME_FORMAT:
811                 {
812                         AppLogDebug("ID_ITEM_DATE_AND_TIME_FORMAT_TIME_FORMAT Detail");
813
814                         if (tableView.IsGroupExpanded(ID_GROUP_DATE_AND_TIME_FORMAT_LIST) == true)
815                         {
816                                 tableView.CollapseGroup(ID_GROUP_DATE_AND_TIME_FORMAT_LIST);
817                         }
818                         else
819                         {
820                                 tableView.ExpandGroup(ID_GROUP_DATE_AND_TIME_FORMAT_LIST);
821                         }
822                         tableView.RefreshItem(groupIndex, itemIndex, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
823                         tableView.ScrollToItem(groupIndex, itemIndex);
824                 }
825                 break;
826
827         case ID_GROUP_DATE_AND_TIME_FIRST_DAY:
828                 {
829                         if (tableView.IsGroupExpanded(ID_GROUP_DATE_AND_TIME_FIRST_DAY_LIST) == true)
830                         {
831                                 tableView.CollapseGroup(ID_GROUP_DATE_AND_TIME_FIRST_DAY_LIST);
832                         }
833                         else
834                         {
835                                 tableView.ExpandGroup(ID_GROUP_DATE_AND_TIME_FIRST_DAY_LIST);
836                         }
837                 }
838                 break;
839
840         case ID_GROUP_DATE_AND_TIME_FIRST_DAY_LIST:
841                 {
842                         String firstDay;
843
844                         if (itemIndex == ID_ITEM_DATE_AND_TIME_FORMAT_FIRST_DAY_MONDAY)
845                         {
846                                 firstDay = L"Monday";
847                         }
848                         else
849                         {
850                                 firstDay = L"Sunday";
851                         }
852
853                         if (SettingInfo::SetValue(SETTING_INFO_KEY_LOCALE_TIME_FORMAT_FIRSTDAY, firstDay) != E_SUCCESS)
854                         {
855                                 AppLogDebug("SettingInfo::GetValue() fail(%s)", GetErrorMessage(GetLastResult()));
856                         }
857                 }
858                 break;
859
860         case ID_GROUP_DATE_AND_TIME_FORMAT_LIST:
861                 {
862                         bool timeFormat = false;
863
864                         switch (itemIndex)
865                         {
866                         case ID_ITEM_DATE_AND_TIME_FORMAT_12_HOURS:
867                                 {
868                                         timeFormat = false;
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);
871                                 }
872                                 break;
873
874                         case ID_ITEM_DATE_AND_TIME_FORMAT_24_HOURS:
875                                 {
876                                         timeFormat = true;
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);
879                                 }
880                                 break;
881
882                         default:
883                                 break;
884                         }
885
886                         if (SettingInfo::SetValue(SETTING_INFO_KEY_LOCALE_TIME_FORMAT_24HOUR, timeFormat) != E_SUCCESS)
887                         {
888                                 AppLogDebug("SettingInfo::GetValue() fail(%s)", GetErrorMessage(GetLastResult()));
889                         }
890
891                         tableView.RefreshAllItems();
892                 }
893                 break;
894
895         default:
896                 break;
897         }
898 }
899
900 void
901 DateTimeForm::OnDateChanged(const Tizen::Ui::Control& source, int year, int month, int day)
902 {
903         LocaleManager localeManager;
904         localeManager.Construct();
905         TimeZone timeZone = localeManager.GetSystemTimeZone();
906
907         DateTime wallTime;
908         DateTime utcTime;
909         SystemTime::GetCurrentTime(TIME_MODE_WALL, wallTime);
910
911         wallTime.SetValue(year, month, day, wallTime.GetHour(), wallTime.GetMinute(), wallTime.GetSecond());
912         utcTime =  timeZone.WallTimeToUtcTime(wallTime);
913
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());
919         __pTimer->Cancel();
920         __pTimer->Start(interval);
921 }
922
923 void
924 DateTimeForm::OnDateChangeCanceled(const Tizen::Ui::Control& source)
925 {
926 }
927
928 void
929 DateTimeForm::OnTimeChanged(const Control& source, int hour, int minute)
930 {
931         LocaleManager localeManager;
932         localeManager.Construct();
933         TimeZone timeZone = localeManager.GetSystemTimeZone();
934
935         DateTime wallTime;
936         DateTime utcTime;
937         SystemTime::GetCurrentTime(TIME_MODE_WALL, wallTime);
938
939         wallTime.SetValue(wallTime.GetYear(), wallTime.GetMonth(), wallTime.GetDay(), hour, minute, 0);
940         utcTime =  timeZone.WallTimeToUtcTime(wallTime);
941
942         SystemTime::SetCurrentTime(utcTime);
943         __pTimer->Cancel();
944         __pTimer->Start(NO_OF_SECONDS * ONE_SECOND_TIME_INTERVAL);
945 }
946
947 void
948 DateTimeForm::OnTimeChangeCanceled(const Control& source)
949 {
950 }
951
952 int
953 DateTimeForm::GetDefaultGroupItemHeight(void)
954 {
955         return H_GROUP_INDEX_NO_TITLE_DEFAULT;
956 }
957
958 int
959 DateTimeForm::GetDefaultItemHeight(void)
960 {
961         return H_GROUP_ITEM_DEFAULT;
962 }
963
964 void
965 DateTimeForm::UpdateGroupItem(int groupIndex, Tizen::Ui::Controls::TableViewGroupItem* pItem)
966 {
967 }
968
969 void
970 DateTimeForm::UpdateItem(int groupIndex, int itemIndex, Tizen::Ui::Controls::TableViewItem* pItem)
971 {
972         if (groupIndex == ID_GROUP_DATE_AND_TIME_LOCAL_TIME)
973         {
974                 if (itemIndex == ID_ITEM_DATE_AND_TIME_DATE_AND_TIME)
975                 {
976                         EditTime* pEditTime = static_cast<EditTime*>(pItem->GetControl(EDIT_TIME_CONTROL));
977                         if (pEditTime == null)
978                         {
979                                 AppLogDebug("pEditTime update Fail");
980                                 return;
981                         }
982                         bool hourFormat = false;
983                         if (SettingInfo::GetValue(SETTING_INFO_KEY_LOCALE_TIME_FORMAT_24HOUR, hourFormat) == E_SUCCESS)
984                         {
985                                 pEditTime->Set24HourNotationEnabled(hourFormat);
986                         }
987
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();
994
995                         EditDate* pEditDate = static_cast<EditDate*>(pItem->GetControl(EDIT_DATE_CONTROL));
996                         if (pEditTime == null)
997                         {
998                                 AppLogDebug("pEditDate update Fail");
999                                 return;
1000                         }
1001                         pEditDate->SetCurrentDate();
1002                 }
1003                 else if (itemIndex == ID_ITEM_DATE_AND_TIME_TIME_ZONE)
1004                 {
1005                         Label* pLabelSub = static_cast<Label*>(pItem->GetControl(SUB_TEXT_CONTROL));
1006
1007                         if (__pTableView->IsItemEnabled(ID_GROUP_DATE_AND_TIME_LOCAL_TIME, ID_ITEM_DATE_AND_TIME_TIME_ZONE))
1008                         {
1009                                 pLabelSub->SetTextColor(COLOR_SUB_TEXT);
1010                         }
1011                         else
1012                         {
1013                                 pLabelSub->SetTextColor(COLOR_SUB_DISABLED_TEXT);
1014                         }
1015                 }
1016                 pItem->Invalidate(true);
1017         }
1018         else if (groupIndex == ID_GROUP_DATE_AND_TIME_FORMAT)
1019         {
1020                 String timeFormat;
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;
1024
1025                 if (__pTableView->IsGroupExpanded(ID_GROUP_DATE_AND_TIME_FORMAT_LIST))
1026                 {
1027                         pBitmap = ResourceManager::GetBitmapN(IDB_DETAIL_BUTTON_EXPAND_OPENED);
1028                 }
1029                 else
1030                 {
1031                         pBitmap = ResourceManager::GetBitmapN(IDB_DETAIL_BUTTON_EXPAND_CLOSED);
1032                 }
1033
1034                 bool hourFormat = false;
1035
1036                 if (SettingInfo::GetValue(SETTING_INFO_KEY_LOCALE_TIME_FORMAT_24HOUR, hourFormat) != E_SUCCESS)
1037                 {
1038                         AppLogDebug("SettingInfo::GetValue() fail(%s)", GetErrorMessage(GetLastResult()));
1039                 }
1040
1041                 if (hourFormat == 0)
1042                 {
1043                         timeFormat = ResourceManager::GetString(L"IDS_COM_BODY_12_HOURS");
1044                 }
1045                 else
1046                 {
1047                         timeFormat = ResourceManager::GetString(L"IDS_ST_BODY_24_HOURS");
1048                 }
1049
1050                 pLabelSecondLine->SetText(timeFormat);
1051                 pLabelSecondLine->Invalidate(false);
1052
1053                 pLabelBitmap->SetBackgroundBitmap(*pBitmap);
1054                 pLabelBitmap->Invalidate(false);
1055                 delete pBitmap;
1056         }
1057         pItem->Invalidate(false);
1058 }
1059
1060 void
1061 DateTimeForm::OnGroupedTableViewContextItemActivationStateChanged(Tizen::Ui::Controls::GroupedTableView& tableView, int groupIndex, int itemIndex, Tizen::Ui::Controls::TableViewContextItem* pContextItem, bool activated)
1062 {
1063 }
1064
1065 void
1066 DateTimeForm::OnGroupedTableViewGroupItemStateChanged(Tizen::Ui::Controls::GroupedTableView& tableView, int groupIndex, Tizen::Ui::Controls::TableViewGroupItem* pItem, Tizen::Ui::Controls::TableViewItemStatus status)
1067 {
1068 }
1069
1070 void
1071 DateTimeForm::OnOrientationChanged(const Tizen::Ui::Control& source, Tizen::Ui::OrientationStatus orientationStatus)
1072 {
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);
1075 }
1076
1077 void
1078 DateTimeForm::OnUserEventReceivedN(RequestId requestId, Tizen::Base::Collection::IList* pArgs)
1079 {
1080         if (requestId == REFRESH_REQUEST_EVENT)
1081         {
1082                 if (__pTableView)
1083                 {
1084                         bool hourFormat = false;
1085
1086                         if (SettingInfo::GetValue(SETTING_INFO_KEY_LOCALE_TIME_FORMAT_24HOUR, hourFormat) != E_SUCCESS)
1087                         {
1088                                 AppLogDebug("SettingInfo::GetValue() fail(%s)", GetErrorMessage(GetLastResult()));
1089                         }
1090
1091                         if (hourFormat == false)
1092                         {
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);
1095                         }
1096                         else
1097                         {
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);
1100                         }
1101                         __pTableView->RefreshAllItems();
1102                 }
1103                 if (pArgs)
1104                 {
1105                         pArgs->RemoveAll(true);
1106                         delete pArgs;
1107                 }
1108         }
1109 }
1110
1111 void
1112 DateTimeForm::OnTimerExpired(Timer& timer)
1113 {
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);
1116 }