Imported Upstream version 1.7.1
[platform/upstream/edje.git] / src / examples / sigtest.c
1 #ifdef HAVE_CONFIG_H
2 #include "config.h"
3 #else
4 #define PACKAGE_EXAMPLES_DIR "."
5 #define __UNUSED__
6 #endif
7
8 #include <Ecore.h>
9 #include <Ecore_Evas.h>
10 #include <Edje.h>
11 #include <stdio.h>
12
13 #define WIDTH  (300)
14 #define HEIGHT (300)
15
16 static const char commands[] = \
17   "commands are:\n"
18   "\te - change te edje base\n"
19   "\tl - change to lua base\n"
20   "\tm - send message\n"
21   "\ts - send signal\n"
22   "\tEsc - exit\n"
23   "\th - print help\n";
24
25 static void
26 _on_keydown(void        *data,
27             Evas        *evas __UNUSED__,
28             Evas_Object *o __UNUSED__,
29             void        *einfo)
30 {
31    Ecore_Evas          *ee;
32    Evas_Event_Key_Down *ev;
33    Evas_Object         *edje_obj;
34    char                *edje_file_path;
35
36    ee = (Ecore_Evas *)data;
37    ev = (Evas_Event_Key_Down *)einfo;
38    edje_obj = ecore_evas_data_get(ee, "edje_obj");
39    edje_file_path = ecore_evas_data_get(ee, "file_path");
40
41    if (!strcmp(ev->keyname, "h"))
42      {
43         fprintf(stdout, commands);
44         return;
45      }
46    else if (!strcmp(ev->keyname, "e"))
47      {
48       if (!edje_object_file_set(edje_obj, edje_file_path, "plain/edje/group"))
49         {
50            int err = edje_object_load_error_get(edje_obj);
51            const char *errmsg = edje_load_error_str(err);
52
53            fprintf(stderr, "Could not load 'plain/edje/group' from sigtest.edj: %s\n", errmsg);
54         }
55       else
56          fprintf(stdout, "Loaded Edje object bound to group 'plain/edje/group' from"
57                          " file sigtest.edj with success!\n");
58         return;
59      }
60    else if (!strcmp(ev->keyname, "l"))
61      {
62       if (!edje_object_file_set(edje_obj, edje_file_path, "lua_base"))
63         {
64            int err = edje_object_load_error_get(edje_obj);
65            const char *errmsg = edje_load_error_str(err);
66
67            fprintf(stderr, "Could not load 'lua_base' from sigtest.edj: %s\n", errmsg);
68         }
69       else
70          fprintf(stdout, "Loaded Edje object bound to group 'lua_base' from"
71                          " file sigtest.edj with success!\n");
72         return;
73      }
74    else if (!strcmp(ev->keyname, "m"))
75      {
76         Edje_Message_String *msg = malloc(sizeof(*msg));
77
78         fprintf(stdout, "\n");
79         msg->str = strdup("C message text");
80         edje_object_message_send(edje_obj, EDJE_MESSAGE_STRING, 2, msg);
81         free(msg);
82         fprintf(stdout, "C message sent\n");
83         return;
84      }
85    else if (!strcmp(ev->keyname, "s"))
86      {
87         fprintf(stdout, "\n");
88         edje_object_signal_emit(edje_obj, "C signal 1", "Csource");
89         edje_object_signal_emit(edje_obj, "bubbles_lua:C signal 2", "Csource");
90         fprintf(stdout, "C signal sent\n");
91         return;
92      }
93    else if (!strcmp(ev->keyname, "Escape"))
94      ecore_main_loop_quit();
95    else
96      {
97         printf("unhandled key: %s\n", ev->keyname);
98         fprintf(stdout, commands);
99      }
100 }
101
102 static void
103 _on_message(void *data __UNUSED__, Evas_Object *obj __UNUSED__, Edje_Message_Type type, int id, void *msg)
104 {
105    int i;
106
107    fprintf(stdout, "C::message id=%d type=%d ", id, type);
108    switch (type)
109      {
110         case EDJE_MESSAGE_NONE :
111           {
112              fprintf(stdout, " NONE");
113              break;
114           }
115
116         case EDJE_MESSAGE_SIGNAL :
117           {
118              fprintf(stdout, " SIGNAL ");
119              break;
120           }
121
122         case EDJE_MESSAGE_STRING :
123           {
124              Edje_Message_String *mmsg = msg;
125
126              fprintf(stdout, " STRING %s", mmsg->str);
127              break;
128           }
129
130         case EDJE_MESSAGE_INT :
131           {
132              Edje_Message_Int *mmsg = msg;
133
134              fprintf(stdout, " INT %d", mmsg->val);
135              break;
136           }
137
138         case EDJE_MESSAGE_FLOAT :
139           {
140              Edje_Message_Float *mmsg = msg;
141
142              fprintf(stdout, " FLOAT %f", mmsg->val);
143              break;
144           }
145
146         case EDJE_MESSAGE_STRING_SET :
147           {
148              Edje_Message_String_Set *mmsg = msg;
149
150              fprintf(stdout, " STRING_SET -\n");
151              for (i = 0; i < mmsg->count; i++)
152                 fprintf(stdout, "  %s\n", mmsg->str[i]);
153              break;
154           }
155
156         case EDJE_MESSAGE_INT_SET :
157           {
158              Edje_Message_Int_Set *mmsg = msg;
159
160              fprintf(stdout, " INT_SET -\n");
161              for (i = 0; i < mmsg->count; i++)
162                 fprintf(stdout, "  %d\n", mmsg->val[i]);
163              break;
164           }
165
166         case EDJE_MESSAGE_FLOAT_SET :
167           {
168              Edje_Message_Float_Set *mmsg = msg;
169
170              fprintf(stdout, " FLOAT_SET -\n");
171              for (i = 0; i < mmsg->count; i++)
172                 fprintf(stdout, "  %f\n", mmsg->val[i]);
173              break;
174           }
175
176         case EDJE_MESSAGE_STRING_INT :
177           {
178              Edje_Message_String_Int *mmsg = msg;
179
180              fprintf(stdout, " STRING_INT %s %d", mmsg->str, mmsg->val);
181              break;
182           }
183
184         case EDJE_MESSAGE_STRING_FLOAT :
185           {
186              Edje_Message_String_Float *mmsg = msg;
187
188              fprintf(stdout, " STRING_FLOAT %s %f", mmsg->str, mmsg->val);
189              break;
190           }
191
192         case EDJE_MESSAGE_STRING_INT_SET :
193           {
194              Edje_Message_String_Int_Set *mmsg = msg;
195
196              fprintf(stdout, " STRING_INT_SET %s -\n", mmsg->str);
197              for (i = 0; i < mmsg->count; i++)
198                 fprintf(stdout, "  %d\n", mmsg->val[i]);
199              break;
200           }
201
202         case EDJE_MESSAGE_STRING_FLOAT_SET :
203           {
204              Edje_Message_String_Float_Set *mmsg = msg;
205
206              fprintf(stdout, " STRING_FLOAT_SET %s -\n", mmsg->str);
207              for (i = 0; i < mmsg->count; i++)
208                 fprintf(stdout, "  %f\n", mmsg->val[i]);
209              break;
210           }
211      }
212    fprintf(stdout, "\n");
213 }
214
215 static void
216 _on_signal(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const char  *emission, const char  *source)
217 {
218    fprintf(stdout, "C::signal sig=|%s| src=|%s|\n", emission, source);
219 }
220
221 static void
222 _on_delete(Ecore_Evas *ee __UNUSED__)
223 {
224    ecore_main_loop_quit();
225 }
226
227 int
228 main(int argc __UNUSED__, char *argv[])
229 {
230    char         border_img_path[PATH_MAX];
231    char         edje_file_path[PATH_MAX];
232    const char  *edje_file = "sigtest.edj";
233    Ecore_Evas  *ee;
234    Evas        *evas;
235    Evas_Object *bg;
236    Evas_Object *border;
237    Evas_Object *edje_obj;
238    Eina_Prefix *pfx;
239
240    if (!ecore_evas_init())
241      return EXIT_FAILURE;
242
243    if (!edje_init())
244      goto shutdown_ecore_evas;
245
246    pfx = eina_prefix_new(argv[0], main,
247                          "EDJE_EXAMPLES",
248                          "edje/examples",
249                          edje_file,
250                          PACKAGE_BIN_DIR,
251                          PACKAGE_LIB_DIR,
252                          PACKAGE_DATA_DIR,
253                          PACKAGE_DATA_DIR);
254    if (!pfx)
255      goto shutdown_edje;
256
257    /* this will give you a window with an Evas canvas under the first
258     * engine available */
259    ee = ecore_evas_new(NULL, 0, 0, WIDTH, HEIGHT, NULL);
260    if (!ee)
261      goto free_prefix;
262
263    ecore_evas_callback_delete_request_set(ee, _on_delete);
264    ecore_evas_title_set(ee, "Signals and wessages tester");
265
266    evas = ecore_evas_get(ee);
267
268    bg = evas_object_rectangle_add(evas);
269    evas_object_color_set(bg, 255, 255, 255, 255); /* white bg */
270    evas_object_move(bg, 0, 0); /* at canvas' origin */
271    evas_object_resize(bg, WIDTH, HEIGHT); /* covers full canvas */
272    evas_object_show(bg);
273    ecore_evas_object_associate(ee, bg, ECORE_EVAS_OBJECT_ASSOCIATE_BASE);
274
275    evas_object_focus_set(bg, EINA_TRUE);
276
277    edje_obj = edje_object_add(evas);
278
279    edje_object_message_handler_set(edje_obj, _on_message, NULL);
280    edje_object_signal_callback_add(edje_obj, "*", "*", _on_signal, NULL);
281
282    snprintf(edje_file_path, sizeof(edje_file_path),
283             "%s/examples/%s", eina_prefix_data_get(pfx), edje_file);
284    if (!edje_object_file_set(edje_obj, edje_file_path, "lua_base"))
285      {
286         int err = edje_object_load_error_get(edje_obj);
287         const char *errmsg = edje_load_error_str(err);
288         fprintf(stderr, "Could not load 'lua_base' from sigtest.edj: %s\n",
289                 errmsg);
290
291         evas_object_del(edje_obj);
292         goto free_prefix;
293      }
294
295    fprintf(stdout, "Loaded Edje object bound to group 'lua_base' from"
296                    " file sigtest.edj with success!\n");
297
298    evas_object_move(edje_obj, 20, 20);
299    evas_object_resize(edje_obj, WIDTH - 40, HEIGHT - 40);
300    evas_object_show(edje_obj);
301    ecore_evas_data_set(ee, "edje_obj", edje_obj);
302    ecore_evas_data_set(ee, "file_path", edje_file_path);
303
304    evas_object_event_callback_add(bg, EVAS_CALLBACK_KEY_DOWN, _on_keydown, ee);
305
306    snprintf(border_img_path, sizeof(border_img_path),
307             "%s/edje/examples/red.png", eina_prefix_data_get(pfx));
308
309    /* this is a border around the Edje object above, here just to
310     * emphasize its geometry */
311    border = evas_object_image_filled_add(evas);
312    evas_object_image_file_set(border, border_img_path, NULL);
313    evas_object_image_border_set(border, 2, 2, 2, 2);
314    evas_object_image_border_center_fill_set(border, EVAS_BORDER_FILL_NONE);
315
316    evas_object_resize(border, WIDTH - 40 + 4, HEIGHT - 40 + 4);
317    evas_object_move(border, 20 - 2, 20 - 2);
318    evas_object_show(border);
319
320    fprintf(stdout, commands);
321
322    ecore_evas_show(ee);
323
324    ecore_main_loop_begin();
325
326    eina_prefix_free(pfx);
327    ecore_evas_free(ee);
328    ecore_evas_shutdown();
329    edje_shutdown();
330
331    return EXIT_SUCCESS;
332
333  free_prefix:
334    eina_prefix_free(pfx);
335  shutdown_edje:
336    edje_shutdown();
337  shutdown_ecore_evas:
338    ecore_evas_shutdown();
339
340    return EXIT_FAILURE;
341 }