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