Resolve a prevent issue.
[framework/osp/ime.git] / src / FUiIme_ScimDataConverter.cpp
1 //\r
2 // Open Service Platform\r
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.\r
4 //\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
8 //\r
9 //     http://www.apache.org/licenses/LICENSE-2.0\r
10 //\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
16 //\r
17 \r
18 /**\r
19  * @file        FUiIme_ScimDataConverter.cpp\r
20  * @brief       This is the implementation file for the %_ScimDataConverter class.\r
21  *\r
22  * This implementation file contains definition of the %_ScimDataConverter class.\r
23  */\r
24 \r
25 #include <new>\r
26 #include <unique_ptr.h>\r
27 #include <vector> // vector in scim_event.h\r
28 \r
29 #include <FBaseSysLog.h>\r
30 #include <FBase_StringConverter.h>\r
31 \r
32 #include "FUiIme_Key.h"\r
33 #include "FUiIme_ScimDataConverter.h"\r
34 \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
39 \r
40 namespace Tizen { namespace Ui { namespace Ime {\r
41 \r
42 _ScimDataConverter::_ScimDataConverter()\r
43 {\r
44 \r
45 }\r
46 \r
47 _ScimDataConverter::~_ScimDataConverter()\r
48 {\r
49 \r
50 }\r
51 \r
52 Tizen::Ui::Ime::InputMethodType\r
53 _ScimDataConverter::ConvertType(ISE_TYPE_T type)\r
54 {\r
55         InputMethodType inputMethodType = INPUT_METHOD_TYPE_SOFTWARE;\r
56 \r
57         if (type == HARDWARE_KEYBOARD_ISE)\r
58         {\r
59                 inputMethodType = INPUT_METHOD_TYPE_HARDWARE;\r
60         }\r
61         else if (type == SOFTWARE_KEYBOARD_ISE)\r
62         {\r
63                 inputMethodType = INPUT_METHOD_TYPE_SOFTWARE;\r
64         }\r
65 \r
66         return inputMethodType;\r
67 }\r
68 \r
69 result\r
70 _ScimDataConverter::ConvertKey(KeyCode code, KeyState state, scim::KeyEvent& event)\r
71 {\r
72         result r = E_SUCCESS;\r
73 \r
74         event.code = scim::SCIM_KEY_NullKey;\r
75         event.mask = scim::SCIM_KEY_NullMask;\r
76         event.layout = scim::SCIM_KEYBOARD_Default;\r
77 \r
78         // event.code\r
79         for (int i = 0; i < _MAX_KEY_CODE; i++)\r
80         {\r
81                 if (code == _KEY_CODE_MAP[i].keyCode)\r
82                 {\r
83                         event.code = _KEY_CODE_MAP[i].scimKeyCode;\r
84                         break;\r
85                 }\r
86         }\r
87 \r
88         // event.mask\r
89         switch (state)\r
90         {\r
91         case KEY_PRESSED:\r
92                 event.mask = scim::SCIM_KEY_NullMask; // The NullMask means the PressMask.\r
93                 break;\r
94         case KEY_RELEASED:\r
95                 event.mask = scim::SCIM_KEY_ReleaseMask;\r
96                 break;\r
97         case KEY_LONGPRESSED:\r
98                 // Fall through\r
99         default:\r
100                 break;\r
101         }       \r
102 \r
103         return r;\r
104 }\r
105 \r
106 char*\r
107 _ScimDataConverter::ConvertLanguageN(const Locale& language)\r
108 {\r
109         result r = E_SUCCESS;\r
110 \r
111         const int _ISO_639_1_CODE_LENGTH = 5;\r
112         std::unique_ptr<char[]> pLanguage(new(std::nothrow) char[_ISO_639_1_CODE_LENGTH + 1]);\r
113         SysTryReturn(NID_UI_IME, pLanguage, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");\r
114         memset(pLanguage.get(), '\0', _ISO_639_1_CODE_LENGTH + 1);\r
115 \r
116         const int _LANGUAGE_CODE_LENGTH = 2;\r
117         const int _COUNTRY_CODE_LENGTH = 2;\r
118 \r
119         std::unique_ptr<char[]> pLanguageCode(null);\r
120         pLanguageCode.reset(_StringConverter::CopyToCharArrayN(Locale::LanguageCodeToTwoLetterLanguageCodeString(language.GetLanguageCode())));\r
121         r = GetLastResult();\r
122         SysTryReturn(NID_UI_IME, pLanguageCode, null, r, "[%s] Propagating.", GetErrorMessage(r));\r
123 \r
124         std::unique_ptr<char[]> pCountryCode(null);\r
125         pCountryCode.reset(_StringConverter::CopyToCharArrayN(Locale::CountryCodeToString(language.GetCountryCode())));\r
126         r = GetLastResult();\r
127         SysTryReturn(NID_UI_IME, pCountryCode, null, r, "[%s] Propagating.", GetErrorMessage(r));       \r
128 \r
129         strncpy(pLanguage.get(), pLanguageCode.get(), _LANGUAGE_CODE_LENGTH);\r
130         strcat(pLanguage.get(), "_");\r
131         strncpy(pLanguage.get(), pCountryCode.get(), _COUNTRY_CODE_LENGTH);\r
132 \r
133         return pLanguage.release();\r
134 }\r
135 \r
136 void\r
137 _ScimDataConverter::ConvertRectangle(const Rectangle& src, scim::rectinfo& dest)\r
138 {\r
139         dest.pos_x = src.x;\r
140         dest.pos_y = src.y;\r
141         dest.width = src.width;\r
142         dest.height = src.height;\r
143 }\r
144 \r
145 result\r
146 _ScimDataConverter::ConvertString(const String& src, scim::String& dest)\r
147 {\r
148         result r = E_SUCCESS;\r
149 \r
150         std::unique_ptr<char[]> pCharSrc(_StringConverter::CopyToCharArrayN(src));\r
151         r = GetLastResult();\r
152         SysTryReturnResult(NID_UI_IME, pCharSrc, r, "Propagating.");\r
153 \r
154         dest = pCharSrc.get();\r
155 \r
156         return r;\r
157 }\r
158 \r
159 result\r
160 _ScimDataConverter::ConvertString(const String& src, scim::WideString& dest)\r
161 {\r
162         result r = E_SUCCESS;\r
163 \r
164         std::unique_ptr<char[]> pCharSrc(_StringConverter::CopyToCharArrayN(src));\r
165         r = GetLastResult();\r
166         SysTryReturnResult(NID_UI_IME, pCharSrc, r, "Propagating.");\r
167 \r
168         dest = scim::utf8_mbstowcs(pCharSrc.get(), strlen(pCharSrc.get()));\r
169 \r
170         return r;\r
171 }\r
172 \r
173 result\r
174 _ScimDataConverter::ConvertString(const scim::String& src, String& dest)\r
175 {\r
176         result r = E_SUCCESS;\r
177 \r
178         const char* pCharSrc = null;\r
179 \r
180         pCharSrc = src.c_str();\r
181         SysTryReturnResult(NID_UI_IME, pCharSrc, E_INVALID_ARG, "Invalid argument(s) is used. The source is invalid.");\r
182 \r
183         String destString(pCharSrc);\r
184 \r
185         dest = destString;\r
186 \r
187         return r;\r
188 }\r
189 \r
190 }}} // Tizen::Ui::Ime\r