2 // Open Service Platform
\r
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
\r
5 // Licensed under the Apache License, Version 2.0 (the License);
\r
6 // you may not use this file except in compliance with the License.
\r
7 // You may obtain a copy of the License at
\r
9 // http://www.apache.org/licenses/LICENSE-2.0
\r
11 // Unless required by applicable law or agreed to in writing, software
\r
12 // distributed under the License is distributed on an "AS IS" BASIS,
\r
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r
14 // See the License for the specific language governing permissions and
\r
15 // limitations under the License.
\r
19 * @file FUiIme_InputMethodInfoImpl.cpp
\r
20 * @brief This is the implementation file for the %_InputMethodInfoImpl class.
\r
22 * This implementation file contains definition of the %_InputMethodInfoImpl class.
\r
27 #include <unique_ptr.h>
\r
29 #include <FBaseColTypes.h>
\r
30 #include <FBaseSysLog.h>
\r
32 #include <FBase_StringConverter.h>
\r
34 #include "FUiIme_InputMethodInfoImpl.h"
\r
35 #include "FUiIme_ScimDataConverter.h"
\r
37 using namespace Tizen::App;
\r
38 using namespace Tizen::Base;
\r
39 using namespace Tizen::Base::Collection;
\r
40 using namespace Tizen::Locales;
\r
42 namespace Tizen { namespace Ui { namespace Ime {
\r
44 _InputMethodInfoImpl::_InputMethodInfoImpl(void)
\r
47 result r = E_SUCCESS;
\r
49 std::unique_ptr<ArrayList> pLanguageList(new(std::nothrow) ArrayList(SingleObjectDeleter));
\r
50 SysTryReturnVoidResult(NID_UI_IME, pLanguageList, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
\r
52 r = pLanguageList->Construct();
\r
53 SysTryReturnVoidResult(NID_UI_IME, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
\r
55 __pLanguageList = pLanguageList.release();
\r
58 _InputMethodInfoImpl::_InputMethodInfoImpl(const _InputMethodInfoImpl& impl)
\r
60 result r = E_SUCCESS;
\r
62 __appId = impl.__appId;
\r
63 __name = impl.__name;
\r
65 std::unique_ptr<ArrayList> pLanguageList(new(std::nothrow) ArrayList(SingleObjectDeleter));
\r
66 SysTryReturnVoidResult(NID_UI_IME, pLanguageList, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
\r
68 r = pLanguageList->Construct();
\r
69 SysTryReturnVoidResult(NID_UI_IME, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
\r
71 __pLanguageList = pLanguageList.release();
\r
73 r = SetLanguageList(*(impl.__pLanguageList));
\r
74 SysTryCatch(NID_UI_IME, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
\r
76 __pUuid = _StringConverter::CopyToCharArrayN(impl.__uuid);
\r
81 delete __pLanguageList;
\r
82 __pLanguageList = null;
\r
87 _InputMethodInfoImpl::~_InputMethodInfoImpl(void)
\r
89 delete __pLanguageList;
\r
90 __pLanguageList = null;
\r
96 _InputMethodInfoImpl*
\r
97 _InputMethodInfoImpl::GetInstance(InputMethodInfo& inputMethodInfo)
\r
99 return inputMethodInfo.__pInputMethodInfoImpl;
\r
102 _InputMethodInfoImpl&
\r
103 _InputMethodInfoImpl::operator=(const _InputMethodInfoImpl& impl)
\r
105 result r = E_SUCCESS;
\r
109 __appId = impl.__appId;
\r
110 __name = impl.__name;
\r
112 r = SetLanguageList(*(impl.__pLanguageList));
\r
113 SysTryReturn(NID_UI_IME, r == E_SUCCESS, *this, r, "[%s] Propagating.", GetErrorMessage(r));
\r
119 __pUuid = _StringConverter::CopyToCharArrayN(impl.__uuid);
\r
126 _InputMethodInfoImpl::Equals(const Object& object) const
\r
128 const _InputMethodInfoImpl* pInputMethodInfoImpl = static_cast<const _InputMethodInfoImpl*>(&object);
\r
129 SysTryReturn(NID_UI_IME, pInputMethodInfoImpl, false, E_INVALID_ARG, "Invalid argument(s) is used. The object is not the _InputMethodInfoImpl.");
\r
131 return __appId.Equals(pInputMethodInfoImpl->__appId, true);
\r
135 _InputMethodInfoImpl::GetAppId(void) const
\r
141 _InputMethodInfoImpl::GetLanguageList(void) const
\r
143 return __pLanguageList;
\r
147 _InputMethodInfoImpl::GetName(void) const
\r
153 _InputMethodInfoImpl::GetUuid(void) const
\r
159 _InputMethodInfoImpl::SetAppId(AppId id)
\r
165 _InputMethodInfoImpl::SetUuid(String id)
\r
173 __pUuid = _StringConverter::CopyToCharArrayN(id);
\r
177 _InputMethodInfoImpl::SetLanguageList(const IList& list)
\r
179 result r = E_SUCCESS;
\r
181 __pLanguageList->RemoveAll();
\r
183 const ArrayList* pLanguageList = static_cast<const ArrayList*>(&list);
\r
184 int languageCount = pLanguageList->GetCount();
\r
186 r = __pLanguageList->SetCapacity(languageCount);
\r
187 SysTryReturnResult(NID_UI_IME, r == E_SUCCESS, r, "Propagating.");
\r
189 Locale* pDestLanguage = null;
\r
190 for (int i = 0; i < languageCount; i++)
\r
192 const Locale* pLanguage = static_cast<const Locale*>(pLanguageList->GetAt(i));
\r
193 r = GetLastResult();
\r
194 SysTryCatch(NID_UI_IME, pLanguage, , r, "[%s] Propagating.", GetErrorMessage(r));
\r
196 pDestLanguage = new(std::nothrow) Locale(*pLanguage);
\r
197 SysTryCatch(NID_UI_IME, pDestLanguage, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
\r
199 r = __pLanguageList->Add(pDestLanguage);
\r
200 SysTryCatch(NID_UI_IME, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
\r
206 __pLanguageList->RemoveAll();
\r
208 delete pDestLanguage;
\r
214 _InputMethodInfoImpl::SetName(const String& name)
\r
220 _InputMethodInfoImpl::SetName(const scim::String& name)
\r
222 _ScimDataConverter::ConvertString(name, __name);
\r
226 _InputMethodInfoImpl::AddLanguage(const char* language)
\r
228 result r = E_SUCCESS;
\r
230 // verify the input parameter
\r
231 const int _ISO_639_2_LENGTH = 6;
\r
232 const int _ISO_639_2_LANGUAGE_CODE_LENGTH = 3;
\r
233 const int _COUNTRY_CODE_LENGTH = 2;
\r
235 int length = strlen(language);
\r
236 SysTryReturnResult(NID_UI_IME, (length == _ISO_639_2_LENGTH), E_INVALID_ARG,
\r
237 "Invalid argument(s) is used. The language is not a type of ISO 639-2 and is %s.", language);
\r
239 LanguageCode languageCode = LANGUAGE_INVALID;
\r
240 CountryCode countryCode = COUNTRY_INVALID;
\r
243 char srcLanguage[_ISO_639_2_LANGUAGE_CODE_LENGTH + 1];
\r
244 strncpy(srcLanguage, language, _ISO_639_2_LANGUAGE_CODE_LENGTH);
\r
245 srcLanguage[_ISO_639_2_LANGUAGE_CODE_LENGTH] = '\0';
\r
247 languageCode = Locale::StringToLanguageCode(srcLanguage);
\r
248 SysTryReturnResult(NID_UI_IME, languageCode != LANGUAGE_INVALID, E_INVALID_ARG,
\r
249 "Invalid argument(s) is used. The srcLanguage is %s.", srcLanguage);
\r
252 char srcCountry[_COUNTRY_CODE_LENGTH + 1];
\r
253 strncpy(srcCountry, language + _ISO_639_2_LANGUAGE_CODE_LENGTH + 1, _COUNTRY_CODE_LENGTH);
\r
254 srcCountry[_COUNTRY_CODE_LENGTH] = '\0';
\r
256 countryCode = Locale::StringToCountryCode(srcCountry);
\r
257 SysTryReturnResult(NID_UI_IME, countryCode != COUNTRY_INVALID, E_INVALID_ARG,
\r
258 "Invalid argument(s) is used. The srcCountry is %s.", srcCountry);
\r
260 // add the language
\r
261 Locale* pLanguage = new(std::nothrow) Locale(languageCode, countryCode);
\r
262 SysTryReturnResult(NID_UI_IME, pLanguage, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
\r
264 r = __pLanguageList->Add(pLanguage);
\r
265 SysTryCatch(NID_UI_IME, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
\r
275 }}} // Tizen::Ui::Ime
\r