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_ScimDataConverter.cpp
\r
20 * @brief This is the implementation file for the %_ScimDataConverter class.
\r
22 * This implementation file contains definition of the %_ScimDataConverter class.
\r
26 #include <unique_ptr.h>
\r
27 #include <vector> // vector in scim_event.h
\r
29 #include <FBaseSysLog.h>
\r
30 #include <FBase_StringConverter.h>
\r
32 #include "FUiIme_Key.h"
\r
33 #include "FUiIme_ScimDataConverter.h"
\r
35 using namespace Tizen::Base;
\r
36 using namespace Tizen::Graphics;
\r
37 using namespace Tizen::Locales;
\r
38 using namespace Tizen::Ui;
\r
40 namespace Tizen { namespace Ui { namespace Ime {
\r
42 _ScimDataConverter::_ScimDataConverter()
\r
47 _ScimDataConverter::~_ScimDataConverter()
\r
53 _ScimDataConverter::ConvertKey(KeyCode code, KeyState state, scim::KeyEvent& event)
\r
55 result r = E_SUCCESS;
\r
57 event.code = scim::SCIM_KEY_NullKey;
\r
58 event.mask = scim::SCIM_KEY_NullMask;
\r
59 event.layout = scim::SCIM_KEYBOARD_Default;
\r
62 for (int i = 0; i < _MAX_KEY_CODE; i++)
\r
64 if (code == _KEY_CODE_MAP[i].keyCode)
\r
66 event.code = _KEY_CODE_MAP[i].scimKeyCode;
\r
75 event.mask = scim::SCIM_KEY_NullMask; // The NullMask means the PressMask.
\r
78 event.mask = scim::SCIM_KEY_ReleaseMask;
\r
80 case KEY_LONGPRESSED:
\r
90 _ScimDataConverter::ConvertLanguageN(const Locale& language)
\r
92 result r = E_SUCCESS;
\r
94 const int _ISO_639_1_CODE_LENGTH = 5;
\r
95 char* pLanguage = new(std::nothrow) char[_ISO_639_1_CODE_LENGTH + 1];
\r
96 SysTryReturn(NID_UI_IME, pLanguage, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
\r
97 memset(pLanguage, '\0', sizeof(pLanguage));
\r
99 const int _LANGUAGE_CODE_LENGTH = 2;
\r
100 const int _COUNTRY_CODE_LENGTH = 2;
\r
102 std::unique_ptr<char[]> pLanguageCode(null);
\r
103 pLanguageCode.reset(_StringConverter::CopyToCharArrayN(Locale::LanguageCodeToTwoLetterLanguageCodeString(language.GetLanguageCode())));
\r
104 r = GetLastResult();
\r
105 SysTryReturn(NID_UI_IME, pLanguageCode, null, r, "[%s] Propagating.", GetErrorMessage(r));
\r
107 std::unique_ptr<char[]> pCountryCode(null);
\r
108 pCountryCode.reset(_StringConverter::CopyToCharArrayN(Locale::CountryCodeToString(language.GetCountryCode())));
\r
109 r = GetLastResult();
\r
110 SysTryReturn(NID_UI_IME, pCountryCode, null, r, "[%s] Propagating.", GetErrorMessage(r));
\r
112 strncpy(pLanguage, pLanguageCode.get(), _LANGUAGE_CODE_LENGTH);
\r
113 strcat(pLanguage, "_");
\r
114 strncpy(pLanguage, pCountryCode.get(), _COUNTRY_CODE_LENGTH);
\r
120 _ScimDataConverter::ConvertRectangle(const Rectangle& src, scim::rectinfo& dest)
\r
122 dest.pos_x = src.x;
\r
123 dest.pos_y = src.y;
\r
124 dest.width = src.width;
\r
125 dest.height = src.height;
\r
129 _ScimDataConverter::ConvertString(const String& src, scim::String& dest)
\r
131 result r = E_SUCCESS;
\r
133 std::unique_ptr<char[]> pCharSrc(_StringConverter::CopyToCharArrayN(src));
\r
134 r = GetLastResult();
\r
135 SysTryReturnResult(NID_UI_IME, pCharSrc, r, "Propagating.");
\r
137 dest = pCharSrc.get();
\r
143 _ScimDataConverter::ConvertString(const String& src, scim::WideString& dest)
\r
145 result r = E_SUCCESS;
\r
147 std::unique_ptr<char[]> pCharSrc(_StringConverter::CopyToCharArrayN(src));
\r
148 r = GetLastResult();
\r
149 SysTryReturnResult(NID_UI_IME, pCharSrc, r, "Propagating.");
\r
151 dest = scim::utf8_mbstowcs(pCharSrc.get(), strlen(pCharSrc.get()));
\r
157 _ScimDataConverter::ConvertString(const scim::String& src, String& dest)
\r
159 result r = E_SUCCESS;
\r
161 const char* pCharSrc = null;
\r
163 pCharSrc = src.c_str();
\r
164 SysTryReturnResult(NID_UI_IME, pCharSrc, E_INVALID_ARG, "Invalid argument(s) is used. The source is invalid.");
\r
166 String destString(pCharSrc);
\r
173 }}} // Tizen::Ui::Ime
\r