2 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
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
8 // http://floralicense.org/license/
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.
18 * @file StLanguageForm.cpp
19 * @brief This is the implementation file for LanguageForm class.
23 #include "StLanguageForm.h"
24 #include "StResourceManager.h"
27 using namespace Tizen::App;
28 using namespace Tizen::Base;
29 using namespace Tizen::Base::Collection;
30 using namespace Tizen::Base::Utility;
31 using namespace Tizen::Graphics;
32 using namespace Tizen::Locales;
33 using namespace Tizen::System;
34 using namespace Tizen::Ui;
35 using namespace Tizen::Ui::Controls;
36 using namespace Tizen::Ui::Scenes;
38 static const int ID_GROUP_COUNT = 1;
39 static const int H_FONT_HEIGHT_GAP = 20;
41 LocaleLanguageForm::LocaleLanguageForm(void)
42 : __pLanguageDataList(null)
46 LocaleLanguageForm::~LocaleLanguageForm(void)
51 LocaleLanguageForm::CreateFooter(void)
53 Footer* pFooter = GetFooter();
56 pFooter->SetStyle(FOOTER_STYLE_BUTTON_TEXT);
57 pFooter->AddActionEventListener(*this);
59 SetFormBackEventListener(this);
63 LocaleLanguageForm::OnInitializing(void)
65 CreateHeader(ResourceManager::GetString(L"IDS_ST_HEADER_DISPLAY_LANGUAGE"));
68 SettingInfo::GetValue(SETTING_INFO_KEY_LOCALE_LANGUAGE, __previousSelectedLanguage);
69 return SettingInfo::AddSettingEventListener(*this);
73 LocaleLanguageForm::OnTerminating(void)
75 SettingInfo::RemoveSettingEventListener(*this);
78 delete __pLanguageDataList;
79 __pLanguageDataList = null;
81 SetFormBackEventListener(null);
86 LocaleLanguageForm::OnSceneActivatedN(const Tizen::Ui::Scenes::SceneId& previousSceneId, const Tizen::Ui::Scenes::SceneId& currentSceneId, Tizen::Base::Collection::IList* pArgs)
92 __pLanguageDataList = static_cast<ArrayList*>(pArgs->GetItemsN(0, pArgs->GetCount()));
94 __pTableView->UpdateTableView();
98 LocaleLanguageForm::OnSceneDeactivated(const Tizen::Ui::Scenes::SceneId& currentSceneId, const Tizen::Ui::Scenes::SceneId& nextSceneId)
103 LocaleLanguageForm::OnFormBackRequested(Tizen::Ui::Controls::Form& source)
105 SceneManager* pSceneManager = SceneManager::GetInstance();
106 AppAssert(pSceneManager);
108 pSceneManager->GoBackward(BackwardSceneTransition(SCENE_TRANSITION_ANIMATION_TYPE_RIGHT), null);
112 LocaleLanguageForm::GetGroupCount(void)
114 // Temporary code due to the UI Framework defect
115 if (!__pLanguageDataList)
120 AppLogDebug("ENTER");
121 return ID_GROUP_COUNT;
125 LocaleLanguageForm::GetItemCount(int groupIndex)
127 // Temporary code due to the UI Framework defect
128 if (!__pLanguageDataList)
133 int itemCount = __pLanguageDataList->GetCount();
135 AppLogDebug("GetItemCount %d", itemCount);
141 LocaleLanguageForm::CreateGroupItem(int groupIndex, int itemWidth)
143 AppLogDebug("ENTER");
145 int itemHeight = H_GROUP_INDEX_NO_TITLE_DEFAULT;
146 int yItemOffset = H_GROUP_INDEX_HELP_TEXT_TOP_GAP;
147 LabelTextStyle style = LABEL_TEXT_STYLE_NORMAL;
148 Rectangle itemMainRectangle;
150 Label* pLabel = null;
152 TableViewGroupItem* pItem = new (std::nothrow) TableViewGroupItem();
154 yItemOffset = H_GROUP_INDEX_NO_HELP_TEXT_GAP;
155 itemHeight = Y_GROUP_DEFAULT;
157 ItemTypeOneLine(itemMainRectangle);
159 RelativeLayout relativeLayout;
160 relativeLayout.Construct();
162 pItem->Construct(relativeLayout, Dimension(itemWidth, itemHeight));
163 pItem->SetBackgroundColor(COLOR_BG_GROUP_INDEX_DEFAULT);
165 pLabel = new (std::nothrow) Label();
166 pLabel->Construct(itemMainRectangle, groupText);
167 pLabel->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
168 pLabel->SetTextVerticalAlignment(ALIGNMENT_TOP);
169 pLabel->SetTextConfig(FONT_SIZE_GROUP_TITLE_TEXT, style);
170 pLabel->SetTextColor(COLOR_HELP_TEXT_TYPE_01);
172 pItem->AddControl(pLabel);
173 relativeLayout.SetMargin(*pLabel, itemMainRectangle.x, RELATIVE_LAYOUT_RIGHT_MARGIN, 0, 0);
174 relativeLayout.SetRelation(*pLabel, pItem, RECT_EDGE_RELATION_LEFT_TO_LEFT);
175 relativeLayout.SetRelation(*pLabel, pItem, RECT_EDGE_RELATION_RIGHT_TO_RIGHT);
176 pItem->SetEnabled(false);
182 LocaleLanguageForm::CreateItem(int groupIndex, int itemIndex, int itemWidth)
184 AppLogDebug("group[%d] index[%d]", groupIndex, itemIndex);
186 Rectangle itemMainRectangle;
187 TableViewAnnexStyle style = TABLE_VIEW_ANNEX_STYLE_NORMAL;
189 String fontReturnValue;
190 Label* pLabel = null;
191 int fontSize = GetFontSize();
192 TableViewItem* pItem = new (std::nothrow) TableViewItem();
193 String* pKey = static_cast<String*>(__pLanguageDataList->GetAt(itemIndex));
195 ItemTypeOneLine(itemMainRectangle);
196 if (fontSize > FONT_MAIN_TEXT_SIZE_LARGE)
198 itemMainRectangle.height = itemMainRectangle.height + H_FONT_HEIGHT_GAP;
200 itemWidth = itemMainRectangle.width;
202 if (pKey && pKey->GetLength() > 0)
204 StringTokenizer stringTokenizer(*pKey, L"/");
205 stringTokenizer.GetNextToken(itemMainText);
208 RelativeLayout relativeLayout;
209 relativeLayout.Construct();
211 pItem->Construct(relativeLayout, Dimension(itemWidth, itemMainRectangle.height), style);
212 pItem->SetBackgroundColor(COLOR_BG_GROUP_ITEM_DEFAULT);
214 pLabel = new (std::nothrow) Label();
215 pLabel->Construct(itemMainRectangle, itemMainText);
216 pLabel->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
218 pLabel->SetTextConfig(fontSize, LABEL_TEXT_STYLE_NORMAL);
219 pLabel->SetTextColor(COLOR_MAIN_TEXT);
221 pItem->AddControl(pLabel);
222 relativeLayout.SetMargin(*pLabel, 0, RELATIVE_LAYOUT_RIGHT_MARGIN, 0, 0);
223 relativeLayout.SetRelation(*pLabel, pItem, RECT_EDGE_RELATION_LEFT_TO_LEFT);
224 relativeLayout.SetRelation(*pLabel, pItem, RECT_EDGE_RELATION_RIGHT_TO_RIGHT);
230 LocaleLanguageForm::DeleteGroupItem(int groupIndex, TableViewGroupItem* pItem)
232 AppLogDebug("ENTER");
241 LocaleLanguageForm::DeleteItem(int groupIndex, int itemIndex, TableViewItem* pItem)
243 AppLogDebug("ENTER");
252 LocaleLanguageForm::OnGroupedTableViewItemStateChanged(Tizen::Ui::Controls::GroupedTableView& tableView, int groupIndex, int itemIndex, Tizen::Ui::Controls::TableViewItem* pItem, Tizen::Ui::Controls::TableViewItemStatus status)
254 AppLogDebug("group[%d] index[%d]", groupIndex, itemIndex);
256 SceneManager* pSceneManager = SceneManager::GetInstance();
257 AppAssert(pSceneManager);
259 bool ttsStatus = false;
260 result r = E_FAILURE;
263 String* pKey = static_cast<String*>(__pLanguageDataList->GetAt(itemIndex));
265 StringTokenizer stringTokenizer(*pKey, L"/");
267 for (int i = 0; i <= (stringTokenizer.GetTokenCount()); i++)
269 stringTokenizer.GetNextToken(langCode);
272 r = SettingInfo::GetValue(SETTING_INFO_KEY_TTS, ttsStatus);
273 if (r == E_SUCCESS && ttsStatus)
275 if (langCode.CompareTo(L"eng_GB") != 0 && langCode.CompareTo(L"eng_PH") != 0 && langCode.CompareTo(L"eng_US") != 0
276 && langCode.CompareTo(L"spa_ES") != 0 && langCode.CompareTo(L"spa_MX") !=0
277 && langCode.CompareTo(L"fra_CA") != 0 && langCode.CompareTo(L"fra_FR") != 0
278 && langCode.CompareTo(L"deu_DE") != 0 && langCode.CompareTo(L"ita_IT") != 0 && langCode.CompareTo(L"kor_KR") != 0)
280 // TTS on, language other than eng_GB, eng_PH, eng_US, spa_ES, spa_MX, fra_CA, fra_FR, deu_DE,ita_IT, kor_KR are not supported
281 ShowMessageBox(ResourceManager::GetString(L"IDS_EMAIL_POP_ALERT"), ResourceManager::GetString(L"IDS_ST_POP_NOT_SUPPORTED"));
286 if(langCode.CompareTo(__previousSelectedLanguage) != 0)
288 r = SettingInfo::SetValue(SETTING_INFO_KEY_LOCALE_LANGUAGE, langCode);
289 if (r == E_INVALID_ARG)
291 AppLogDebug("set langCode[%ls] result[%s]", langCode.GetPointer(), GetErrorMessage(r));
292 ShowMessageBox(L"", L"Language not supported.");
297 AppLog("else set langCode[%ls] result[%s]", langCode.GetPointer(), GetErrorMessage(r));
302 pSceneManager->GoBackward(BackwardSceneTransition(SCENE_TRANSITION_ANIMATION_TYPE_RIGHT), null);
305 __previousSelectedLanguage = langCode;
309 LocaleLanguageForm::OnSettingChanged(Tizen::Base::String& key)
312 if (key.Equals(SETTING_INFO_KEY_LOCALE_LANGUAGE, false))
314 SceneManager* pSceneManager = SceneManager::GetInstance();
315 AppAssert(pSceneManager);
317 pSceneManager->GoBackward(BackwardSceneTransition(SCENE_TRANSITION_ANIMATION_TYPE_RIGHT), null);
322 LocaleLanguageForm::GetDefaultGroupItemHeight(void)
324 return H_GROUP_INDEX_NO_TITLE_DEFAULT;
328 LocaleLanguageForm::GetDefaultItemHeight(void)
330 return H_GROUP_ITEM_DEFAULT;
334 LocaleLanguageForm::UpdateGroupItem(int groupIndex, Tizen::Ui::Controls::TableViewGroupItem* pItem)
339 LocaleLanguageForm::UpdateItem(int groupIndex, int itemIndex, Tizen::Ui::Controls::TableViewItem* pItem)
344 LocaleLanguageForm::OnGroupedTableViewContextItemActivationStateChanged(Tizen::Ui::Controls::GroupedTableView& tableView, int groupIndex, int itemIndex, Tizen::Ui::Controls::TableViewContextItem* pContextItem, bool activated)
349 LocaleLanguageForm::OnGroupedTableViewGroupItemStateChanged(Tizen::Ui::Controls::GroupedTableView& tableView, int groupIndex, Tizen::Ui::Controls::TableViewGroupItem* pItem, Tizen::Ui::Controls::TableViewItemStatus status)