Applied EFL migration
[profile/ivi/isf.git] / ism / demos / isf_event_efl.cpp
1 /*
2  * ISF(Input Service Framework)
3  *
4  * ISF is based on SCIM 1.4.7 and extended for supporting more mobile fitable.
5  * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
6  *
7  * Contact: Shuo Liu <shuo0805.liu@samsung.com>, Jihoon Kim <jihoon48.kim@samsung.com>
8  *
9  * This library is free software; you can redistribute it and/or modify it under
10  * the terms of the GNU Lesser General Public License as published by the
11  * Free Software Foundation; either version 2.1 of the License, or (at your option)
12  * any later version.
13  *
14  * This library is distributed in the hope that it will be useful, but WITHOUT ANY
15  * WARRANTY; without even the implied warranty of MERCHANTABILITY or
16  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
17  * License for more details.
18  *
19  * You should have received a copy of the GNU Lesser General Public License
20  * along with this library; if not, write to the Free Software Foundation, Inc., 51
21  * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22  *
23  */
24
25 #include "isf_demo_efl.h"
26
27
28 static Ecore_IMF_Context* _imf_context[2];
29 static Evas_Object *_label1              = NULL;
30 static Evas_Object *_label2              = NULL;
31 static Evas_Object *_key_event_label     = NULL;
32 static Evas_Object *_preedit_event_label = NULL;
33 static Evas_Object *_commit_event_label  = NULL;
34 static Evas_Object *_set_focus_button1   = NULL;
35 static Evas_Object *_set_focus_button2   = NULL;
36 static Evas_Object *_ise_show_button     = NULL;
37 static Ecore_Event_Handler *_preedit_handler = NULL;
38 static Ecore_Event_Handler *_commit_handler  = NULL;
39 static int focus_label_idx = 1;
40
41
42 void isf_entry_event_demo_bt (void *data, Evas_Object *obj, void *event_info);
43
44
45 static void _set_focus_button_bt (void *data, Evas_Object *obj, void *event_info)
46 {
47     int i = (int) data;
48
49     focus_label_idx = i;
50
51     ecore_imf_context_focus_in (_imf_context[i-1]);
52 }
53
54 static void _button_bt (void *data, Evas_Object *obj, void *event_info)
55 {
56     if (_imf_context[focus_label_idx-1] != NULL)
57         ecore_imf_context_input_panel_show (_imf_context[focus_label_idx-1]);
58 }
59
60 static void _key_up_cb (void *data, Evas *e, Evas_Object *obj, void *event_info)
61 {
62     static char str [100];
63     Evas_Event_Key_Up *ev = (Evas_Event_Key_Up *) event_info;
64
65     if (obj == _label1) {
66         snprintf (str, sizeof(str),"label 1  get key up event: %s", (char *)(ev->keyname));
67         elm_object_text_set (_key_event_label, str);
68     } else if (obj == _label2) {
69         snprintf (str,sizeof(str), "label 2  get key up event: %s", (char *)(ev->keyname));
70         elm_object_text_set (_key_event_label, str);
71     }
72 }
73
74 static void _key_down_cb (void *data, Evas *e, Evas_Object *obj, void *event_info)
75 {
76     static char str [100];
77     Evas_Event_Key_Up *ev = (Evas_Event_Key_Up *) event_info;
78
79     if (obj == _label1) {
80         snprintf (str, sizeof(str), "label 1  get key down event: %s", (char *)(ev->keyname));
81         elm_object_text_set (_key_event_label, str);
82     } else if (obj == _label2) {
83         snprintf (str, sizeof(str),"label 2  get key down event: %s", (char *)(ev->keyname));
84         elm_object_text_set (_key_event_label, str);
85     }
86 }
87
88 static Eina_Bool _ecore_imf_event_changed_cb (void *data, int type, void *event)
89 {
90     static char str [100];
91
92     char *preedit_string = NULL;
93     preedit_string = (char *)malloc (sizeof (char)*70);
94     int cursor_pos;
95
96     ecore_imf_context_preedit_string_get (_imf_context[focus_label_idx-1], &preedit_string, &cursor_pos);
97
98     if (preedit_string == NULL)
99         return ECORE_CALLBACK_CANCEL;
100
101     snprintf (str,sizeof(str), "label %d get preedit string: %s", focus_label_idx, preedit_string);
102
103     free (preedit_string);
104     elm_object_text_set (_preedit_event_label, str);
105
106     return ECORE_CALLBACK_CANCEL;
107 }
108
109 static Eina_Bool _ecore_imf_event_commit_cb (void *data, int type, void *event)
110 {
111     static char str [100];
112     Ecore_IMF_Event_Commit *ev = (Ecore_IMF_Event_Commit *) event;
113
114     snprintf (str,sizeof(str), "label %d get commit string: %s", focus_label_idx, (char *)(ev->str));
115     elm_object_text_set (_commit_event_label, str);
116     return ECORE_CALLBACK_CANCEL;
117 }
118
119 static void nf_back_event_cb (void *data, Evas_Object *obj, void *event_info)
120 {
121     evas_object_event_callback_del (_label1, EVAS_CALLBACK_KEY_UP, NULL);
122     evas_object_event_callback_del (_label2, EVAS_CALLBACK_KEY_UP, NULL);
123
124     for(int i = 0; i < 2; i++)
125     {
126         if (_imf_context[i]) {
127             ecore_imf_context_del(_imf_context[i]);
128             _imf_context[i] = NULL;
129         }
130     }
131
132     if (_preedit_handler != NULL) {
133         ecore_event_handler_del (_preedit_handler);
134         _preedit_handler = NULL;
135     }
136
137     if (_commit_handler != NULL) {
138         ecore_event_handler_del (_commit_handler);
139         _commit_handler = NULL;
140     }
141 }
142
143 static void isf_label_event_demo_bt (void *data, Evas_Object *obj, void *event_info)
144 {
145     struct appdata *ad = (struct appdata *)data;
146     Evas_Object *layout = NULL;
147     Evas *evas = NULL;
148     Ecore_Window ecore_win;
149
150     layout = elm_layout_add (ad->naviframe);
151     evas_object_size_hint_weight_set (layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
152     evas_object_show (layout);
153
154     evas = evas_object_evas_get(ad->win_main);
155     ecore_win = ecore_evas_window_get(ecore_evas_ecore_evas_get(evas));
156
157     const char *ctx_id = ecore_imf_context_default_id_get ();
158
159     /* register preedit (composing) event handler */
160     _preedit_handler = ecore_event_handler_add (ECORE_IMF_EVENT_PREEDIT_CHANGED, _ecore_imf_event_changed_cb, NULL);
161     /* register commit event handler */
162     _commit_handler = ecore_event_handler_add (ECORE_IMF_EVENT_COMMIT, _ecore_imf_event_commit_cb, NULL);
163
164     /* create label2 */
165     _label1 = elm_label_add (layout);
166     elm_object_text_set (_label1, "LABEL 1");
167     evas_object_move (_label1, 0, 100);
168     evas_object_resize (_label1, ad->root_w, 50);
169     evas_object_show (_label1);
170     evas_object_event_callback_add (_label1, EVAS_CALLBACK_KEY_UP, _key_up_cb, (void *)NULL);
171     evas_object_event_callback_add (_label1, EVAS_CALLBACK_KEY_DOWN, _key_down_cb, (void *)NULL);
172
173     /* create input context for label1 */
174     _imf_context[0] = ecore_imf_context_add (ctx_id);
175     ecore_imf_context_client_window_set (_imf_context[0], (void *)ecore_win);
176     ecore_imf_context_client_canvas_set (_imf_context[0], evas_object_evas_get(_label1));
177     ecore_imf_context_focus_in (_imf_context[0]);
178
179     /* create label2 */
180     _label2 = elm_label_add (layout);
181     elm_object_text_set (_label2, "LABEL 2");
182     evas_object_move (_label2, 0, 150);
183     evas_object_resize (_label2, ad->root_w, 50);
184     evas_object_show (_label2);
185     evas_object_event_callback_add (_label2, EVAS_CALLBACK_KEY_UP, _key_up_cb, (void *)NULL);
186     evas_object_event_callback_add (_label2, EVAS_CALLBACK_KEY_DOWN, _key_down_cb, (void *)NULL);
187
188     /* create input context for label2 */
189     _imf_context[1] = ecore_imf_context_add (ctx_id);
190     ecore_imf_context_client_window_set (_imf_context[1], (void *)ecore_win);
191     ecore_imf_context_client_canvas_set (_imf_context[1], evas_object_evas_get (_label2));
192
193     _key_event_label = elm_button_add (layout);
194     elm_object_text_set (_key_event_label, "KEY EVENT");
195     evas_object_move (_key_event_label, 0, 200);
196     evas_object_resize (_key_event_label, ad->root_w, 50);
197     evas_object_show (_key_event_label);
198
199     _preedit_event_label = elm_button_add (layout);
200     elm_object_text_set (_preedit_event_label, "PREEDIT EVENT");
201     evas_object_move (_preedit_event_label, 0, 250);
202     evas_object_resize (_preedit_event_label, ad->root_w, 50);
203     evas_object_show (_preedit_event_label);
204
205     _commit_event_label = elm_button_add (layout);
206     elm_object_text_set (_commit_event_label, "COMMIT EVENT");
207     evas_object_move (_commit_event_label, 0, 300);
208     evas_object_resize (_commit_event_label, ad->root_w, 50);
209     evas_object_show (_commit_event_label);
210
211     _set_focus_button1 = elm_button_add (layout);
212     elm_object_text_set (_set_focus_button1, "SET FOCUS TO LABEL 1");
213     evas_object_move (_set_focus_button1, 0, 350);
214     evas_object_resize (_set_focus_button1, ad->root_w, 50);
215     evas_object_show (_set_focus_button1);
216     evas_object_smart_callback_add (_set_focus_button1, "clicked", _set_focus_button_bt, (void *)1);
217
218     _set_focus_button2 = elm_button_add (layout);
219     elm_object_text_set (_set_focus_button2, "SET FOCUS TO LABEL 2");
220     evas_object_move (_set_focus_button2, 0, 400);
221     evas_object_resize (_set_focus_button2, ad->root_w, 50);
222     evas_object_show (_set_focus_button2);
223     evas_object_smart_callback_add (_set_focus_button2, "clicked", _set_focus_button_bt, (void *)2);
224
225     _ise_show_button = elm_button_add (layout);
226     elm_object_text_set (_ise_show_button, "ISE SHOW");
227     evas_object_move (_ise_show_button, 0, 450);
228     evas_object_resize (_ise_show_button, ad->root_w, 50);
229     evas_object_show (_ise_show_button);
230     evas_object_smart_callback_add (_ise_show_button, "clicked", _button_bt, NULL);
231
232     Elm_Object_Item *it = elm_naviframe_item_push (ad->naviframe, _("label event demo"), NULL, NULL, layout, NULL);
233     Evas_Object *back_btn = elm_object_item_part_content_get (it, ELM_NAVIFRAME_ITEM_PREV_BTN);
234     evas_object_smart_callback_add (back_btn, "clicked",  nf_back_event_cb, ad );
235 }
236
237 static void _list_click (void *data, Evas_Object *obj, void *event_info)
238 {
239     struct appdata *ad = (struct appdata *)data;
240     if (ad == NULL) return;
241
242     Evas_Object *li = ad->ev_li;
243     if (li == NULL) return;
244
245     Elm_Object_Item *it = (Elm_Object_Item *)elm_list_selected_item_get (li);
246
247     if (it != NULL)
248         elm_list_item_selected_set (it, EINA_FALSE);
249 }
250
251 void isf_event_demo_bt (void *data, Evas_Object *obj, void *event_info)
252 {
253     struct appdata *ad = (struct appdata *)data;
254
255     ad->ev_li = elm_list_add (ad->naviframe);
256     elm_list_mode_set (ad->ev_li, ELM_LIST_COMPRESS);
257     evas_object_smart_callback_add (ad->ev_li, "selected", _list_click, ad);
258     elm_list_item_append (ad->ev_li, "Label event", NULL, NULL, isf_label_event_demo_bt, ad);
259     elm_list_item_append (ad->ev_li, "Entry event", NULL, NULL, isf_entry_event_demo_bt, ad);
260     elm_list_go (ad->ev_li);
261
262     elm_naviframe_item_push (ad->naviframe, _("ise event demo"), NULL, NULL, ad->ev_li, NULL);
263 }
264
265 /*
266 vi:ts=4:ai:nowrap:expandtab
267 */