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.


SVN revision: 68586
This commit is contained in:
Mike Blumenkrantz 2012-03-01 19:14:46 +00:00
parent 1bde7e2f66
commit 2e4d3a02a9
1 changed files with 144 additions and 36 deletions

View File

@ -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);
}