From a9a210c02b708a2f47cfaed8db1567deb43a2827 Mon Sep 17 00:00:00 2001 From: discomfitor Date: Thu, 1 Mar 2012 19:14:46 +0000 Subject: [PATCH] revert 68495 and all subsequent "toolbar refactoring" (rewriting) commits because they broke toolbar use for everyone. in the future, rewrites like this MUST be submitted as PATCHES, not direct commits. this allows application authors to continue having fun writing code without suddenly having broken widgets. I have left the newly committed edc, as it does not seem likely to cause issues on its own. git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/elementary@68586 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33 --- src/lib/elm_toolbar.c | 180 ++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 144 insertions(+), 36 deletions(-) diff --git a/src/lib/elm_toolbar.c b/src/lib/elm_toolbar.c index 52717f9..e6017a4 100644 --- a/src/lib/elm_toolbar.c +++ b/src/lib/elm_toolbar.c @@ -157,7 +157,7 @@ _item_unselect(Elm_Toolbar_Item *item) if (!wd) return; item->selected = EINA_FALSE; wd->selected_item = NULL; - elm_widget_signal_emit(VIEW(item), "elm,state,unselected", "elm"); + edje_object_signal_emit(VIEW(item), "elm,state,unselected", "elm"); elm_widget_signal_emit(item->icon, "elm,state,unselected", "elm"); } @@ -188,7 +188,7 @@ _item_select(Elm_Toolbar_Item *it) it->selected = EINA_TRUE; wd->selected_item = it; - elm_widget_signal_emit(VIEW(it), "elm,state,selected", "elm"); + edje_object_signal_emit(VIEW(it), "elm,state,selected", "elm"); elm_widget_signal_emit(it->icon, "elm,state,selected", "elm"); _item_show(it); } @@ -298,7 +298,7 @@ _del_hook(Evas_Object *obj) static void _mirrored_set_item(Evas_Object *obj __UNUSED__, Elm_Toolbar_Item *it, Eina_Bool mirrored) { - elm_widget_mirrored_set(VIEW(it), mirrored); + edje_object_mirrored_set(VIEW(it), mirrored); elm_widget_mirrored_set(it->o_menu, mirrored); } @@ -308,22 +308,20 @@ _theme_hook_item(Evas_Object *obj, Elm_Toolbar_Item *it, double scale, int icon_ Evas_Object *view = VIEW(it); Evas_Coord mw, mh; const char *style = elm_widget_style_get(obj); - char buf[256]; _mirrored_set_item(obj, it, elm_widget_mirrored_get(obj)); - elm_widget_scale_set(view, scale); + edje_object_scale_set(view, scale); if (!it->separator) { - snprintf(buf, sizeof(buf), "toolbar/%s", style); - elm_widget_style_set(view, buf); + _elm_theme_object_set(obj, view, "toolbar", "item", style); if (it->selected) { - elm_widget_signal_emit(view, "elm,state,selected", "elm"); + edje_object_signal_emit(view, "elm,state,selected", "elm"); elm_widget_signal_emit(it->icon, "elm,state,selected", "elm"); } if (elm_widget_item_disabled_get(it)) { - elm_widget_signal_emit(view, "elm,state,disabled", "elm"); + edje_object_signal_emit(view, "elm,state,disabled", "elm"); elm_widget_signal_emit(it->icon, "elm,state,disabled", "elm"); } if (it->icon) @@ -333,19 +331,20 @@ _theme_hook_item(Evas_Object *obj, Elm_Toolbar_Item *it, double scale, int icon_ ms = ((double)icon_size * scale); evas_object_size_hint_min_set(it->icon, ms, ms); evas_object_size_hint_max_set(it->icon, ms, ms); - elm_object_part_content_set(view, "icon", it->icon); + edje_object_part_swallow(view, "elm.swallow.icon", it->icon); } - elm_object_text_set(view, it->label); + edje_object_part_text_set(view, "elm.text", it->label); } else _elm_theme_object_set(obj, view, "toolbar", "separator", style); + mw = mh = -1; if (!it->separator) - { - evas_object_size_hint_min_get(view, &mw, &mh); - elm_coords_finger_size_adjust(1, &mw, 1, &mh); - evas_object_size_hint_min_set(view, mw, mh); - } + elm_coords_finger_size_adjust(1, &mw, 1, &mh); + edje_object_size_min_restricted_calc(view, &mw, &mh, mw, mh); + if (!it->separator) + elm_coords_finger_size_adjust(1, &mw, 1, &mh); + evas_object_size_hint_min_set(view, mw, mh); } static void @@ -705,7 +704,7 @@ _select_filter(Elm_Toolbar_Item *it, Evas_Object *obj __UNUSED__, const char *em button = atoi(emission + sizeof("mouse,clicked,") - 1); if (button == 1) return; /* regular left click event */ snprintf(buf, sizeof(buf), "elm,action,click,%d", button); - elm_widget_signal_emit(VIEW(it), buf, "elm"); + edje_object_signal_emit(VIEW(it), buf, "elm"); } static void @@ -762,7 +761,7 @@ static void _mouse_in(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__) { Elm_Toolbar_Item *it = data; - elm_widget_signal_emit(VIEW(it), "elm,state,highlighted", "elm"); + edje_object_signal_emit(VIEW(it), "elm,state,highlighted", "elm"); elm_widget_signal_emit(it->icon, "elm,state,highlighted", "elm"); } @@ -770,7 +769,7 @@ static void _mouse_out(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__) { Elm_Toolbar_Item *it = data; - elm_widget_signal_emit(VIEW(it), "elm,state,unhighlighted", "elm"); + edje_object_signal_emit(VIEW(it), "elm,state,unhighlighted", "elm"); elm_widget_signal_emit(it->icon, "elm,state,unhighlighted", "elm"); } @@ -839,7 +838,6 @@ _item_new(Evas_Object *obj, const char *icon, const char *label, Evas_Smart_Cb f Evas_Object *icon_obj; Evas_Coord mw, mh; Elm_Toolbar_Item *it; - char buf[256]; icon_obj = elm_icon_add(obj); elm_icon_order_lookup_set(icon_obj, wd->lookup_order); @@ -862,7 +860,7 @@ _item_new(Evas_Object *obj, const char *icon, const char *label, Evas_Smart_Cb f it->func = func; it->separator = EINA_FALSE; it->base.data = data; - VIEW(it) = elm_button_add(obj); + VIEW(it) = edje_object_add(evas_object_evas_get(obj)); _elm_access_item_register(&it->base, VIEW(it)); _elm_access_text_set(_elm_access_item_get(&it->base), ELM_ACCESS_TYPE, E_("Tool Item")); @@ -883,15 +881,15 @@ _item_new(Evas_Object *obj, const char *icon, const char *label, Evas_Smart_Cb f evas_object_del(icon_obj); } - snprintf(buf, sizeof(buf), "toolbar/%s", elm_widget_style_get(obj)); - elm_widget_style_set(VIEW(it), buf); - elm_widget_signal_callback_add(VIEW(it), "elm,action,click", "elm", + _elm_theme_object_set(obj, VIEW(it), "toolbar", "item", + elm_widget_style_get(obj)); + edje_object_signal_callback_add(VIEW(it), "elm,action,click", "elm", _select, it); - elm_widget_signal_callback_add(VIEW(it), "mouse,clicked,*", "*", + edje_object_signal_callback_add(VIEW(it), "mouse,clicked,*", "*", (Edje_Signal_Cb)_select_filter, it); - elm_widget_signal_callback_add(VIEW(it), "elm,mouse,in", "elm", + edje_object_signal_callback_add(VIEW(it), "elm,mouse,in", "elm", _mouse_in, it); - elm_widget_signal_callback_add(VIEW(it), "elm,mouse,out", "elm", + edje_object_signal_callback_add(VIEW(it), "elm,mouse,out", "elm", _mouse_out, it); evas_object_event_callback_add(VIEW(it), EVAS_CALLBACK_MOUSE_DOWN, (Evas_Object_Event_Cb)_mouse_down, it); @@ -905,12 +903,14 @@ _item_new(Evas_Object *obj, const char *icon, const char *label, Evas_Smart_Cb f ms = ((double)wd->icon_size * _elm_config->scale); evas_object_size_hint_min_set(it->icon, ms, ms); evas_object_size_hint_max_set(it->icon, ms, ms); - elm_object_part_content_set(VIEW(it), "icon", it->icon); + edje_object_part_swallow(VIEW(it), "elm.swallow.icon", it->icon); evas_object_show(it->icon); elm_widget_sub_object_add(obj, it->icon); } - elm_object_text_set(VIEW(it), it->label); - evas_object_size_hint_min_get(VIEW(it), &mw, &mh); + edje_object_part_text_set(VIEW(it), "elm.text", it->label); + mw = mh = -1; + elm_coords_finger_size_adjust(1, &mw, 1, &mh); + edje_object_size_min_restricted_calc(VIEW(it), &mw, &mh, mw, mh); elm_coords_finger_size_adjust(1, &mw, 1, &mh); if (wd->vertical) { @@ -932,20 +932,111 @@ _item_new(Evas_Object *obj, const char *icon, const char *label, Evas_Smart_Cb f } static void -_item_label_set(Elm_Toolbar_Item *item, const char *label, const char *signal __UNUSED__) +_elm_toolbar_item_label_update(Elm_Toolbar_Item *item) { + Evas_Coord mw = -1, mh = -1; + Widget_Data *wd = elm_widget_data_get(WIDGET(item)); + edje_object_part_text_set(VIEW(item), "elm.text", item->label); + + elm_coords_finger_size_adjust(1, &mw, 1, &mh); + edje_object_size_min_restricted_calc(VIEW(item), &mw, &mh, mw, mh); + elm_coords_finger_size_adjust(1, &mw, 1, &mh); + if (wd->vertical) + { + evas_object_size_hint_weight_set(VIEW(item), EVAS_HINT_EXPAND, -1.0); + evas_object_size_hint_align_set(VIEW(item), EVAS_HINT_FILL, 0.5); + } + else + { + evas_object_size_hint_weight_set(VIEW(item), -1.0, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(VIEW(item), 0.5, EVAS_HINT_FILL); + } + evas_object_size_hint_min_set(VIEW(item), mw, mh); +} + +static void +_elm_toolbar_item_label_set_cb (void *data, Evas_Object *obj, const char *emission, const char *source) +{ + Elm_Toolbar_Item *item = data; + _elm_toolbar_item_label_update(item); + edje_object_signal_callback_del(obj, emission, source, + _elm_toolbar_item_label_set_cb); + edje_object_signal_emit (VIEW(item), "elm,state,label,reset", "elm"); +} + +static void +_item_label_set(Elm_Toolbar_Item *item, const char *label, const char *signal) +{ + const char *s; + if ((label) && (item->label) && (!strcmp(label, item->label))) return; eina_stringshare_replace(&item->label, label); - elm_object_text_set(VIEW(item), label); - + s = edje_object_data_get(VIEW(item), "transition_animation_on"); + if ((s) && (atoi(s))) + { + edje_object_part_text_set(VIEW(item), "elm.text_new", item->label); + edje_object_signal_emit (VIEW(item), signal, "elm"); + edje_object_signal_callback_add(VIEW(item), + "elm,state,label_set,done", "elm", + _elm_toolbar_item_label_set_cb, item); + } + else + _elm_toolbar_item_label_update(item); _resize(WIDGET(item), NULL, NULL, NULL); } static void -_elm_toolbar_item_icon_obj_set(Evas_Object *obj, Elm_Toolbar_Item *item, Evas_Object *icon_obj, const char *icon_str, double icon_size, const char *signal __UNUSED__) +_elm_toolbar_item_icon_update(Elm_Toolbar_Item *item) { + Elm_Toolbar_Item_State *it_state; + Eina_List *l; + Evas_Coord mw = -1, mh = -1; + Widget_Data *wd = elm_widget_data_get(WIDGET(item)); + Evas_Object *old_icon = edje_object_part_swallow_get(VIEW(item), + "elm.swallow.icon"); + elm_widget_sub_object_del(VIEW(item), old_icon); + evas_object_hide(old_icon); + edje_object_part_swallow(VIEW(item), "elm.swallow.icon", item->icon); + elm_coords_finger_size_adjust(1, &mw, 1, &mh); + edje_object_size_min_restricted_calc(VIEW(item), &mw, &mh, mw, mh); + elm_coords_finger_size_adjust(1, &mw, 1, &mh); + if (wd->vertical) + { + evas_object_size_hint_weight_set(VIEW(item), EVAS_HINT_EXPAND, -1.0); + evas_object_size_hint_align_set(VIEW(item), EVAS_HINT_FILL, 0.5); + } + else + { + evas_object_size_hint_weight_set(VIEW(item), -1.0, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(VIEW(item), 0.5, EVAS_HINT_FILL); + } + evas_object_size_hint_min_set(VIEW(item), mw, mh); + + EINA_LIST_FOREACH(item->states, l, it_state) + { + if (it_state->icon == old_icon) return; + } + evas_object_del(old_icon); +} + +static void +_elm_toolbar_item_icon_set_cb (void *data, Evas_Object *obj, const char *emission, const char *source) +{ + Elm_Toolbar_Item *item = data; + edje_object_part_unswallow(VIEW(item), item->icon); + _elm_toolbar_item_icon_update(item); + edje_object_signal_callback_del(obj, emission, source, + _elm_toolbar_item_icon_set_cb); + edje_object_signal_emit (VIEW(item), "elm,state,icon,reset", "elm"); +} + +static void +_elm_toolbar_item_icon_obj_set(Evas_Object *obj, Elm_Toolbar_Item *item, Evas_Object *icon_obj, const char *icon_str, double icon_size, const char *signal) +{ + Evas_Object *old_icon; int ms = 0; + const char *s; if (icon_str) eina_stringshare_replace(&item->icon_str, icon_str); @@ -963,8 +1054,25 @@ _elm_toolbar_item_icon_obj_set(Evas_Object *obj, Elm_Toolbar_Item *item, Evas_Ob evas_object_show(item->icon); elm_widget_sub_object_add(obj, item->icon); } - elm_object_part_content_set(VIEW(item), "icon", item->icon); - + s = edje_object_data_get(VIEW(item), "transition_animation_on"); + if ((s) && (atoi(s))) + { + old_icon = edje_object_part_swallow_get(VIEW(item), + "elm.swallow.icon_new"); + if (old_icon) + { + elm_widget_sub_object_del(VIEW(item), old_icon); + evas_object_hide(old_icon); + } + edje_object_part_swallow(VIEW(item), "elm.swallow.icon_new", + item->icon); + edje_object_signal_emit (VIEW(item), signal, "elm"); + edje_object_signal_callback_add(VIEW(item), + "elm,state,icon_set,done", "elm", + _elm_toolbar_item_icon_set_cb, item); + } + else + _elm_toolbar_item_icon_update(item); _resize(obj, NULL, NULL, NULL); } -- 2.7.4