1 /**
2 * Simple Edje Edit example illustrating BOX part's and it's items editing.
3 *
4 * This example is intended for people who want to write an Edje editor. There
5 * is no other application that should use it, EVER ! If you don't plan to write
6 * an Edje editor please move away from this file.
7 *
8 * See stdout/stderr for output.
9 *
10 * @verbatim
11 * edje_cc box_example.edc && gcc -o edje-edit-part-box edje-edit-part-box.c `pkg-config --libs --cflags evas ecore ecore-evas edje eina`
12 * @endverbatim
13 */
14
15 #ifdef HAVE_CONFIG_H
16 # include "config.h"
17 #else
18 # define EINA_UNUSED
19 #endif
20
21 #ifndef PACKAGE_DATA_DIR
22 #define PACKAGE_DATA_DIR "."
23 #endif
24
25 #define EDJE_EDIT_IS_UNSTABLE_AND_I_KNOW_ABOUT_IT
26 #include <Ecore.h>
27 #include <Ecore_Evas.h>
28 #include <Edje_Edit.h>
29 #include <Edje.h>
30
31 #define WIDTH (500)
32 #define HEIGHT (300)
33
34 static const char commands[] = \
35 "commands are:\n"
36 "\tl - change box layout\n"
37 "\tL - change box alternative layout\n"
38 "\ti - append one/remove item\n"
39 "\tg - change source of middle item\n"
40 "\tM - change max of middle item\n"
41 "\tm - change min of middle item\n"
42 "\ts - change spread (w and h) of middle item\n"
43 "\tb - change paddings of middle item\n"
44 "\tw - change weight of middle item\n"
45 "\tn - change align of middle item\n"
46 "\tp - print resulted source code of edj file (after changing with edje edit)\n"
47 "\th - print help\n"
48 "\tEsc - exit\n";
49
50 static int group_number = 0;
51 static const char *groups[] =
52 {
53 "blue_group", "red_group", "green_group", "complex_group"
54 };
55
56 static int layout_number = 0;
57 static int alt_layout_number = 0;
58 static char *layouts[] =
59 {
60 "horizontal", "vertical", "horizontal_homogeneous", "vertical_homogeneous",
61 "horizontal_max", "vertical_max", "horizontal_flow", "vertical_flow", "stack",
62 NULL
63 };
64
65 static void
_on_delete(Ecore_Evas * ee EINA_UNUSED)66 _on_delete(Ecore_Evas *ee EINA_UNUSED)
67 {
68 ecore_main_loop_quit();
69 }
70
71 static void
_on_bg_key_down(void * data EINA_UNUSED,Evas * e EINA_UNUSED,Evas_Object * o,void * event_info)72 _on_bg_key_down(void *data EINA_UNUSED,
73 Evas *e EINA_UNUSED,
74 Evas_Object *o,
75 void *event_info)
76 {
77 const char *edje_file = PACKAGE_DATA_DIR"/box_example.edj";
78 Evas_Event_Key_Down *ev;
79 Evas_Object *edje_edit_obj = o;
80
81 ev = (Evas_Event_Key_Down *)event_info;
82
83 if (!strcmp(ev->key, "h"))
84 {
85 printf(commands);
86 return;
87 }
88 if (!strcmp(ev->key, "p"))
89 {
90 printf("SOURCE CODE:\n%s \n", edje_edit_source_generate(edje_edit_obj));
91 return;
92 }
93 if (!strcmp(ev->key, "n"))
94 {
95 double align_x = edje_edit_part_item_index_align_x_get(edje_edit_obj, "green", 1);
96 double align_y = edje_edit_part_item_index_align_y_get(edje_edit_obj, "green", 1);
97
98 align_x += 0.1; align_y += 0.2;
99 if (align_x >= 1.0) align_x = 0.0;
100 if (align_y >= 1.0) align_y = 0.0;
101
102 printf("Changing align to x[%f] y[%f] \n", align_x, align_y);
103
104 if (!edje_edit_part_item_index_align_x_set(edje_edit_obj, "green", 1, align_x))
105 fprintf(stderr, "Couldn't set align x for item x2, something is absolutely wrong!!!\n");
106 if (!edje_edit_part_item_index_align_y_set(edje_edit_obj, "green", 1, align_y))
107 fprintf(stderr, "Couldn't set align y for item x2, something is absolutely wrong!!!\n");
108
109 edje_edit_save_all(edje_edit_obj);
110 if (!edje_object_file_set(edje_edit_obj, edje_file, "box_group"))
111 printf("Couldn't load edje edit object! \n");
112
113 return;
114 }
115 if (!strcmp(ev->key, "w"))
116 {
117 double weight_x = edje_edit_part_item_index_weight_x_get(edje_edit_obj, "green", 1);
118 double weight_y = edje_edit_part_item_index_weight_y_get(edje_edit_obj, "green", 1);
119
120 weight_x += 5.0; weight_y += 10.0;
121 if (weight_x >= 30.0) weight_x = 0.0;
122 if (weight_y >= 30.0) weight_y = 0.0;
123
124 printf("Changing weight to x[%f] y[%f] \n", weight_x, weight_y);
125
126 if (!edje_edit_part_item_index_weight_x_set(edje_edit_obj, "green", 1, weight_x))
127 fprintf(stderr, "Couldn't set weight x for item x2, something is absolutely wrong!!!\n");
128 if (!edje_edit_part_item_index_weight_y_set(edje_edit_obj, "green", 1, weight_y))
129 fprintf(stderr, "Couldn't set weight y for item x2, something is absolutely wrong!!!\n");
130
131 edje_edit_save_all(edje_edit_obj);
132 if (!edje_object_file_set(edje_edit_obj, edje_file, "box_group"))
133 printf("Couldn't load edje edit object! \n");
134
135 return;
136 }
137 if (!strcmp(ev->key, "b"))
138 {
139 Evas_Coord l, r, t, b;
140 edje_edit_part_item_index_padding_get(edje_edit_obj, "green", 1, &l, &r, &t, &b);
141
142 l += 1; r += 2; t += 4; b += 8;
143 if (l >= 32) l = 0;
144 if (r >= 32) r = 0;
145 if (t >= 32) t = 0;
146 if (b >= 32) b = 0;
147
148 printf("Changing paddings. left[%d], right[%d], top[%d], bottom[%d]\n", l, r, t, b);
149
150 if (!edje_edit_part_item_index_padding_set(edje_edit_obj, "green", 1, l, r, t, b))
151 fprintf(stderr, "Couldn't set paddings for item x2, something is absolutely wrong!!!\n");
152
153 edje_edit_save_all(edje_edit_obj);
154 if (!edje_object_file_set(edje_edit_obj, edje_file, "box_group"))
155 printf("Couldn't load edje edit object! \n");
156
157 return;
158 }
159 if (!strcmp(ev->key, "s"))
160 {
161 /* numbder of spread item is (spread_w * spread_h) */
162 int spread_w = edje_edit_part_item_index_spread_w_get(edje_edit_obj, "green", 1);
163 int spread_h = edje_edit_part_item_index_spread_h_get(edje_edit_obj, "green", 1);
164
165 spread_w++;
166 if (spread_w >= 5)
167 {
168 spread_w = 1;
169 spread_h++;
170 if (spread_h >= 5)
171 spread_h = 1;
172 }
173
174 printf("Changing spread to w[%d] h[%d] \n", spread_w, spread_h);
175
176 if (!edje_edit_part_item_index_spread_w_set(edje_edit_obj, "green", 1, spread_w))
177 fprintf(stderr, "Couldn't set spread w for item x2, something is absolutely wrong!!!\n");
178 if (!edje_edit_part_item_index_spread_h_set(edje_edit_obj, "green", 1, spread_h))
179 fprintf(stderr, "Couldn't set spread h for item x2, something is absolutely wrong!!!\n");
180
181 edje_edit_save_all(edje_edit_obj);
182 if (!edje_object_file_set(edje_edit_obj, edje_file, "box_group"))
183 printf("Couldn't load edje edit object! \n");
184
185 return;
186 }
187 if (!strcmp(ev->key, "m"))
188 {
189 int min_w = edje_edit_part_item_index_min_w_get(edje_edit_obj, "green", 1);
190 int min_h = edje_edit_part_item_index_min_h_get(edje_edit_obj, "green", 1);
191
192 min_w += 100; min_h += 100;
193 if (min_w >= 500) min_w = 200;
194 if (min_h >= 500) min_h = 200;
195
196 printf("Changing min to w[%d] h[%d] \n", min_w, min_h);
197
198 if (!edje_edit_part_item_index_min_w_set(edje_edit_obj, "green", 1, min_w))
199 fprintf(stderr, "Couldn't set min w for item x2, something is absolutely wrong!!!\n");
200 if (!edje_edit_part_item_index_min_h_set(edje_edit_obj, "green", 1, min_h))
201 fprintf(stderr, "Couldn't set min h for item x2, something is absolutely wrong!!!\n");
202
203 edje_edit_save_all(edje_edit_obj);
204 if (!edje_object_file_set(edje_edit_obj, edje_file, "box_group"))
205 printf("Couldn't load edje edit object! \n");
206
207 return;
208 }
209 if (!strcmp(ev->key, "M"))
210 {
211 int max_w = edje_edit_part_item_index_max_w_get(edje_edit_obj, "green", 1);
212 int max_h = edje_edit_part_item_index_max_h_get(edje_edit_obj, "green", 1);
213
214 max_w -= 100; max_h -= 100;
215 if (max_w <= 0) max_w = 800;
216 if (max_h <= 0) max_h = 800;
217
218 printf("Changing max to w[%d] h[%d] \n", max_w, max_h);
219
220 if (!edje_edit_part_item_index_max_w_set(edje_edit_obj, "green", 1, max_w))
221 fprintf(stderr, "Couldn't set max w for item x2, something is absolutely wrong!!!\n");
222 if (!edje_edit_part_item_index_max_h_set(edje_edit_obj, "green", 1, max_h))
223 fprintf(stderr, "Couldn't set max h for item x2, something is absolutely wrong!!!\n");
224
225 edje_edit_save_all(edje_edit_obj);
226 if (!edje_object_file_set(edje_edit_obj, edje_file, "box_group"))
227 printf("Couldn't load edje edit object! \n");
228
229 return;
230 }
231 if (!strcmp(ev->key, "g"))
232 {
233 Eina_Stringshare *source = edje_edit_part_item_index_source_get(edje_edit_obj, "green", 1);
234 const char *new_source = NULL;
235
236 group_number++;
237 if (group_number > 3)
238 group_number = 0;
239 new_source = groups[group_number];
240
241 printf("Changing item's source from [%s] to [%s] \n", source, new_source);
242
243 if (!edje_edit_part_item_index_source_set(edje_edit_obj, "green", 1, new_source))
244 fprintf(stderr, "Couldn't change item's source, something is absolutely wrong!!!\n");
245
246 edje_edit_save_all(edje_edit_obj);
247 if (!edje_object_file_set(edje_edit_obj, edje_file, "box_group"))
248 printf("Couldn't load edje edit object! \n");
249
250 eina_stringshare_del(source);
251 return;
252 }
253 if (!strcmp(ev->key, "i"))
254 {
255 if (!edje_edit_part_item_append(edje_edit_obj, "green", "x_new", "complex_group"))
256 {
257 edje_edit_part_item_index_del(edje_edit_obj, "green", 3);
258 printf("Successfully removed new item!\n");
259 }
260 else
261 {
262 if (!edje_edit_part_item_index_min_w_set(edje_edit_obj, "green", 3, 200))
263 fprintf(stderr, "Couldn't set min w for item x_new, something is absolutely wrong!!!\n");
264 if (!edje_edit_part_item_index_min_h_set(edje_edit_obj, "green", 3, 200))
265 fprintf(stderr, "Couldn't set min h for item x_new, something is absolutely wrong!!!\n");
266 printf("Successfully added new item!\n");
267 }
268
269 edje_edit_save_all(edje_edit_obj);
270 if (!edje_object_file_set(edje_edit_obj, edje_file, "box_group"))
271 printf("Couldn't load edje edit object! \n");
272
273 return;
274 }
275 if (!strcmp(ev->key, "l"))
276 {
277 Eina_Stringshare *layout = edje_edit_state_box_layout_get(edje_edit_obj, "green", "default", 0.0);
278 char *new_layout = NULL;
279
280 layout_number++;
281 if (layout_number > 9)
282 layout_number = 0;
283 new_layout = layouts[layout_number];
284
285 printf("Changing box's layout from [%s] to [%s] \n", layout, new_layout);
286
287 if (!edje_edit_state_box_layout_set(edje_edit_obj, "green", "default", 0.0, new_layout))
288 fprintf(stderr, "Couldn't change layout, something is absolutely wrong!!!\n");
289
290 edje_edit_save_all(edje_edit_obj);
291 if (!edje_object_file_set(edje_edit_obj, edje_file, "box_group"))
292 printf("Couldn't load edje edit object! \n");
293
294 eina_stringshare_del(layout);
295 return;
296 }
297 if (!strcmp(ev->key, "L"))
298 {
299 Eina_Stringshare *layout = edje_edit_state_box_alt_layout_get(edje_edit_obj, "green", "default", 0.0);
300 char *new_layout = NULL;
301
302 alt_layout_number++;
303 if (alt_layout_number > 9)
304 alt_layout_number = 0;
305 new_layout = layouts[alt_layout_number];
306
307 printf("Changing box's alternative layout from [%s] to [%s] \n", layout, new_layout);
308
309 if (!edje_edit_state_box_alt_layout_set(edje_edit_obj, "green", "default", 0.0, new_layout))
310 fprintf(stderr, "Couldn't change alternative layout, something is absolutely wrong!!!\n");
311
312 edje_edit_save_all(edje_edit_obj);
313 if (!edje_object_file_set(edje_edit_obj, edje_file, "box_group"))
314 printf("Couldn't load edje edit object! \n");
315
316 eina_stringshare_del(layout);
317 return;
318 }
319 else if (!strcmp(ev->key, "Escape"))
320 ecore_main_loop_quit();
321 }
322
323 int
main(int argc EINA_UNUSED,char * argv[]EINA_UNUSED)324 main(int argc EINA_UNUSED, char *argv[] EINA_UNUSED)
325 {
326 const char *edje_file = PACKAGE_DATA_DIR"/box_example.edj";
327 Ecore_Evas *ee;
328 Evas *evas;
329 Evas_Object *edje_edit_obj;
330
331 if (!ecore_evas_init())
332 return EXIT_FAILURE;
333
334 if (!edje_init())
335 goto shutdown_ecore_evas;
336
337 /* this will give you a window with an Evas canvas under the first
338 * engine available */
339 ee = ecore_evas_new(NULL, 0, 0, WIDTH, HEIGHT, NULL);
340 if (!ee) goto shutdown_edje;
341
342 ecore_evas_callback_delete_request_set(ee, _on_delete);
343
344 ecore_evas_title_set(ee, "Edje Edit Example: BOX part");
345
346 evas = ecore_evas_get(ee);
347
348 /* loading edje edit object here */
349 edje_edit_obj = edje_edit_object_add(evas);
350 if (!edje_object_file_set(edje_edit_obj, edje_file, "box_group"))
351 printf("Couldn't load edje edit object! \n");
352
353 evas_object_resize(edje_edit_obj, WIDTH, HEIGHT);
354 evas_object_show(edje_edit_obj);
355
356 ecore_evas_data_set(ee, "background", edje_edit_obj);
357 ecore_evas_object_associate(ee, edje_edit_obj, ECORE_EVAS_OBJECT_ASSOCIATE_BASE);
358 evas_object_focus_set(edje_edit_obj, EINA_TRUE);
359 evas_object_event_callback_add(edje_edit_obj, EVAS_CALLBACK_KEY_DOWN, _on_bg_key_down, ee);
360
361 printf(commands);
362
363 ecore_evas_show(ee);
364
365 ecore_main_loop_begin();
366
367 ecore_evas_free(ee);
368 ecore_evas_shutdown();
369 edje_shutdown();
370
371 return EXIT_SUCCESS;
372
373 shutdown_edje:
374 edje_shutdown();
375 shutdown_ecore_evas:
376 ecore_evas_shutdown();
377
378 return EXIT_FAILURE;
379 }
380