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 __uuid = impl.__uuid;
\r
64 __name = impl.__name;
\r
65 __type = impl.__type;
\r
67 std::unique_ptr<ArrayList> pLanguageList(new(std::nothrow) ArrayList(SingleObjectDeleter));
\r
68 SysTryReturnVoidResult(NID_UI_IME, pLanguageList, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
\r
70 r = pLanguageList->Construct();
\r
71 SysTryReturnVoidResult(NID_UI_IME, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
\r
73 __pLanguageList = pLanguageList.release();
\r
75 r = SetLanguageList(*(impl.__pLanguageList));
\r
76 SysTryCatch(NID_UI_IME, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
\r
78 __pUuid = _StringConverter::CopyToCharArrayN(impl.__uuid);
\r
83 delete __pLanguageList;
\r
84 __pLanguageList = null;
\r
89 _InputMethodInfoImpl::~_InputMethodInfoImpl(void)
\r
91 delete __pLanguageList;
\r
92 __pLanguageList = null;
\r
98 _InputMethodInfoImpl*
\r
99 _InputMethodInfoImpl::GetInstance(InputMethodInfo& inputMethodInfo)
\r
101 return inputMethodInfo.__pInputMethodInfoImpl;
\r
104 _InputMethodInfoImpl&
\r
105 _InputMethodInfoImpl::operator=(const _InputMethodInfoImpl& impl)
\r
107 result r = E_SUCCESS;
\r
111 __appId = impl.__appId;
\r
112 __uuid = impl.__uuid;
\r
113 __name = impl.__name;
\r
114 __type = impl.__type;
\r
116 r = SetLanguageList(*(impl.__pLanguageList));
\r
117 SysTryReturn(NID_UI_IME, r == E_SUCCESS, *this, r, "[%s] Propagating.", GetErrorMessage(r));
\r
123 __pUuid = _StringConverter::CopyToCharArrayN(impl.__uuid);
\r
130 _InputMethodInfoImpl::Equals(const Object& object) const
\r
132 const _InputMethodInfoImpl* pInputMethodInfoImpl = static_cast<const _InputMethodInfoImpl*>(&object);
\r
133 SysTryReturn(NID_UI_IME, pInputMethodInfoImpl, false, E_INVALID_ARG, "Invalid argument(s) is used. The object is not the _InputMethodInfoImpl.");
\r
135 return __appId.Equals(pInputMethodInfoImpl->__appId, true);
\r
139 _InputMethodInfoImpl::GetAppId(void) const
\r
145 _InputMethodInfoImpl::GetLanguageList(void) const
\r
147 return __pLanguageList;
\r
151 _InputMethodInfoImpl::GetName(void) const
\r
157 _InputMethodInfoImpl::GetType(void) const
\r
163 _InputMethodInfoImpl::GetUuid(void) const
\r
169 _InputMethodInfoImpl::SetAppId(AppId id)
\r
175 _InputMethodInfoImpl::SetUuid(String id)
\r
183 __pUuid = _StringConverter::CopyToCharArrayN(id);
\r
187 _InputMethodInfoImpl::SetLanguageList(const IList& list)
\r
189 result r = E_SUCCESS;
\r
191 __pLanguageList->RemoveAll();
\r
193 const ArrayList* pLanguageList = static_cast<const ArrayList*>(&list);
\r
194 int languageCount = pLanguageList->GetCount();
\r
196 r = __pLanguageList->SetCapacity(languageCount);
\r
197 SysTryReturnResult(NID_UI_IME, r == E_SUCCESS, r, "Propagating.");
\r
199 Locale* pDestLanguage = null;
\r
200 for (int i = 0; i < languageCount; i++)
\r
202 const Locale* pLanguage = static_cast<const Locale*>(pLanguageList->GetAt(i));
\r
203 r = GetLastResult();
\r
204 SysTryCatch(NID_UI_IME, pLanguage, , r, "[%s] Propagating.", GetErrorMessage(r));
\r
206 pDestLanguage = new(std::nothrow) Locale(*pLanguage);
\r
207 SysTryCatch(NID_UI_IME, pDestLanguage, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
\r
209 r = __pLanguageList->Add(pDestLanguage);
\r
210 SysTryCatch(NID_UI_IME, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
\r
211 pDestLanguage = null;
\r
217 __pLanguageList->RemoveAll();
\r
219 delete pDestLanguage;
\r
225 _InputMethodInfoImpl::SetName(const String& name)
\r
231 _InputMethodInfoImpl::SetName(const scim::String& name)
\r
233 _ScimDataConverter::ConvertString(name, __name);
\r
237 _InputMethodInfoImpl::SetType(Tizen::Ui::Ime::InputMethodType type)
\r
243 _InputMethodInfoImpl::AddLanguage(const char* language)
\r
245 result r = E_SUCCESS;
\r
247 // verify the input parameter
\r
248 const int _ISO_639_2_LENGTH = 6;
\r
249 const int _ISO_639_2_LANGUAGE_CODE_LENGTH = 3;
\r
250 const int _COUNTRY_CODE_LENGTH = 2;
\r
252 int length = strlen(language);
\r
253 SysTryReturnResult(NID_UI_IME, (length == _ISO_639_2_LENGTH), E_INVALID_ARG,
\r
254 "Invalid argument(s) is used. The language is not a type of ISO 639-2 and is %s.", language);
\r
256 LanguageCode languageCode = LANGUAGE_INVALID;
\r
257 CountryCode countryCode = COUNTRY_INVALID;
\r
260 char srcLanguage[_ISO_639_2_LANGUAGE_CODE_LENGTH + 1];
\r
261 strncpy(srcLanguage, language, _ISO_639_2_LANGUAGE_CODE_LENGTH);
\r
262 srcLanguage[_ISO_639_2_LANGUAGE_CODE_LENGTH] = '\0';
\r
264 languageCode = Locale::StringToLanguageCode(srcLanguage);
\r
265 SysTryReturnResult(NID_UI_IME, languageCode != LANGUAGE_INVALID, E_INVALID_ARG,
\r
266 "Invalid argument(s) is used. The srcLanguage is %s.", srcLanguage);
\r
269 char srcCountry[_COUNTRY_CODE_LENGTH + 1];
\r
270 strncpy(srcCountry, language + _ISO_639_2_LANGUAGE_CODE_LENGTH + 1, _COUNTRY_CODE_LENGTH);
\r
271 srcCountry[_COUNTRY_CODE_LENGTH] = '\0';
\r
273 countryCode = Locale::StringToCountryCode(srcCountry);
\r
274 SysTryReturnResult(NID_UI_IME, countryCode != COUNTRY_INVALID, E_INVALID_ARG,
\r
275 "Invalid argument(s) is used. The srcCountry is %s.", srcCountry);
\r
277 // add the language
\r
278 Locale* pLanguage = new(std::nothrow) Locale(languageCode, countryCode);
\r
279 SysTryReturnResult(NID_UI_IME, pLanguage, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
\r
281 r = __pLanguageList->Add(pLanguage);
\r
282 SysTryCatch(NID_UI_IME, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
\r
293 }}} // Tizen::Ui::Ime
\r