1 #include "test.h"
2 #ifdef HAVE_CONFIG_H
3 # include "elementary_config.h"
4 #endif
5 #include <Elementary.h>
6
7 void
test_external_button(void * data EINA_UNUSED,Evas_Object * obj EINA_UNUSED,void * event_info EINA_UNUSED)8 test_external_button(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
9 {
10 Evas_Object *win, *ly;
11 char buf[PATH_MAX];
12
13 win = elm_win_util_standard_add("ext_button", "Edje External Button");
14 elm_win_autodel_set(win, EINA_TRUE);
15
16 ly = elm_layout_add(win);
17 snprintf(buf, sizeof(buf), "%s/objects/test_external.edj", elm_app_data_dir_get());
18 elm_layout_file_set(ly, buf, "external/button");
19 evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
20 elm_win_resize_object_add(win, ly);
21 evas_object_show(ly);
22
23 evas_object_resize(win, 320, 400);
24 evas_object_show(win);
25 }
26
27 void
test_external_slider(void * data EINA_UNUSED,Evas_Object * obj EINA_UNUSED,void * event_info EINA_UNUSED)28 test_external_slider(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
29 {
30 Evas_Object *win, *ly;
31 char buf[PATH_MAX];
32
33 win = elm_win_util_standard_add("ext_slider", "Edje External Slider");
34 elm_win_autodel_set(win, EINA_TRUE);
35
36 ly = elm_layout_add(win);
37 snprintf(buf, sizeof(buf), "%s/objects/test_external.edj", elm_app_data_dir_get());
38 elm_layout_file_set(ly, buf, "external/slider");
39 evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
40 elm_win_resize_object_add(win, ly);
41 evas_object_show(ly);
42
43 evas_object_resize(win, 320, 400);
44 evas_object_show(win);
45 }
46
47 void
test_external_scroller(void * data EINA_UNUSED,Evas_Object * obj EINA_UNUSED,void * event_info EINA_UNUSED)48 test_external_scroller(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
49 {
50 Evas_Object *win, *ly;
51 char buf[PATH_MAX];
52
53 win = elm_win_util_standard_add("ext_scroller", "Edje External Scroller");
54 elm_win_autodel_set(win, EINA_TRUE);
55
56 ly = elm_layout_add(win);
57 snprintf(buf, sizeof(buf), "%s/objects/test_external.edj", elm_app_data_dir_get());
58 elm_layout_file_set(ly, buf, "external/scroller");
59 evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
60 elm_win_resize_object_add(win, ly);
61 evas_object_show(ly);
62
63 evas_object_resize(win, 320, 400);
64 evas_object_show(win);
65 }
66
67 static void
_timer_del(void * data,const Efl_Event * ev EINA_UNUSED)68 _timer_del(void *data, const Efl_Event *ev EINA_UNUSED)
69 {
70 Ecore_Timer *t = data;
71 ecore_timer_del(t);
72 }
73
74 static Eina_Bool
_timer_cb(void * data)75 _timer_cb(void *data)
76 {
77 Evas_Object *edje = data;
78 Evas_Object *bt1, *bt2, *bt3, *pb1, *pb2, *pb4, *pb5;
79 Edje_External_Param param;
80 double progress;
81 Ecore_Timer *t;
82
83 pb1 = edje_object_part_external_object_get(edje, "ext_pbar1");
84 pb2 = edje_object_part_external_object_get(edje, "ext_pbar2");
85 pb4 = edje_object_part_external_object_get(edje, "ext_pbar4");
86 progress = elm_progressbar_value_get(pb1) + 0.0123;
87
88 elm_progressbar_value_set(pb1, progress);
89 elm_progressbar_value_set(pb2, progress);
90 elm_progressbar_value_set(pb4, progress);
91
92 /* Test external parameter API */
93 param.name = "value";
94 param.type = EDJE_EXTERNAL_PARAM_TYPE_DOUBLE;
95 param.d = progress;
96 edje_object_part_external_param_set(edje, "ext_pbar6", ¶m);
97
98 param.name = "pulsing";
99 param.type = EDJE_EXTERNAL_PARAM_TYPE_BOOL;
100 param.i = EINA_TRUE;
101 edje_object_part_external_param_set(edje, "ext_pbar7", ¶m);
102
103 /* Test EO API for direct function calls */
104 efl_ui_range_value_set(efl_part(edje, "ext_pbar3"), progress);
105
106 if (progress < 1.0)
107 return ECORE_CALLBACK_RENEW;
108
109 pb5 = edje_object_part_external_object_get(edje, "ext_pbar5");
110 elm_progressbar_pulse(pb2, EINA_FALSE);
111 elm_progressbar_pulse(pb5, EINA_FALSE);
112
113 bt1 = edje_object_part_external_object_get(edje, "ext_button1");
114 bt2 = edje_object_part_external_object_get(edje, "ext_button2");
115 bt3 = edje_object_part_external_object_get(edje, "ext_button3");
116 elm_object_disabled_set(bt1, EINA_FALSE);
117 elm_object_disabled_set(bt2, EINA_FALSE);
118 elm_object_disabled_set(bt3, EINA_FALSE);
119
120 /* Test external parameter API */
121 param.name = "value";
122 param.type = EDJE_EXTERNAL_PARAM_TYPE_DOUBLE;
123 param.d = 0.0;
124 edje_object_part_external_param_set(edje, "ext_pbar6", ¶m);
125
126 param.name = "pulsing";
127 param.type = EDJE_EXTERNAL_PARAM_TYPE_BOOL;
128 param.i = EINA_FALSE;
129 edje_object_part_external_param_set(edje, "ext_pbar7", ¶m);
130
131 t = efl_key_data_get(edje, "timer");
132 efl_event_callback_del(edje, EFL_EVENT_DEL, _timer_del, t);
133 efl_key_data_set(edje, "timer", NULL);
134
135 return ECORE_CALLBACK_CANCEL;
136 }
137
138 static void
_bt_clicked(void * data,Evas_Object * obj EINA_UNUSED,void * event_info EINA_UNUSED)139 _bt_clicked(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
140 {
141 Evas_Object *edje = data;
142 Evas_Object *bt1, *bt2, *bt3, *pb1, *pb2, *pb3, *pb4, *pb5;
143 Edje_External_Param param;
144 Ecore_Timer *t;
145
146 /* Test direct API calls on embedded objects */
147 bt1 = edje_object_part_external_object_get(edje, "ext_button1");
148 bt2 = edje_object_part_external_object_get(edje, "ext_button2");
149 bt3 = edje_object_part_external_object_get(edje, "ext_button3");
150 elm_object_disabled_set(bt1, EINA_TRUE);
151 elm_object_disabled_set(bt2, EINA_TRUE);
152 elm_object_disabled_set(bt3, EINA_TRUE);
153
154 pb1 = edje_object_part_external_object_get(edje, "ext_pbar1");
155 pb2 = edje_object_part_external_object_get(edje, "ext_pbar2");
156 pb3 = edje_object_part_external_object_get(edje, "ext_pbar3");
157 pb4 = edje_object_part_external_object_get(edje, "ext_pbar4");
158 pb5 = edje_object_part_external_object_get(edje, "ext_pbar5");
159
160 elm_progressbar_value_set(pb1, 0.0);
161 elm_progressbar_value_set(pb3, 0.0);
162 elm_progressbar_value_set(pb4, 0.0);
163
164 elm_progressbar_pulse(pb2, EINA_TRUE);
165 elm_progressbar_pulse(pb5, EINA_TRUE);
166
167 /* Test external parameter API */
168 param.name = "value";
169 param.type = EDJE_EXTERNAL_PARAM_TYPE_DOUBLE;
170 param.d = 0.0;
171 edje_object_part_external_param_set(edje, "ext_pbar6", ¶m);
172
173 param.name = "pulsing";
174 param.type = EDJE_EXTERNAL_PARAM_TYPE_BOOL;
175 param.i = EINA_TRUE;
176 edje_object_part_external_param_set(edje, "ext_pbar7", ¶m);
177
178 /* Test EO API for direct function calls */
179 efl_ui_range_value_set(efl_part(edje, "ext_pbar3"), 0.0);
180
181 t = ecore_timer_add(0.1, _timer_cb, edje);
182 efl_key_data_set(edje, "timer", t);
183 efl_event_callback_add(edje, EFL_EVENT_DEL, _timer_del, t);
184 }
185
186 void
test_external_pbar(void * data EINA_UNUSED,Evas_Object * obj EINA_UNUSED,void * event_info EINA_UNUSED)187 test_external_pbar(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
188 {
189 Evas_Object *win, *ly, *edje, *bt;
190 char buf[PATH_MAX];
191
192 win = elm_win_util_standard_add("ext_pbar", "Edje External ProgressBar");
193 elm_win_autodel_set(win, EINA_TRUE);
194
195 ly = elm_layout_add(win);
196 snprintf(buf, sizeof(buf), "%s/objects/test_external.edj", elm_app_data_dir_get());
197 elm_layout_file_set(ly, buf, "external/pbar");
198 evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
199 elm_win_resize_object_add(win, ly);
200 evas_object_show(ly);
201
202 edje = elm_layout_edje_get(ly);
203 bt = edje_object_part_external_object_get(edje, "ext_button3");
204 evas_object_smart_callback_add(bt, "clicked", _bt_clicked, edje);
205
206 evas_object_resize(win, 320, 400);
207 evas_object_show(win);
208 }
209
210 void
test_external_video(void * data EINA_UNUSED,Evas_Object * obj EINA_UNUSED,void * event_info EINA_UNUSED)211 test_external_video(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
212 {
213 Evas_Object *win, *ly;
214 char buf[PATH_MAX];
215
216 win = elm_win_util_standard_add("ext_video", "Edje External Video");
217 elm_win_autodel_set(win, EINA_TRUE);
218
219 ly = elm_layout_add(win);
220 snprintf(buf, sizeof(buf), "%s/objects/test_external.edj", elm_app_data_dir_get());
221 elm_layout_file_set(ly, buf, "external/video");
222 evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
223 elm_win_resize_object_add(win, ly);
224 evas_object_show(ly);
225
226 evas_object_resize(win, 320, 400);
227 evas_object_show(win);
228 }
229
230 void
test_external_icon(void * data EINA_UNUSED,Evas_Object * obj EINA_UNUSED,void * event_info EINA_UNUSED)231 test_external_icon(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
232 {
233 Evas_Object *win, *ly;
234 char buf[PATH_MAX];
235
236 win = elm_win_util_standard_add("ext_icon", "Edje External Icon");
237 elm_win_autodel_set(win, EINA_TRUE);
238
239 ly = elm_layout_add(win);
240 snprintf(buf, sizeof(buf), "%s/objects/test_external.edj", elm_app_data_dir_get());
241 elm_layout_file_set(ly, buf, "external/icon");
242 evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
243 elm_win_resize_object_add(win, ly);
244 evas_object_show(ly);
245
246 elm_layout_signal_emit(ly, "elm_test,animations,start", "elm_test");
247
248 evas_object_resize(win, 320, 400);
249 evas_object_show(win);
250 }
251
252 static char *
text_get_cb(void * data,Evas_Object * obj EINA_UNUSED,const char * part EINA_UNUSED)253 text_get_cb(void *data,
254 Evas_Object *obj EINA_UNUSED,
255 const char *part EINA_UNUSED)
256 {
257 return strdup(data);
258 }
259
260 static void
action_cb(void * data,Evas_Object * obj EINA_UNUSED,void * info)261 action_cb(void *data,
262 Evas_Object *obj EINA_UNUSED,
263 void *info)
264 {
265 Evas_Object *const lay = data;
266 Elm_Object_Item *const item = info;
267
268 elm_layout_text_set(lay, "info", elm_object_item_data_get(item));
269 }
270
271 static void
_cb_pressed_cb(void * data EINA_UNUSED,Evas_Object * obj,void * info)272 _cb_pressed_cb(void *data EINA_UNUSED,
273 Evas_Object *obj,
274 void *info)
275 {
276 const char *txt;
277
278 txt = elm_object_item_text_get(info);
279 elm_object_text_set(obj, txt);
280 elm_combobox_hover_end(obj);
281 elm_entry_cursor_end_set(obj);
282 }
283
284 void
test_external_combobox(void * data EINA_UNUSED,Evas_Object * obj EINA_UNUSED,void * event_info EINA_UNUSED)285 test_external_combobox(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
286 {
287 Evas_Object *win, *ly, *cb, *edj;
288 char buf[PATH_MAX];
289 Elm_Genlist_Item_Class *itc;
290 const char *info[] = {
291 "Label", "Button", "Combobox", "Icon", "Scroller", "Layout",
292 "Naviframe", "Bubble"
293 };
294 const unsigned int size = EINA_C_ARRAY_LENGTH(info);
295 unsigned int i;
296
297 win = elm_win_util_standard_add("ext_combobox", "Edje External Combobox");
298 elm_win_autodel_set(win, EINA_TRUE);
299
300 ly = elm_layout_add(win);
301 snprintf(buf, sizeof(buf), "%s/objects/test_external.edj", elm_app_data_dir_get());
302 elm_layout_file_set(ly, buf, "external/combobox");
303 evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
304 elm_win_resize_object_add(win, ly);
305 evas_object_show(ly);
306
307 itc = elm_genlist_item_class_new();
308 itc->item_style = "default";
309 itc->func.text_get = text_get_cb;
310
311 edj = elm_layout_edje_get(ly);
312 cb = edje_object_part_external_object_get(edj, "combobox");
313 evas_object_smart_callback_add(cb, "item,pressed", _cb_pressed_cb, NULL);
314
315 for (i = 0; i < size; i++)
316 {
317 elm_genlist_item_append(cb, itc, info[i], NULL,
318 ELM_GENLIST_ITEM_NONE, action_cb, ly);
319 }
320
321 elm_genlist_item_class_free(itc);
322
323 evas_object_resize(win, 320, 400);
324 evas_object_show(win);
325 }
326