Emit different signals when changing states forward or backward.

This is used to perform diferent animations when going forward or
backward.

By:  Otavio Pontes <otavio@profusion.mobi>



SVN revision: 54190
This commit is contained in:
Bruno Dilly 2010-11-05 18:23:59 +00:00
parent 8538a6fe3f
commit 90d1ad6b4c
2 changed files with 59 additions and 20 deletions

View File

@ -10437,6 +10437,16 @@ collections {
} }
} }
} }
program { name: "label_set,animation,forward";
signal: "elm,state,label_set,forward";
source: "elm";
after: "label_set,animation";
}
program { name: "label_set,animation,backward";
signal: "elm,state,label_set,backward";
source: "elm";
after: "label_set,animation";
}
program { name: "label_set,animation"; program { name: "label_set,animation";
signal: "elm,state,label_set"; signal: "elm,state,label_set";
source: "elm"; source: "elm";
@ -10456,6 +10466,16 @@ collections {
target: "elm.text.clipper"; target: "elm.text.clipper";
target: "elm.text_new.clipper"; target: "elm.text_new.clipper";
} }
program { name: "icon_set,animation,forward";
signal: "elm,state,icon_set,forward";
source: "elm";
after: "icon_set,animation";
}
program { name: "icon_set,animation,backward";
signal: "elm,state,icon_set,backward";
source: "elm";
after: "icon_set,animation";
}
program { name: "icon_set,animation"; program { name: "icon_set,animation";
signal: "elm,state,icon_set"; signal: "elm,state,icon_set";
source: "elm"; source: "elm";

View File

@ -69,7 +69,8 @@ static void _resize(void *data, Evas *e, Evas_Object *obj, void *event_info);
static void _menu_move_resize(void *data, Evas *e, Evas_Object *obj, void *event_info); static void _menu_move_resize(void *data, Evas *e, Evas_Object *obj, void *event_info);
static void _menu_hide(void *data, Evas *e, Evas_Object *obj, void *event_info); static void _menu_hide(void *data, Evas *e, Evas_Object *obj, void *event_info);
static void _layout(Evas_Object *o, Evas_Object_Box_Data *priv, void *data); static void _layout(Evas_Object *o, Evas_Object_Box_Data *priv, void *data);
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); 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);
static void _item_label_set(Elm_Toolbar_Item *item, const char *label, const char *signal);
static Eina_Bool static Eina_Bool
_item_icon_set(Evas_Object *icon_obj, const char *type, const char *icon) _item_icon_set(Evas_Object *icon_obj, const char *type, const char *icon)
@ -839,11 +840,21 @@ elm_toolbar_item_state_set(Elm_Toolbar_Item *it, Elm_Toolbar_Item_State *state)
if (next_state == it->current_state) return EINA_TRUE; if (next_state == it->current_state) return EINA_TRUE;
it_state = eina_list_data_get(next_state);
if (eina_list_data_find(it->current_state, state))
{
_item_label_set(it, it_state->label, "elm,state,label_set,forward");
_elm_toolbar_item_icon_obj_set(obj, it, it_state->icon, it_state->icon_str,
wd->icon_size, "elm,state,icon_set,forward");
}
else
{
_item_label_set(it, it_state->label, "elm,state,label_set,backward");
_elm_toolbar_item_icon_obj_set(obj, it, it_state->icon, it_state->icon_str,
wd->icon_size, "elm,state,icon_set,backward");
}
it->current_state = next_state; it->current_state = next_state;
it_state = eina_list_data_get(it->current_state);
elm_toolbar_item_label_set(it, it_state->label);
_elm_toolbar_item_icon_obj_set(obj, it, it_state->icon, it_state->icon_str,
wd->icon_size);
return EINA_TRUE; return EINA_TRUE;
} }
@ -1266,16 +1277,8 @@ _elm_toolbar_item_label_set_cb (void *data, Evas_Object *obj, const char *emissi
edje_object_signal_emit (item->base.view, "elm,state,label,reset", "elm"); edje_object_signal_emit (item->base.view, "elm,state,label,reset", "elm");
} }
/** static void
* Set the label associated with @p item. _item_label_set(Elm_Toolbar_Item *item, const char *label, const char *signal)
*
* @param item The toolbar item
* @param label The label of @p item
*
* @ingroup Toolbar
*/
EAPI void
elm_toolbar_item_label_set(Elm_Toolbar_Item *item, const char *label)
{ {
const char *s; const char *s;
@ -1287,7 +1290,7 @@ elm_toolbar_item_label_set(Elm_Toolbar_Item *item, const char *label)
if ((s) && (atoi(s))) if ((s) && (atoi(s)))
{ {
edje_object_part_text_set(item->base.view, "elm.text_new", item->label); edje_object_part_text_set(item->base.view, "elm.text_new", item->label);
edje_object_signal_emit (item->base.view, "elm,state,label_set", "elm"); edje_object_signal_emit (item->base.view, signal, "elm");
edje_object_signal_callback_add(item->base.view, edje_object_signal_callback_add(item->base.view,
"elm,state,label_set,done", "elm", "elm,state,label_set,done", "elm",
_elm_toolbar_item_label_set_cb, item); _elm_toolbar_item_label_set_cb, item);
@ -1296,6 +1299,20 @@ elm_toolbar_item_label_set(Elm_Toolbar_Item *item, const char *label)
_elm_toolbar_item_label_update(item); _elm_toolbar_item_label_update(item);
} }
/**
* Set the label associated with @p item.
*
* @param item The toolbar item
* @param label The label of @p item
*
* @ingroup Toolbar
*/
EAPI void
elm_toolbar_item_label_set(Elm_Toolbar_Item *item, const char *label)
{
_item_label_set(item, label, "elm,state,label_set");
}
static void static void
_elm_toolbar_item_icon_update(Elm_Toolbar_Item *item) _elm_toolbar_item_icon_update(Elm_Toolbar_Item *item)
{ {
@ -1393,7 +1410,7 @@ _elm_toolbar_item_icon_set_cb (void *data, Evas_Object *obj, const char *emissio
} }
static void 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) _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; Evas_Object *old_icon;
int ms = 0; int ms = 0;
@ -1427,7 +1444,7 @@ _elm_toolbar_item_icon_obj_set(Evas_Object *obj, Elm_Toolbar_Item *item, Evas_Ob
} }
edje_object_part_swallow(item->base.view, "elm.swallow.icon_new", edje_object_part_swallow(item->base.view, "elm.swallow.icon_new",
item->icon); item->icon);
edje_object_signal_emit (item->base.view, "elm,state,icon_set", "elm"); edje_object_signal_emit (item->base.view, signal, "elm");
edje_object_signal_callback_add(item->base.view, edje_object_signal_callback_add(item->base.view,
"elm,state,icon_set,done", "elm", "elm,state,icon_set,done", "elm",
_elm_toolbar_item_icon_set_cb, item); _elm_toolbar_item_icon_set_cb, item);
@ -1460,10 +1477,12 @@ elm_toolbar_item_icon_set(Elm_Toolbar_Item *item, const char *icon)
icon_obj = elm_icon_add(obj); icon_obj = elm_icon_add(obj);
if (!icon_obj) return; if (!icon_obj) return;
if (_item_icon_set(icon_obj, "toolbar/", icon)) if (_item_icon_set(icon_obj, "toolbar/", icon))
_elm_toolbar_item_icon_obj_set(obj, item, icon_obj, icon, wd->icon_size); _elm_toolbar_item_icon_obj_set(obj, item, icon_obj, icon, wd->icon_size,
"elm,state,icon_set");
else else
{ {
_elm_toolbar_item_icon_obj_set(obj, item, NULL, NULL, 0); _elm_toolbar_item_icon_obj_set(obj, item, NULL, NULL, 0,
"elm,state,icon_set");
evas_object_del(icon_obj); evas_object_del(icon_obj);
} }
} }