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