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", &param);
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", &param);
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", &param);
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", &param);
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", &param);
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", &param);
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