2 * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
5 * @defgroup Controlbar Controlbar
8 * This is a Controlbar. It can contain label and icon objects.
9 * In edit mode, you can change the location of items.
15 #include <Elementary.h>
19 #define EAPI __attribute__ ((visibility("default")))
23 #define EDIT_ROW_NUM 4
25 #define ELM_MAX(v1, v2) (((v1) > (v2)) ? (v1) : (v2))
26 #define _EDJ(x) (Evas_Object *)elm_layout_edje_get(x)
32 // internal data structure of controlbar object
33 typedef struct _Widget_Data Widget_Data;
41 Evas_Object * view_content;
42 Evas_Object * edit_box;
43 Evas_Object * edit_table;
44 Evas_Object * navigation;
48 Evas_Object * event_box;
49 Evas_Object * selected_box;
50 Evas_Object * focused_box;
51 Evas_Object * focused_box_left;
52 Evas_Object * focused_box_right;
54 Evas_Object * moving_obj;
55 Elm_Controlbar_Item * more_item;
56 Elm_Controlbar_Item * moving_item;
57 Elm_Controlbar_Item * pre_item;
58 Elm_Controlbar_Item * cur_item;
59 Evas_Coord x, y, w, h;
68 Eina_List * visible_items;
70 Ecore_Event_Handler * move_event;
71 Ecore_Event_Handler * up_event;
72 Ecore_Event_Handler * bar_move_event;
73 Ecore_Event_Handler * bar_up_event;
75 void (*ani_func) (void *data, Evas_Object * obj, void *event_info);
77 Eina_Bool init_animation;
79 Ecore_Timer *effect_timer;
80 Eina_Bool selected_animation;
83 Elm_Xml_Animator *vxa;
85 const char *view_hide;
86 const char *view_show;
88 const char *pressed_signal;
89 const char *selected_signal;
92 struct _Elm_Controlbar_Item
96 Evas_Object * base_item;
98 Evas_Object * edit_item;
101 Evas_Object * label_shadow;
103 Evas_Object * icon_shadow;
104 Evas_Object * edit_label;
105 Evas_Object * edit_label_shadow;
106 Evas_Object * edit_icon;
107 Evas_Object * edit_icon_shadow;
108 const char *icon_path;
110 void (*func) (void *data, Evas_Object * obj, void *event_info);
121 typedef struct _Animation_Data Animation_Data;
123 struct _Animation_Data
134 unsigned int start_time;
136 void (*func) (void *data, Evas_Object * obj);
138 Ecore_Animator * timer;
143 static int check_bar_item_number(Widget_Data *wd);
144 static void selected_box(Elm_Controlbar_Item * it);
145 static int pressed_box(Elm_Controlbar_Item * it);
146 static void item_color_set(Elm_Controlbar_Item *item, const char *color_part);
147 static void edit_item_up_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info);
148 static void edit_item_move_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info);
149 static void bar_item_up_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info);
150 static void bar_item_move_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info);
152 /////////////////////////
154 ////////////////////////
157 print_all_items(Widget_Data *wd)
160 Elm_Controlbar_Item * item;
162 EINA_LIST_FOREACH(wd->items, l, item)
164 printf("item label : %s order : %d address : %p\n", item->text, item->order, item);
168 ///////////////////////////////////////////////////////////////////
170 // Smart Object basic function
172 ////////////////////////////////////////////////////////////////////
175 _controlbar_move(void *data, Evas_Object * obj)
178 Evas_Coord x, y, x_, y_, width;
181 wd = elm_widget_data_get((Evas_Object *) data);
184 evas_object_geometry_get(wd->edje, &x, &y, NULL, NULL);
187 evas_object_move(wd->edje, x, y);
188 evas_object_geometry_get(edje_object_part_object_get(wd->edje, "bg_image"), NULL, NULL, &width, NULL);
189 evas_object_geometry_get(wd->parent, &x_, &y_, NULL, NULL);
192 case ELM_CONTROLBAR_MODE_LEFT:
193 evas_object_move(wd->view, x + width, y);
195 case ELM_CONTROLBAR_MODE_RIGHT:
197 evas_object_move(wd->view, x, y);
200 evas_object_move(wd->edit_box, x_, y_);
201 evas_object_move(wd->event_box, x, y);
205 _controlbar_resize(void *data, Evas_Object * obj)
208 Elm_Controlbar_Item *item;
210 Evas_Coord x, y, x_, y_, w, h, width, height;
213 wd = elm_widget_data_get((Evas_Object *) data);
216 evas_object_geometry_get(wd->edje, &x, &y, &w, &h);
219 evas_object_resize(wd->edje, w, h);
220 evas_object_geometry_get(edje_object_part_object_get(wd->edje, "bg_image"), NULL, NULL, &width, &height);
221 evas_object_geometry_get(wd->parent, &x_, &y_, NULL, NULL);
224 case ELM_CONTROLBAR_MODE_LEFT:
225 case ELM_CONTROLBAR_MODE_RIGHT:
226 evas_object_resize(wd->view, w - width, h);
227 evas_object_resize(wd->edit_box, w + x - x_, h);
230 evas_object_resize(wd->view, w, h - height + 1);
231 evas_object_resize(wd->edit_box, w, h + y - y_);
234 evas_object_resize(wd->event_box, w, h);
236 EINA_LIST_FOREACH(wd->items, l, item)
242 elm_label_wrap_width_set(item->label, (int)(wd->w/check_bar_item_number(wd))-20);
243 elm_label_wrap_width_set(item->label_shadow, (int)(wd->w/check_bar_item_number(wd))-20);
247 elm_label_wrap_width_set(item->label, (int)(wd->w-20));
248 elm_label_wrap_width_set(item->label_shadow, (int)(wd->w-20));
253 elm_label_wrap_width_set(item->edit_label, (int)(wd->w/check_bar_item_number(wd))-20);
254 elm_label_wrap_width_set(item->edit_label_shadow, (int)(wd->w/check_bar_item_number(wd))-20);
260 _controlbar_object_move(void *data, Evas * e, Evas_Object * obj,
263 _controlbar_move(data, obj);
267 _controlbar_object_resize(void *data, Evas * e, Evas_Object * obj,
270 _controlbar_resize(data, obj);
274 _controlbar_object_show(void *data, Evas * e, Evas_Object * obj,
280 wd = elm_widget_data_get((Evas_Object *) data);
283 evas_object_show(wd->view);
284 evas_object_show(wd->edit_box);
285 evas_object_show(wd->edje);
286 evas_object_show(wd->box);
287 evas_object_show(wd->event_box);
291 _controlbar_object_hide(void *data, Evas * e, Evas_Object * obj,
297 wd = elm_widget_data_get((Evas_Object *) data);
300 evas_object_hide(wd->view);
301 evas_object_hide(wd->edit_box);
302 evas_object_hide(wd->edje);
303 evas_object_hide(wd->box);
304 evas_object_hide(wd->event_box);
308 _item_del(Elm_Controlbar_Item *it)
311 Widget_Data *wd = elm_widget_data_get(it->obj);
314 if(it == wd->more_item)
316 evas_object_del(it->view);
318 eina_stringshare_del(it->text);
320 evas_object_del(it->label);
321 if (it->label_shadow)
322 evas_object_del(it->label_shadow);
324 eina_stringshare_del(it->icon_path);
326 evas_object_del(it->icon);
328 evas_object_del(it->icon_shadow);
331 if (it->style != OBJECT)
332 evas_object_del(it->base);
335 evas_object_hide(it->base);
338 evas_object_del(it->base_item);
340 evas_object_del(it->edit);
342 evas_object_del(it->edit_item);
346 elm_layout_content_unset(wd->view, "elm.swallow.view");
347 evas_object_hide(it->view);
352 _del_hook(Evas_Object * obj)
354 Widget_Data * wd = elm_widget_data_get(obj);
355 Elm_Controlbar_Item * item;
356 Evas_Object * content;
360 EINA_LIST_FREE(wd->items, item)
368 content = elm_layout_content_unset(wd->view, "elm.swallow.view");
369 evas_object_hide(content);
370 evas_object_del(wd->view);
375 evas_object_del(wd->edit_box);
380 evas_object_del(wd->navigation);
381 wd->navigation = NULL;
385 evas_object_del(wd->bg);
390 evas_object_del(wd->edje);
395 evas_object_del(wd->focused_box);
398 if (wd->focused_box_left)
400 evas_object_del(wd->focused_box_left);
403 if (wd->focused_box_right)
405 evas_object_del(wd->focused_box_right);
410 evas_object_del(wd->box);
415 evas_object_del(wd->event_box);
416 wd->event_box = NULL;
420 elm_xml_animator_del(wd->xa);
423 if (wd->effect_timer)
425 ecore_timer_del(wd->effect_timer);
426 wd->effect_timer = NULL;
434 _theme_hook(Evas_Object * obj)
438 Elm_Controlbar_Item * item;
442 Widget_Data * wd = elm_widget_data_get(obj);
445 _elm_theme_object_set(obj, wd->edje, "controlbar", "base",
446 elm_widget_style_get(obj));
447 _elm_theme_object_set(obj, wd->bg, "controlbar", "background",
448 elm_widget_style_get(obj));
449 evas_object_color_get(wd->bg, &r, &g, &b, NULL);
450 evas_object_color_set(wd->bg, r, g, b, (int)(255 * wd->alpha / 100));
451 elm_layout_theme_set(wd->view, "controlbar", "view", elm_widget_style_get(obj));
452 _elm_theme_object_set(obj, wd->edit_box, "controlbar", "edit_box",
453 elm_widget_style_get(obj));
454 _elm_theme_object_set(obj, wd->focused_box, "controlbar", "item_bg_move", elm_widget_style_get(obj));
455 _elm_theme_object_set(obj, wd->focused_box_left, "controlbar", "item_bg_move", elm_widget_style_get(obj));
456 _elm_theme_object_set(obj, wd->focused_box_right, "controlbar", "item_bg_move", elm_widget_style_get(obj));
457 EINA_LIST_FOREACH(wd->items, l, item)
459 if (item->style != OBJECT)
461 elm_layout_theme_set(item->base, "controlbar", "item_bg",
462 elm_widget_style_get(obj));
463 elm_layout_theme_set(item->edit, "controlbar", "item_bg",
464 elm_widget_style_get(obj));
469 edje_object_part_object_get(_EDJ(item->edit),
470 "elm.item.uneditable.color");
472 evas_object_color_get(color, &r, &g, &b, &a);
473 evas_object_color_set(item->edit_item, r, g, b, a);
475 if (item->label && item->icon)
477 edje_object_signal_emit(_EDJ(item->base_item),
478 "elm,state,icon_text", "elm");
479 edje_object_signal_emit(_EDJ(item->edit_item),
480 "elm,state,icon_text", "elm");
491 _sub_del(void *data, Evas_Object * obj, void *event_info)
493 Widget_Data * wd = elm_widget_data_get(obj);
495 //Evas_Object *sub = event_info;
500 * if (sub == wd->icon)
502 * edje_object_signal_emit(wd->btn, "elm,state,icon,hidden", "elm");
503 * evas_object_event_callback_del_full(sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
504 * _changed_size_hints, obj);
506 * edje_object_message_signal_process(wd->btn);
513 _sizing_eval(Evas_Object * obj)
515 Widget_Data * wd = elm_widget_data_get(obj);
518 _controlbar_move(obj, obj);
519 _controlbar_resize(obj, obj);
522 /////////////////////////////////////////////////////////////
524 // animation function
526 /////////////////////////////////////////////////////////////
531 struct timeval timev;
533 gettimeofday(&timev, NULL);
534 return ((timev.tv_sec * 1000) + ((timev.tv_usec) / 1000));
538 set_evas_map(Evas_Object * obj, Evas_Coord x, Evas_Coord y, Evas_Coord w,
545 Evas_Map * map = evas_map_new(4);
548 evas_map_smooth_set(map, EINA_TRUE);
549 evas_map_util_points_populate_from_object_full(map, obj, 0);
550 evas_object_map_enable_set(obj, EINA_TRUE);
551 evas_map_util_3d_perspective(map, x + w / 2, y + h / 2, 0, w * 10);
552 evas_map_util_points_populate_from_geometry(map, x, y, w, h, 0);
553 evas_object_map_set(obj, map);
558 move_evas_map(void *data)
568 Animation_Data * ad = (Animation_Data *) data;
569 t = ELM_MAX(0.0, current_time_get() - ad->start_time) / 1000;
570 dx = ad->tx - ad->fx;
571 dy = ad->ty - ad->fy;
572 dw = ad->tw - ad->fw;
573 dh = ad->th - ad->fh;
576 x = (1 * sin((t / ad->time) * (M_PI / 2)) * dx);
577 y = (1 * sin((t / ad->time) * (M_PI / 2)) * dy);
578 w = (1 * sin((t / ad->time) * (M_PI / 2)) * dw);
579 h = (1 * sin((t / ad->time) * (M_PI / 2)) * dh);
592 if (x == dx && y == dy && w == dw && h == dh)
594 ecore_animator_del(ad->timer);
596 set_evas_map(ad->obj, px, py, pw, ph);
597 if (ad->func != NULL)
598 ad->func(ad->data, ad->obj);
599 return ECORE_CALLBACK_CANCEL;
603 set_evas_map(ad->obj, px, py, pw, ph);
605 return ECORE_CALLBACK_RENEW;
610 move_evas_object(void *data)
620 Animation_Data * ad = (Animation_Data *) data;
621 t = ELM_MAX(0.0, current_time_get() - ad->start_time) / 1000;
622 dx = ad->tx - ad->fx;
623 dy = ad->ty - ad->fy;
624 dw = ad->tw - ad->fw;
625 dh = ad->th - ad->fh;
628 x = (1 * sin((t / ad->time) * (M_PI / 2)) * dx);
629 y = (1 * sin((t / ad->time) * (M_PI / 2)) * dy);
630 w = (1 * sin((t / ad->time) * (M_PI / 2)) * dw);
631 h = (1 * sin((t / ad->time) * (M_PI / 2)) * dh);
644 if (x == dx && y == dy && w == dw && h == dh)
646 ecore_animator_del(ad->timer);
648 evas_object_move(ad->obj, px, py);
649 evas_object_resize(ad->obj, pw, ph);
650 evas_object_show(ad->obj);
651 if (ad->func != NULL)
652 ad->func(ad->data, ad->obj);
653 return ECORE_CALLBACK_CANCEL;
657 evas_object_move(ad->obj, px, py);
658 evas_object_resize(ad->obj, pw, ph);
659 evas_object_show(ad->obj);
661 return ECORE_CALLBACK_RENEW;
665 move_fade_out_object(void *data)
669 int dx, dy, dw, dh, da;
671 int px, py, pw, ph, pa;
677 Animation_Data * ad = (Animation_Data *) data;
678 t = ELM_MAX(0.0, current_time_get() - ad->start_time) / 1000;
679 dx = ad->tx - ad->fx;
680 dy = ad->ty - ad->fy;
681 dw = ad->tw - ad->fw;
682 dh = ad->th - ad->fh;
686 x = (1 * sin((t / ad->time) * (M_PI / 2)) * dx);
687 y = (1 * sin((t / ad->time) * (M_PI / 2)) * dy);
688 w = (1 * sin((t / ad->time) * (M_PI / 2)) * dw);
689 h = (1 * sin((t / ad->time) * (M_PI / 2)) * dh);
690 a = (1 * sin((t / ad->time) * (M_PI / 2)) * da);
705 if (x == dx && y == dy && w == dw && h == dh)
707 ecore_animator_del(ad->timer);
709 evas_object_move(ad->obj, px, py);
710 //evas_object_resize(ad->obj, 480, 600);
711 evas_object_resize(ad->obj, pw, ph);
712 evas_object_color_get(ad->obj, &r, &g, &b, &a);
713 evas_object_color_set(ad->obj, r, g, b, pa);
714 evas_object_show(ad->obj);
715 if (ad->func != NULL)
716 ad->func(ad->data, ad->obj);
717 return ECORE_CALLBACK_CANCEL;
721 evas_object_move(ad->obj, px, py);
722 //evas_object_resize(ad->obj, 480, 600);
723 evas_object_resize(ad->obj, pw, ph);
724 evas_object_color_get(ad->obj, &r, &g, &b, &a);
725 evas_object_color_set(ad->obj, r, g, b, pa);
726 evas_object_show(ad->obj);
728 return ECORE_CALLBACK_RENEW;
732 move_fade_in_object(void *data)
736 int dx, dy, dw, dh, da;
738 int px, py, pw, ph, pa;
744 Animation_Data * ad = (Animation_Data *) data;
745 t = ELM_MAX(0.0, current_time_get() - ad->start_time) / 1000;
746 dx = ad->tx - ad->fx;
747 dy = ad->ty - ad->fy;
748 dw = ad->tw - ad->fw;
749 dh = ad->th - ad->fh;
753 x = (1 * sin((t / ad->time) * (M_PI / 2)) * dx);
754 y = (1 * sin((t / ad->time) * (M_PI / 2)) * dy);
755 w = (1 * sin((t / ad->time) * (M_PI / 2)) * dw);
756 h = (1 * sin((t / ad->time) * (M_PI / 2)) * dh);
757 a = (1 * sin((t / ad->time) * (M_PI / 2)) * da);
772 if (x == dx && y == dy && w == dw && h == dh)
774 ecore_animator_del(ad->timer);
776 evas_object_move(ad->obj, px, py);
777 //evas_object_resize(ad->obj, 480, 600);
778 evas_object_resize(ad->obj, pw, ph);
779 evas_object_color_get(ad->obj, &r, &g, &b, &a);
780 evas_object_color_set(ad->obj, r, g, b, pa);
781 evas_object_show(ad->obj);
782 if (ad->func != NULL)
783 ad->func(ad->data, ad->obj);
784 return ECORE_CALLBACK_CANCEL;
788 evas_object_move(ad->obj, px, py);
789 //evas_object_resize(ad->obj, 480, 600);
790 evas_object_resize(ad->obj, pw, ph);
791 evas_object_color_get(ad->obj, &r, &g, &b, &a);
792 evas_object_color_set(ad->obj, r, g, b, pa);
793 evas_object_show(ad->obj);
795 return ECORE_CALLBACK_RENEW;
799 move_object_with_animation(Evas_Object * obj, Evas_Coord x, Evas_Coord y,
800 Evas_Coord w, Evas_Coord h, Evas_Coord x_,
801 Evas_Coord y_, Evas_Coord w_, Evas_Coord h_,
802 double time, Eina_Bool (*mv_func) (void *data),
803 void (*func) (void *data,
804 Evas_Object * obj), void *data)
806 Animation_Data * ad = (Animation_Data *) malloc(sizeof(Animation_Data));
816 ad->start_time = current_time_get();
820 ad->timer = ecore_animator_add(mv_func, ad);
824 end_item_animation_effect(void *data, Evas_Object *obj)
826 Widget_Data *wd = (Widget_Data *)data;
827 elm_xml_animator_object_del(wd->xa, obj);
831 item_animation_effect(void *data)
833 Widget_Data *wd = (Widget_Data *)data;
835 Elm_Controlbar_Item * item;
839 wd->xa = elm_xml_animator_add(wd->object);
840 elm_xml_animator_file_set(wd->xa, "/usr/share/xmls/elementary.xml");
845 EINA_LIST_FOREACH(wd->items, l, item)
848 if(rand > 65 && item->order > 0)
854 elm_xml_animator_object_add(wd->xa, item->base_item, "test", end_item_animation_effect, wd);
857 elm_xml_animator_object_add(wd->xa, item->base_item, "test2", end_item_animation_effect, wd);
860 elm_xml_animator_object_add(wd->xa, item->base_item, "test3", end_item_animation_effect, wd);
863 elm_xml_animator_object_add(wd->xa, item->base_item, "test4", end_item_animation_effect, wd);
872 elm_xml_animator_run(wd->xa);
874 return ECORE_CALLBACK_RENEW;
877 /////////////////////////////////////////////////////////////
881 /////////////////////////////////////////////////////////////
884 sort_cb(const void *d1, const void *d2)
886 Elm_Controlbar_Item * item1, *item2;
887 item1 = (Elm_Controlbar_Item *) d1;
888 item2 = (Elm_Controlbar_Item *) d2;
889 if (item1->order <= 0)
891 if (item2->order <= 0)
893 return item1->order > item2->order ? 1 : -1;
897 sort_reverse_cb(const void *d1, const void *d2)
899 Elm_Controlbar_Item * item1, *item2;
900 item1 = (Elm_Controlbar_Item *) d1;
901 item2 = (Elm_Controlbar_Item *) d2;
902 if (item1->order <= 0)
904 if (item2->order <= 0)
906 return item1->order > item2->order ? -1 : 1;
910 done_button_cb(void *data, Evas_Object * obj, void *event_info)
912 Widget_Data * wd = (Widget_Data *) data;
914 wd->items = eina_list_sort(wd->items, eina_list_count(wd->items), sort_cb);
916 evas_object_smart_callback_call(wd->object, "edit,end", wd->items);
918 edje_object_signal_emit(wd->edit_box, "elm,state,hide,edit_box", "elm");
919 wd->edit_mode = EINA_FALSE;
922 ///////////////////////////////////////////////////////////////////
924 // basic utility function
926 ////////////////////////////////////////////////////////////////////
929 item_exist_check(Widget_Data *wd, Elm_Controlbar_Item *item)
932 Elm_Controlbar_Item *it;
934 EINA_LIST_FOREACH(wd->items, l, it)
936 if(it == item) return EINA_TRUE;
942 check_bar_item_number(Widget_Data *wd)
945 Elm_Controlbar_Item * item;
948 EINA_LIST_FOREACH(wd->items, l, item)
950 if(item->order > 0) num++;
957 item_insert_in_bar(Elm_Controlbar_Item * it, int order)
961 Elm_Controlbar_Item * item;
962 Widget_Data * wd = elm_widget_data_get(it->obj);
965 if(order == 0) return;
967 EINA_LIST_FOREACH(wd->items, l, item)
969 if (item->order == order && item != it)
974 EINA_LIST_FOREACH(wd->items, l, item)
977 elm_table_unpack(wd->box, item->base);
979 EINA_LIST_FOREACH(wd->items, l, item)
983 if (item->order >= order)
987 elm_table_pack(wd->box, item->base, item->order - 1, 0, 1, 1);
991 elm_table_pack(wd->box, item->base, 0, item->order - 1, 1, 1);
993 evas_object_show(item->base);
1000 elm_table_pack(wd->box, it->base, it->order - 1, 0, 1, 1);
1004 elm_table_pack(wd->box, it->base, 0, it->order - 1, 1, 1);
1006 evas_object_show(it->base);
1010 item_delete_in_bar(Elm_Controlbar_Item * it)
1013 Elm_Controlbar_Item * item;
1014 Widget_Data * wd = elm_widget_data_get(it->obj);
1017 EINA_LIST_FOREACH(wd->items, l, item)
1023 elm_table_unpack(wd->box, it->base);
1024 evas_object_hide(it->base);
1029 EINA_LIST_FOREACH(wd->items, l, item)
1031 if (item->order > i)
1034 elm_table_unpack(wd->box, item->base);
1037 elm_table_pack(wd->box, item->base, item->order - 1, 0, 1, 1);
1041 elm_table_pack(wd->box, item->base, 0, item->order - 1, 1, 1);
1049 item_visible_set(Elm_Controlbar_Item *it, Eina_Bool visible)
1051 Elm_Controlbar_Item *item;
1052 Eina_Bool check = EINA_TRUE;
1055 if (it->obj == NULL)
1057 Widget_Data * wd = elm_widget_data_get(it->obj);
1058 if (!wd || !wd->items)
1062 if (check == visible)
1066 item = elm_controlbar_last_item_get(it->obj);
1067 while(!elm_controlbar_item_visible_get(item)){
1068 item = elm_controlbar_item_prev(item);
1070 item_insert_in_bar(it, item->order + 1);
1074 item_delete_in_bar(it);
1076 wd->items = eina_list_sort(wd->items, eina_list_count(wd->items), sort_cb);
1077 _sizing_eval(it->obj);
1081 item_exchange_animation_cb(void *data, Evas_Object * obj)
1083 Widget_Data * wd = (Widget_Data *) data;
1085 if (wd->animating < 0)
1087 printf("animation error\n");
1090 evas_object_map_enable_set(obj, EINA_FALSE);
1094 item_exchange_in_bar(Elm_Controlbar_Item * it1, Elm_Controlbar_Item * it2)
1098 Evas_Coord x, y, w, h;
1099 Evas_Coord x_, y_, w_, h_;
1100 Widget_Data * wd = elm_widget_data_get(it1->obj);
1101 evas_object_geometry_get(wd->moving_item->edit, &x, &y, &w, &h);
1102 set_evas_map(wd->moving_obj, (wd->x + wd->w / 2), (wd->y + wd->h / 2), 0,
1104 evas_object_geometry_get(it1->base, &x, &y, &w, &h);
1105 evas_object_geometry_get(it2->base, &x_, &y_, &w_, &h_);
1107 move_object_with_animation(it1->base, x, y, w, h, x_, y_, w_, h_, 0.25,
1108 move_evas_map, item_exchange_animation_cb, wd);
1110 move_object_with_animation(it2->base, x_, y_, w_, h_, x, y, w, h, 0.25,
1111 move_evas_map, item_exchange_animation_cb, wd);
1112 elm_table_unpack(wd->box, it1->base);
1113 elm_table_unpack(wd->box, it2->base);
1115 it1->order = it2->order;
1119 elm_table_pack(wd->box, it1->base, it1->order - 1, 0, 1, 1);
1120 elm_table_pack(wd->box, it2->base, it2->order - 1, 0, 1, 1);
1124 elm_table_pack(wd->box, it1->base, 0, it1->order - 1, 1, 1);
1125 elm_table_pack(wd->box, it2->base, 0, it2->order - 1, 1, 1);
1130 item_change_animation_cb(void *data, Evas_Object * obj)
1132 Evas_Coord x, y, w, h;
1133 Widget_Data * wd = (Widget_Data *) data;
1135 if (wd->animating < 0)
1137 printf("animation error\n");
1140 evas_object_map_enable_set(obj, EINA_FALSE);
1141 evas_object_geometry_get(obj, &x, &y, &w, &h);
1142 set_evas_map(obj, x, y, 0, 0);
1143 evas_object_move(obj, -1000, -1000);
1144 evas_object_geometry_get(wd->moving_item->base, &x, &y, &w, &h);
1145 evas_object_move(wd->moving_obj, -1000, -1000);
1146 evas_object_del(wd->moving_obj);
1150 item_change_in_bar(Elm_Controlbar_Item * it)
1152 Evas_Coord x, y, w, h;
1153 Evas_Coord x_, y_, w_, h_;
1154 Widget_Data * wd = elm_widget_data_get(it->obj);
1157 if (wd->moving_item == NULL)
1159 evas_object_geometry_get(wd->moving_item->edit, &x, &y, &w, &h);
1160 set_evas_map(wd->moving_obj, x, y, w, h);
1161 elm_table_unpack(wd->box, it->base);
1162 wd->moving_item->order = it->order;
1166 elm_table_pack(wd->box, wd->moving_item->base, wd->moving_item->order - 1, 0, 1, 1);
1170 elm_table_pack(wd->box, wd->moving_item->base, 0, wd->moving_item->order - 1, 1, 1);
1173 evas_object_show(wd->moving_item->base);
1174 evas_render_updates_free(evas_render_updates
1175 (evas_object_evas_get(wd->moving_item->base)));
1176 evas_object_geometry_get(it->base, &x, &y, &w, &h);
1177 evas_object_geometry_get(it->edit, &x_, &y_, &w_, &h_);
1179 move_object_with_animation(it->base, x, y, w, h, x_, y_, w_, h_, 0.25,
1180 move_evas_map, item_change_animation_cb, wd);
1181 evas_object_geometry_get(wd->moving_item->base, &x, &y, &w, &h);
1182 set_evas_map(wd->moving_item->base, x, y, w, h);
1186 hide_selected_box(void *data)
1188 Evas_Object *selected_box = (Evas_Object *)data;
1190 evas_object_hide(selected_box);
1192 return ECORE_CALLBACK_CANCEL;
1196 item_color_set(Elm_Controlbar_Item *item, const char *color_part)
1201 color = (Evas_Object *) edje_object_part_object_get(_EDJ(item->base), color_part);
1203 evas_object_color_get(color, &r, &g, &b, &a);
1204 evas_object_color_set(item->label, r, g, b, a);
1205 evas_object_color_set(item->icon, r, g, b, a);
1209 _end_selected_box(void *data, Evas_Object *obj)
1211 Widget_Data * wd = (Widget_Data *)data;
1213 edje_object_signal_emit(_EDJ(wd->cur_item->base), wd->selected_signal, "elm");
1214 edje_object_signal_emit(_EDJ(wd->cur_item->base_item), "elm,state,shadow_show", "elm");
1217 if (wd->animating < 0)
1219 printf("animation error\n");
1223 ecore_idler_add(hide_selected_box, wd->selected_box);
1227 move_selected_box(Widget_Data *wd, Elm_Controlbar_Item * fit, Elm_Controlbar_Item * tit)
1229 Evas_Coord fx, fy, fw, fh, tx, ty, tw, th;
1230 Evas_Object *from, *to;
1232 if(fit->order <= 0 && wd->auto_align)
1233 fit = wd->more_item;
1235 from = (Evas_Object *)edje_object_part_object_get(_EDJ(fit->base), "bg_img");
1236 evas_object_geometry_get(from, &fx, &fy, &fw, &fh);
1238 to = (Evas_Object *)edje_object_part_object_get(_EDJ(tit->base), "bg_img");
1239 evas_object_geometry_get(to, &tx, &ty, &tw, &th);
1241 edje_object_signal_emit(_EDJ(wd->pre_item->base), "elm,state,unselected", "elm");
1242 edje_object_signal_emit(_EDJ(wd->pre_item->base_item), "elm,state,shadow_hide", "elm");
1243 edje_object_signal_emit(_EDJ(wd->cur_item->base), "elm,state,unselected", "elm");
1246 move_object_with_animation(wd->selected_box, fx, fy, fw, fh, tx, ty, tw, th,
1247 0.3, move_evas_object, _end_selected_box, wd);
1251 end_selected_box(void *data, Evas_Object *obj)
1253 Widget_Data * wd = (Widget_Data *)data;
1255 if(wd->pre_item) evas_object_hide(wd->pre_item->view);
1257 elm_layout_content_set(wd->view, "elm.swallow.view", obj);
1259 evas_object_show(obj);
1263 view_animation_push(Widget_Data *wd, Evas_Object *pre, Evas_Object *cur, void *data)
1265 Evas_Coord x, y, w, h;
1267 evas_object_geometry_get(pre, &x, &y, &w, &h);
1268 move_object_with_animation(pre, x, y, w, h, x+20, y, w, h, 0.5, move_fade_out_object, NULL, NULL);
1269 move_object_with_animation(cur, x+120, y, w, h, x, y, w, h, 0.5, move_fade_in_object, end_selected_box, wd);
1273 view_animation_down(Widget_Data *wd, Evas_Object *pre, Evas_Object *cur, void *data)
1275 Evas_Coord x, y, w, h;
1277 evas_object_geometry_get(pre, &x, &y, &w, &h);
1279 move_object_with_animation(cur, x, h, w, h, x, h, w, h, 0.5, move_evas_object, end_selected_box, wd);
1280 evas_object_raise(pre);
1281 move_object_with_animation(pre, x, y, w, h, x, h, w, 0, 0.5, move_evas_map, NULL, NULL);
1285 end_view_animation_effect(void *data, Evas_Object *obj)
1287 Widget_Data *wd = (Widget_Data *)data;
1288 elm_xml_animator_object_del(wd->vxa, obj);
1290 evas_object_hide(wd->pre_item->view);
1292 //if(wd->cur_item) elm_layout_content_set(wd->view, "elm.swallow.view", wd->cur_item->view);
1296 selected_box(Elm_Controlbar_Item * it)
1298 Widget_Data * wd = elm_widget_data_get(it->obj);
1300 Elm_Controlbar_Item * item, *fit = NULL;
1301 Evas_Object * content;
1303 if(wd->animating) return;
1308 wd->vxa = elm_xml_animator_add(wd->object);
1309 elm_xml_animator_file_set(wd->vxa, "/usr/share/xmls/elementary.xml");
1312 if(it->style == TABBAR){
1314 content = elm_layout_content_unset(wd->view, "elm.swallow.view");
1315 EINA_LIST_FOREACH(wd->items, l, item){
1316 if(item->selected) {
1320 item->selected = EINA_FALSE;
1322 it->selected = EINA_TRUE;
1324 if(wd->more_item != it)
1325 evas_object_smart_callback_call(it->obj, "view,change,before", it);
1327 if(fit != NULL && fit != it)
1329 move_selected_box(wd, fit, it);
1333 edje_object_signal_emit(_EDJ(it->base), wd->selected_signal, "elm");
1334 edje_object_signal_emit(_EDJ(wd->cur_item->base_item), "elm,state,shadow_show", "elm");
1338 if(fit != NULL && fit != it)
1340 //view_animation_down(wd, fit->view, it->view, NULL);
1341 view_animation_push(wd, fit->view, it->view, NULL);
1342 //evas_object_hide(content);
1344 // evas_object_geometry_get(fit->view, &x, &y, &w, &h);
1345 // if(fit->order > it->order)
1347 // move_object_with_animation(fit->view, x, y, w, h, x+20, y, w, h, 0.5, move_fade_out_object, NULL, NULL);
1348 // move_object_with_animation(it->view, x+120, y, w, h, x, y, w, h, 0.5, move_fade_in_object, end_selected_box, wd);
1352 // move_object_with_animation(fit->view, x, y, w, h, x-120, y, w, h, 1.5, move_fade_out_object, NULL, NULL);
1353 // move_object_with_animation(it->view, x-120, y, w, h, x, y, w, h, 1.5, move_fade_in_object, end_selected_box, wd);
1358 end_selected_box(wd, it->view);
1361 //if(wd->pre_item) evas_object_hide(wd->pre_item->view);
1362 elm_layout_content_set(wd->view, "elm.swallow.view", it->view);
1364 //evas_object_move(it->view, -480, 94);
1365 //evas_object_resize(it->view, 480, 620);
1366 //evas_object_show(it->view);
1368 if(wd->pre_item && wd->pre_item != it)
1371 elm_xml_animator_object_add(wd->vxa, wd->pre_item->view, wd->view_hide, end_view_animation_effect, wd);
1373 evas_object_hide(wd->pre_item->view);
1375 elm_xml_animator_object_add(wd->vxa, it->view, wd->view_show, end_view_animation_effect, wd);
1379 elm_xml_animator_run(wd->vxa);
1381 // elm_layout_content_set(wd->view, "elm.swallow.view", it->view);
1382 //edje_object_part_swallow(wd->view, "elm.swallow.view", it->view);
1383 // evas_object_show(it->view);
1385 }else if(it->style == TOOLBAR){
1388 it->func(it->data, it->obj, it);
1390 if(item_exist_check(wd, it)) edje_object_signal_emit(_EDJ(it->base), "elm,state,text_unselected", "elm");
1393 if(item_exist_check(wd, it)) evas_object_smart_callback_call(it->obj, "clicked", it);
1397 unpressed_box_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
1399 Widget_Data * wd = (Widget_Data *) data;
1401 Evas_Event_Mouse_Up * ev = event_info;
1402 Evas_Coord x, y, w, h;
1403 Elm_Controlbar_Item * item;
1405 evas_object_event_callback_del(wd->event_box, EVAS_CALLBACK_MOUSE_UP, unpressed_box_cb);
1407 EINA_LIST_FOREACH(wd->items, l, item)
1409 if (item->style == TABBAR)
1413 edje_object_signal_emit(_EDJ(item->base), wd->selected_signal, "elm");
1417 edje_object_signal_emit(_EDJ(item->base), "elm,state,unselected", "elm");
1418 edje_object_signal_emit(_EDJ(item->base_item), "elm,state,shadow_hide", "elm");
1421 else if (item->style == TOOLBAR)
1425 edje_object_signal_emit(_EDJ(item->base), "elm,state,unselected", "elm");
1426 //item_color_set(item, "elm.item.default.color");
1431 if(item_exist_check(wd, wd->pre_item))
1433 evas_object_geometry_get(wd->pre_item->base, &x, &y, &w, &h);
1434 if(ev->output.x > x && ev->output.x < x+w && ev->output.y > y && ev->output.y < y+h)
1436 selected_box(wd->pre_item);
1443 pressed_box(Elm_Controlbar_Item * it)
1445 Widget_Data * wd = elm_widget_data_get(it->obj);
1448 Elm_Controlbar_Item * item;
1450 if(wd->animating) return EXIT_FAILURE;
1452 if(it->disable) return EXIT_FAILURE;
1454 EINA_LIST_FOREACH(wd->items, l, item)
1458 if (it->style == TABBAR)
1460 edje_object_signal_emit(_EDJ(it->base), wd->pressed_signal, "elm");
1462 else if (it->style == TOOLBAR)
1467 edje_object_signal_emit(_EDJ(it->base), "elm,state,toolbar_pressed", "elm");
1468 //item_color_set(it, "elm.toolbar.pressed.color");
1471 evas_object_event_callback_add(wd->event_box, EVAS_CALLBACK_MOUSE_UP, unpressed_box_cb, (void *)wd);
1477 return EXIT_FAILURE;
1481 return EXIT_SUCCESS;
1484 static Evas_Object *
1485 create_item_label(Evas_Object *obj, Elm_Controlbar_Item * it, char *part)
1488 label = elm_label_add(obj);
1489 elm_object_style_set(label, "controlbar");
1490 elm_label_label_set(label, it->text);
1491 elm_label_text_align_set(label, "center");
1492 elm_label_text_color_set(label, 255, 255, 255, 255);
1493 elm_label_line_wrap_set(label, EINA_TRUE);
1494 elm_label_ellipsis_set(label, EINA_TRUE);
1495 elm_label_wrap_mode_set(label, 1);
1497 elm_layout_content_set(obj, part, label);
1502 static Evas_Object *
1503 create_item_icon(Evas_Object *obj, Elm_Controlbar_Item * it, char *part)
1506 icon = elm_icon_add(obj);
1507 if(!elm_icon_standard_set(icon, it->icon_path))
1509 elm_icon_file_set(icon, it->icon_path, NULL);
1512 evas_object_size_hint_min_set(icon, 40, 40);
1513 evas_object_size_hint_max_set(icon, 100, 100);
1514 evas_object_show(icon);
1516 elm_layout_content_set(obj, part, icon);
1521 static Evas_Object *
1522 create_item_layout(Evas_Object * parent, Elm_Controlbar_Item * it, Evas_Object **item, Evas_Object **label, Evas_Object **icon, Evas_Object **sicon, Evas_Object **slabel)
1525 obj = elm_layout_add(parent);
1528 fprintf(stderr, "Cannot load bg edj\n");
1531 elm_layout_theme_set(obj, "controlbar", "item_bg",
1532 elm_widget_style_get(it->obj));
1533 evas_object_size_hint_weight_set(obj, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1534 evas_object_size_hint_align_set(obj, EVAS_HINT_FILL, EVAS_HINT_FILL);
1536 *item = elm_layout_add(parent);
1539 fprintf(stderr, "Cannot load bg edj\n");
1542 elm_layout_theme_set(*item, "controlbar", "item",
1543 elm_widget_style_get(it->obj));
1544 elm_layout_content_set(obj, "item", *item);
1548 *label = create_item_label(*item, it, "elm.swallow.text");
1549 *slabel = create_item_label(*item, it, "elm.swallow.text_shadow");
1550 evas_object_color_set(*slabel, 0, 0, 0, 255);
1554 *icon = create_item_icon(*item, it, "elm.swallow.icon");
1555 *sicon = create_item_icon(*item, it, "elm.swallow.icon_shadow");
1556 evas_object_color_set(*sicon, 0, 0, 0, 255);
1558 if (*label && *icon)
1560 edje_object_signal_emit(_EDJ(*item), "elm,state,icon_text", "elm");
1561 elm_label_line_wrap_set(*label, EINA_FALSE);
1562 elm_label_wrap_mode_set(*label, 0);
1563 elm_label_line_wrap_set(*slabel, EINA_FALSE);
1564 elm_label_wrap_mode_set(*slabel, 0);
1571 edit_item_down_end_cb(void *data, Evas_Object * obj)
1573 Widget_Data * wd = (Widget_Data *) data;
1575 if (wd->animating < 0)
1577 printf("animation error\n");
1583 edit_item_return_cb(void *data, Evas_Object * obj)
1585 Evas_Coord x, y, w, h;
1586 Widget_Data * wd = (Widget_Data *) data;
1587 evas_object_geometry_get(wd->moving_item->edit, &x, &y, &w, &h);
1588 set_evas_map(obj, x, y, 0, 0);
1590 evas_object_event_callback_del(wd->event_box, EVAS_CALLBACK_MOUSE_UP, edit_item_up_cb);
1591 evas_object_event_callback_del(wd->event_box, EVAS_CALLBACK_MOUSE_MOVE, edit_item_move_cb);
1593 evas_object_data_set(wd->moving_obj, "returning", 0);
1595 if (wd->animating < 0)
1597 printf("animation error\n");
1603 edit_item_move_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
1605 Evas_Event_Mouse_Move * ev = event_info;
1607 Elm_Controlbar_Item * item;
1608 Evas_Coord x, y, w, h;
1609 Widget_Data * wd = (Widget_Data *) data;
1612 evas_object_geometry_get(wd->moving_obj, &x, &y, &w, &h);
1615 x = ev->cur.output.x - w / 2;
1616 y = ev->cur.output.y - h;
1617 set_evas_map(wd->moving_obj, x, y, w, h);
1619 EINA_LIST_FOREACH(wd->items, l, item)
1621 if (wd->moving_item->edit == item->edit || item->style == OBJECT)
1623 evas_object_geometry_get(item->base, &x, &y, &w, &h);
1624 if (ev->cur.output.x > x && ev->cur.output.x < x + w && ev->cur.output.y > y && ev->cur.output.y < y + h
1627 edje_object_signal_emit(_EDJ(item->base), "elm,state,show,glow",
1632 edje_object_signal_emit(_EDJ(item->base), "elm,state,hide,glow",
1640 edit_item_up_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
1642 Evas_Event_Mouse_Up * ev = event_info;
1643 Evas_Coord x, y, w, h;
1644 Evas_Coord x_, y_, w_, h_;
1646 Elm_Controlbar_Item * item;
1647 Widget_Data * wd = (Widget_Data *) data;
1649 if ((int)evas_object_data_get(wd->moving_obj, "returning") == 1)
1651 evas_object_color_set(wd->moving_item->edit_item, 255, 255, 255, 255);
1653 // check which change or not
1654 EINA_LIST_FOREACH(wd->items, l, item)
1656 if (wd->moving_item->edit == item->edit)
1658 if (item->order <= 0)
1660 evas_object_geometry_get(item->base, &x, &y, &w, &h);
1661 if (ev->output.x > x && ev->output.x < x + w && ev->output.y > y && ev->output.y < y + h
1662 && item->style != OBJECT && item->editable)
1664 edje_object_signal_emit(_EDJ(item->base), "elm,state,hide,glow",
1671 if (wd->moving_item->order > 0)
1673 item_exchange_in_bar(wd->moving_item, item);
1677 item_change_in_bar(item);
1679 evas_object_event_callback_del(wd->event_box, EVAS_CALLBACK_MOUSE_UP, edit_item_up_cb);
1680 evas_object_event_callback_del(wd->event_box, EVAS_CALLBACK_MOUSE_MOVE, edit_item_move_cb);
1685 // return moving object to original location
1686 evas_object_geometry_get(wd->moving_item->edit, &x_, &y_, &w_,
1688 evas_object_geometry_get(wd->moving_obj, &x, &y, &w, &h);
1691 x = ev->output.x - w / 2;
1692 y = ev->output.y - h;
1693 evas_object_data_set(wd->moving_obj, "returning", (void *)1);
1695 move_object_with_animation(wd->moving_obj, x, y, w, h, x_, y_, w_, h_,
1696 0.25, move_evas_map, edit_item_return_cb, wd);
1702 edit_item_down_cb(void *data, Evas * evas, Evas_Object * obj,
1705 Evas_Event_Mouse_Down * ev = event_info;
1706 Evas_Coord x, y, w, h;
1707 Evas_Coord x_, y_, w_, h_;
1708 Widget_Data * wd = (Widget_Data *) data;
1711 Elm_Controlbar_Item * item;
1712 Evas_Object * color;
1717 EINA_LIST_FOREACH(wd->items, l, item)
1719 if (item->edit == obj)
1724 if (!item->editable)
1727 evas_object_event_callback_add(wd->event_box, EVAS_CALLBACK_MOUSE_UP, edit_item_up_cb, (void *)wd);
1728 evas_object_event_callback_add(wd->event_box, EVAS_CALLBACK_MOUSE_MOVE, edit_item_move_cb, (void *)wd);
1730 wd->moving_item = item;
1733 edje_object_part_object_get(_EDJ(wd->moving_item->edit),
1734 "elm.item.uneditable.color");
1736 evas_object_color_get(color, &r, &g, &b, &a);
1737 evas_object_color_set(item->edit_item, r, g, b, a);
1739 evas_object_del(wd->moving_obj);
1740 wd->moving_obj = NULL;
1741 wd->moving_obj = create_item_layout(obj, item, &(item->base_item), &(item->label), &(item->icon), &(item->icon_shadow), &(item->label_shadow));
1742 evas_object_geometry_get(obj, &x, &y, &w, &h);
1743 evas_object_move(wd->moving_obj, -1000, -1000);
1744 evas_object_resize(wd->moving_obj, w, h);
1745 evas_object_show(wd->moving_obj);
1748 x_ = ev->output.x - w_ / 2;
1749 y_ = ev->output.y - h_;
1751 move_object_with_animation(wd->moving_obj, x, y, w, h, x_, y_, w_, h_, 0.1,
1752 move_evas_map, edit_item_down_end_cb, wd);
1756 bar_item_move_end_cb(void *data, Evas_Object * obj)
1758 Widget_Data * wd = (Widget_Data *) data;
1761 Elm_Controlbar_Item * item;
1762 EINA_LIST_FOREACH(wd->items, l, item)
1764 if (item->base == obj)
1768 if (wd->animating < 0)
1770 printf("animation error\n");
1773 evas_object_data_set(obj, "animating", 0);
1774 evas_object_map_enable_set(obj, EINA_FALSE);
1778 bar_item_animation_end_check(void *data)
1782 Elm_Controlbar_Item * item;
1783 Widget_Data * wd = (Widget_Data *) data;
1785 return EXIT_FAILURE;
1786 EINA_LIST_FOREACH(wd->items, l, item)
1788 if (item->base == wd->moving_obj)
1793 printf("item is NULL\n");
1797 item->order = wd->empty_num;
1799 wd->moving_obj = NULL;
1801 evas_object_event_callback_del(wd->event_box, EVAS_CALLBACK_MOUSE_UP, bar_item_up_cb);
1802 evas_object_event_callback_del(wd->event_box, EVAS_CALLBACK_MOUSE_MOVE, bar_item_move_cb);
1803 return ECORE_CALLBACK_CANCEL;
1807 bar_item_move_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
1809 Evas_Event_Mouse_Move * ev = event_info;
1811 Elm_Controlbar_Item * item, *it;
1812 Widget_Data * wd = (Widget_Data *) data;
1813 Evas_Coord x, y, w, h, x_, y_, w_, h_;
1816 if (wd->moving_obj == NULL)
1818 printf("%s : moving_obj is NULL\n", __func__);
1821 evas_object_geometry_get(wd->moving_obj, &x, &y, &w, &h);
1822 x = ev->cur.output.x - w / 2;
1823 set_evas_map(wd->moving_obj, x, y, w, h);
1824 EINA_LIST_FOREACH(wd->items, l, item)
1826 if (item->base == wd->moving_obj)
1831 if ((int)evas_object_data_get(item->base, "animating") == 1)
1833 evas_object_geometry_get(item->base, &x, &y, &w, &h);
1834 if (ev->cur.output.x > x && ev->cur.output.x < x + w && item->editable)
1841 evas_object_geometry_get(wd->moving_obj, &x_, &y_, &w_, &h_);
1842 evas_object_move(wd->moving_obj, x, y);
1843 tmp = wd->empty_num;
1844 wd->empty_num = item->order;
1846 elm_table_unpack(wd->box, item->base);
1847 elm_table_unpack(wd->box, wd->moving_obj);
1850 elm_table_pack(wd->box, item->base, item->order - 1, 0, 1, 1);
1851 elm_table_pack(wd->box, wd->moving_obj, wd->empty_num - 1, 0, 1, 1);
1855 elm_table_pack(wd->box, item->base, 0, item->order - 1, 1, 1);
1856 elm_table_pack(wd->box, wd->moving_obj, 0, wd->empty_num - 1, 1, 1);
1859 evas_object_data_set(item->base, "animating", (void *)1);
1860 move_object_with_animation(item->base, x, y, w, h, x_, y_, w_, h_,
1861 0.25, move_evas_map, bar_item_move_end_cb, wd);
1867 bar_item_up_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
1869 Evas_Event_Mouse_Up * ev = event_info;
1870 Evas_Coord tx, x, y, w, h;
1871 Widget_Data * wd = (Widget_Data *) data;
1872 evas_object_geometry_get(wd->moving_obj, &x, &y, &w, &h);
1873 tx = ev->output.x - w / 2;
1875 evas_object_data_set(wd->moving_obj, "animating", (void *)1);
1876 move_object_with_animation(wd->moving_obj, tx, y, w, h, x, y, w, h, 0.25,
1877 move_evas_map, bar_item_move_end_cb, wd);
1878 ecore_timer_add(0.1, bar_item_animation_end_check, wd);
1883 bar_item_down_cb(void *data, Evas * evas, Evas_Object * obj, void *event_info)
1885 Widget_Data * wd = (Widget_Data *) data;
1887 Elm_Controlbar_Item * item;
1890 EINA_LIST_FOREACH(wd->items, l, item)
1892 if (item->base == obj)
1899 if (!item->editable)
1902 wd->moving_obj = obj;
1903 wd->empty_num = item->order;
1904 evas_object_event_callback_add(wd->event_box, EVAS_CALLBACK_MOUSE_UP, bar_item_up_cb, (void *)wd);
1905 evas_object_event_callback_add(wd->event_box, EVAS_CALLBACK_MOUSE_MOVE, bar_item_move_cb, (void *)wd);
1913 static Elm_Controlbar_Item *
1914 create_tab_item(Evas_Object * obj, const char *icon_path, const char *label,
1917 Elm_Controlbar_Item * it;
1921 fprintf(stderr, "Invalid argument: controlbar object is NULL\n");
1924 wd = elm_widget_data_get(obj);
1927 fprintf(stderr, "Cannot get smart data\n");
1930 it = ELM_NEW(Elm_Controlbar_Item);
1934 it->text = eina_stringshare_add(label);
1935 it->icon_path = eina_stringshare_add(icon_path);
1936 it->selected = EINA_FALSE;
1937 it->editable = EINA_TRUE;
1942 it->base = create_item_layout(wd->edje, it, &(it->base_item), &(it->label), &(it->icon), &(it->icon_shadow), &(it->label_shadow));
1943 evas_object_event_callback_add(it->base, EVAS_CALLBACK_MOUSE_DOWN,
1944 bar_item_down_cb, wd);
1945 evas_object_show(it->base);
1946 it->edit = create_item_layout(wd->edje, it, &(it->edit_item), &(it->edit_label), &(it->edit_icon), &(it->edit_icon_shadow), &(it->edit_label_shadow));
1947 evas_object_event_callback_add(it->edit, EVAS_CALLBACK_MOUSE_DOWN,
1948 edit_item_down_cb, wd);
1949 evas_object_show(it->edit);
1954 static Elm_Controlbar_Item *
1955 create_tool_item(Evas_Object * obj, const char *icon_path, const char *label,
1956 void (*func) (void *data, Evas_Object * obj,
1957 void *event_info), void *data)
1959 Elm_Controlbar_Item * it;
1963 fprintf(stderr, "Invalid argument: controlbar object is NULL\n");
1966 wd = elm_widget_data_get(obj);
1969 fprintf(stderr, "Cannot get smart data\n");
1972 it = ELM_NEW(Elm_Controlbar_Item);
1976 it->text = eina_stringshare_add(label);
1977 it->icon_path = eina_stringshare_add(icon_path);
1978 it->selected = EINA_FALSE;
1979 it->editable = EINA_TRUE;
1984 it->style = TOOLBAR;
1985 it->base = create_item_layout(wd->edje, it, &(it->base_item), &(it->label), &(it->icon), &(it->icon_shadow), &(it->label_shadow));
1986 evas_object_event_callback_add(it->base, EVAS_CALLBACK_MOUSE_DOWN,
1987 bar_item_down_cb, wd);
1988 evas_object_show(it->base);
1989 it->edit = create_item_layout(wd->edje, it, &(it->edit_item), &(it->edit_label), &(it->edit_icon), &(it->edit_icon_shadow), &(it->edit_label_shadow));
1990 evas_object_event_callback_add(it->edit, EVAS_CALLBACK_MOUSE_DOWN,
1991 edit_item_down_cb, wd);
1992 evas_object_show(it->edit);
1996 static Elm_Controlbar_Item *
1997 create_object_item(Evas_Object * obj, Evas_Object * obj_item, const int sel)
1999 Elm_Controlbar_Item * it;
2003 fprintf(stderr, "Invalid argument: controlbar object is NULL\n");
2006 wd = elm_widget_data_get(obj);
2009 fprintf(stderr, "Cannot get smart data\n");
2012 it = ELM_NEW(Elm_Controlbar_Item);
2019 it->base = obj_item;
2024 repack_items(Widget_Data *wd)
2027 Elm_Controlbar_Item * item;
2029 EINA_LIST_FOREACH(wd->items, l, item)
2033 elm_table_unpack(wd->box, item->base);
2036 elm_table_pack(wd->box, item->base, item->order - 1, 0, item->sel, 1);
2040 elm_table_pack(wd->box, item->base, 0, item->order - 1, item->sel, 1);
2047 set_items_position(Evas_Object * obj, Elm_Controlbar_Item * it,
2048 Elm_Controlbar_Item * mit, Eina_Bool bar)
2053 Elm_Controlbar_Item * item;
2056 int check = EINA_FALSE;
2064 fprintf(stderr, "Invalid argument: controlbar object is NULL\n");
2067 wd = elm_widget_data_get(obj);
2070 fprintf(stderr, "Cannot get smart data\n");
2074 EINA_LIST_FOREACH(wd->items, l, item)
2076 if (item == mit && item->order > 0)
2080 it->order = mit->order;
2084 if(item->order > 0){
2085 elm_table_unpack(wd->box, item->base);
2086 item->order += it->sel;
2089 elm_table_pack(wd->box, item->base, item->order - 1, 0, item->sel, 1);
2093 elm_table_pack(wd->box, item->base, 0, item->order - 1, item->sel, 1);
2096 if (item->style != OBJECT && it->style != OBJECT)
2098 elm_table_unpack(wd->edit_table, item->edit);
2099 elm_table_pack(wd->edit_table, item->edit,
2100 i % EDIT_ROW_NUM, i / EDIT_ROW_NUM, 1, 1);
2103 if (item->style != OBJECT)
2105 if(item->order > 0) order += item->sel;
2121 elm_table_pack(wd->box, it->base, it->order - 1, 0, it->sel, 1);
2125 elm_table_pack(wd->box, it->base, 0, it->order - 1, it->sel, 1);
2128 else evas_object_hide(it->base);
2129 if (it->style != OBJECT)
2130 elm_table_pack(wd->edit_table, it->edit, (edit - 1) % EDIT_ROW_NUM,
2131 (edit - 1) / EDIT_ROW_NUM, 1, 1);
2135 list_clicked(void *data, Evas_Object *obj, void *event_info)
2137 Elm_Controlbar_Item *item = (Elm_Controlbar_Item *)data;
2138 Elm_Controlbar_Item *it;
2141 Evas_Object *content;
2142 Elm_List_Item *lit = (Elm_List_Item *) elm_list_selected_item_get(obj);
2143 if(lit == NULL) return;
2145 elm_list_item_selected_set(lit, 0);
2149 wd = elm_widget_data_get(item->obj);
2151 EINA_LIST_FOREACH(wd->items, l, it)
2153 it->selected = EINA_FALSE;
2156 if(item->style == TABBAR)
2158 content = elm_layout_content_unset(wd->view, "elm.swallow.view");
2159 evas_object_hide(content);
2160 item->selected = EINA_TRUE;
2161 evas_object_smart_callback_call(item->obj, "view,change,before", item);
2162 elm_layout_content_set(wd->view, "elm.swallow.view", item->view);
2165 if(item->style == TOOLBAR && item->func)
2166 item->func(item->data, item->obj, item);
2169 static Evas_Object *
2170 create_more_view(Widget_Data *wd)
2173 Elm_Controlbar_Item *item;
2177 list = elm_list_add( wd->object );
2178 elm_list_horizontal_mode_set( list, ELM_LIST_COMPRESS );
2180 EINA_LIST_FOREACH(wd->items, l, item)
2182 if(item->order <= 0)
2187 icon = create_item_icon(list, item, NULL);
2188 evas_object_color_set(icon, 0, 0, 0, 255);
2190 elm_list_item_append(list, item->text, icon, NULL, list_clicked, item);
2194 elm_list_go( list );
2199 static void _ctxpopup_cb(void *data, Evas_Object *obj, void *event_info)
2201 Elm_Controlbar_Item *it;
2203 Evas_Object *ctxpopup = obj;
2204 Widget_Data *wd = (Widget_Data *)data;
2206 EINA_LIST_FOREACH(wd->items, l, it)
2208 if(!strcmp(it->text, elm_ctxpopup_item_label_get((Elm_Ctxpopup_Item *) event_info))) break;
2213 it->func(it->data, it->obj, it);
2216 if(item_exist_check(wd, it)) evas_object_smart_callback_call(it->obj, "clicked", it);
2218 evas_object_del(ctxpopup);
2222 static void _ctxpopup_hide_cb(void *data, Evas_Object *obj, void *event_info)
2224 Evas_Object *ctxpopup = obj;
2226 evas_object_del(ctxpopup);
2231 create_more_func(void *data, Evas_Object *obj, void *event_info)
2233 Evas_Object *ctxpopup;
2234 Elm_Controlbar_Item *item;
2237 Evas_Coord x, y, w, h;
2238 Widget_Data *wd = elm_widget_data_get(obj);
2241 ctxpopup = elm_ctxpopup_add(wd->parent);
2242 evas_object_smart_callback_add( ctxpopup, "hide", _ctxpopup_hide_cb, wd);
2244 EINA_LIST_FOREACH(wd->items, l, item)
2246 if(item->order <= 0)
2251 icon = create_item_icon(ctxpopup, item, NULL);
2252 evas_object_color_set(icon, 0, 0, 0, 255);
2254 elm_ctxpopup_item_add(ctxpopup, icon, item->text, _ctxpopup_cb, wd);
2258 evas_object_geometry_get(wd->more_item->base, &x, &y, &w, &h);
2259 evas_object_move(ctxpopup, x + w/2, y + h/2);
2261 evas_object_show(ctxpopup);
2264 static Elm_Controlbar_Item *
2265 create_more_item(Widget_Data *wd, int style)
2267 Elm_Controlbar_Item * it;
2269 it = ELM_NEW(Elm_Controlbar_Item);
2272 it->obj = wd->object;
2273 it->text = eina_stringshare_add("more");
2274 it->icon_path = eina_stringshare_add(CONTROLBAR_SYSTEM_ICON_MORE);
2275 it->selected = EINA_FALSE;
2278 it->view = create_more_view(wd);
2279 it->func = create_more_func;
2281 it->base = create_item_layout(wd->edje, it, &(it->base_item), &(it->label), &(it->icon), &(it->icon_shadow), &(it->label_shadow));
2282 evas_object_event_callback_add(it->base, EVAS_CALLBACK_MOUSE_DOWN,
2283 bar_item_down_cb, wd);
2284 evas_object_show(it->base);
2285 it->edit = create_item_layout(wd->edje, it, &(it->edit_item), &(it->edit_label), &(it->edit_icon), &(it->edit_icon_shadow), &(it->edit_label_shadow));
2286 evas_object_event_callback_add(it->edit, EVAS_CALLBACK_MOUSE_DOWN,
2287 edit_item_down_cb, wd);
2288 evas_object_show(it->edit);
2290 set_items_position(it->obj, it, NULL, EINA_TRUE);
2292 wd->items = eina_list_append(wd->items, it);
2296 elm_controlbar_item_editable_set(it, EINA_FALSE);
2298 wd->items = eina_list_sort(wd->items, eina_list_count(wd->items), sort_cb);
2303 ///////////////////////////////////////////////////////////////////
2307 ////////////////////////////////////////////////////////////////////
2310 * Add a new controlbar object
2312 * @param parent The parent object
2313 * @return The new object or NULL if it cannot be created
2315 * @ingroup Controlbar
2317 EAPI Evas_Object * elm_controlbar_add(Evas_Object * parent)
2319 Evas_Object * obj = NULL;
2320 Evas_Object * bg = NULL;
2321 Widget_Data * wd = NULL;
2322 Evas_Coord x, y, w, h;
2323 Evas_Object * r_button;
2324 wd = ELM_NEW(Widget_Data);
2325 wd->evas = evas_object_evas_get(parent);
2326 if (wd->evas == NULL)
2328 obj = elm_widget_add(wd->evas);
2331 elm_widget_type_set(obj, "controlbar");
2332 elm_widget_sub_object_add(parent, obj);
2333 elm_widget_data_set(obj, wd);
2334 elm_widget_del_hook_set(obj, _del_hook);
2335 elm_widget_theme_hook_set(obj, _theme_hook);
2338 wd->parent = parent;
2339 evas_object_geometry_get(parent, &x, &y, &w, &h);
2345 wd->mode = ELM_CONTROLBAR_MODE_DEFAULT;
2349 wd->vertical = EINA_FALSE;
2350 wd->edit_mode = EINA_FALSE;
2351 wd->auto_align = EINA_FALSE;
2352 wd->init_animation = EINA_FALSE;
2353 wd->selected_animation = EINA_FALSE;
2354 wd->pressed_signal = eina_stringshare_add("elm,state,pressed");
2355 wd->selected_signal = eina_stringshare_add("elm,state,selected");
2356 wd->view = elm_layout_add(wd->parent); //edje_object_add(wd->evas);
2357 elm_layout_theme_set(wd->view, "controlbar", "view", "default");
2358 //_elm_theme_object_set(obj, wd->view, "controlbar", "view", "default");
2359 if (wd->view == NULL)
2361 printf("Cannot load bg edj\n");
2364 evas_object_show(wd->view);
2367 wd->edit_box = edje_object_add(wd->evas);
2368 _elm_theme_object_set(obj, wd->edit_box, "controlbar", "edit_box",
2370 if (wd->edit_box == NULL)
2372 printf("Cannot load bg edj\n");
2375 evas_object_show(wd->edit_box);
2377 //instead of navigationbar
2378 /* r_button = elm_button_add(wd->edit_box);
2379 elm_button_label_set(r_button, "Done");
2380 evas_object_smart_callback_add(r_button, "clicked", done_button_cb, wd);
2381 edje_object_part_swallow(wd->edit_box, "elm.swallow.navigation", r_button);
2383 // navigationbar will contribution. but not yet
2384 wd->navigation = elm_navigationbar_add(wd->edit_box);
2385 r_button = elm_button_add(wd->navigation);
2386 elm_button_label_set(r_button, "Done");
2387 evas_object_smart_callback_add(r_button, "clicked", done_button_cb, wd);
2388 elm_navigationbar_push(wd->navigation, "Configure", NULL, r_button, NULL, NULL);
2389 edje_object_part_swallow(wd->edit_box, "elm.swallow.navigation", wd->navigation);
2391 wd->edit_table = elm_table_add(wd->edit_box);
2392 elm_table_homogenous_set(wd->edit_table, EINA_TRUE);
2393 edje_object_part_swallow(wd->edit_box, "elm.swallow.table", wd->edit_table);
2395 /* load background edj */
2396 wd->edje = edje_object_add(wd->evas);
2397 _elm_theme_object_set(obj, wd->edje, "controlbar", "base", "default");
2398 if (wd->edje == NULL)
2400 printf("Cannot load base edj\n");
2403 evas_object_show(wd->edje);
2405 wd->bg = edje_object_add(wd->evas);
2406 _elm_theme_object_set(obj, wd->bg, "controlbar", "background", "default");
2409 printf("Cannot load bg edj\n");
2412 edje_object_part_swallow(wd->edje, "bg_image", wd->bg);
2415 evas_object_event_callback_add(wd->edje, EVAS_CALLBACK_RESIZE,
2416 _controlbar_object_resize, obj);
2417 evas_object_event_callback_add(wd->edje, EVAS_CALLBACK_MOVE,
2418 _controlbar_object_move, obj);
2419 evas_object_event_callback_add(wd->edje, EVAS_CALLBACK_SHOW,
2420 _controlbar_object_show, obj);
2421 evas_object_event_callback_add(wd->edje, EVAS_CALLBACK_HIDE,
2422 _controlbar_object_hide, obj);
2423 bg = (Evas_Object *)edje_object_part_object_get(wd->edje, "bg_image");
2424 evas_object_event_callback_add(bg, EVAS_CALLBACK_MOVE, _controlbar_object_move, obj);
2425 evas_object_event_callback_add(bg, EVAS_CALLBACK_RESIZE, _controlbar_object_resize, obj);
2427 wd->selected_box = wd->focused_box = edje_object_add(wd->evas);
2428 _elm_theme_object_set(obj, wd->focused_box, "controlbar", "item_bg_move", "default");
2429 evas_object_hide(wd->focused_box);
2431 wd->focused_box_left = edje_object_add(wd->evas);
2432 _elm_theme_object_set(obj, wd->focused_box_left, "controlbar", "item_bg_move_left", "default");
2433 evas_object_hide(wd->focused_box_left);
2435 wd->focused_box_right = edje_object_add(wd->evas);
2436 _elm_theme_object_set(obj, wd->focused_box_right, "controlbar", "item_bg_move_right", "default");
2437 evas_object_hide(wd->focused_box_right);
2440 wd->box = elm_table_add(wd->edje);
2441 elm_table_homogenous_set(wd->box, EINA_TRUE);
2442 evas_object_size_hint_weight_set(wd->box, EVAS_HINT_EXPAND,
2444 evas_object_size_hint_align_set(wd->box, EVAS_HINT_FILL, EVAS_HINT_FILL);
2445 edje_object_part_swallow(wd->edje, "elm.swallow.items", wd->box);
2446 evas_object_show(wd->box);
2448 wd->event_box = evas_object_rectangle_add(wd->evas);
2449 evas_object_color_set(wd->event_box, 255, 255, 255, 0);
2450 evas_object_repeat_events_set(wd->event_box, EINA_TRUE);
2451 evas_object_show(wd->event_box);
2454 // evas_object_smart_callback_add(obj, "sub-object-del", _sub_del, obj);
2455 evas_object_smart_member_add(wd->view, obj);
2456 evas_object_smart_member_add(wd->edit_box, obj);
2457 elm_widget_resize_object_set(obj, wd->edje);
2458 evas_object_smart_member_add(wd->focused_box, obj);
2459 evas_object_smart_member_add(wd->focused_box_left, obj);
2460 evas_object_smart_member_add(wd->focused_box_right, obj);
2461 evas_object_smart_member_add(wd->box, obj);
2462 evas_object_smart_member_add(wd->event_box, obj);
2469 * Append new tab item
2471 * @param obj The controlbar object
2472 * @param icon_path The icon path of item
2473 * @param label The label of item
2474 * @param view The view of item
2475 * @return The item of controlbar
2477 * @ingroup Controlbar
2479 EAPI Elm_Controlbar_Item * elm_controlbar_tab_item_append(Evas_Object * obj,
2486 Elm_Controlbar_Item * it;
2487 Elm_Controlbar_Item * lit;
2489 it = create_tab_item(obj, icon_path, label, view);
2492 wd = elm_widget_data_get(obj);
2493 if(check_bar_item_number(wd) >= 5 && wd->auto_align){
2494 if(!wd->more_item) {
2495 lit = elm_controlbar_last_item_get(obj);
2496 item_visible_set(lit, EINA_FALSE);
2497 create_more_item(wd, TABBAR);
2499 set_items_position(obj, it, NULL, EINA_FALSE);
2502 set_items_position(obj, it, NULL, EINA_TRUE);
2504 if(wd->init_animation) evas_object_hide(it->base);
2505 wd->items = eina_list_append(wd->items, it);
2507 elm_controlbar_item_view_set(wd->more_item, create_more_view(wd));
2516 * Prepend new tab item
2518 * @param obj The controlbar object
2519 * @param icon_path The icon path of item
2520 * @param label The label of item
2521 * @param view The view of item
2522 * @return The item of controlbar
2524 * @ingroup Controlbar
2526 EAPI Elm_Controlbar_Item * elm_controlbar_tab_item_prepend(Evas_Object *
2536 Elm_Controlbar_Item * it;
2537 Elm_Controlbar_Item * lit;
2538 Elm_Controlbar_Item * item;
2539 it = create_tab_item(obj, icon_path, label, view);
2542 wd = elm_widget_data_get(obj);
2543 item = eina_list_data_get(wd->items);
2544 if(check_bar_item_number(wd) >= 5 && wd->auto_align){
2545 if(!wd->more_item) {
2546 lit = elm_controlbar_last_item_get(obj);
2547 item_visible_set(lit, EINA_FALSE);
2548 create_more_item(wd, TABBAR);
2550 lit = elm_controlbar_item_prev(wd->more_item);
2551 item_visible_set(lit, EINA_FALSE);
2552 set_items_position(obj, it, item, EINA_TRUE);
2555 set_items_position(obj, it, item, EINA_TRUE);
2557 wd->items = eina_list_prepend(wd->items, it);
2559 elm_controlbar_item_view_set(wd->more_item, create_more_view(wd));
2567 * Insert new tab item before given item
2569 * @param obj The controlbar object
2570 * @param before The given item
2571 * @param icon_path The icon path of item
2572 * @param label The label of item
2573 * @param view The view of item
2574 * @return The item of controlbar
2576 * @ingroup Controlbar
2578 EAPI Elm_Controlbar_Item *
2579 elm_controlbar_tab_item_insert_before(Evas_Object * obj,
2580 Elm_Controlbar_Item * before,
2581 const char *icon_path,
2582 const char *label, Evas_Object * view)
2585 Elm_Controlbar_Item * it;
2586 Elm_Controlbar_Item * lit;
2589 it = create_tab_item(obj, icon_path, label, view);
2592 wd = elm_widget_data_get(obj);
2593 if(check_bar_item_number(wd) >= 5 && wd->auto_align){
2596 lit = elm_controlbar_last_item_get(obj);
2597 item_visible_set(lit, EINA_FALSE);
2598 create_more_item(wd, TABBAR);
2600 before = wd->more_item;
2601 if(before->order > 0)
2603 lit = elm_controlbar_item_prev(wd->more_item);
2604 item_visible_set(lit, EINA_FALSE);
2605 set_items_position(obj, it, before, EINA_TRUE);
2609 set_items_position(obj, it, before, EINA_FALSE);
2613 set_items_position(obj, it, before, EINA_TRUE);
2615 wd->items = eina_list_prepend_relative(wd->items, it, before);
2617 elm_controlbar_item_view_set(wd->more_item, create_more_view(wd));
2625 * Insert new tab item after given item
2627 * @param obj The controlbar object
2628 * @param after The given item
2629 * @param icon_path The icon path of item
2630 * @param label The label of item
2631 * @param view The view of item
2632 * @return The item of controlbar
2634 * @ingroup Controlbar
2636 EAPI Elm_Controlbar_Item *
2637 elm_controlbar_tab_item_insert_after(Evas_Object * obj,
2638 Elm_Controlbar_Item * after,
2639 const char *icon_path, const char *label,
2643 Elm_Controlbar_Item * it;
2644 Elm_Controlbar_Item * lit;
2645 Elm_Controlbar_Item * item;
2648 it = create_tab_item(obj, icon_path, label, view);
2651 wd = elm_widget_data_get(obj);
2652 item = elm_controlbar_item_next(after);
2653 if(check_bar_item_number(wd) >= 5 && wd->auto_align){
2656 lit = elm_controlbar_last_item_get(obj);
2657 item_visible_set(lit, EINA_FALSE);
2658 create_more_item(wd, TABBAR);
2660 lit = elm_controlbar_item_prev(wd->more_item);
2661 if(lit != after && item->order > 0)
2663 item_visible_set(lit, EINA_FALSE);
2664 set_items_position(obj, it, item, EINA_TRUE);
2668 set_items_position(obj, it, NULL, EINA_FALSE);
2672 set_items_position(obj, it, item, EINA_TRUE);
2674 wd->items = eina_list_append_relative(wd->items, it, after);
2676 elm_controlbar_item_view_set(wd->more_item, create_more_view(wd));
2684 * Append new tool item
2686 * @param obj The controlbar object
2687 * @param icon_path The icon path of item
2688 * @param label The label of item
2689 * @param func Callback function of item
2690 * @param data The data of callback function
2691 * @return The item of controlbar
2693 * @ingroup Controlbar
2695 EAPI Elm_Controlbar_Item * elm_controlbar_tool_item_append(Evas_Object *
2710 Elm_Controlbar_Item * it;
2711 Elm_Controlbar_Item * lit;
2713 it = create_tool_item(obj, icon_path, label, func, data);
2716 wd = elm_widget_data_get(obj);
2717 if(check_bar_item_number(wd) >= 5 && wd->auto_align){
2718 if(!wd->more_item) {
2719 lit = elm_controlbar_last_item_get(obj);
2720 item_visible_set(lit, EINA_FALSE);
2721 create_more_item(wd, TOOLBAR);
2723 set_items_position(obj, it, NULL, EINA_FALSE);
2726 set_items_position(obj, it, NULL, EINA_TRUE);
2728 wd->items = eina_list_append(wd->items, it);
2734 * Prepend new tool item
2736 * @param obj The controlbar object
2737 * @param icon_path The icon path of item
2738 * @param label The label of item
2739 * @param func Callback function of item
2740 * @param data The data of callback function
2741 * @return The item of controlbar
2743 * @ingroup Controlbar
2745 EAPI Elm_Controlbar_Item * elm_controlbar_tool_item_prepend(Evas_Object *
2762 Elm_Controlbar_Item * it;
2763 Elm_Controlbar_Item * lit;
2764 Elm_Controlbar_Item * item;
2765 it = create_tool_item(obj, icon_path, label, func, data);
2768 wd = elm_widget_data_get(obj);
2769 item = eina_list_data_get(wd->items);
2770 if(check_bar_item_number(wd) >= 5 && wd->auto_align){
2771 if(!wd->more_item) {
2772 lit = elm_controlbar_last_item_get(obj);
2773 item_visible_set(lit, EINA_FALSE);
2774 create_more_item(wd, TOOLBAR);
2776 lit = elm_controlbar_item_prev(wd->more_item);
2777 item_visible_set(lit, EINA_FALSE);
2778 set_items_position(obj, it, item, EINA_TRUE);
2781 set_items_position(obj, it, item, EINA_TRUE);
2783 wd->items = eina_list_prepend(wd->items, it);
2789 * Insert new tool item before given item
2791 * @param obj The controlbar object
2792 * @param before The given item
2793 * @param icon_path The icon path of item
2794 * @param label The label of item
2795 * @param func Callback function of item
2796 * @param data The data of callback function
2797 * @return The item of controlbar
2799 * @ingroup Controlbar
2801 EAPI Elm_Controlbar_Item *
2802 elm_controlbar_tool_item_insert_before(Evas_Object * obj,
2803 Elm_Controlbar_Item * before,
2804 const char *icon_path,
2806 void (*func) (void *data,
2812 Elm_Controlbar_Item * it;
2813 Elm_Controlbar_Item * lit;
2816 it = create_tool_item(obj, icon_path, label, func, data);
2819 wd = elm_widget_data_get(obj);
2820 if(check_bar_item_number(wd) >= 5 && wd->auto_align){
2823 lit = elm_controlbar_last_item_get(obj);
2824 item_visible_set(lit, EINA_FALSE);
2825 create_more_item(wd, TOOLBAR);
2827 before = wd->more_item;
2828 if(before->order > 0)
2830 lit = elm_controlbar_item_prev(wd->more_item);
2831 item_visible_set(lit, EINA_FALSE);
2832 set_items_position(obj, it, before, EINA_TRUE);
2836 set_items_position(obj, it, before, EINA_FALSE);
2840 set_items_position(obj, it, before, EINA_TRUE);
2842 wd->items = eina_list_prepend_relative(wd->items, it, before);
2848 * Insert new tool item after given item
2850 * @param obj The controlbar object
2851 * @param after The given item
2852 * @param icon_path The icon path of item
2853 * @param label The label of item
2854 * @param func Callback function of item
2855 * @param data The data of callback function
2856 * @return The item of controlbar
2858 * @ingroup Controlbar
2860 EAPI Elm_Controlbar_Item *
2861 elm_controlbar_tool_item_insert_after(Evas_Object * obj,
2862 Elm_Controlbar_Item * after,
2863 const char *icon_path,
2865 void (*func) (void *data,
2871 Elm_Controlbar_Item * it;
2872 Elm_Controlbar_Item * lit;
2873 Elm_Controlbar_Item * item;
2876 it = create_tool_item(obj, icon_path, label, func, data);
2879 wd = elm_widget_data_get(obj);
2880 item = elm_controlbar_item_next(after);
2881 if(check_bar_item_number(wd) >= 5 && wd->auto_align){
2884 lit = elm_controlbar_last_item_get(obj);
2885 item_visible_set(lit, EINA_FALSE);
2886 create_more_item(wd, TOOLBAR);
2888 lit = elm_controlbar_item_prev(wd->more_item);
2889 if(lit != after && item->order > 0)
2891 item_visible_set(lit, EINA_FALSE);
2892 set_items_position(obj, it, item, EINA_TRUE);
2896 set_items_position(obj, it, NULL, EINA_FALSE);
2900 set_items_position(obj, it, item, EINA_TRUE);
2902 wd->items = eina_list_append_relative(wd->items, it, after);
2908 * Append new object item
2910 * @param obj The controlbar object
2911 * @param obj_item The object of item
2912 * @param sel The number of sel occupied
2913 * @return The item of controlbar
2915 * @ingroup Controlbar
2917 EAPI Elm_Controlbar_Item * elm_controlbar_object_item_append(Evas_Object *
2924 Elm_Controlbar_Item * it;
2925 it = create_object_item(obj, obj_item, sel);
2928 wd = elm_widget_data_get(obj);
2929 set_items_position(obj, it, NULL, EINA_TRUE);
2930 wd->items = eina_list_append(wd->items, it);
2936 * Prepend new object item
2938 * @param obj The controlbar object
2939 * @param obj_item The object of item
2940 * @param sel The number of sel occupied
2941 * @return The item of controlbar
2943 * @ingroup Controlbar
2945 EAPI Elm_Controlbar_Item * elm_controlbar_object_item_prepend(Evas_Object *
2952 Elm_Controlbar_Item * it;
2953 Elm_Controlbar_Item * item;
2954 it = create_object_item(obj, obj_item, sel);
2957 wd = elm_widget_data_get(obj);
2958 item = eina_list_data_get(wd->items);
2959 set_items_position(obj, it, item, EINA_TRUE);
2960 wd->items = eina_list_prepend(wd->items, it);
2966 * Insert new object item before given item
2968 * @param obj The controlbar object
2969 * @param before The given item
2970 * @param obj_item The object of item
2971 * @param sel The number of sel occupied
2972 * @return The item of controlbar
2974 * @ingroup Controlbar
2976 EAPI Elm_Controlbar_Item *
2977 elm_controlbar_object_item_insert_before(Evas_Object * obj,
2978 Elm_Controlbar_Item * before,
2979 Evas_Object * obj_item, const int sel)
2982 Elm_Controlbar_Item * it;
2985 it = create_object_item(obj, obj_item, sel);
2988 wd = elm_widget_data_get(obj);
2989 set_items_position(obj, it, before, EINA_TRUE);
2990 wd->items = eina_list_prepend_relative(wd->items, it, before);
2996 * Insert new object item after given item
2998 * @param obj The controlbar object
2999 * @param after The given item
3000 * @param obj_item The object of item
3001 * @param sel The number of sel occupied
3002 * @return The item of controlbar
3004 * @ingroup Controlbar
3006 EAPI Elm_Controlbar_Item *
3007 elm_controlbar_object_item_insert_after(Evas_Object * obj,
3008 Elm_Controlbar_Item * after,
3009 Evas_Object * obj_item, const int sel)
3012 Elm_Controlbar_Item * it;
3013 Elm_Controlbar_Item * item;
3016 it = create_object_item(obj, obj_item, sel);
3019 wd = elm_widget_data_get(obj);
3020 item = elm_controlbar_item_next(after);
3021 set_items_position(obj, it, item, EINA_TRUE);
3022 wd->items = eina_list_append_relative(wd->items, it, after);
3028 * Delete item from controlbar
3030 * @param it The item of controlbar
3032 * @ingroup Controlbar
3035 elm_controlbar_item_del(Elm_Controlbar_Item * it)
3041 Elm_Controlbar_Item * item;
3049 if (it->obj == NULL)
3051 printf("Invalid argument: controlbar object is NULL\n");
3054 wd = elm_widget_data_get(it->obj);
3057 printf("Cannot get smart data\n");
3064 elm_table_unpack(wd->box, it->base);
3066 EINA_LIST_FOREACH(wd->items, l, item)
3070 if (item->order > it->order)
3072 elm_table_unpack(wd->box, item->base);
3076 elm_table_pack(wd->box, item->base, item->order - 1, 0, item->sel, 1);
3080 elm_table_pack(wd->box, item->base, 0, item->order - 1, item->sel, 1);
3093 if (it->edit_item != NULL)
3095 elm_table_unpack(wd->edit_table, it->edit);
3096 EINA_LIST_FOREACH(wd->items, l, item)
3100 if (item->edit_item != NULL)
3102 elm_table_unpack(wd->edit_table, item->edit);
3103 elm_table_pack(wd->edit_table, item->edit,
3104 (i - 1) % 4, (i - 1) / 4, 1, 1);
3107 if (it == item && item->style != OBJECT)
3112 if (item->style != OBJECT)
3117 // delete item in list
3119 wd->items = eina_list_remove(wd->items, it);
3122 wd->num = wd->num - 1;
3127 * Select item in controlbar
3129 * @param it The item of controlbar
3131 * @ingroup Controlbar
3134 elm_controlbar_item_select(Elm_Controlbar_Item * it)
3136 if (it->obj == NULL)
3138 Widget_Data * wd = elm_widget_data_get(it->obj);
3148 * Set the icon of item
3150 * @param it The item of controlbar
3151 * @param icon_path The icon path of the item
3152 * @return The icon object
3154 * @ingroup Controlbar
3157 elm_controlbar_item_icon_set(Elm_Controlbar_Item * it, const char *icon_path)
3161 it->icon_path = icon_path;
3164 evas_object_del(it->icon);
3167 it->icon = create_item_icon(it->base_item, it, "elm.swallow.icon");
3168 it->icon_shadow = create_item_icon(it->base_item, it, "elm.swallow.icon_shadow");
3169 it->edit_icon = create_item_icon(it->edit_item, it, "elm.swallow.icon");
3170 it->edit_icon_shadow = create_item_icon(it->edit_item, it, "elm.swallow.icon_shadow");
3172 if(it->label && it->icon)
3174 edje_object_signal_emit(_EDJ(it->base_item), "elm,state,icon_text", "elm");
3175 elm_label_line_wrap_set(it->label, EINA_FALSE);
3176 elm_label_wrap_mode_set(it->label, 0);
3177 elm_label_line_wrap_set(it->label_shadow, EINA_FALSE);
3178 elm_label_wrap_mode_set(it->label_shadow, 0);
3180 if(it->edit_label && it->edit_icon)
3182 edje_object_signal_emit(_EDJ(it->edit_item), "elm,state,icon_text", "elm");
3183 elm_label_line_wrap_set(it->edit_label, EINA_FALSE);
3184 elm_label_wrap_mode_set(it->edit_label, 0);
3185 elm_label_line_wrap_set(it->edit_label_shadow, EINA_FALSE);
3186 elm_label_wrap_mode_set(it->edit_label_shadow, 0);
3191 * Get the icon of item
3193 * @param it The item of controlbar
3194 * @return The icon object
3196 * @ingroup Controlbar
3199 elm_controlbar_item_icon_get(Elm_Controlbar_Item * it)
3205 * Set the label of item
3207 * @param it The item of controlbar
3208 * @param label The label of item
3210 * @ingroup Controlbar
3213 elm_controlbar_item_label_set(Elm_Controlbar_Item * it, const char *label)
3217 it->text = eina_stringshare_add(label);
3218 it->label = create_item_label(it->base_item, it, "elm.swallow.text");
3219 it->edit_label = create_item_label(it->edit_item, it, "elm.swallow.text");
3221 if(it->label && it->icon){
3222 edje_object_signal_emit(_EDJ(it->base_item), "elm,state,icon_text", "elm");
3223 elm_label_line_wrap_set(it->label, EINA_FALSE);
3224 elm_label_wrap_mode_set(it->label, 0);
3225 elm_label_line_wrap_set(it->label_shadow, EINA_FALSE);
3226 elm_label_wrap_mode_set(it->label_shadow, 0);
3228 if(it->edit_label && it->edit_icon)
3230 edje_object_signal_emit(_EDJ(it->edit_item), "elm,state,icon_text", "elm");
3231 elm_label_line_wrap_set(it->edit_label, EINA_FALSE);
3232 elm_label_wrap_mode_set(it->edit_label, 0);
3233 elm_label_line_wrap_set(it->edit_label_shadow, EINA_FALSE);
3234 elm_label_wrap_mode_set(it->edit_label_shadow, 0);
3239 * Get the label of item
3241 * @param it The item of controlbar
3242 * @return The label of item
3244 * @ingroup Controlbar
3247 elm_controlbar_item_label_get(Elm_Controlbar_Item * it)
3253 * Get the selected item
3255 * @param obj The controlbar object
3256 * @return The item of controlbar
3258 * @ingroup Controlbar
3260 EAPI Elm_Controlbar_Item * elm_controlbar_selected_item_get(Evas_Object *
3265 Elm_Controlbar_Item * item;
3268 Widget_Data * wd = elm_widget_data_get(obj);
3269 if (!wd || !wd->items)
3271 EINA_LIST_FOREACH(wd->items, l, item)
3280 * Get the first item
3282 * @param obj The controlbar object
3283 * @return The item of controlbar
3285 * @ingroup Controlbar
3287 EAPI Elm_Controlbar_Item * elm_controlbar_first_item_get(Evas_Object * obj)
3291 Widget_Data * wd = elm_widget_data_get(obj);
3292 if (!wd || !wd->items)
3294 return eina_list_data_get(wd->items);
3300 * @param obj The controlbar object
3301 * @return The item of controlbar
3303 * @ingroup Controlbar
3305 EAPI Elm_Controlbar_Item * elm_controlbar_last_item_get(Evas_Object * obj)
3309 Widget_Data * wd = elm_widget_data_get(obj);
3310 if (!wd || !wd->items)
3312 return eina_list_data_get(eina_list_last(wd->items));
3318 * @param obj The controlbar object
3319 * @return The list of the items
3321 * @ingroup Controlbar
3323 EAPI Eina_List * elm_controlbar_items_get(Evas_Object * obj)
3327 Widget_Data * wd = elm_widget_data_get(obj);
3328 if (!wd || !wd->items)
3334 * Get the previous item
3336 * @param it The item of controlbar
3337 * @return The previous item of the parameter item
3339 * @ingroup Controlbar
3341 EAPI Elm_Controlbar_Item * elm_controlbar_item_prev(Elm_Controlbar_Item *
3346 Elm_Controlbar_Item * item;
3347 if (it->obj == NULL)
3349 Widget_Data * wd = elm_widget_data_get(it->obj);
3350 if (!wd || !wd->items)
3352 EINA_LIST_FOREACH(wd->items, l, item)
3356 l = eina_list_prev(l);
3359 return eina_list_data_get(l);
3368 * @param obj The controlbar object
3369 * @return The next item of the parameter item
3371 * @ingroup Controlbar
3373 EAPI Elm_Controlbar_Item * elm_controlbar_item_next(Elm_Controlbar_Item *
3378 Elm_Controlbar_Item * item;
3379 if (it->obj == NULL)
3381 Widget_Data * wd = elm_widget_data_get(it->obj);
3382 if (!wd || !wd->items)
3384 EINA_LIST_FOREACH(wd->items, l, item)
3388 l = eina_list_next(l);
3391 return eina_list_data_get(l);
3398 elm_controlbar_edit_start(Evas_Object * obj)
3400 printf("\n==================================\n");
3401 printf("%s\n", __func__);
3402 printf("==================================\n");
3403 printf("This API is just for test.\n");
3404 printf("Please don't use it!!\n");
3405 printf("Thank you.\n");
3406 printf("==================================\n");
3411 fprintf(stderr, "Invalid argument: controlbar object is NULL\n");
3414 wd = elm_widget_data_get(obj);
3417 fprintf(stderr, "Cannot get smart data\n");
3420 edje_object_signal_emit(wd->edit_box, "elm,state,show,edit_box", "elm");
3421 wd->edit_mode = EINA_TRUE;
3425 * Set the visible status of item in bar
3427 * @param it The item of controlbar
3428 * @param bar EINA_TRUE or EINA_FALSE
3430 * @ingroup Controlbar
3433 elm_controlbar_item_visible_set(Elm_Controlbar_Item * it, Eina_Bool visible)
3436 if (it->obj == NULL)
3438 Widget_Data * wd = elm_widget_data_get(it->obj);
3443 item_visible_set(it, visible);
3447 * Get the result which or not item is visible in bar
3449 * @param it The item of controlbar
3450 * @return EINA_TRUE or EINA_FALSE
3452 * @ingroup Controlbar
3455 elm_controlbar_item_visible_get(Elm_Controlbar_Item * it)
3457 if(!it) return EINA_FALSE;
3459 if (it->obj == NULL)
3461 Widget_Data * wd = elm_widget_data_get(it->obj);
3472 elm_controlbar_item_editable_set(Elm_Controlbar_Item * it, Eina_Bool editable)
3474 Evas_Object * color;
3479 if(it->editable == editable) return;
3481 it->editable = editable;
3486 (Evas_Object *) edje_object_part_object_get(_EDJ(it->edit_item),
3487 "elm.item.uneditable.color");
3489 evas_object_color_get(color, &r, &g, &b, &a);
3490 evas_object_color_set(it->edit_item, r, g, b, a);
3497 * @param it The item of controlbar
3498 * @param bar EINA_TRUE or EINA_FALSE
3500 * @ingroup Controlbar
3503 elm_controlbar_item_disable_set(Elm_Controlbar_Item * it, Eina_Bool disable)
3507 if(it->disable == disable) return;
3509 it->disable = disable;
3513 item_color_set(it, "elm.item.disable.color");
3517 item_color_set(it, "elm.item.default.color");
3522 elm_controlbar_view_set(Evas_Object * obj, Evas_Object * view)
3524 printf("\n==================================\n");
3525 printf("%s\n", __func__);
3526 printf("==================================\n");
3527 printf("This API is just for test.\n");
3528 printf("Please don't use it!!\n");
3529 printf("Thank you.\n");
3530 printf("==================================\n");
3535 fprintf(stderr, "Invalid argument: controlbar object is NULL\n");
3538 wd = elm_widget_data_get(obj);
3541 fprintf(stderr, "Cannot get smart data\n");
3544 wd->view_content = view;
3545 //edje_object_part_swallow(wd->view, "elm.swallow.view", wd->view_content);
3546 elm_layout_content_set(wd->view, "elm.swallow.view", wd->view_content);
3550 * Set the view of the item
3552 * @param it The item of controlbar
3553 * @param view The view for the item
3555 * @ingroup Controlbar
3558 elm_controlbar_item_view_set(Elm_Controlbar_Item *it, Evas_Object * view)
3566 * Get the view of the item
3568 * @param it The item of controlbar
3569 * @return The view for the item
3571 * @ingroup Controlbar
3574 elm_controlbar_item_view_get(Elm_Controlbar_Item *it)
3576 if(!it) return NULL;
3582 * Set the mode of the controlbar
3584 * @param obj The object of the controlbar
3585 * @param mode The mode of the controlbar
3587 * @ingroup Controlbar
3590 elm_controlbar_mode_set(Evas_Object *obj, int mode)
3595 fprintf(stderr, "Invalid argument: controlbar object is NULL\n");
3598 wd = elm_widget_data_get(obj);
3601 fprintf(stderr, "Cannot get smart data\n");
3605 if(wd->mode == mode) return;
3611 case ELM_CONTROLBAR_MODE_DEFAULT:
3612 edje_object_signal_emit(wd->edje, "elm,state,default", "elm");
3614 case ELM_CONTROLBAR_MODE_TRANSLUCENCE:
3615 elm_controlbar_alpha_set(obj, 85);
3617 case ELM_CONTROLBAR_MODE_TRANSPARENCY:
3618 elm_controlbar_alpha_set(obj, 0);
3620 case ELM_CONTROLBAR_MODE_LARGE:
3621 edje_object_signal_emit(wd->edje, "elm,state,large", "elm");
3623 case ELM_CONTROLBAR_MODE_SMALL:
3624 edje_object_signal_emit(wd->edje, "elm,state,small", "elm");
3626 case ELM_CONTROLBAR_MODE_LEFT:
3627 wd->selected_box = wd->focused_box_left;
3628 wd->selected_signal = eina_stringshare_add("elm,state,selected_left");
3629 wd->pressed_signal = eina_stringshare_add("elm,state,pressed_left");
3630 edje_object_signal_emit(wd->edje, "elm,state,left", "elm");
3633 case ELM_CONTROLBAR_MODE_RIGHT:
3634 wd->selected_box = wd->focused_box_right;
3635 wd->selected_signal = eina_stringshare_add("elm,state,selected_right");
3636 wd->pressed_signal = eina_stringshare_add("elm,state,pressed_right");
3637 edje_object_signal_emit(wd->edje, "elm,state,right", "elm");
3644 wd->selected_box = wd->focused_box;
3645 wd->selected_signal = eina_stringshare_add("elm,state,selected");
3646 wd->pressed_signal = eina_stringshare_add("elm,state,pressed");
3651 * Set the alpha of the controlbar
3653 * @param obj The object of the controlbar
3654 * @param alpha The alpha value of the controlbar (0-100)
3656 * @ingroup Controlbar
3659 elm_controlbar_alpha_set(Evas_Object *obj, int alpha)
3665 fprintf(stderr, "Invalid argument: controlbar object is NULL\n");
3668 wd = elm_widget_data_get(obj);
3671 fprintf(stderr, "Cannot get smart data\n");
3677 else if(alpha > 100)
3682 evas_object_color_get(wd->bg, &r, &g, &b, NULL);
3683 evas_object_color_set(wd->bg, r, g, b, (int)(255 * wd->alpha / 100));
3688 * Set auto-align mode of the controlbar(It's not prepared yet)
3689 * If you set the auto-align and add items more than 5,
3690 * the "more" item will be made and the items more than 5 will be unvisible.
3692 * @param obj The object of the controlbar
3693 * @param auto_align The dicision that the controlbar use the auto-align
3695 * @ingroup Controlbar
3698 elm_controlbar_item_auto_align_set(Evas_Object *obj, Eina_Bool auto_align)
3701 Elm_Controlbar_Item *item;
3706 fprintf(stderr, "Invalid argument: controlbar object is NULL\n");
3709 wd = elm_widget_data_get(obj);
3712 fprintf(stderr, "Cannot get smart data\n");
3716 if(wd->auto_align == auto_align) return;
3720 if(check_bar_item_number(wd) >= 5 && !wd->more_item)
3723 EINA_LIST_FOREACH(wd->items, l, item)
3725 if(elm_controlbar_item_visible_get(item))
3728 item_delete_in_bar(item);
3731 item = elm_controlbar_last_item_get(obj);
3732 while(!elm_controlbar_item_visible_get(item)){
3733 item = elm_controlbar_item_prev(item);
3735 create_more_item(wd, item->style);
3743 if(wd->more_item->view)
3744 evas_object_del(wd->more_item->view);
3745 wd->items = eina_list_remove(wd->items, wd->more_item);
3746 eina_stringshare_del(wd->more_item->text);
3747 if (wd->more_item->icon)
3748 evas_object_del(wd->more_item->icon);
3749 if (wd->more_item->base)
3750 evas_object_del(wd->more_item->base);
3751 if (wd->more_item->base_item)
3752 evas_object_del(wd->more_item->base_item);
3753 if (wd->more_item->edit)
3754 evas_object_del(wd->more_item->edit);
3755 if (wd->more_item->edit_item)
3756 evas_object_del(wd->more_item->edit_item);
3757 free(wd->more_item);
3758 wd->more_item = NULL;
3760 // make all item is visible
3762 EINA_LIST_FOREACH(wd->items, l, item)
3764 if(!elm_controlbar_item_visible_get(item))
3765 item_insert_in_bar(item, i);
3770 wd->auto_align = auto_align;
3775 * Set the vertical mode of the controlbar
3777 * @param obj The object of the controlbar
3778 * @param vertical The vertical mode of the controlbar (TRUE = vertical, FALSE = horizontal)
3780 * @ingroup Controlbar
3783 elm_controlbar_vertical_set(Evas_Object *obj, Eina_Bool vertical)
3788 fprintf(stderr, "Invalid argument: controlbar object is NULL\n");
3791 wd = elm_widget_data_get(obj);
3794 fprintf(stderr, "Cannot get smart data\n");
3798 if(wd->vertical == vertical)
3800 wd->vertical = vertical;
3802 if(check_bar_item_number(wd) > 1)
3809 init_animation(void *data)
3812 Elm_Controlbar_Item * item;
3813 Widget_Data * wd = (Widget_Data *)data;
3815 wd->visible_items = eina_list_free(wd->visible_items);
3816 EINA_LIST_FOREACH(wd->items, l, item)
3820 wd->visible_items = eina_list_append(wd->visible_items, item->base);
3825 wd->ani_func(wd->ani_data, wd->object, wd->visible_items);
3827 return ECORE_CALLBACK_CANCEL;
3831 elm_controlbar_animation_set(Evas_Object *obj, void (*func) (void *data, Evas_Object *obj, void *event_info), void *data)
3833 printf("\n==================================\n");
3834 printf("%s\n", __func__);
3835 printf("==================================\n");
3836 printf("This API is just for test.\n");
3837 printf("Please don't use it!!\n");
3838 printf("Thank you.\n");
3839 printf("==================================\n");
3844 fprintf(stderr, "Invalid argument: controlbar object is NULL\n");
3847 wd = elm_widget_data_get(obj);
3850 fprintf(stderr, "Cannot get smart data\n");
3856 wd->init_animation = EINA_TRUE;
3858 wd->ani_func = func;
3859 wd->ani_data = data;
3861 ecore_idler_add(init_animation, wd);
3866 elm_controlbar_item_animation_set(Evas_Object *obj, Eina_Bool auto_animation, Eina_Bool selected_animation)
3868 printf("\n==================================\n");
3869 printf("%s\n", __func__);
3870 printf("==================================\n");
3871 printf("This API is just for test.\n");
3872 printf("Please don't use it!!\n");
3873 printf("Thank you.\n");
3874 printf("==================================\n");
3879 fprintf(stderr, "Invalid argument: controlbar object is NULL\n");
3882 wd = elm_widget_data_get(obj);
3885 fprintf(stderr, "Cannot get smart data\n");
3889 if(auto_animation && !wd->effect_timer)
3891 wd->effect_timer = ecore_timer_add(1.5, item_animation_effect, wd);
3895 if(wd->effect_timer) ecore_timer_del(wd->effect_timer);
3896 wd->effect_timer = NULL;
3899 wd->selected_animation = selected_animation;
3903 elm_controlbar_view_animation_set(Evas_Object *obj, const char *hide, const char *show)
3908 fprintf(stderr, "Invalid argument: controlbar object is NULL\n");
3911 wd = elm_widget_data_get(obj);
3914 fprintf(stderr, "Cannot get smart data\n");
3918 wd->view_hide = eina_stringshare_add(hide);
3919 wd->view_show = eina_stringshare_add(show);