3 typedef struct _E_Widget_Queue_Item E_Widget_Queue_Item;
4 typedef struct _E_Widget_Data E_Widget_Data;
5 typedef struct _E_Widget_Callback E_Widget_Callback;
9 Evas_Object *o_widget, *o_scrollframe, *o_ilist;
22 struct _E_Widget_Callback
24 void (*func) (void *data);
29 struct _E_Widget_Queue_Item
36 void (*func) (void *data);
39 int relative, use_relative;
43 static void _e_wid_del_hook(Evas_Object *obj);
44 static void _e_wid_focus_hook(Evas_Object *obj);
45 static void _e_wid_cb_scrollframe_resize(void *data, Evas *e, Evas_Object *obj, void *event_info);
46 static void _e_wid_cb_item_sel(void *data, void *data2);
47 static void _e_wid_cb_item_hilight(void *data, void *data2);
48 static void _e_wid_cb_selected(void *data, Evas_Object *obj, void *event_info);
49 static void _e_wid_focus_steal(void *data, Evas *e, Evas_Object *obj, void *event_info);
51 static Eina_Bool _queue_timer(void *data);
52 static void _queue_queue(Evas_Object *obj);
53 static void _queue_append(Evas_Object *obj, int command, Evas_Object *icon, Evas_Object *end, const char *label, int header, void (*func) (void *data), void *data, const char *val, int relative, int use_relative, int item);
54 static void _queue_remove(Evas_Object *obj, E_Widget_Queue_Item *qi, int del);
56 static enum _Queue_Command
75 _queue_timer(void *data)
80 double start = ecore_time_get();
83 wd = e_widget_data_get(obj);
84 wd->queue.timer = NULL;
85 e_widget_ilist_freeze(obj);
87 while (wd->queue.queue)
89 E_Widget_Queue_Item *qi;
91 qi = eina_list_data_get(wd->queue.queue);
92 if (qi->command == CMD_ADD)
94 E_Widget_Callback *wcb, *rcb;
96 wcb = E_NEW(E_Widget_Callback, 1);
100 if (qi->val) wcb->value = strdup(qi->val);
101 if (qi->use_relative == CMD_APPEND)
103 wd->callbacks = eina_list_append(wd->callbacks, wcb);
104 e_ilist_append(wd->o_ilist, qi->icon, qi->end, qi->label, qi->header,
105 _e_wid_cb_item_sel, _e_wid_cb_item_hilight, wd, wcb);
107 else if (qi->use_relative == CMD_PREPEND)
109 wd->callbacks = eina_list_append(wd->callbacks, wcb);
110 e_ilist_prepend(wd->o_ilist, qi->icon, qi->end, qi->label, qi->header,
111 _e_wid_cb_item_sel, _e_wid_cb_item_hilight, wd, wcb);
113 else if (qi->use_relative == CMD_APPEND_RELATIVE)
115 rcb = eina_list_nth(wd->callbacks, qi->relative);
118 wd->callbacks = eina_list_append_relative(wd->callbacks, wcb, rcb);
119 e_ilist_append_relative(wd->o_ilist, qi->icon, qi->end, qi->label, qi->header,
120 _e_wid_cb_item_sel, _e_wid_cb_item_hilight, wd, wcb, qi->relative);
124 wd->callbacks = eina_list_append(wd->callbacks, wcb);
125 e_ilist_append(wd->o_ilist, qi->icon, qi->end, qi->label, qi->header,
126 _e_wid_cb_item_sel, _e_wid_cb_item_hilight, wd, wcb);
129 else if (qi->use_relative == CMD_PREPEND_RELATIVE)
131 rcb = eina_list_nth(wd->callbacks, qi->relative);
134 wd->callbacks = eina_list_prepend_relative(wd->callbacks, wcb, rcb);
135 e_ilist_prepend_relative(wd->o_ilist, qi->icon, qi->end, qi->label, qi->header,
136 _e_wid_cb_item_sel, _e_wid_cb_item_hilight, wd, wcb, qi->relative);
140 wd->callbacks = eina_list_prepend(wd->callbacks, wcb);
141 e_ilist_prepend(wd->o_ilist, qi->icon, qi->end, qi->label, qi->header,
142 _e_wid_cb_item_sel, _e_wid_cb_item_hilight, wd, wcb);
145 if (qi->icon) evas_object_show(qi->icon);
146 if (qi->end) evas_object_show(qi->end);
148 else if (qi->command ==CMD_LABEL_SET)
149 e_ilist_nth_label_set(wd->o_ilist, qi->item, qi->label);
150 else if (qi->command == CMD_ICON_SET)
151 e_ilist_nth_icon_set(wd->o_ilist, qi->item, qi->icon);
152 else if (qi->command == CMD_SHOW)
154 Evas_Coord x, y, w, h;
157 e_ilist_nth_geometry_get(wd->o_ilist, qi->item, &x, &y, &w, &h);
158 if (qi->use_relative)
159 e_scrollframe_child_pos_set(wd->o_scrollframe, x, y);
161 e_scrollframe_child_region_show(wd->o_scrollframe, x, y, w, h);
163 else if (qi->command == CMD_SELECT)
164 e_ilist_selected_set(wd->o_ilist, qi->item);
165 else if (qi->command == CMD_UNSELECT)
167 if ((wd->value) && *(wd->value))
169 eina_stringshare_del(*(wd->value));
172 e_ilist_unselect(wd->o_ilist);
175 else if (qi->command == CMD_REMOVE)
177 E_Widget_Callback *wcb;
180 e_ilist_remove_num(wd->o_ilist, qi->item);
181 item = eina_list_nth_list(wd->callbacks, qi->item);
184 wcb = eina_list_data_get(item);
185 if (wcb && wcb->value) free(wcb->value);
187 wd->callbacks = eina_list_remove_list(wd->callbacks, item);
191 else if (qi->command == CMD_MULTI_SELECT)
192 e_ilist_multi_select(wd->o_ilist, qi->item);
193 else if (qi->command == CMD_RANGE_SELECT)
194 e_ilist_range_select(wd->o_ilist, qi->item);
195 else if (qi->command == CMD_END_SET)
196 e_ilist_nth_end_set(wd->o_ilist, qi->item, qi->end);
197 _queue_remove(obj, qi, 0);
199 if ((num++ >= 10) && (ecore_time_get() - start > 0.01))
202 e_widget_ilist_thaw(obj);
203 e_widget_ilist_go(obj);
205 return ECORE_CALLBACK_CANCEL;
209 _queue_queue(Evas_Object *obj)
213 wd = e_widget_data_get(obj);
214 if (!wd->queue.queue) return;
215 if (wd->queue.timer) return;
216 wd->queue.timer = ecore_timer_add(0.00001, _queue_timer, obj);
220 _queue_append(Evas_Object *obj, int command, Evas_Object *icon, Evas_Object *end,
221 const char *label, int header, void (*func) (void *data), void *data,
222 const char *val, int relative, int use_relative, int item)
225 E_Widget_Queue_Item *qi;
227 wd = e_widget_data_get(obj);
228 qi = E_NEW(E_Widget_Queue_Item, 1);
230 qi->command = command;
233 qi->label = eina_stringshare_add(label);
237 qi->val = eina_stringshare_add(val);
238 qi->relative = relative;
239 qi->use_relative = use_relative;
241 wd->queue.queue = eina_list_append(wd->queue.queue, qi);
246 _queue_remove(Evas_Object *obj, E_Widget_Queue_Item *qi, int del)
250 wd = e_widget_data_get(obj);
251 wd->queue.queue = eina_list_remove(wd->queue.queue, qi);
254 if (qi->icon) evas_object_del(qi->icon);
255 if (qi->end) evas_object_del(qi->end);
257 eina_stringshare_del(qi->label);
258 eina_stringshare_del(qi->val);
263 _queue_clear(Evas_Object *obj)
267 wd = e_widget_data_get(obj);
268 while (wd->queue.queue)
269 _queue_remove(obj, eina_list_data_get(wd->queue.queue), 1);
270 if (wd->queue.timer) ecore_timer_del(wd->queue.timer);
271 wd->queue.timer = NULL;
274 /* externally accessible functions */
276 e_widget_ilist_add(Evas *evas, int icon_w, int icon_h, const char **value)
278 Evas_Object *obj, *o;
281 wd = E_NEW(E_Widget_Data, 1);
282 if (!wd) return NULL;
284 obj = e_widget_add(evas);
286 e_widget_del_hook_set(obj, _e_wid_del_hook);
287 e_widget_focus_hook_set(obj, _e_wid_focus_hook);
288 e_widget_data_set(obj, wd);
290 wd->value = (char **)value;
292 o = e_scrollframe_add(evas);
293 wd->o_scrollframe = o;
295 e_widget_sub_object_add(obj, o);
296 e_widget_resize_object_set(obj, o);
297 evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN,
298 _e_wid_focus_steal, obj);
300 o = e_ilist_add(evas);
302 e_ilist_icon_size_set(o, icon_w, icon_h);
303 evas_object_event_callback_add(wd->o_scrollframe, EVAS_CALLBACK_RESIZE,
304 _e_wid_cb_scrollframe_resize, o);
305 e_scrollframe_child_set(wd->o_scrollframe, o);
306 e_widget_sub_object_add(obj, o);
308 evas_object_smart_callback_add(o, "selected", _e_wid_cb_selected, obj);
310 evas_object_resize(obj, 32, 32);
311 e_widget_size_min_set(obj, 32, 32);
316 e_widget_ilist_freeze(Evas_Object *obj)
320 wd = e_widget_data_get(obj);
321 e_ilist_freeze(wd->o_ilist);
325 e_widget_ilist_thaw(Evas_Object *obj)
329 wd = e_widget_data_get(obj);
330 e_ilist_thaw(wd->o_ilist);
334 e_widget_ilist_append(Evas_Object *obj, Evas_Object *icon, const char *label, void (*func) (void *data), void *data, const char *val)
336 _queue_append(obj, CMD_ADD, icon, NULL, label, 0, func, data, val, 0, CMD_APPEND, 0);
339 E_Widget_Callback *wcb;
341 wcb = E_NEW(E_Widget_Callback, 1);
344 wd = e_widget_data_get(obj);
347 if (val) wcb->value = strdup(val);
348 wd->callbacks = eina_list_append(wd->callbacks, wcb);
349 e_ilist_append(wd->o_ilist, icon, label, 0, _e_wid_cb_item_sel, _e_wid_cb_item_hilight, wd, wcb);
350 if (icon) evas_object_show(icon);
355 e_widget_ilist_append_full(Evas_Object *obj, Evas_Object *icon, Evas_Object *end, const char *label, void (*func) (void *data), void *data, const char *val)
357 _queue_append(obj, CMD_ADD, icon, end, label, 0, func, data, val, 0, CMD_APPEND, 0);
361 e_widget_ilist_append_relative(Evas_Object *obj, Evas_Object *icon, const char *label, void (*func) (void *data), void *data, const char *val, int relative)
363 _queue_append(obj, CMD_ADD, icon, NULL, label, 0, func, data, val, relative, CMD_APPEND_RELATIVE, 0);
366 E_Widget_Callback *wcb, *rcb;
368 wcb = E_NEW(E_Widget_Callback, 1);
371 wd = e_widget_data_get(obj);
374 if (val) wcb->value = strdup(val);
376 rcb = eina_list_nth(wd->callbacks, relative);
379 wd->callbacks = eina_list_append_relative(wd->callbacks, wcb, rcb);
380 e_ilist_append_relative(wd->o_ilist, icon, label, 0, _e_wid_cb_item_sel, _e_wid_cb_item_hilight, wd, wcb, relative);
384 wd->callbacks = eina_list_append(wd->callbacks, wcb);
385 e_ilist_append(wd->o_ilist, icon, label, 0, _e_wid_cb_item_sel, _e_wid_cb_item_hilight, wd, wcb);
388 if (icon) evas_object_show(icon);
393 e_widget_ilist_append_relative_full(Evas_Object *obj, Evas_Object *icon, Evas_Object *end, const char *label, void (*func) (void *data), void *data, const char *val, int relative)
395 _queue_append(obj, CMD_ADD, icon, end, label, 0, func, data, val, relative, CMD_APPEND_RELATIVE, 0);
399 e_widget_ilist_prepend(Evas_Object *obj, Evas_Object *icon, const char *label, void (*func) (void *data), void *data, const char *val)
401 _queue_append(obj, CMD_ADD, icon, NULL, label, 0, func, data, val, 0, CMD_PREPEND, 0);
404 E_Widget_Callback *wcb;
406 wcb = E_NEW(E_Widget_Callback, 1);
409 wd = e_widget_data_get(obj);
412 if (val) wcb->value = strdup(val);
413 wd->callbacks = eina_list_prepend(wd->callbacks, wcb);
414 e_ilist_prepend(wd->o_ilist, icon, label, 0, _e_wid_cb_item_sel, _e_wid_cb_item_hilight, wd, wcb);
415 if (icon) evas_object_show(icon);
420 e_widget_ilist_prepend_full(Evas_Object *obj, Evas_Object *icon, Evas_Object *end, const char *label, void (*func) (void *data), void *data, const char *val)
422 _queue_append(obj, CMD_ADD, icon, end, label, 0, func, data, val, 0, CMD_PREPEND, 0);
426 e_widget_ilist_prepend_relative(Evas_Object *obj, Evas_Object *icon, const char *label, void (*func) (void *data), void *data, const char *val, int relative)
428 _queue_append(obj, CMD_ADD, icon, NULL, label, 0, func, data, val, relative, CMD_PREPEND_RELATIVE, 0);
431 E_Widget_Callback *wcb, *rcb;
433 wcb = E_NEW(E_Widget_Callback, 1);
436 wd = e_widget_data_get(obj);
439 if (val) wcb->value = strdup(val);
441 rcb = eina_list_nth(wd->callbacks, relative);
444 wd->callbacks = eina_list_prepend_relative(wd->callbacks, wcb, rcb);
445 e_ilist_prepend_relative(wd->o_ilist, icon, label, 0, _e_wid_cb_item_sel, _e_wid_cb_item_hilight, wd, wcb, relative);
449 wd->callbacks = eina_list_prepend(wd->callbacks, wcb);
450 e_ilist_prepend(wd->o_ilist, icon, label, 0, _e_wid_cb_item_sel, _e_wid_cb_item_hilight, wd, wcb);
453 if (icon) evas_object_show(icon);
458 e_widget_ilist_prepend_relative_full(Evas_Object *obj, Evas_Object *icon, Evas_Object *end, const char *label, void (*func) (void *data), void *data, const char *val, int relative)
460 _queue_append(obj, CMD_ADD, icon, end, label, 0, func, data, val, relative, CMD_PREPEND_RELATIVE, 0);
464 e_widget_ilist_header_append(Evas_Object *obj, Evas_Object *icon, const char *label)
466 _queue_append(obj, CMD_ADD, icon, NULL, label, 1, NULL, NULL, NULL, 0, CMD_APPEND, 0);
469 E_Widget_Callback *wcb;
471 wcb = E_NEW(E_Widget_Callback, 1);
474 wd = e_widget_data_get(obj);
475 wd->callbacks = eina_list_append(wd->callbacks, wcb);
476 e_ilist_append(wd->o_ilist, icon, label, 1, NULL, NULL, NULL, NULL);
477 if (icon) evas_object_show(icon);
482 e_widget_ilist_selector_set(Evas_Object *obj, int selector)
486 wd = e_widget_data_get(obj);
487 e_ilist_selector_set(wd->o_ilist, selector);
491 e_widget_ilist_go(Evas_Object *obj)
494 Evas_Coord mw, mh, vw, vh, w, h;
496 wd = e_widget_data_get(obj);
498 e_ilist_size_min_get(wd->o_ilist, &mw, &mh);
499 evas_object_resize(wd->o_ilist, mw, mh);
500 e_scrollframe_child_viewport_size_get(wd->o_scrollframe, &vw, &vh);
501 evas_object_geometry_get(wd->o_scrollframe, NULL, NULL, &w, &h);
506 e_widget_size_min_get(obj, &wmw, &wmh);
507 e_widget_size_min_set(obj, mw + (w - vw), wmh);
510 evas_object_resize(wd->o_ilist, vw,mh);
514 e_widget_ilist_clear(Evas_Object *obj)
517 E_Widget_Callback *wcb;
519 wd = e_widget_data_get(obj);
521 e_ilist_clear(wd->o_ilist);
522 e_scrollframe_child_pos_set(wd->o_scrollframe, 0, 0);
523 EINA_LIST_FREE(wd->callbacks, wcb)
525 if (wcb->value) free(wcb->value);
531 e_widget_ilist_count(Evas_Object *obj)
535 wd = e_widget_data_get(obj);
539 E_Widget_Queue_Item *qi;
543 EINA_LIST_FOREACH(wd->queue.queue, l, qi)
544 if (qi->command == CMD_ADD) cnt++;
546 return (cnt + e_ilist_count(wd->o_ilist));
549 return e_ilist_count(wd->o_ilist);
553 e_widget_ilist_items_get(Evas_Object *obj)
557 wd = e_widget_data_get(obj);
558 return e_ilist_items_get(wd->o_ilist);
562 e_widget_ilist_nth_is_header(Evas_Object *obj, int n)
566 wd = e_widget_data_get(obj);
567 return e_ilist_nth_is_header(wd->o_ilist, n);
571 e_widget_ilist_nth_label_set(Evas_Object *obj, int n, const char *label)
573 _queue_append(obj, CMD_LABEL_SET, NULL, NULL, label, 0, NULL, NULL, NULL, 0, 0, n);
577 wd = e_widget_data_get(obj);
578 e_ilist_nth_label_set(wd->o_ilist, n, label);
583 e_widget_ilist_nth_label_get(Evas_Object *obj, int n)
587 wd = e_widget_data_get(obj);
588 return e_ilist_nth_label_get(wd->o_ilist, n);
592 e_widget_ilist_nth_icon_set(Evas_Object *obj, int n, Evas_Object *icon)
594 _queue_append(obj, CMD_ICON_SET, icon, NULL, NULL, 0, NULL, NULL, NULL, 0, 0, n);
598 wd = e_widget_data_get(obj);
599 e_ilist_nth_icon_set(wd->o_ilist, n, icon);
604 e_widget_ilist_nth_icon_get(Evas_Object *obj, int n)
608 wd = e_widget_data_get(obj);
609 return e_ilist_nth_icon_get(wd->o_ilist, n);
613 e_widget_ilist_nth_end_set(Evas_Object *obj, int n, Evas_Object *end)
615 _queue_append(obj, CMD_END_SET, NULL, end, NULL, 0, NULL, NULL, NULL, 0, 0, n);
619 e_widget_ilist_nth_end_get(Evas_Object *obj, int n)
623 wd = e_widget_data_get(obj);
624 return e_ilist_nth_end_get(wd->o_ilist, n);
628 e_widget_ilist_nth_data_get(Evas_Object *obj, int n)
631 E_Widget_Callback *wcb;
633 wd = e_widget_data_get(obj);
634 wcb = eina_list_nth(wd->callbacks, n);
643 e_widget_ilist_nth_value_get(Evas_Object *obj, int n)
646 E_Widget_Callback *wcb;
648 wd = e_widget_data_get(obj);
649 wcb = eina_list_nth(wd->callbacks, n);
658 * Return if the given item returned by e_widget_ilist_items_get()
661 * This avoid expensive lookups to the nth element, however it's not
662 * able to check any validity on the given pointer and may crash. Be
663 * sure to use only with valid return of e_widget_ilist_items_get().
666 e_widget_ilist_item_is_header(const E_Ilist_Item *it)
672 * Return the label of given item returned by e_widget_ilist_items_get().
674 * This avoid expensive lookups to the nth element, however it's not
675 * able to check any validity on the given pointer and may crash. Be
676 * sure to use only with valid return of e_widget_ilist_items_get().
679 e_widget_ilist_item_label_get(const E_Ilist_Item *it)
685 * Return the icon of given item returned by e_widget_ilist_items_get().
687 * This avoid expensive lookups to the nth element, however it's not
688 * able to check any validity on the given pointer and may crash. Be
689 * sure to use only with valid return of e_widget_ilist_items_get().
691 * Do not delete this object!
694 e_widget_ilist_item_icon_get(const E_Ilist_Item *it)
700 * Return the end of given item returned by e_widget_ilist_items_get().
702 * This avoid expensive lookups to the nth element, however it's not
703 * able to check any validity on the given pointer and may crash. Be
704 * sure to use only with valid return of e_widget_ilist_items_get().
706 * Do not delete this object!
709 e_widget_ilist_item_end_get(const E_Ilist_Item *it)
715 * Return the data of given item returned by e_widget_ilist_items_get().
717 * This avoid expensive lookups to the nth element, however it's not
718 * able to check any validity on the given pointer and may crash. Be
719 * sure to use only with valid return of e_widget_ilist_items_get().
721 * Do not delete this object!
724 e_widget_ilist_item_data_get(const E_Ilist_Item *it)
726 E_Widget_Callback *wcb = it->data2;
735 e_widget_ilist_item_value_get(const E_Ilist_Item *it)
737 E_Widget_Callback *wcb = it->data2;
746 * Show the nth element of an ilist
747 * @param obj the ilist
748 * @param n the number of the element to show
749 * @param top if true, place this item at the top, otherwise scroll just
750 * enough to show the element (from the current position).
753 e_widget_ilist_nth_show(Evas_Object *obj, int n, int top)
755 _queue_append(obj, CMD_SHOW, NULL, NULL, NULL, 0, NULL, NULL, NULL, 0, top, n);
758 Evas_Coord x, y, w, h;
760 wd = e_widget_data_get(obj);
761 e_ilist_nth_geometry_get(wd->o_ilist, n, &x, &y, &w, &h);
763 e_scrollframe_child_pos_set(wd->o_scrollframe, x, y);
765 e_scrollframe_child_region_show(wd->o_scrollframe, x, y, w, h);
770 e_widget_ilist_selected_set(Evas_Object *obj, int n)
772 _queue_append(obj, CMD_SELECT, NULL, NULL, NULL, 0, NULL, NULL, NULL, 0, 0, n);
776 wd = e_widget_data_get(obj);
777 e_ilist_selected_set(wd->o_ilist, n);
782 e_widget_ilist_selected_get(Evas_Object *obj)
786 wd = e_widget_data_get(obj);
787 return e_ilist_selected_get(wd->o_ilist);
791 e_widget_ilist_selected_label_get(Evas_Object *obj)
795 wd = e_widget_data_get(obj);
796 return e_ilist_selected_label_get(wd->o_ilist);
800 e_widget_ilist_selected_icon_get(Evas_Object *obj)
804 wd = e_widget_data_get(obj);
805 return e_ilist_selected_icon_get(wd->o_ilist);
809 e_widget_ilist_selected_data_get(Evas_Object *obj)
812 E_Widget_Callback *wcb;
814 wd = e_widget_data_get(obj);
815 wcb = eina_list_nth(wd->callbacks, e_ilist_selected_get(wd->o_ilist));
817 return wcb ? wcb->data : NULL;
821 e_widget_ilist_selected_end_get(Evas_Object *obj)
825 wd = e_widget_data_get(obj);
826 return e_ilist_selected_end_get(wd->o_ilist);
830 e_widget_ilist_selected_count_get(Evas_Object *obj)
834 wd = e_widget_data_get(obj);
835 return e_ilist_selected_count_get(wd->o_ilist);
839 e_widget_ilist_selected_value_get(Evas_Object *obj)
842 E_Widget_Callback *wcb;
844 wd = e_widget_data_get(obj);
845 wcb = eina_list_nth(wd->callbacks, e_ilist_selected_get(wd->o_ilist));
854 e_widget_ilist_unselect(Evas_Object *obj)
856 _queue_append(obj, CMD_UNSELECT, NULL, NULL, NULL, 0, NULL, NULL, NULL, 0, 0, 0);
860 wd = e_widget_data_get(obj);
861 if ((wd->value) && *(wd->value))
866 e_ilist_unselect(wd->o_ilist);
871 e_widget_ilist_remove_num(Evas_Object *obj, int n)
873 /* _queue_append(obj, CMD_REMOVE, NULL, NULL, 0, NULL, NULL, NULL, 0, 0, n); */
874 E_Widget_Callback *wcb;
878 wd = e_widget_data_get(obj);
879 e_ilist_remove_num(wd->o_ilist, n);
880 item = eina_list_nth_list(wd->callbacks, n);
883 wcb = eina_list_data_get(item);
884 if (wcb && wcb->value) free(wcb->value);
886 wd->callbacks = eina_list_remove_list(wd->callbacks, item);
891 e_widget_ilist_multi_select_set(Evas_Object *obj, Eina_Bool multi)
895 wd = e_widget_data_get(obj);
896 e_ilist_multi_select_set(wd->o_ilist, multi);
900 e_widget_ilist_multi_select_get(Evas_Object *obj)
904 wd = e_widget_data_get(obj);
905 return e_ilist_multi_select_get(wd->o_ilist);
909 e_widget_ilist_multi_select(Evas_Object *obj, int n)
911 _queue_append(obj, CMD_MULTI_SELECT, NULL, NULL, NULL, 0, NULL, NULL, NULL, 0, 0, n);
915 wd = e_widget_data_get(obj);
916 e_ilist_multi_select(wd->o_ilist, n);
921 e_widget_ilist_range_select(Evas_Object *obj, int n)
923 _queue_append(obj, CMD_RANGE_SELECT, NULL, NULL, NULL, 0, NULL, NULL, NULL, 0, 0, n);
927 wd = e_widget_data_get(obj);
928 e_ilist_range_select(wd->o_ilist, n);
933 e_widget_ilist_preferred_size_get(Evas_Object *obj, Evas_Coord *w, Evas_Coord *h)
935 Evas_Coord ww, hh, mw, mh, vw, vh;
938 wd = e_widget_data_get(obj);
939 evas_object_geometry_get(wd->o_scrollframe, NULL, NULL, &ww, &hh);
940 evas_object_resize(wd->o_scrollframe, 200, 200);
941 e_scrollframe_child_viewport_size_get(wd->o_scrollframe, &vw, &vh);
942 e_ilist_size_min_get(wd->o_ilist, &mw, &mh);
943 evas_object_resize(wd->o_scrollframe, ww, hh);
944 if (w) *w = 200 - vw + mw;
945 if (h) *h = 200 - vh + mh;
949 _e_wid_del_hook(Evas_Object *obj)
952 E_Widget_Callback *wcb;
954 wd = e_widget_data_get(obj);
956 EINA_LIST_FREE(wd->callbacks, wcb)
958 if (wcb->value) free(wcb->value);
965 _e_wid_focus_hook(Evas_Object *obj)
969 wd = e_widget_data_get(obj);
970 if (e_widget_focus_get(obj))
972 edje_object_signal_emit(e_scrollframe_edje_object_get(wd->o_scrollframe), "e,state,focused", "e");
973 evas_object_focus_set(wd->o_ilist, 1);
977 edje_object_signal_emit(e_scrollframe_edje_object_get(wd->o_scrollframe), "e,state,unfocused", "e");
978 evas_object_focus_set(wd->o_ilist, 0);
983 _e_wid_cb_scrollframe_resize(void *data, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
985 Evas_Coord mw, mh, vw, vh, w, h;
987 e_scrollframe_child_viewport_size_get(obj, &vw, &vh);
988 e_ilist_size_min_get(data, &mw, &mh);
989 evas_object_geometry_get(data, NULL, NULL, &w, &h);
992 if (w != vw) evas_object_resize(data, vw, h);
997 _e_wid_cb_item_sel(void *data, void *data2)
1000 Evas_Coord x, y, w, h;
1001 E_Widget_Callback *wcb;
1005 e_ilist_selected_geometry_get(wd->o_ilist, &x, &y, &w, &h);
1006 e_scrollframe_child_region_show(wd->o_scrollframe, x, y, w, h);
1011 if (*(wd->value)) eina_stringshare_del(*(wd->value));
1013 *(wd->value) = (char*) eina_stringshare_add(wcb->value);
1015 *(wd->value) = NULL;
1017 if (wcb->func) wcb->func(wcb->data);
1018 e_widget_change(wd->o_widget);
1023 _e_wid_cb_item_hilight(void *data, void *data2 __UNUSED__)
1026 Evas_Coord x, y, w, h;
1029 e_ilist_selected_geometry_get(wd->o_ilist, &x, &y, &w, &h);
1030 e_scrollframe_child_region_show(wd->o_scrollframe, x, y, w, h);
1034 _e_wid_cb_selected(void *data, Evas_Object *obj __UNUSED__, void *event_info)
1036 evas_object_smart_callback_call(data, "selected", event_info);
1040 _e_wid_focus_steal(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
1042 e_widget_focus_steal(data);