enlightenment-module-engage/src/ng_item.c

224 lines
5.0 KiB
C

#include "e_mod_main.h"
void
ngi_item_init_defaults(Ngi_Item *it)
{
Ng *ng = it->box->ng;
int ok = 0;
it->obj = edje_object_add(ng->evas);
switch(ng->cfg->orient)
{
case E_GADCON_ORIENT_BOTTOM:
ok = ngi_object_theme_set(it->obj, "e/modules/engage/icon_bottom");
break;
case E_GADCON_ORIENT_TOP:
ok = ngi_object_theme_set(it->obj, "e/modules/engage/icon_top");
break;
case E_GADCON_ORIENT_LEFT:
ok = ngi_object_theme_set(it->obj, "e/modules/engage/icon_left");
break;
case E_GADCON_ORIENT_RIGHT:
ok = ngi_object_theme_set(it->obj, "e/modules/engage/icon_right");
break;
}
/* TODO remove fallback */
if (!ok)
{
if (!e_theme_edje_object_set(it->obj, "base/theme/modules/engage", "e/modules/engage/icon"))
edje_object_file_set(it->obj, ngi_config->theme_path, "e/modules/engage/icon");
}
it->over = edje_object_add(ng->evas);
switch(ng->cfg->orient)
{
case E_GADCON_ORIENT_BOTTOM:
ok = ngi_object_theme_set(it->over, "e/modules/engage/icon_over_bottom");
break;
case E_GADCON_ORIENT_TOP:
ok = ngi_object_theme_set(it->over, "e/modules/engage/icon_over_top");
break;
case E_GADCON_ORIENT_LEFT:
ok = ngi_object_theme_set(it->over, "e/modules/engage/icon_over_left");
break;
case E_GADCON_ORIENT_RIGHT:
ok = ngi_object_theme_set(it->over, "e/modules/engage/icon_over_right");
break;
}
if (!ok)
{
if (!e_theme_edje_object_set(it->over, "base/theme/modules/engage", "e/modules/engage/icon_overlay"))
edje_object_file_set(it->over, ngi_config->theme_path, "e/modules/engage/icon_overlay");
}
evas_object_layer_set(it->over, 9999);
evas_object_show(it->over);
evas_object_show(it->obj);
}
void
ngi_item_show(Ngi_Item *it, int instant)
{
Ng *ng = it->box->ng;
evas_object_show(it->obj);
evas_object_show(it->over);
ngi_item_signal_emit(it, "e,state,item,show");
if (eina_list_data_find(ng->items_remove, it))
ng->items_remove = eina_list_remove(ng->items_remove, it);
if (instant)
{
it->scale = 1.0;
ngi_animate(ng);
return;
}
it->start_time = ecore_time_get();
it->scale = 0.0;
ng->items_show = eina_list_append(ng->items_show, it);
ngi_animate(ng);
}
void
ngi_item_remove(Ngi_Item *it)
{
if (!it) return;
Ng *ng = it->box->ng;
double now = ecore_time_get();
edje_object_signal_emit(it->obj, "e,state,item,hide", "e");
if (now - it->start_time < ng->opt.fade_duration)
it->start_time = now - (ng->opt.fade_duration - (now - it->start_time));
else
it->start_time = now;
it->delete_me = 1;
if (eina_list_data_find(ng->items_show, it))
ng->items_show = eina_list_remove(ng->items_show, it);
if (!eina_list_data_find(ng->items_remove, it))
ng->items_remove = eina_list_append(ng->items_remove, it);
if (it == ng->item_active)
ng->item_active = NULL;
if (it == ng->item_drag)
ng->item_drag = NULL;
ngi_animate(ng);
}
void
ngi_item_free(Ngi_Item *it)
{
Ng *ng = it->box->ng;
if (it == ng->item_active)
ng->item_active = NULL;
if (it == ng->item_drag)
ng->item_drag = NULL;
if (eina_list_data_find(ng->items_remove, it))
ng->items_remove = eina_list_remove(ng->items_remove, it);
if (eina_list_data_find(ng->items_show, it))
ng->items_show = eina_list_remove(ng->items_show, it);
it->box->items = eina_list_remove(it->box->items, it);
if (it->obj)
evas_object_del(it->obj);
if (it->over)
evas_object_del(it->over);
if (it->label)
eina_stringshare_del(it->label);
if (it->cb_free) it->cb_free(it);
}
void
ngi_item_label_set(Ngi_Item *it, const char *label)
{
if (it->label)
eina_stringshare_del(it->label);
if (label)
it->label = eina_stringshare_add(label);
else
it->label = NULL;
}
void
ngi_item_signal_emit(Ngi_Item *it, char *sig)
{
if (it->obj)
edje_object_signal_emit(it->obj, sig, "e");
if (it->over)
edje_object_signal_emit(it->over, sig, "e");
}
void
ngi_item_mouse_in(Ngi_Item *it)
{
if (!it || it->delete_me) return;
ngi_item_signal_emit(it,"e,state,mouse,in");
if (it->box->ng->cfg->mouse_over_anim)
ngi_item_signal_emit(it,"e,state,animate,in");
if (it->cb_mouse_in)
it->cb_mouse_in(it);
}
void
ngi_item_mouse_out(Ngi_Item *it)
{
if (!it || it->delete_me) return;
ngi_item_signal_emit(it,"e,state,mouse,out");
if (it->box->ng->cfg->mouse_over_anim)
ngi_item_signal_emit(it,"e,state,animate,out");
if (it->cb_mouse_out)
it->cb_mouse_out(it);
}
void
ngi_item_mouse_down(Ngi_Item *it, Ecore_Event_Mouse_Button *ev)
{
if (!it || it->delete_me) return;
ngi_item_signal_emit(it,"e,state,mouse,down");
if (it->cb_mouse_down)
it->cb_mouse_down(it, ev);
}
void
ngi_item_mouse_up(Ngi_Item *it, Ecore_Event_Mouse_Button *ev)
{
if (!it || it->delete_me) return;
ngi_item_signal_emit(it,"e,state,mouse,up");
if (it->cb_mouse_up)
it->cb_mouse_up(it, ev);
}