Remove unused code
[platform/core/uifw/ise-engine-default.git] / src / isf_default_imengine.cpp
1 /*
2  *  ise-engine-default
3  *
4  * Copyright (c) 2012-2013 Samsung Electronics Co., Ltd. All rights reserved.
5  *
6  * Contact: Li zhang <li2012.zhang@samsung.com>
7  *
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  *
20  */
21
22 #define Uses_SCIM_UTILITY
23 #define Uses_SCIM_IMENGINE
24 #define Uses_SCIM_LOOKUP_TABLE
25 #define Uses_SCIM_CONFIG_BASE
26 #define Uses_SCIM_CONFIG_PATH
27
28 #ifdef HAVE_CONFIG_H
29 #include <config.h>
30 #endif
31
32 #include <scim.h>
33 #include "kdb_resource.h"
34 #include "isf_default_imengine.h"
35
36 #include <string.h>
37 #include <stdlib.h>
38 #include <ctype.h>
39 #include <errno.h>
40 #include <signal.h>
41 #include <unistd.h>
42
43 #ifdef HAVE_GETTEXT
44 #include <libintl.h>
45 #define _(String) dgettext(GETTEXT_PACKAGE,String)
46 #define N_(String) (String)
47 #else
48 #define _(String) (String)
49 #define N_(String) (String)
50 #define bindtextdomain(Package,Directory)
51 #define textdomain(domain)
52 #define bind_textdomain_codeset(domain,codeset)
53 #endif
54
55 #define DEFAULT_UUID "d75857a5-4148-4745-89e2-1da7ddaf7999"
56 #define DEFAULT_NAME "Multilingual Keyboard"
57
58 #define UTF8_SIZE                       6
59
60 #ifndef ISF_DEFAULT_ICON_FILE
61 #define ISF_DEFAULT_ICON_FILE           (ISF_ICONDIR "/isf-default.png")
62 #endif
63
64 static ConfigPointer _scim_config(0);
65 static int m_keypad_layout;
66
67 extern "C" {
68         void scim_module_init(void) {
69                 bindtextdomain(GETTEXT_PACKAGE, ISF_DEFAULT_LOCALEDIR);
70                 bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8");
71         }
72
73         void scim_module_exit(void) {
74                 _scim_config.reset();
75         }
76
77         uint32 scim_imengine_module_init(const ConfigPointer & config) {
78                 _scim_config = config;
79                 return 1;
80         }
81
82         IMEngineFactoryPointer scim_imengine_module_create_factory(uint32
83                         engine) {
84                 DefaultFactory *factory = 0;
85
86                 try {
87                         factory = new DefaultFactory(_scim_config);
88                 }
89                 catch(...) {
90                         delete factory;
91                         factory = 0;
92                 }
93
94                 return factory;
95         }
96 }
97
98 DefaultFactory::DefaultFactory(const ConfigPointer & config)
99 : m_config(config) {
100         m_uuid = DEFAULT_UUID;
101         m_name = _(DEFAULT_NAME);
102
103         set_languages
104         ("nl_NL,nl_BE,en_US,en_GB,en_AU,en_CA,en_NZ,en_IE,en_ZA,en_JM,"
105                         "en_BZ,en_TT,en_ZW,en_PH,fr_FR,fr_BE,fr_CA,fr_CH,fr_LU,fr_MC,"
106                         "de_DE,de_CH,de_AT,de_LU,de_LI,it_IT,it_CH,pt_BR,pt_PT,es_ES,"
107                         "es_MX,es_GT,es_CR,es_PA,es_DO,es_VE,es_CO,es_PE,es_AR,"
108                         "es_EC,es_CL,es_UY,es_PY,es_BO,es_SV,es_HN,es_NI,es_PR,eu_ES,"
109                         "ca_ES,da_DK,af_AF,is_IS,fi_FI,ms_MY,ms_BN,no_NO,sv_SE,sv_FI,"
110                         "cs_CZ,hu_HU,pl_PL,ro_RO,sr_RS,sk_SK,sl_SI,et_EE,lv_LV,lt_LT,el_GR,"
111                         "bg_BG,kk_KZ,mk_MK,ru_RU,sr_RS,uk_UA,tr_TR,uz_UZ,th_TH,he_IL,"
112                         "ar_SA,ar_IQ,ar_EG,ar_LY,ar_DZ,ar_MA,ar_TN,ar_OM,ar_YE,ar_SY,ar_JO,"
113                         "ar_LB,ar_KW,ar_AE,ar_BH,ar_QA,ur_PK,vi_VN,hi_IN,te_IN,mr_IN,ta_IN,"
114                         "bn_IN,gu_IN,ml_IN,pa_IN,ka_GE,az_IR,gl_ES,ha_BJ,ga_IE,si_LK,cy_UK,"
115                         "xh_ZA,yo_NG,zu_ZA");
116
117         m_reload_signal_connection =
118                         m_config->
119                         signal_connect_reload(slot(this, &DefaultFactory::reload_config));
120         reload_config(m_config);
121 }
122
123 DefaultFactory::~DefaultFactory() {
124         m_reload_signal_connection.disconnect();
125 }
126
127 void DefaultFactory::load_resource() {
128 }
129
130 WideString DefaultFactory::get_name() const {
131         return utf8_mbstowcs(m_name);
132 }
133
134 WideString DefaultFactory::get_authors() const {
135         return utf8_mbstowcs(String
136                         (_("Copyright (C) Samsung Electronics Co., Ltd.")));
137 }
138
139 WideString DefaultFactory::get_credits() const {
140         return WideString();
141 }
142
143 WideString DefaultFactory::get_help() const {
144         String help = "";
145         help = String(_("\n\n"
146                         "    Press Space or Return to commit\n"
147                         "    the inputed string and exit this mode."));
148
149         return utf8_mbstowcs(help);
150 }
151
152 String DefaultFactory::get_uuid() const {
153         return m_uuid;
154 }
155
156 String DefaultFactory::get_icon_file() const {
157         return String(ISF_DEFAULT_ICON_FILE);
158 }
159
160 void DefaultFactory::reload_config(const ConfigPointer & config) {
161         if (config.null()) return;
162         int hw_detected = config->read(String (ISF_CONFIG_HARDWARE_KEYBOARD_DETECT) , hw_detected);
163         if (hw_detected == 1)
164                 m_keypad_layout = I_HQD;
165 }
166
167 IMEngineInstancePointer
168 DefaultFactory::create_instance(const String & encoding, int id) {
169         return new DefaultInstance(this, encoding, id);
170 }
171
172 /* Initialize member variables */
173 unsigned int DefaultInstance::m_prevkeyval = 0;
174 int DefaultInstance::m_counter = 0;
175
176 DefaultInstance::DefaultInstance(DefaultFactory * factory,
177                 const String & encoding, int id)
178 :IMEngineInstanceBase(factory, encoding, id) {
179         char label[2] = {0, 0};
180         std::vector < WideString > labels;
181
182         m_shift_pressed = Shift_None;
183         m_caps_lock = false;
184         m_lang = IM_LANGUAGE_ENGLISH;
185         m_precharval = 0;
186         m_keypad_layout = I_HQD;
187
188         for (int i = 1; i < 10; ++i) {
189                 label[0] = '0' + i;
190                 labels.push_back(utf8_mbstowcs(label));
191         }
192
193         m_lookup_table.set_candidate_labels(labels);
194         m_lookup_table_def_page_size = (int)labels.size();
195         m_lookup_table.set_page_size(m_lookup_table_def_page_size);
196 }
197
198 DefaultInstance::~DefaultInstance() {
199 }
200
201 bool DefaultInstance::process_key_event(const KeyEvent & key) {
202         bool ret = true;
203
204         if (key.is_key_press()) {
205                 ret = _process_keypress(key);
206         } else if (key.is_key_release()) {
207                 /* ignore key release. */
208                 ret = _process_keyrelease(key);
209         } else {
210                 /* do nothing */
211                 ret = false;
212         }
213
214         return ret;
215 }
216
217 void DefaultInstance::move_preedit_caret(unsigned int pos) {
218 }
219
220 void DefaultInstance::select_candidate(unsigned int index) {
221 }
222
223 void DefaultInstance::update_lookup_table_page_size(unsigned int page_size) {
224         SCIM_DEBUG_IMENGINE(2) << "update_lookup_table_page_size.\n";
225         m_lookup_table.set_page_size(page_size);
226 }
227
228 void DefaultInstance::lookup_table_page_up() {
229 }
230
231 void DefaultInstance::lookup_table_page_down() {
232 }
233
234 void DefaultInstance::reset() {
235         flush();
236 }
237
238 void DefaultInstance::flush() {
239 }
240
241 void DefaultInstance::focus_in() {
242         hide_lookup_table();
243 }
244
245 void DefaultInstance::focus_out() {
246         flush();
247 }
248
249 void DefaultInstance::trigger_property(const String & property) {
250 }
251
252 bool DefaultInstance::_process_keyrelease(const KeyEvent & key) {
253         return false;
254 }
255
256 bool DefaultInstance::_process_keypress(const KeyEvent & key_raw) {
257         KeyEvent key = key_raw;
258         unsigned int keyvalue = key.code;
259
260         if (key.is_control_down() || key.is_alt_down())
261                 return false;
262
263         if (key.code == SCIM_KEY_NullKey || key.code == SCIM_KEY_Cancel) {
264                 m_prevkeyval = keyvalue;
265                 return false;
266         }
267
268         if (m_lang >= IM_LANGUAGE_CNT) {
269                 return false;
270         }
271
272         if (I_HQD == m_keypad_layout) {
273                 m_prevkeyval = keyvalue;
274                 return keypad_process_qwerty(key);
275         } else {
276                 /* Need to check */
277         }
278
279         m_prevkeyval = keyvalue;
280         return false;
281 }
282
283 bool DefaultInstance::keypad_process_qwerty(KeyEvent & key) {
284         unsigned char buf[UTF8_SIZE + 1] = {0,};
285
286         /* in case of Alphabet chars */
287         if (key.code >= 0xfd00)
288                 return false;//ISF handle function keys
289         else if (key.code >= 0x4E00 && key.code <= 0x9FBF)
290                 return true;//Don't deal with Chinese characters
291
292         utf8_wctomb(buf, key.code, UTF8_SIZE);
293
294         if (!key.code) return false;
295
296         commit_string(utf8_mbstowcs((char *)buf));
297         return true;
298 }
299
300 bool DefaultInstance::special_key_filter(KeyEvent & key) {
301         return false;
302 }
303
304 void DefaultInstance::process_helper_event(const String & helper_uuid,
305                 const Transaction & trans) {
306         int cmd = 0;
307         uint32 value = 0;
308
309         if (!(const_cast < Transaction & >(trans)).get_command(cmd)) return;
310         if (!(const_cast < Transaction & >(trans)).get_data(value)) return;
311
312         if (DEFAULT_CMD_LANGUAGE == cmd) {
313                 m_lang = value;
314                 if (m_lang >= IM_LANGUAGE_CNT) {
315                         m_lang = IM_LANGUAGE_ENGLISH;
316                 }
317         } else if (DEFAULT_CMD_COMPLETION == cmd) {
318
319         } else if (DEFAULT_CMD_SHIFTMODE == cmd) {
320                 m_shift_pressed = (Mode_Shift)value;
321         } else if (DEFAULT_CMD_KEYPAD == cmd) {
322                 m_keypad_layout = value;
323         }
324 }
325
326 void DefaultInstance::reset_option () {
327 }