Fixed N_SE-38563, N_SE-38552
[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         if (__isRunningAppControl == true)
961         {
962                 return;
963         }
964
965         SceneManager* pSceneManager = SceneManager::GetInstance();
966         AppAssert(pSceneManager);
967
968         AppLogDebug("group[%d] index[%d]", groupIndex, itemIndex);
969
970         switch (groupIndex)
971         {
972         case ID_GROUP_LANGUAGE_AND_REGION_MAIN:
973                 {
974                         if (itemIndex == ID_ITEM_LANGUAGE_AND_REGION_MAIN_DISPLAY_LANGUAGE)
975                         {
976                                 pSceneManager->GoForward(ForwardSceneTransition(IDSCN_LOCALE_LANGUAGE, SCENE_TRANSITION_ANIMATION_TYPE_LEFT), __languageDataList);
977                         }
978                         if (itemIndex == ID_ITEM_LANGUAGE_AND_REGION_MAIN_REGION)
979                         {
980                                 pSceneManager->GoForward(ForwardSceneTransition(IDSCN_LOCALE_REGION, SCENE_TRANSITION_ANIMATION_TYPE_LEFT), null);
981                         }
982                 }
983                 break;
984
985         case ID_GROUP_KEYBOARD:
986                 {
987                         #if 0
988                         pSceneManager->GoForward(ForwardSceneTransition(IDSCN_KEYBOARD, SCENE_TRANSITION_ANIMATION_TYPE_LEFT), null);
989                         #else
990                         if (AppControl::FindAndStart(L"http://tizen.org/appcontrol/operation/setting/ime", null, null, null, null, null) == E_SUCCESS)
991                         {
992                                 __isRunningAppControl = true;
993                         }
994                         #endif
995                 }
996                 break;
997
998         default:
999                 break;
1000         }
1001 }
1002
1003 int
1004 LocaleForm::GetDefaultGroupItemHeight(void)
1005 {
1006         return H_GROUP_INDEX_NO_TITLE_DEFAULT;
1007 }
1008
1009 int
1010 LocaleForm::GetDefaultItemHeight(void)
1011 {
1012         return H_GROUP_ITEM_DEFAULT;
1013 }
1014
1015 void
1016 LocaleForm::UpdateGroupItem(int groupIndex, Tizen::Ui::Controls::TableViewGroupItem* pItem)
1017 {
1018         switch (groupIndex)
1019         {
1020         case ID_GROUP_LANGUAGE_AND_REGION_MAIN_TEXT:
1021                 {
1022                         Rectangle pItemBounds = pItem->GetBounds();
1023                         Rectangle pBounds = GetClientAreaBounds();
1024                         Label* pGroupLabel = static_cast<Label*>(pItem->GetControl(FIRST_CONTROL));
1025                         int labelWidth = pItemBounds.width - MAIN_TEXT_WIDTH_GAP;
1026
1027                         String groupText;
1028                         String formattedString;
1029                         String numberFormat;
1030                         String tmpText;
1031                         long inputNumber = DEFAULT_INPUT_NUMBER;
1032                         int tempHeight = 0;
1033                         int itemHeight = 0;
1034                         int fontSize = GetFontSize();
1035
1036                         LocaleManager localeManager;
1037                         localeManager.Construct();
1038
1039                         Locale systemLocale = localeManager.GetSystemLocale();
1040                         NumberFormatter* pNumberFormatter = NumberFormatter::CreateCurrencyFormatterN(systemLocale);
1041                         DateTimeFormatter* pDateFormatter = DateTimeFormatter::CreateDateFormatterN(systemLocale);
1042
1043                         DateTime dateTime;
1044                         SystemTime::GetCurrentTime(dateTime);
1045
1046                         groupText = ResourceManager::GetString(L"IDS_ST_BODY_REGIONAL_EXAMPLE");
1047
1048                         if (pDateFormatter)
1049                         {
1050                                 int lineCount = 0;
1051                                 int lineHeight = 0;
1052                                 tempHeight = GetLineheight(groupText, labelWidth, fontSize, lineCount, lineHeight);
1053                                 itemHeight += tempHeight;
1054
1055                                 pDateFormatter->ApplyPattern("EEE, MMM dd, yyyy");
1056                                 pDateFormatter->Format(dateTime, formattedString);
1057                                 formattedString = L"Date : " + formattedString;
1058                                 groupText.Insert(L"\n" + formattedString, groupText.GetLength());
1059
1060                                 tmpText.Remove(0, tmpText.GetLength());
1061                                 tmpText.Insert(formattedString, tmpText.GetLength());
1062                                 tempHeight = GetLineheight(tmpText, labelWidth, fontSize, lineCount, lineHeight);
1063                                 itemHeight += tempHeight;
1064
1065                                 formattedString.Remove(0, formattedString.GetLength());
1066                                 bool timeFormat = false;
1067                                 pDateFormatter->ApplyPattern("hh : mm aa");
1068                                 if (SettingInfo::GetValue(SETTING_INFO_KEY_LOCALE_TIME_FORMAT_24HOUR, timeFormat) == E_SUCCESS)
1069                                 {
1070                                         if (timeFormat == true)
1071                                         {
1072                                                 pDateFormatter->ApplyPattern("HH : mm");
1073                                         }
1074                                 }
1075                                 pDateFormatter->Format(dateTime, formattedString);
1076                                 formattedString = L"Time : " + formattedString;
1077                                 groupText.Insert(L"\n" + formattedString, groupText.GetLength());
1078
1079                                 tmpText.Remove(0, tmpText.GetLength());
1080                                 tmpText.Insert(formattedString, tmpText.GetLength());
1081
1082                                 tempHeight = GetLineheight(tmpText, labelWidth, fontSize, lineCount, lineHeight);
1083                                 itemHeight += tempHeight;
1084
1085                                 formattedString.Remove(0, formattedString.GetLength());
1086                                 pNumberFormatter->Format(inputNumber, formattedString);
1087                                 groupText.Insert(L"\nNumber : " + formattedString, groupText.GetLength());
1088
1089                                 tmpText.Remove(0, tmpText.GetLength());
1090                                 tmpText.Insert(formattedString, tmpText.GetLength());
1091                                 tempHeight = GetLineheight(tmpText, labelWidth, fontSize, lineCount, lineHeight);
1092                                 if (lineCount > 1)
1093                                 {
1094                                         tempHeight = (lineCount + 1) * lineHeight;
1095                                 }
1096                                 else
1097                                 {
1098                                         formattedString = L"Number : " + formattedString;
1099                                         tmpText.Remove(0, tmpText.GetLength());
1100                                         tmpText.Insert(formattedString, tmpText.GetLength());
1101                                         tempHeight = GetLineheight(tmpText, labelWidth, fontSize, lineCount, lineHeight);
1102                                 }
1103                                 itemHeight += tempHeight;
1104
1105                                 tmpText.Remove(0, tmpText.GetLength());
1106                         }
1107                         pItemBounds.height = itemHeight;
1108                         pItem->SetBounds(pItemBounds);
1109                         AppLogDebug("%d %d %d %d", pItemBounds.x, pItemBounds.y, pItemBounds.width, pItemBounds.height);
1110                         pItemBounds.y = H_GROUP_INDEX_HELP_TEXT_TOP_GAP;
1111                         pGroupLabel->SetBounds(pItemBounds);
1112                         pGroupLabel->SetText(groupText);
1113                         pGroupLabel->SetTextConfig(fontSize, LABEL_TEXT_STYLE_NORMAL);
1114                         pGroupLabel->Invalidate(false);
1115                         pItem->Invalidate(false);
1116                 }
1117                 break;
1118
1119         default:
1120                 break;
1121         }
1122 }
1123
1124 int
1125 LocaleForm::GetLineheight(Tizen::Base::String& src, int labelWidth, int fontSize, int& lineCount, int& lineHeight)
1126 {
1127         Font font;
1128         Dimension dim;
1129
1130         font.Construct(FONT_STYLE_PLAIN, fontSize);
1131         font.GetTextExtent(src, src.GetLength(), dim);
1132
1133         lineHeight = dim.height;
1134         if (dim.width > labelWidth)
1135         {
1136                 lineCount = (dim.width / labelWidth);
1137
1138                 if (dim.width % labelWidth)
1139                 {
1140                         lineCount += DEFAULT_COUNT;
1141                 }
1142         }
1143         else
1144         {
1145                 lineCount = DEFAULT_COUNT;
1146         }
1147         return (lineCount* dim.height);
1148 }
1149
1150 void
1151 LocaleForm::UpdateItem(int groupIndex, int itemIndex, Tizen::Ui::Controls::TableViewItem* pItem)
1152 {
1153         String firstLineText;
1154         String itemSubText;
1155
1156         Rectangle pItemBounds = pItem->GetBounds();
1157         Rectangle firstLineRect;
1158         Rectangle secondLineRect;
1159
1160         Label* pFirstLabel = null;
1161         Label* pSecondLabel = null;
1162
1163         int fontSize = GetFontSize();
1164
1165         switch (groupIndex)
1166         {
1167         case ID_GROUP_LANGUAGE_AND_REGION_MAIN:
1168                 {
1169                         pFirstLabel = static_cast<Label*>(pItem->GetControl(FIRST_CONTROL));
1170                         pSecondLabel = static_cast<Label*>(pItem->GetControl(SECOND_CONTROL));
1171
1172                         ItemTypeTwoLine(firstLineRect, secondLineRect, fontSize);
1173                         pItemBounds.height = (firstLineRect.height + secondLineRect.height);
1174
1175                         switch (itemIndex)
1176                         {
1177                         case ID_ITEM_LANGUAGE_AND_REGION_MAIN_DISPLAY_LANGUAGE:
1178                                 {
1179                                         firstLineText = ResourceManager::GetString(L"IDS_ST_HEADER_DISPLAY_LANGUAGE");
1180
1181                                         if (SettingInfo::GetValue(SETTING_INFO_KEY_LOCALE_LANGUAGE, itemSubText) != E_SUCCESS)
1182                                         {
1183                                                 AppLogDebug("SettingInfo::GetValue() fail(%s)", GetErrorMessage(GetLastResult()));
1184                                         }
1185                                         else
1186                                         {
1187                                                 for (int i = 0; i< ID_GROUP_LANGUAGE_ITEM_COUNT; i++)
1188                                                 {
1189                                                         if (itemSubText.Equals(languageCode[i], false))
1190                                                         {
1191                                                                 String* pKey = static_cast<String*>(__languageDataList->GetAt(i));
1192
1193                                                                 StringTokenizer stringTokenizer(*pKey, L"/");
1194                                                                 stringTokenizer.GetNextToken(itemSubText);
1195                                                                 break;
1196                                                         }
1197                                                 }
1198                                         }
1199                                         pItem->SetBounds(pItemBounds);
1200                                         pFirstLabel->SetText(firstLineText);
1201                                         pFirstLabel->SetTextConfig(fontSize, LABEL_TEXT_STYLE_NORMAL);
1202
1203                                         pSecondLabel->SetText(itemSubText);
1204                                         pSecondLabel->SetTextConfig(FONT_SIZE_SUB_TEXT, LABEL_TEXT_STYLE_NORMAL);
1205
1206                                         pFirstLabel->Invalidate(false);
1207                                         pSecondLabel->Invalidate(false);
1208                                         pItem->Invalidate(false);
1209                                 }
1210                                 break;
1211
1212                         case ID_ITEM_LANGUAGE_AND_REGION_MAIN_REGION:
1213                                 {
1214                                         LocaleManager localeManager;
1215                                         localeManager.Construct();
1216                                         Locale locale = localeManager.GetSystemLocale();
1217                                         String systemLocaleString;
1218
1219                                         firstLineText = ResourceManager::GetString(L"IDS_ST_BODY_REGION");
1220
1221                                         String localeLanguage;
1222                                         if (SettingInfo::GetValue(SETTING_INFO_KEY_LOCALE_LANGUAGE, localeLanguage) != E_SUCCESS)
1223                                         {
1224                                                 AppLogDebug("GetValue: SETTING_INFO_KEY_LOCALE_LANGUAGE failed [%s]", GetErrorMessage(GetLastResult()));
1225                                                 localeLanguage = L"eng_GB";
1226                                         }
1227
1228                                         LanguageCode langCode = LANGUAGE_INVALID;
1229                                         CountryCode countryCode = COUNTRY_INVALID;
1230                                         StringTokenizer strTok(localeLanguage, L"_");
1231                                         String token;
1232
1233                                         if (strTok.HasMoreTokens())
1234                                         {
1235                                                 strTok.GetNextToken(token);
1236                                                 langCode = Locale::StringToLanguageCode(token);
1237                                         }
1238
1239                                         if (strTok.HasMoreTokens())
1240                                         {
1241                                                 strTok.GetNextToken(token);
1242                                                 countryCode = Locale::StringToCountryCode(token);
1243                                         }
1244
1245                                         Locale currentLocale(langCode, countryCode);
1246
1247                                         locale.GetLanguageName(currentLocale, systemLocaleString);
1248                                         itemSubText.Append(systemLocaleString + L"(");
1249                                         systemLocaleString.Remove(0, systemLocaleString.GetLength());
1250
1251                                         locale.GetCountryName(currentLocale, systemLocaleString);
1252                                         itemSubText.Append(systemLocaleString + L")");
1253                                         systemLocaleString.Remove(0, systemLocaleString.GetLength());
1254
1255                                         pItem->SetBounds(pItemBounds);
1256                                         pFirstLabel->SetText(firstLineText);
1257                                         pFirstLabel->SetTextConfig(fontSize, LABEL_TEXT_STYLE_NORMAL);
1258
1259                                         pSecondLabel->SetText(itemSubText);
1260                                         pSecondLabel->SetTextConfig(FONT_SIZE_SUB_TEXT, LABEL_TEXT_STYLE_NORMAL);
1261
1262                                         pFirstLabel->Invalidate(false);
1263                                         pSecondLabel->Invalidate(false);
1264                                         pItem->Invalidate(false);
1265                                 }
1266                                 break;
1267
1268                         default:
1269                                 break;
1270                         }
1271                 }
1272                 break;
1273
1274         case ID_GROUP_KEYBOARD:
1275                 {
1276                         pFirstLabel = static_cast<Label*>(pItem->GetControl(FIRST_CONTROL));
1277
1278                         ItemTypeOneLine(firstLineRect);
1279                         pItemBounds.height = firstLineRect.height;
1280
1281                         firstLineText = ResourceManager::GetString(L"IDS_ST_BODY_KEYBOARD");
1282                         pItem->SetBounds(pItemBounds);
1283                         pFirstLabel->SetText(firstLineText);
1284                         pFirstLabel->SetTextConfig(fontSize, LABEL_TEXT_STYLE_NORMAL);
1285                         pFirstLabel->Invalidate(false);
1286                         pItem->Invalidate(false);
1287                 }
1288                 break;
1289
1290         default:
1291                 break;
1292         }
1293 }
1294
1295 void
1296 LocaleForm::OnGroupedTableViewContextItemActivationStateChanged(Tizen::Ui::Controls::GroupedTableView& tableView, int groupIndex, int itemIndex, Tizen::Ui::Controls::TableViewContextItem* pContextItem, bool activated)
1297 {
1298 }
1299
1300 void
1301 LocaleForm::OnGroupedTableViewGroupItemStateChanged(Tizen::Ui::Controls::GroupedTableView& tableView, int groupIndex, Tizen::Ui::Controls::TableViewGroupItem* pItem, Tizen::Ui::Controls::TableViewItemStatus status)
1302 {
1303 }
1304
1305 void
1306 LocaleForm::RefreshTableViewGroupItem(int groupIndex)
1307 {
1308         int itemCount = __pTableView->GetItemCountAt(groupIndex);
1309
1310         for (int index = REFRESH_GROUP_ITEM_INDEX; index < itemCount; index++)
1311         {
1312                 __pTableView->RefreshItem(groupIndex, index, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
1313         }
1314 }
1315
1316 void
1317 LocaleForm::RefreshTableViewItem(void)
1318 {
1319         if (__pTableView == null)
1320         {
1321                 return;
1322         }
1323
1324         int groupCount = __pTableView->GetGroupCount();
1325
1326         for (int index = 0; index < groupCount; index++)
1327         {
1328                 RefreshTableViewGroupItem(index);
1329         }
1330 }
1331
1332 void
1333 LocaleForm::OnOrientationChanged(const Tizen::Ui::Control& source, Tizen::Ui::OrientationStatus orientationStatus)
1334 {
1335         RefreshTableViewItem();
1336         Invalidate(true);
1337 }
1338
1339 void
1340 LocaleForm::OnFocusGained(const Tizen::Ui::Control& source)
1341 {
1342         __isRunningAppControl = false;
1343 }
1344
1345 void
1346 LocaleForm::OnFocusLost(const Tizen::Ui::Control& source)
1347 {
1348 }