Fixed Nabi issues N_SE-43611, N_SE-43441
[apps/osp/Settings.git] / src / StLanguageAndRegionForm.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                StLanguageAndRegionForm.cpp
19  * @brief               This is the implementation file for LocaleForm class.
20  */
21
22 #include <FLocales.h>
23 #include "StLanguageAndRegionForm.h"
24 #include "StResourceManager.h"
25 #include "StSettingScenesList.h"
26 #include "StTypes.h"
27
28 using namespace Tizen::App;
29 using namespace Tizen::Base;
30 using namespace Tizen::Base::Collection;
31 using namespace Tizen::Base::Utility;
32 using namespace Tizen::Graphics;
33 using namespace Tizen::Locales;
34 using namespace Tizen::System;
35 using namespace Tizen::Ui;
36 using namespace Tizen::Ui::Controls;
37 using namespace Tizen::Ui::Scenes;
38
39 static const int ID_GROUP_LANGUAGE_AND_REGION_MAIN = 0;
40 static const int ID_GROUP_LANGUAGE_AND_REGION_MAIN_ITEM_COUNT = 2;
41 static const int ID_ITEM_LANGUAGE_AND_REGION_MAIN_DISPLAY_LANGUAGE = 0;
42 static const int ID_ITEM_LANGUAGE_AND_REGION_MAIN_REGION = 1;
43
44 static const int ID_GROUP_LANGUAGE_AND_REGION_MAIN_TEXT = 1;
45
46 static const int ID_GROUP_KEYBOARD = 2;
47 static const int ID_ITEM_KEYBOARD = 0;
48 static const int ID_GROUP_KEYBOARD_ITEM_COUNT = 1;
49
50 static const int ID_GROUP_COUNT = 3;
51 static const int ID_GROUP_MAX_ITEM_COUNT = ID_GROUP_LANGUAGE_AND_REGION_MAIN_ITEM_COUNT;
52 static const int H_HELP_TEXT_GAP = 4;
53
54 static const int ID_GROUP_LANGUAGE_ITEM_COUNT = 51;
55 static const int DEFAULT_COUNT = 1;
56 static const int FIRST_CONTROL = 0;
57 static const int SECOND_CONTROL = 1;
58 static const int REFRESH_GROUP_ITEM_INDEX = -1;
59 static const int MAIN_TEXT_WIDTH_GAP = 32;
60
61 static const int NUMBER_TEXT_HEIGHT_GAP = 5;
62
63 static const long DEFAULT_INPUT_NUMBER = 123456789;
64
65 static const wchar_t* languageCode[ID_GROUP_LANGUAGE_ITEM_COUNT] =
66 {
67         L"ara_AE",
68         L"aze_AZ",
69         L"bul_BG",
70         L"cat_ES",
71         L"ces_CZ",
72         L"dan_DK",
73         L"deu_DE",
74         L"ell_GR",
75         L"eng_GB",
76         L"eng_PH",
77         L"eng_US",
78         L"est_EE",
79         L"eus_ES",
80         /*L"fas_AF",*/
81         L"fin_FI",
82         L"fra_CA",
83         L"fra_FR",
84         L"gle_IE",
85         L"glg_ES",
86         L"hin_IN",
87         L"hrv_HR",
88         L"hun_HU",
89         L"hye_AM",
90         L"isl_IS",
91         L"ita_IT",
92         L"jpn_JP",
93         L"kat_GE",
94         L"kaz_KZ",
95         L"kor_KR",
96         L"lav_LV",
97         L"lit_LT",
98         L"mkd_MK",
99         L"nld_NL",
100         L"nob_NO",
101         L"pol_PL",
102         L"por_BR",
103         L"por_PT",
104         L"ron_RO",
105         L"rus_RU",
106         L"slk_SK",
107         L"slv_SI",
108         L"spa_ES",
109         L"spa_MX",
110         L"srp_RS",
111         L"swe_SE",
112         /*L"tha_TH",*/
113         L"tur_TR",
114         L"ukr_UA",
115         /*L"urd_IN",*/
116         L"uzb_UZ",
117         L"zho_CN",
118         L"zho_HK",
119         L"zho_SG",
120         L"zho_TW"
121 };
122
123 LocaleForm::LocaleForm(void)
124         : __languageDataList(null)
125         , __isRunningAppControl(false)
126 {
127 }
128
129 LocaleForm::~LocaleForm(void)
130 {
131 }
132
133
134 void
135 LocaleForm::InitLanguageList(void)
136 {
137         int i = 0;
138         String key;
139         String displayName;
140         String data;
141
142         if (__languageDataList != null)
143         {
144                 delete __languageDataList;
145                 __languageDataList = null;
146         }
147
148         __languageDataList = new (std::nothrow) ArrayList(SingleObjectDeleter);
149         __languageDataList->Construct();
150
151         // ara_AE
152         data = L"";
153         key = languageCode[i++];
154         displayName = ResourceManager::GetString(L"IDS_IME_BODY_ARABIC");
155         data.Append(displayName + L"/" + key);
156         __languageDataList->Add(*(new (std::nothrow) String(data)));
157
158         // aze_AZ
159         data = L"";
160         key = languageCode[i++];
161         displayName = ResourceManager::GetString(L"IDS_IME_BODY_LANG_AZERBAIJANI");
162         data.Append(displayName + L"/" + key);
163         __languageDataList->Add(*(new (std::nothrow) String(data)));
164
165         // bul_BG
166         data = L"";
167         key = languageCode[i++];
168         displayName = ResourceManager::GetString(L"IDS_IME_BODY_LANG_BULGARIAN");
169         data.Append(displayName + L"/" + key);
170         __languageDataList->Add(*(new (std::nothrow) String(data)));
171
172         // cat_ES
173         data = L"";
174         key = languageCode[i++];
175         displayName = ResourceManager::GetString(L"IDS_IME_BODY_LANG_CATALAN");
176         data.Append(displayName + L"/" + key);
177         __languageDataList->Add(*(new (std::nothrow) String(data)));
178
179         // ces_CZ
180         data = L"";
181         key = languageCode[i++];
182         displayName = ResourceManager::GetString(L"IDS_IME_OPT_LANG_CZECH");
183         data.Append(displayName + L"/" + key);
184         __languageDataList->Add(*(new (std::nothrow) String(data)));
185
186         // dan_DK
187         data = L"";
188         key = languageCode[i++];
189         displayName = ResourceManager::GetString(L"IDS_IME_OPT_LANG_DANISH");
190         data.Append(displayName + L"/" + key);
191         __languageDataList->Add(*(new (std::nothrow) String(data)));
192
193         // deu_DE
194         data = L"";
195         key = languageCode[i++];
196         displayName = ResourceManager::GetString(L"IDS_IME_OPT_LANG_GERMAN");
197         data.Append(displayName + L"/" + key);
198         __languageDataList->Add(*(new (std::nothrow) String(data)));
199
200         // ell_GR
201         data = L"";
202         key = languageCode[i++];
203         displayName = ResourceManager::GetString(L"IDS_IME_OPT_LANG_GREEK");
204         data.Append(displayName + L"/" + key);
205         __languageDataList->Add(*(new (std::nothrow) String(data)));
206
207         // eng_GB
208         data = L"";
209         key = languageCode[i++];
210         displayName = ResourceManager::GetString(L"IDS_IME_BODY_LANG_ENGLISH_HUNITED_KINGDOM");
211         data.Append(displayName + L"/" + key);
212         __languageDataList->Add(*(new (std::nothrow) String(data)));
213
214         // eng_PH
215         data = L"";
216         key = languageCode[i++];
217         displayName = ResourceManager::GetString(L"IDS_IME_OPT_LANG_ENGLISH");
218         displayName.Append(L" (");
219         displayName.Append(ResourceManager::GetString(L"IDS_WCL_BODY_PHILIPPINES"));
220         displayName.Append(L")");
221         data.Append(displayName + L"/" + key);
222         __languageDataList->Add(*(new (std::nothrow) String(data)));
223
224         // eng_US
225         data = L"";
226         key = languageCode[i++];
227         displayName = ResourceManager::GetString(L"IDS_IME_BODY_LANG_ENGLISH_HUNITED_STATES");
228         data.Append(displayName + L"/" + key);
229         __languageDataList->Add(*(new (std::nothrow) String(data)));
230
231         // est_EE
232         data = L"";
233         key = languageCode[i++];
234         displayName = ResourceManager::GetString(L"IDS_IME_POP_LANG_ESTONIAN");
235         data.Append(displayName + L"/" + key);
236         __languageDataList->Add(*(new (std::nothrow) String(data)));
237
238         // eus_ES
239         data = L"";
240         key = languageCode[i++];
241         displayName = ResourceManager::GetString(L"IDS_IME_BODY_LANG_BASQUE");
242         data.Append(displayName + L"/" + key);
243         __languageDataList->Add(*(new (std::nothrow) String(data)));
244 #if 0
245         // fas_AF
246         data = L"";
247         key = languageCode[i++];
248         displayName = ResourceManager::GetString(L"IDS_IME_BODY_FARSI");
249         data.Append(displayName + L"/" + key);
250         __languageDataList->Add(*(new (std::nothrow) String(data)));
251 #endif
252         // fin_FI
253         data = L"";
254         key = languageCode[i++];
255         displayName = ResourceManager::GetString(L"IDS_IME_OPT_LANG_FINNISH");
256         data.Append(displayName + L"/" + key);
257         __languageDataList->Add(*(new (std::nothrow) String(data)));
258
259         // fra_CA
260         data = L"";
261         key = languageCode[i++];
262         displayName = ResourceManager::GetString(L"IDS_IME_OPT_LANG_FRENCH");
263         displayName.Append(L" (");
264         displayName.Append(ResourceManager::GetString(L"IDS_WCL_BODY_CANADA"));
265         displayName.Append(L")");
266         data.Append(displayName + L"/" + key);
267         __languageDataList->Add(*(new (std::nothrow) String(data)));
268
269         // fra_FR
270         data = L"";
271         key = languageCode[i++];
272         displayName = ResourceManager::GetString(L"IDS_IME_OPT_LANG_FRENCH");
273         data.Append(displayName + L"/" + key);
274         __languageDataList->Add(*(new (std::nothrow) String(data)));
275
276         // gle_IE
277         data = L"";
278         key = languageCode[i++];
279         displayName = ResourceManager::GetString(L"IDS_IME_OPT_LANG_IRISH");
280         data.Append(displayName + L"/" + key);
281         __languageDataList->Add(*(new (std::nothrow) String(data)));
282
283         // glg_ES
284         data = L"";
285         key = languageCode[i++];
286         displayName = ResourceManager::GetString(L"IDS_IME_BODY_LANG_GALICIAN");
287         data.Append(displayName + L"/" + key);
288         __languageDataList->Add(*(new (std::nothrow) String(data)));
289
290         // hin_IN
291         data = L"";
292         key = languageCode[i++];
293         displayName = ResourceManager::GetString(L"IDS_IME_BODY_LANG_HINDI");
294         data.Append(displayName + L"/" + key);
295         __languageDataList->Add(*(new (std::nothrow) String(data)));
296
297         // hrv_HR
298         data = L"";
299         key = languageCode[i++];
300         displayName = ResourceManager::GetString(L"IDS_IME_OPT_LANG_CROATIAN");
301         data.Append(displayName + L"/" + key);
302         __languageDataList->Add(*(new (std::nothrow) String(data)));
303
304         // hun_HU
305         data = L"";
306         key = languageCode[i++];
307         displayName = ResourceManager::GetString(L"IDS_IME_OPT_LANG_HUNGARIAN");
308         data.Append(displayName + L"/" + key);
309         __languageDataList->Add(*(new (std::nothrow) String(data)));
310
311         // hye_AM
312         data = L"";
313         key = languageCode[i++];
314         displayName = ResourceManager::GetString(L"IDS_IME_BODY_ARMENIAN");
315         data.Append(displayName + L"/" + key);
316         __languageDataList->Add(*(new (std::nothrow) String(data)));
317
318         // isl_IS
319         data = L"";
320         key = languageCode[i++];
321         displayName = ResourceManager::GetString(L"IDS_IME_POP_LANG_ICELANDIC");
322         data.Append(displayName + L"/" + key);
323         __languageDataList->Add(*(new (std::nothrow) String(data)));
324
325         // ita_IT
326         data = L"";
327         key = languageCode[i++];
328         displayName = ResourceManager::GetString(L"IDS_IME_POP_LANG_ITALIAN");
329         data.Append(displayName + L"/" + key);
330         __languageDataList->Add(*(new (std::nothrow) String(data)));
331
332         // jpn_JP
333         data = L"";
334         key = languageCode[i++];
335         displayName = ResourceManager::GetString(L"IDS_IME_BODY_LANG_JAPANESE");
336         data.Append(displayName + L"/" + key);
337         __languageDataList->Add(*(new (std::nothrow) String(data)));
338
339         // kat_GE
340         data = L"";
341         key = languageCode[i++];
342         displayName = ResourceManager::GetString(L"IDS_IME_BODY_LANG_GEORGIAN");
343         data.Append(displayName + L"/" + key);
344         __languageDataList->Add(*(new (std::nothrow) String(data)));
345
346         // kaz_KZ
347         data = L"";
348         key = languageCode[i++];
349         displayName = ResourceManager::GetString(L"IDS_IME_OPT_LANG_KAZAKH");
350         data.Append(displayName + L"/" + key);
351         __languageDataList->Add(*(new (std::nothrow) String(data)));
352
353         // kor_KR
354         data = L"";
355         key = languageCode[i++];
356         displayName = ResourceManager::GetString(L"IDS_IME_OPT_LANG_KOREAN");
357         data.Append(displayName + L"/" + key);
358         __languageDataList->Add(*(new (std::nothrow) String(data)));
359
360         // lav_LV
361         data = L"";
362         key = languageCode[i++];
363         displayName = ResourceManager::GetString(L"IDS_IME_POP_LANG_LATVIAN");
364         data.Append(displayName + L"/" + key);
365         __languageDataList->Add(*(new (std::nothrow) String(data)));
366
367         // lit_LT
368         data = L"";
369         key = languageCode[i++];
370         displayName = ResourceManager::GetString(L"IDS_IME_POP_LANG_LITHUANIAN");
371         data.Append(displayName + L"/" + key);
372         __languageDataList->Add(*(new (std::nothrow) String(data)));
373
374         // mkd_MK
375         data = L"";
376         key = languageCode[i++];
377         displayName = ResourceManager::GetString(L"IDS_IME_POP_LANG_MACEDONIAN");
378         data.Append(displayName + L"/" + key);
379         __languageDataList->Add(*(new (std::nothrow) String(data)));
380
381         // nld_NL
382         data = L"";
383         key = languageCode[i++];
384         displayName = ResourceManager::GetString(L"IDS_IME_OPT_LANG_DUTCH");
385         data.Append(displayName + L"/" + key);
386         __languageDataList->Add(*(new (std::nothrow) String(data)));
387
388         // nob_NO
389         data = L"";
390         key = languageCode[i++];
391         displayName = ResourceManager::GetString(L"IDS_IME_POP_LANG_NORWEGIAN");
392         data.Append(displayName + L"/" + key);
393         __languageDataList->Add(*(new (std::nothrow) String(data)));
394
395         // pol_PL
396         data = L"";
397         key = languageCode[i++];
398         displayName = ResourceManager::GetString(L"IDS_IME_OPT_LANG_POLISH");
399         data.Append(displayName + L"/" + key);
400         __languageDataList->Add(*(new (std::nothrow) String(data)));
401
402         // por_BR
403         data = L"";
404         key = languageCode[i++];
405         displayName = ResourceManager::GetString(L"IDS_IME_POP_LANG_PORTUGUESE");
406         displayName.Append(L" (");
407         displayName.Append(ResourceManager::GetString(L"IDS_WCL_BODY_BRAZIL"));
408         displayName.Append(L")");
409         data.Append(displayName + L"/" + key);
410         __languageDataList->Add(*(new (std::nothrow) String(data)));
411
412         // por_PT
413         data = L"";
414         key = languageCode[i++];
415         displayName = ResourceManager::GetString(L"IDS_IME_POP_LANG_PORTUGUESE");
416         data.Append(displayName + L"/" + key);
417         __languageDataList->Add(*(new (std::nothrow) String(data)));
418
419         // ron_RO
420         data = L"";
421         key = languageCode[i++];
422         displayName = ResourceManager::GetString(L"IDS_IME_BODY_LANG_ROMANIAN");
423         data.Append(displayName + L"/" + key);
424         __languageDataList->Add(*(new (std::nothrow) String(data)));
425
426         // rus_RU
427         data = L"";
428         key = languageCode[i++];
429         displayName = ResourceManager::GetString(L"IDS_IME_OPT_LANG_RUSSIAN");
430         data.Append(displayName + L"/" + key);
431         __languageDataList->Add(*(new (std::nothrow) String(data)));
432
433         // slk_SK
434         data = L"";
435         key = languageCode[i++];
436         displayName = ResourceManager::GetString(L"IDS_IME_OPT_LANG_SLOVAK");
437         data.Append(displayName + L"/" + key);
438         __languageDataList->Add(*(new (std::nothrow) String(data)));
439
440         // slv_SI
441         data = L"";
442         key = languageCode[i++];
443         displayName = ResourceManager::GetString(L"IDS_IME_POP_LANG_SLOVENIAN");
444         data.Append(displayName + L"/" + key);
445         __languageDataList->Add(*(new (std::nothrow) String(data)));
446
447         // spa_ES
448         data = L"";
449         key = languageCode[i++];
450         displayName = ResourceManager::GetString(L"IDS_IME_OPT_LANG_SPANISH");
451         data.Append(displayName + L"/" + key);
452         __languageDataList->Add(*(new (std::nothrow) String(data)));
453
454         // spa_MX
455         data = L"";
456         key = languageCode[i++];
457         displayName = ResourceManager::GetString(L"IDS_IME_OPT_LANG_SPANISH");
458         displayName.Append(L" (");
459         displayName.Append(ResourceManager::GetString(L"IDS_WCL_BODY_MEXICO"));
460         displayName.Append(L")");
461         data.Append(displayName + L"/" + key);
462         __languageDataList->Add(*(new (std::nothrow) String(data)));
463
464         // srp_RS
465         data = L"";
466         key = languageCode[i++];
467         displayName = ResourceManager::GetString(L"IDS_IME_POP_LANG_SERBIAN");
468         data.Append(displayName + L"/" + key);
469         __languageDataList->Add(*(new (std::nothrow) String(data)));
470
471         // swe_SE
472         data = L"";
473         key = languageCode[i++];
474         displayName = ResourceManager::GetString(L"IDS_IME_POP_LANG_SWEDISH");
475         data.Append(displayName + L"/" + key);
476         __languageDataList->Add(*(new (std::nothrow) String(data)));
477 #if 0
478         // tha_TH
479         data = L"";
480         key = languageCode[i++];
481         displayName = ResourceManager::GetString(L"IDS_IME_BODY_THAI");
482         data.Append(displayName + L"/" + key);
483         __languageDataList->Add(*(new (std::nothrow) String(data)));
484 #endif
485         // tur_TR
486         data = L"";
487         key = languageCode[i++];
488         displayName = ResourceManager::GetString(L"IDS_IME_OPT_LANG_TURKISH");
489         data.Append(displayName + L"/" + key);
490         __languageDataList->Add(*(new (std::nothrow) String(data)));
491
492         // ukr_UA
493         data = L"";
494         key = languageCode[i++];
495         displayName = ResourceManager::GetString(L"IDS_IME_OPT_LANG_UKRAINIAN");
496         data.Append(displayName + L"/" + key);
497         __languageDataList->Add(*(new (std::nothrow) String(data)));
498 #if 0
499         // urd_IN
500         data = L"";
501         key = languageCode[i++];
502         displayName = ResourceManager::GetString(L"IDS_IME_BODY_URDU");
503         data.Append(displayName + L"/" + key);
504         __languageDataList->Add(*(new (std::nothrow) String(data)));
505 #endif
506         // uzb_UZ
507         data = L"";
508         key = languageCode[i++];
509         displayName = ResourceManager::GetString(L"IDS_IME_BODY_UZBEK");
510         data.Append(displayName + L"/" + key);
511         __languageDataList->Add(*(new (std::nothrow) String(data)));
512
513         // zho_CN
514         data = L"";
515         key = languageCode[i++];
516         displayName = ResourceManager::GetString(L"IDS_IME_BODY_CHINESE_SIMPLIFIED");
517         data.Append(displayName + L"/" + key);
518         __languageDataList->Add(*(new (std::nothrow) String(data)));
519
520         // zho_HK
521         data = L"";
522         key = languageCode[i++];
523         displayName = ResourceManager::GetString(L"IDS_IME_BODY_CHINESE_TRADITIONAL_HONGKONG");
524         data.Append(displayName + L"/" + key);
525         __languageDataList->Add(*(new (std::nothrow) String(data)));
526
527         // zho_SG
528         data = L"";
529         key = languageCode[i++];
530         displayName = ResourceManager::GetString(L"IDS_IME_BODY_CHINESE_SINGAPORE");
531         data.Append(displayName + L"/" + key);
532         __languageDataList->Add(*(new (std::nothrow) String(data)));
533
534         // zho_TW
535         data = L"";
536         key = languageCode[i++];
537         displayName = ResourceManager::GetString(L"IDS_IME_BODY_CHINESE_TRADITIONAL_TAIWAN");
538         data.Append(displayName + L"/" + key);
539         __languageDataList->Add(*(new (std::nothrow) String(data)));
540 }
541
542 void
543 LocaleForm::CreateFooter(void)
544 {
545         Footer* pFooter = GetFooter();
546         AppAssert(pFooter);
547
548         pFooter->SetStyle(FOOTER_STYLE_BUTTON_TEXT);
549         pFooter->AddActionEventListener(*this);
550
551         SetFormBackEventListener(this);
552 }
553
554 result
555 LocaleForm::OnInitializing(void)
556 {
557         InitLanguageList();
558         CreateHeader(ResourceManager::GetString(L"IDS_ST_BODY_LANGUAGE_AND_KEYBOARD"));
559         CreateTableView();
560
561         AddFocusEventListener(*this);
562
563         AppLogDebug("ENTER");
564
565         return E_SUCCESS;
566 }
567
568 result
569 LocaleForm::OnTerminating(void)
570 {
571         __pTableView = null;
572
573         SetFormBackEventListener(null);
574         return E_SUCCESS;
575 }
576
577 void
578 LocaleForm::OnSceneActivatedN(const Tizen::Ui::Scenes::SceneId& previousSceneId, const Tizen::Ui::Scenes::SceneId& currentSceneId, Tizen::Base::Collection::IList* pArgs)
579 {
580         Header* pHeader = GetHeader();
581         pHeader->SetTitleText(ResourceManager::GetString(L"IDS_ST_BODY_LANGUAGE_AND_KEYBOARD"));
582
583         if (previousSceneId.Equals(IDSCN_LOCALE_LANGUAGE, false))
584         {
585                 InitLanguageList();
586         }
587         __pTableView->Draw();
588         RefreshTableViewItem();
589 }
590
591 void
592 LocaleForm::OnSceneDeactivated(const Tizen::Ui::Scenes::SceneId& currentSceneId, const Tizen::Ui::Scenes::SceneId& nextSceneId)
593 {
594 }
595
596 void
597 LocaleForm::OnFormBackRequested(Tizen::Ui::Controls::Form& source)
598 {
599         SceneManager* pSceneManager = SceneManager::GetInstance();
600         AppAssert(pSceneManager);
601
602         pSceneManager->GoBackward(BackwardSceneTransition(SCENE_TRANSITION_ANIMATION_TYPE_RIGHT), null);
603 }
604
605 int
606 LocaleForm::GetGroupCount(void)
607 {
608         AppLogDebug("ENTER");
609         return ID_GROUP_COUNT;
610 }
611
612 int
613 LocaleForm::GetItemCount(int groupIndex)
614 {
615         int itemCount = 0;
616
617         switch (groupIndex)
618         {
619         case ID_GROUP_LANGUAGE_AND_REGION_MAIN:
620                 {
621                         itemCount = ID_GROUP_LANGUAGE_AND_REGION_MAIN_ITEM_COUNT;
622                 }
623                 break;
624
625         case ID_GROUP_KEYBOARD:
626                 {
627                         itemCount = ID_GROUP_KEYBOARD_ITEM_COUNT;
628                 }
629                 break;
630
631         default:
632                 break;
633         }
634         AppLogDebug("GetItemCount %d", itemCount);
635
636         return itemCount;
637 }
638
639 TableViewGroupItem*
640 LocaleForm::CreateGroupItem(int groupIndex, int itemWidth)
641 {
642         AppLogDebug("ENTER");
643
644         int itemHeight = H_GROUP_INDEX_NO_TITLE_DEFAULT;
645         int yItemOffset = H_GROUP_INDEX_HELP_TEXT_TOP_GAP;
646         LabelTextStyle style = LABEL_TEXT_STYLE_NORMAL;
647         Rectangle itemMainRectangle;
648         String groupText;
649         String dateText;
650         String numberText;
651         String timeText;
652         Label* pLabel = null;
653         int fontSize = GetFontSize();
654         int tmpHeight = 0;
655         String tmpText;
656         TableViewGroupItem* pItem = new (std::nothrow) TableViewGroupItem();
657
658         switch (groupIndex)
659         {
660         case ID_GROUP_LANGUAGE_AND_REGION_MAIN_TEXT:
661                 {
662                         String formattedString;
663                         String numberFormat;
664                         long inputNumber = DEFAULT_INPUT_NUMBER;
665
666                         LocaleManager localeManager;
667                         localeManager.Construct();
668
669                         Locale systemLocale = localeManager.GetSystemLocale();
670                         NumberFormatter* pNumberFormatter = NumberFormatter::CreateCurrencyFormatterN(systemLocale);
671                         DateTimeFormatter* pDateFormatter = DateTimeFormatter::CreateDateFormatterN(systemLocale);
672
673                         DateTime dateTime;
674                         SystemTime::GetCurrentTime(dateTime);
675
676                         groupText = ResourceManager::GetString(L"IDS_ST_BODY_REGIONAL_EXAMPLE");
677                         dateText = ResourceManager::GetString(L"IDS_ST_BODY_DATE");
678                         numberText = ResourceManager::GetString(L"IDS_ST_BODY_NUMBER");
679                         timeText = ResourceManager::GetString(L"IDS_COM_BODY_TIME");
680
681                         if (pDateFormatter)
682                         {
683                                 tmpHeight = GetHeightForStringArea(groupText, itemWidth, fontSize);
684                                 itemHeight += tmpHeight;
685
686                                 String localPattern;
687                                 if (SettingInfo::GetValue(L"http://tizen.org/setting/locale.date.format",localPattern) == E_SUCCESS)
688                                 {
689                                         pDateFormatter->ApplyPattern(localPattern);
690                                 }
691                                 else
692                                 {
693                                         pDateFormatter->ApplyPattern("EEE, MMM dd, yyyy");
694                                 }
695                                 pDateFormatter->Format(dateTime, formattedString);
696                                 formattedString = dateText + L" : " + formattedString;
697                                 groupText.Insert(L"\n" + formattedString, groupText.GetLength());
698
699                                 tmpText.Insert(formattedString, tmpText.GetLength());
700                                 tmpHeight = GetHeightForStringArea(tmpText, itemWidth, fontSize);
701                                 tmpText.Remove(0, tmpText.GetLength());
702                                 itemHeight += tmpHeight;
703
704                                 formattedString.Remove(0, formattedString.GetLength());
705                                 bool timeFormat = false;
706                                 pDateFormatter->ApplyPattern("hh : mm aa");
707                                 if (SettingInfo::GetValue(SETTING_INFO_KEY_LOCALE_TIME_FORMAT_24HOUR, timeFormat) == E_SUCCESS)
708                                 {
709                                         if (timeFormat == true)
710                                         {
711                                                 pDateFormatter->ApplyPattern("HH : mm");
712                                         }
713                                 }
714                                 pDateFormatter->Format(dateTime, formattedString);
715                                 formattedString = timeText + L" : " + formattedString;
716                                 groupText.Insert(L"\n" + formattedString, groupText.GetLength());
717
718                                 tmpText.Insert(formattedString, tmpText.GetLength());
719                                 tmpHeight = GetHeightForStringArea(tmpText, itemWidth, fontSize);
720                                 tmpText.Remove(0, tmpText.GetLength());
721                                 itemHeight += tmpHeight;
722
723                                 formattedString.Remove(0, formattedString.GetLength());
724                                 pNumberFormatter->Format(inputNumber, formattedString);
725                                 groupText.Insert(L"\n" + numberText + L" : " + formattedString, groupText.GetLength());
726
727                                 tmpText.Insert(formattedString, tmpText.GetLength());
728                                 int lineCount = 0;
729                                 int lineHeight = 0;
730                                 tmpHeight = GetLineheight(tmpText, itemWidth, fontSize, lineCount, lineHeight);
731                                 tmpText.Remove(0, tmpText.GetLength());
732                                 if (lineCount > 1)
733                                 {
734                                         tmpHeight = (lineCount + 1) * lineHeight;
735                                 }
736                                 else
737                                 {
738                                         formattedString = numberText + L" : " + formattedString;
739                                         tmpText.Remove(0, tmpText.GetLength());
740                                         tmpText.Insert(formattedString, tmpText.GetLength());
741                                         tmpHeight = GetLineheight(tmpText, itemWidth, fontSize, lineCount, lineHeight);
742                                 }
743                                 itemHeight += tmpHeight;
744                         }
745                         yItemOffset = H_GROUP_INDEX_HELP_TEXT_TOP_GAP / DIVIDE_BY_TWO;
746                 }
747                 break;
748
749         default:
750                 {
751                         yItemOffset = 0;
752                         itemHeight = 0;
753                 }
754                 break;
755         }
756
757         itemMainRectangle.x = X_GROUP_ITEM_DEFAULT_LABEL;
758         itemMainRectangle.y = yItemOffset;
759         itemMainRectangle.width = itemWidth;
760         itemMainRectangle.height = itemHeight;
761
762         RelativeLayout relativeLayout;
763         relativeLayout.Construct();
764
765         pItem->Construct(relativeLayout, Dimension(itemWidth, itemHeight));
766         pItem->SetBackgroundColor(COLOR_BG_GROUP_INDEX_DEFAULT);
767
768         pLabel = new (std::nothrow) Label();
769         pLabel->Construct(itemMainRectangle, groupText);
770         pLabel->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
771         pLabel->SetTextVerticalAlignment(ALIGNMENT_TOP);
772         pLabel->SetTextConfig(fontSize, style);
773         pLabel->SetTextColor(COLOR_HELP_TEXT_TYPE_01);
774
775         pItem->AddControl(pLabel);
776         relativeLayout.SetMargin(*pLabel, itemMainRectangle.x, 0, 0, 0);
777         relativeLayout.SetRelation(*pLabel, pItem, RECT_EDGE_RELATION_LEFT_TO_LEFT);
778         relativeLayout.SetRelation(*pLabel, pItem, RECT_EDGE_RELATION_RIGHT_TO_RIGHT);
779         pItem->SetEnabled(false);
780
781         return pItem;
782 }
783
784 TableViewItem*
785 LocaleForm::CreateItem(int groupIndex, int itemIndex, int itemWidth)
786 {
787         AppLogDebug("group[%d] index[%d]", groupIndex, itemIndex);
788         bool isItemSubText = false;
789         Rectangle itemMainRectangle;
790         Rectangle itemSubRectangle;
791         TableViewAnnexStyle style = TABLE_VIEW_ANNEX_STYLE_NORMAL;
792         String itemMainText;
793         String itemSubText;
794         String systemLocaleString;
795         Label* pLabel = null;
796         int fontSize = GetFontSize();
797         LocaleManager localeManager;
798         localeManager.Construct();
799         Locale locale = localeManager.GetSystemLocale();
800         int itemHeight = H_GROUP_ITEM_DEFAULT;
801
802         switch (groupIndex)
803         {
804         case ID_GROUP_LANGUAGE_AND_REGION_MAIN:
805                 {
806                         isItemSubText = true;
807
808                         switch (itemIndex)
809                         {
810                         case ID_ITEM_LANGUAGE_AND_REGION_MAIN_DISPLAY_LANGUAGE:
811                                 {
812                                         itemMainText = ResourceManager::GetString(L"IDS_ST_HEADER_DISPLAY_LANGUAGE");
813                                         if (SettingInfo::GetValue(SETTING_INFO_KEY_LOCALE_LANGUAGE, itemSubText) != E_SUCCESS)
814                                         {
815                                                 AppLogDebug("SettingInfo::GetValue() fail(%s)", GetErrorMessage(GetLastResult()));
816                                         }
817                                         else
818                                         {
819                                                 for (int i = 0; i< ID_GROUP_LANGUAGE_ITEM_COUNT; i++)
820                                                 {
821                                                         if (itemSubText.Equals(languageCode[i], false))
822                                                         {
823                                                                 String* pKey = static_cast<String*>(__languageDataList->GetAt(i));
824
825                                                                 StringTokenizer stringTokenizer(*pKey, L"/");
826                                                                 stringTokenizer.GetNextToken(itemSubText);
827                                                                 break;
828                                                         }
829                                                 }
830                                         }
831                                 }
832                                 break;
833
834                         case ID_ITEM_LANGUAGE_AND_REGION_MAIN_REGION:
835                                 {
836                                         itemMainText = ResourceManager::GetString(L"IDS_ST_BODY_REGION");
837                                         String localeLanguage;
838                                         if (SettingInfo::GetValue(SETTING_INFO_KEY_LOCALE_LANGUAGE, localeLanguage) != E_SUCCESS)
839                                         {
840                                                 AppLogDebug("GetValue: SETTING_INFO_KEY_LOCALE_LANGUAGE failed [%s]", GetErrorMessage(GetLastResult()));
841                                                 localeLanguage = L"eng_GB";
842                                         }
843
844                                         LanguageCode langCode = LANGUAGE_INVALID;
845                                         CountryCode countryCode = COUNTRY_INVALID;
846                                         StringTokenizer strTok(localeLanguage, L"_");
847                                         String token;
848
849                                         if (strTok.HasMoreTokens())
850                                         {
851                                                 strTok.GetNextToken(token);
852                                                 langCode = Locale::StringToLanguageCode(token);
853                                         }
854
855                                         if (strTok.HasMoreTokens())
856                                         {
857                                                 strTok.GetNextToken(token);
858                                                 countryCode = Locale::StringToCountryCode(token);
859                                         }
860
861                                         Locale currentLocale(langCode, countryCode);
862
863                                         locale.GetLanguageName(currentLocale, systemLocaleString);
864                                         itemSubText.Append(systemLocaleString + L" (");
865                                         systemLocaleString.Remove(0, systemLocaleString.GetLength());
866
867                                         locale.GetCountryName(currentLocale, systemLocaleString);
868                                         itemSubText.Append(systemLocaleString + L")");
869                                         systemLocaleString.Remove(0, systemLocaleString.GetLength());
870                                 }
871                                 break;
872
873                         default:
874                                 break;
875                         }
876                 }
877                 break;
878
879         case ID_GROUP_KEYBOARD:
880                 {
881                         itemMainText = ResourceManager::GetString(L"IDS_ST_BODY_KEYBOARD");
882                 }
883                 break;
884
885         default:
886                 break;
887         }
888
889         ItemTypeOneLine(itemMainRectangle);
890
891         TableViewItem* pItem = new (std::nothrow) TableViewItem();
892
893         if (isItemSubText == true)
894         {
895                 ItemTypeTwoLine(itemMainRectangle, itemSubRectangle, fontSize);
896                 itemHeight = (itemMainRectangle.height + itemSubRectangle.height);
897                 RelativeLayout relativeLayout;
898                 relativeLayout.Construct();
899
900                 pItem->Construct(relativeLayout, Dimension(itemWidth, itemHeight), style);
901                 pItem->SetBackgroundColor(COLOR_BG_GROUP_ITEM_DEFAULT);
902
903                 pLabel = new (std::nothrow) Label();
904                 pLabel->Construct(itemMainRectangle, itemMainText);
905                 pLabel->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
906                 pLabel->SetTextConfig(fontSize, LABEL_TEXT_STYLE_NORMAL);
907                 pLabel->SetTextColor(COLOR_MAIN_TEXT);
908
909                 pItem->AddControl(pLabel);
910                 relativeLayout.SetMargin(*pLabel, 0, RELATIVE_LAYOUT_RIGHT_MARGIN, 0, 0);
911                 relativeLayout.SetRelation(*pLabel, pItem, RECT_EDGE_RELATION_LEFT_TO_LEFT);
912                 relativeLayout.SetRelation(*pLabel, pItem, RECT_EDGE_RELATION_RIGHT_TO_RIGHT);
913
914                 pLabel = new (std::nothrow) Label();
915                 pLabel->Construct(itemSubRectangle, itemSubText);
916                 pLabel->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
917                 pLabel->SetTextVerticalAlignment(ALIGNMENT_TOP);
918                 pLabel->SetTextConfig(FONT_SIZE_SUB_TEXT, LABEL_TEXT_STYLE_NORMAL);
919                 pLabel->SetTextColor(COLOR_SUB_TEXT);
920
921                 pItem->AddControl(pLabel);
922                 relativeLayout.SetMargin(*pLabel, 0, RELATIVE_LAYOUT_RIGHT_MARGIN, 0, 0);
923                 relativeLayout.SetRelation(*pLabel, pItem, RECT_EDGE_RELATION_LEFT_TO_LEFT);
924                 relativeLayout.SetRelation(*pLabel, pItem, RECT_EDGE_RELATION_RIGHT_TO_RIGHT);
925         }
926         else
927         {
928                 RelativeLayout relativeLayout;
929                 relativeLayout.Construct();
930
931                 pItem->Construct(relativeLayout, Dimension(W_GROUP_ITEM_DEFAULT, H_GROUP_ITEM_DEFAULT), style);
932                 pItem->SetBackgroundColor(COLOR_BG_GROUP_ITEM_DEFAULT);
933
934                 pLabel = new (std::nothrow) Label();
935                 pLabel->Construct(itemMainRectangle, itemMainText);
936                 pLabel->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
937                 pLabel->SetTextConfig(fontSize, LABEL_TEXT_STYLE_BOLD);
938                 pLabel->SetTextColor(COLOR_MAIN_TEXT);
939
940                 pItem->AddControl(pLabel);
941                 relativeLayout.SetMargin(*pLabel, 0, RELATIVE_LAYOUT_RIGHT_MARGIN, 0, 0);
942                 relativeLayout.SetRelation(*pLabel, pItem, RECT_EDGE_RELATION_LEFT_TO_LEFT);
943                 relativeLayout.SetRelation(*pLabel, pItem, RECT_EDGE_RELATION_RIGHT_TO_RIGHT);
944         }
945
946         return pItem;
947 }
948
949 bool
950 LocaleForm::DeleteGroupItem(int groupIndex, TableViewGroupItem* pItem)
951 {
952         AppLogDebug("ENTER");
953
954         delete pItem;
955         pItem = null;
956
957         return true;
958 }
959
960 bool
961 LocaleForm::DeleteItem(int groupIndex, int itemIndex, TableViewItem* pItem)
962 {
963         AppLogDebug("ENTER");
964
965         delete pItem;
966         pItem = null;
967
968         return true;
969 }
970
971 void
972 LocaleForm::OnGroupedTableViewItemStateChanged(Tizen::Ui::Controls::GroupedTableView& tableView, int groupIndex, int itemIndex, Tizen::Ui::Controls::TableViewItem* pItem, Tizen::Ui::Controls::TableViewItemStatus status)
973 {
974         if (__isRunningAppControl == true)
975         {
976                 return;
977         }
978
979         SceneManager* pSceneManager = SceneManager::GetInstance();
980         AppAssert(pSceneManager);
981
982         AppLogDebug("group[%d] index[%d]", groupIndex, itemIndex);
983
984         switch (groupIndex)
985         {
986         case ID_GROUP_LANGUAGE_AND_REGION_MAIN:
987                 {
988                         if (itemIndex == ID_ITEM_LANGUAGE_AND_REGION_MAIN_DISPLAY_LANGUAGE)
989                         {
990                                 pSceneManager->GoForward(ForwardSceneTransition(IDSCN_LOCALE_LANGUAGE, SCENE_TRANSITION_ANIMATION_TYPE_LEFT), __languageDataList);
991                         }
992                         if (itemIndex == ID_ITEM_LANGUAGE_AND_REGION_MAIN_REGION)
993                         {
994                                 pSceneManager->GoForward(ForwardSceneTransition(IDSCN_LOCALE_REGION, SCENE_TRANSITION_ANIMATION_TYPE_LEFT), null);
995                         }
996                 }
997                 break;
998
999         case ID_GROUP_KEYBOARD:
1000                 {
1001                         #if 0
1002                         pSceneManager->GoForward(ForwardSceneTransition(IDSCN_KEYBOARD, SCENE_TRANSITION_ANIMATION_TYPE_LEFT), null);
1003                         #else
1004                         if (AppControl::FindAndStart(L"http://tizen.org/appcontrol/operation/setting/ime", null, null, null, null, null) == E_SUCCESS)
1005                         {
1006                                 __isRunningAppControl = true;
1007                         }
1008                         #endif
1009                 }
1010                 break;
1011
1012         default:
1013                 break;
1014         }
1015 }
1016
1017 int
1018 LocaleForm::GetDefaultGroupItemHeight(void)
1019 {
1020         return H_GROUP_INDEX_NO_TITLE_DEFAULT;
1021 }
1022
1023 int
1024 LocaleForm::GetDefaultItemHeight(void)
1025 {
1026         return H_GROUP_ITEM_DEFAULT;
1027 }
1028
1029 void
1030 LocaleForm::UpdateGroupItem(int groupIndex, Tizen::Ui::Controls::TableViewGroupItem* pItem)
1031 {
1032         switch (groupIndex)
1033         {
1034         case ID_GROUP_LANGUAGE_AND_REGION_MAIN_TEXT:
1035                 {
1036                         Rectangle pItemBounds = pItem->GetBounds();
1037                         Rectangle pBounds = GetClientAreaBounds();
1038                         Label* pGroupLabel = static_cast<Label*>(pItem->GetControl(FIRST_CONTROL));
1039                         int labelWidth = pItemBounds.width - MAIN_TEXT_WIDTH_GAP;
1040
1041                         String groupText;
1042                         String timeText;
1043                         String dateText;
1044                         String numberText;
1045                         String formattedString;
1046                         String numberFormat;
1047                         String tmpText;
1048                         long inputNumber = DEFAULT_INPUT_NUMBER;
1049                         int tempHeight = 0;
1050                         int itemHeight = 0;
1051                         int fontSize = GetFontSize();
1052
1053                         LocaleManager localeManager;
1054                         localeManager.Construct();
1055
1056                         Locale systemLocale = localeManager.GetSystemLocale();
1057                         NumberFormatter* pNumberFormatter = NumberFormatter::CreateCurrencyFormatterN(systemLocale);
1058                         DateTimeFormatter* pDateFormatter = DateTimeFormatter::CreateDateFormatterN(systemLocale);
1059
1060                         DateTime dateTime;
1061                         SystemTime::GetCurrentTime(dateTime);
1062
1063                         groupText = ResourceManager::GetString(L"IDS_ST_BODY_REGIONAL_EXAMPLE");
1064                         dateText = ResourceManager::GetString(L"IDS_ST_BODY_DATE");
1065                         numberText = ResourceManager::GetString(L"IDS_ST_BODY_NUMBER");
1066                         timeText = ResourceManager::GetString(L"IDS_COM_BODY_TIME");
1067
1068                         if (pDateFormatter)
1069                         {
1070                                 int lineCount = 0;
1071                                 int lineHeight = 0;
1072                                 tempHeight = GetLineheight(groupText, labelWidth, fontSize, lineCount, lineHeight);
1073                                 itemHeight += tempHeight;
1074
1075                                 String localPattern;
1076                                 if (SettingInfo::GetValue(L"http://tizen.org/setting/locale.date.format",localPattern) == E_SUCCESS)
1077                                 {
1078                                         pDateFormatter->ApplyPattern(localPattern);
1079                                 }
1080                                 else
1081                                 {
1082                                         pDateFormatter->ApplyPattern("EEE, MMM dd, yyyy");
1083                                 }
1084                                 pDateFormatter->Format(dateTime, formattedString);
1085                                 formattedString = dateText + L" : " + formattedString;
1086                                 groupText.Insert(L"\n" + formattedString, groupText.GetLength());
1087
1088                                 tmpText.Remove(0, tmpText.GetLength());
1089                                 tmpText.Insert(formattedString, tmpText.GetLength());
1090                                 tempHeight = GetLineheight(tmpText, labelWidth, fontSize, lineCount, lineHeight);
1091                                 itemHeight += tempHeight;
1092
1093                                 formattedString.Remove(0, formattedString.GetLength());
1094                                 bool timeFormat = false;
1095                                 pDateFormatter->ApplyPattern("hh : mm aa");
1096                                 if (SettingInfo::GetValue(SETTING_INFO_KEY_LOCALE_TIME_FORMAT_24HOUR, timeFormat) == E_SUCCESS)
1097                                 {
1098                                         if (timeFormat == true)
1099                                         {
1100                                                 pDateFormatter->ApplyPattern("HH : mm");
1101                                         }
1102                                 }
1103                                 pDateFormatter->Format(dateTime, formattedString);
1104                                 formattedString = timeText + L" : " + formattedString;
1105                                 groupText.Insert(L"\n" + formattedString, groupText.GetLength());
1106
1107                                 tmpText.Remove(0, tmpText.GetLength());
1108                                 tmpText.Insert(formattedString, tmpText.GetLength());
1109
1110                                 tempHeight = GetLineheight(tmpText, labelWidth, fontSize, lineCount, lineHeight);
1111                                 itemHeight += tempHeight;
1112
1113                                 formattedString.Remove(0, formattedString.GetLength());
1114                                 pNumberFormatter->Format(inputNumber, formattedString);
1115                                 groupText.Insert(L"\n" + numberText + L" : " + formattedString, groupText.GetLength());
1116
1117                                 tmpText.Remove(0, tmpText.GetLength());
1118                                 tmpText.Insert(formattedString, tmpText.GetLength());
1119                                 tempHeight = GetLineheight(tmpText, labelWidth, fontSize, lineCount, lineHeight);
1120                                 if (lineCount > 1)
1121                                 {
1122                                         tempHeight = (lineCount + 1) * lineHeight;
1123                                 }
1124                                 else
1125                                 {
1126                                         formattedString = numberText + L" : " + formattedString;
1127                                         tmpText.Remove(0, tmpText.GetLength());
1128                                         tmpText.Insert(formattedString, tmpText.GetLength());
1129                                         tempHeight = GetLineheight(tmpText, labelWidth, fontSize, lineCount, lineHeight);
1130                                 }
1131                                 itemHeight += tempHeight;
1132
1133                                 tmpText.Remove(0, tmpText.GetLength());
1134                         }
1135                         pItemBounds.height = itemHeight + NUMBER_TEXT_HEIGHT_GAP;
1136                         pItem->SetBounds(pItemBounds);
1137                         AppLogDebug("%d %d %d %d", pItemBounds.x, pItemBounds.y, pItemBounds.width, pItemBounds.height);
1138                         pItemBounds.y = H_GROUP_INDEX_HELP_TEXT_TOP_GAP;
1139                         pGroupLabel->SetBounds(pItemBounds);
1140                         pGroupLabel->SetText(groupText);
1141                         pGroupLabel->SetTextConfig(fontSize, LABEL_TEXT_STYLE_NORMAL);
1142                         pGroupLabel->Invalidate(false);
1143                         pItem->Invalidate(false);
1144                 }
1145                 break;
1146
1147         default:
1148                 break;
1149         }
1150 }
1151
1152 int
1153 LocaleForm::GetLineheight(Tizen::Base::String& src, int labelWidth, int fontSize, int& lineCount, int& lineHeight)
1154 {
1155         Font font;
1156         Dimension dim;
1157
1158         font.Construct(FONT_STYLE_PLAIN, fontSize);
1159         font.GetTextExtent(src, src.GetLength(), dim);
1160
1161         lineHeight = dim.height;
1162         if (dim.width > labelWidth)
1163         {
1164                 lineCount = (dim.width / labelWidth);
1165
1166                 if (dim.width % labelWidth)
1167                 {
1168                         lineCount += DEFAULT_COUNT;
1169                 }
1170         }
1171         else
1172         {
1173                 lineCount = DEFAULT_COUNT;
1174         }
1175         return (lineCount* dim.height);
1176 }
1177
1178 void
1179 LocaleForm::UpdateItem(int groupIndex, int itemIndex, Tizen::Ui::Controls::TableViewItem* pItem)
1180 {
1181         String firstLineText;
1182         String itemSubText;
1183
1184         Rectangle pItemBounds = pItem->GetBounds();
1185         Rectangle firstLineRect;
1186         Rectangle secondLineRect;
1187
1188         Label* pFirstLabel = null;
1189         Label* pSecondLabel = null;
1190
1191         int fontSize = GetFontSize();
1192
1193         switch (groupIndex)
1194         {
1195         case ID_GROUP_LANGUAGE_AND_REGION_MAIN:
1196                 {
1197                         pFirstLabel = static_cast<Label*>(pItem->GetControl(FIRST_CONTROL));
1198                         pSecondLabel = static_cast<Label*>(pItem->GetControl(SECOND_CONTROL));
1199
1200                         ItemTypeTwoLine(firstLineRect, secondLineRect, fontSize);
1201                         pItemBounds.height = (firstLineRect.height + secondLineRect.height);
1202
1203                         switch (itemIndex)
1204                         {
1205                         case ID_ITEM_LANGUAGE_AND_REGION_MAIN_DISPLAY_LANGUAGE:
1206                                 {
1207                                         firstLineText = ResourceManager::GetString(L"IDS_ST_HEADER_DISPLAY_LANGUAGE");
1208
1209                                         if (SettingInfo::GetValue(SETTING_INFO_KEY_LOCALE_LANGUAGE, itemSubText) != E_SUCCESS)
1210                                         {
1211                                                 AppLogDebug("SettingInfo::GetValue() fail(%s)", GetErrorMessage(GetLastResult()));
1212                                         }
1213                                         else
1214                                         {
1215                                                 for (int i = 0; i< ID_GROUP_LANGUAGE_ITEM_COUNT; i++)
1216                                                 {
1217                                                         if (itemSubText.Equals(languageCode[i], false))
1218                                                         {
1219                                                                 String* pKey = static_cast<String*>(__languageDataList->GetAt(i));
1220
1221                                                                 StringTokenizer stringTokenizer(*pKey, L"/");
1222                                                                 stringTokenizer.GetNextToken(itemSubText);
1223                                                                 break;
1224                                                         }
1225                                                 }
1226                                         }
1227                                         pItem->SetBounds(pItemBounds);
1228                                         pFirstLabel->SetText(firstLineText);
1229                                         pFirstLabel->SetTextConfig(fontSize, LABEL_TEXT_STYLE_NORMAL);
1230
1231                                         pSecondLabel->SetText(itemSubText);
1232                                         pSecondLabel->SetTextConfig(FONT_SIZE_SUB_TEXT, LABEL_TEXT_STYLE_NORMAL);
1233
1234                                         pFirstLabel->Invalidate(false);
1235                                         pSecondLabel->Invalidate(false);
1236                                         pItem->Invalidate(false);
1237                                 }
1238                                 break;
1239
1240                         case ID_ITEM_LANGUAGE_AND_REGION_MAIN_REGION:
1241                                 {
1242                                         LocaleManager localeManager;
1243                                         localeManager.Construct();
1244                                         Locale locale = localeManager.GetSystemLocale();
1245                                         String systemLocaleString;
1246
1247                                         firstLineText = ResourceManager::GetString(L"IDS_ST_BODY_REGION");
1248
1249                                         String localeLanguage;
1250                                         if (SettingInfo::GetValue(SETTING_INFO_KEY_LOCALE_LANGUAGE, localeLanguage) != E_SUCCESS)
1251                                         {
1252                                                 AppLogDebug("GetValue: SETTING_INFO_KEY_LOCALE_LANGUAGE failed [%s]", GetErrorMessage(GetLastResult()));
1253                                                 localeLanguage = L"eng_GB";
1254                                         }
1255
1256                                         LanguageCode langCode = LANGUAGE_INVALID;
1257                                         CountryCode countryCode = COUNTRY_INVALID;
1258                                         StringTokenizer strTok(localeLanguage, L"_");
1259                                         String token;
1260
1261                                         if (strTok.HasMoreTokens())
1262                                         {
1263                                                 strTok.GetNextToken(token);
1264                                                 langCode = Locale::StringToLanguageCode(token);
1265                                         }
1266
1267                                         if (strTok.HasMoreTokens())
1268                                         {
1269                                                 strTok.GetNextToken(token);
1270                                                 countryCode = Locale::StringToCountryCode(token);
1271                                         }
1272
1273                                         Locale currentLocale(langCode, countryCode);
1274
1275                                         locale.GetLanguageName(currentLocale, systemLocaleString);
1276                                         itemSubText.Append(systemLocaleString + L" (");
1277                                         systemLocaleString.Remove(0, systemLocaleString.GetLength());
1278
1279                                         locale.GetCountryName(currentLocale, systemLocaleString);
1280                                         itemSubText.Append(systemLocaleString + L")");
1281                                         systemLocaleString.Remove(0, systemLocaleString.GetLength());
1282
1283                                         pItem->SetBounds(pItemBounds);
1284                                         pFirstLabel->SetText(firstLineText);
1285                                         pFirstLabel->SetTextConfig(fontSize, LABEL_TEXT_STYLE_NORMAL);
1286
1287                                         pSecondLabel->SetText(itemSubText);
1288                                         pSecondLabel->SetTextConfig(FONT_SIZE_SUB_TEXT, LABEL_TEXT_STYLE_NORMAL);
1289
1290                                         pFirstLabel->Invalidate(false);
1291                                         pSecondLabel->Invalidate(false);
1292                                         pItem->Invalidate(false);
1293                                 }
1294                                 break;
1295
1296                         default:
1297                                 break;
1298                         }
1299                 }
1300                 break;
1301
1302         case ID_GROUP_KEYBOARD:
1303                 {
1304                         pFirstLabel = static_cast<Label*>(pItem->GetControl(FIRST_CONTROL));
1305
1306                         ItemTypeOneLine(firstLineRect);
1307                         pItemBounds.height = firstLineRect.height;
1308
1309                         firstLineText = ResourceManager::GetString(L"IDS_ST_BODY_KEYBOARD");
1310                         pItem->SetBounds(pItemBounds);
1311                         pFirstLabel->SetText(firstLineText);
1312                         pFirstLabel->SetTextConfig(fontSize, LABEL_TEXT_STYLE_NORMAL);
1313                         pFirstLabel->Invalidate(false);
1314                         pItem->Invalidate(false);
1315                 }
1316                 break;
1317
1318         default:
1319                 break;
1320         }
1321 }
1322
1323 void
1324 LocaleForm::OnGroupedTableViewContextItemActivationStateChanged(Tizen::Ui::Controls::GroupedTableView& tableView, int groupIndex, int itemIndex, Tizen::Ui::Controls::TableViewContextItem* pContextItem, bool activated)
1325 {
1326 }
1327
1328 void
1329 LocaleForm::OnGroupedTableViewGroupItemStateChanged(Tizen::Ui::Controls::GroupedTableView& tableView, int groupIndex, Tizen::Ui::Controls::TableViewGroupItem* pItem, Tizen::Ui::Controls::TableViewItemStatus status)
1330 {
1331 }
1332
1333 void
1334 LocaleForm::RefreshTableViewGroupItem(int groupIndex)
1335 {
1336         int itemCount = __pTableView->GetItemCountAt(groupIndex);
1337
1338         for (int index = REFRESH_GROUP_ITEM_INDEX; index < itemCount; index++)
1339         {
1340                 __pTableView->RefreshItem(groupIndex, index, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
1341         }
1342 }
1343
1344 void
1345 LocaleForm::RefreshTableViewItem(void)
1346 {
1347         if (__pTableView == null)
1348         {
1349                 return;
1350         }
1351
1352         int groupCount = __pTableView->GetGroupCount();
1353
1354         for (int index = 0; index < groupCount; index++)
1355         {
1356                 RefreshTableViewGroupItem(index);
1357         }
1358 }
1359
1360 void
1361 LocaleForm::OnOrientationChanged(const Tizen::Ui::Control& source, Tizen::Ui::OrientationStatus orientationStatus)
1362 {
1363         RefreshTableViewItem();
1364         Invalidate(true);
1365 }
1366
1367 void
1368 LocaleForm::OnFocusGained(const Tizen::Ui::Control& source)
1369 {
1370         __isRunningAppControl = false;
1371 }
1372
1373 void
1374 LocaleForm::OnFocusLost(const Tizen::Ui::Control& source)
1375 {
1376 }