elementary: add some usefull function around sorted insert.

SVN revision: 60691
This commit is contained in:
Cedric BAIL 2011-06-25 23:20:22 +00:00
parent 4717eea85d
commit 74dd82cf60
2 changed files with 115 additions and 38 deletions

View File

@ -296,6 +296,7 @@ static const Evas_Smart_Cb_Description _signals[] = {
};
static Eina_Compare_Cb _elm_gengrid_item_compare_cb;
static Eina_Compare_Cb _elm_gengrid_item_compare_data_cb;
static Eina_Bool
_event_hook(Evas_Object *obj,
@ -1730,13 +1731,22 @@ _scr_scroll(void *data,
evas_object_smart_callback_call(data, SIG_SCROLL, NULL);
}
static int
_elm_gengrid_item_compare_data(const void *data, const void *data1)
{
const Elm_Gengrid_Item *item = data;
const Elm_Gengrid_Item *item1 = data1;
return _elm_gengrid_item_compare_data_cb(item->base.data, item1->base.data);
}
static int
_elm_gengrid_item_compare(const void *data, const void *data1)
{
Elm_Gengrid_Item *item, *item1;
item = ELM_GENGRID_ITEM_FROM_INLIST(data);
item1 = ELM_GENGRID_ITEM_FROM_INLIST(data1);
return _elm_gengrid_item_compare_cb(item->base.data, item1->base.data);
return _elm_gengrid_item_compare_cb(item, item1);
}
/**
@ -2106,12 +2116,12 @@ elm_gengrid_item_insert_after(Evas_Object *obj,
}
EAPI Elm_Gengrid_Item *
elm_gengrid_item_sorted_insert(Evas_Object *obj,
const Elm_Gengrid_Item_Class *gic,
const void *data,
Eina_Compare_Cb comp,
Evas_Smart_Cb func,
const void *func_data)
elm_gengrid_item_direct_sorted_insert(Evas_Object *obj,
const Elm_Gengrid_Item_Class *gic,
const void *data,
Eina_Compare_Cb comp,
Evas_Smart_Cb func,
const void *func_data)
{
Elm_Gengrid_Item *item;
ELM_CHECK_WIDTYPE(obj, widtype) NULL;
@ -2120,8 +2130,8 @@ elm_gengrid_item_sorted_insert(Evas_Object *obj,
item = _item_create(wd, gic, data, func, func_data);
if (!item) return NULL;
_elm_gengrid_item_compare_cb = comp;
_elm_gengrid_item_compare_cb = comp;
wd->items = eina_inlist_sorted_insert(wd->items, EINA_INLIST_GET(item),
_elm_gengrid_item_compare);
if (wd->calc_job) ecore_job_del(wd->calc_job);
@ -2130,6 +2140,19 @@ elm_gengrid_item_sorted_insert(Evas_Object *obj,
return item;
}
EAPI Elm_Gengrid_Item *
elm_gengrid_item_sorted_insert(Evas_Object *obj,
const Elm_Gengrid_Item_Class *gic,
const void *data,
Eina_Compare_Cb comp,
Evas_Smart_Cb func,
const void *func_data)
{
_elm_gengrid_item_compare_data_cb = comp;
return elm_gengrid_item_direct_sorted_insert(obj, gic, data, _elm_gengrid_item_compare_data, func, func_data);
}
/**
* Remove an item from the Gengrid.
*
@ -2351,6 +2374,25 @@ elm_gengrid_item_data_set(Elm_Gengrid_Item *item,
elm_gengrid_item_update(item);
}
EAPI const Elm_Gengrid_Item_Class *
elm_gengrid_item_item_class_get(const Elm_Gengrid_Item *item)
{
ELM_WIDGET_ITEM_WIDTYPE_CHECK_OR_RETURN(item, NULL);
if (item->delete_me) return NULL;
return item->gic;
}
EAPI void
elm_gengrid_item_item_class_set(Elm_Gengrid_Item *item,
const Elm_Gengrid_Item_Class *gic)
{
ELM_WIDGET_ITEM_WIDTYPE_CHECK_OR_RETURN(item);
EINA_SAFETY_ON_NULL_RETURN(gic);
if (item->delete_me) return;
item->gic = gic;
elm_gengrid_item_update(item);
}
/**
* Get the item's coordinates.
*

View File

@ -469,6 +469,7 @@ static const Evas_Smart_Cb_Description _signals[] = {
};
static Eina_Compare_Cb _elm_genlist_item_compare_cb;
static Eina_Compare_Cb _elm_genlist_item_compare_data_cb;
static Eina_Bool
_event_hook(Evas_Object *obj,
@ -3482,13 +3483,22 @@ _item_queue(Widget_Data *wd,
wd->queue_idle_enterer = ecore_idle_enterer_add(_item_idle_enterer, wd);
}
static int
_elm_genlist_item_compare_data(const void *data, const void *data1)
{
const Elm_Genlist_Item *item = data;
const Elm_Genlist_Item *item1 = data1;
return _elm_genlist_item_compare_data_cb(item->base.data, item1->base.data);
}
static int
_elm_genlist_item_compare(const void *data, const void *data1)
{
Elm_Genlist_Item *item, *item1;
item = ELM_GENLIST_ITEM_FROM_INLIST(data);
item1 = ELM_GENLIST_ITEM_FROM_INLIST(data1);
return _elm_genlist_item_compare_cb(item->base.data, item1->base.data);
return _elm_genlist_item_compare_cb(item, item1);
}
static void
@ -3697,6 +3707,49 @@ elm_genlist_item_insert_before(Evas_Object *obj,
return it;
}
EAPI Elm_Genlist_Item *
elm_genlist_item_direct_sorted_insert(Evas_Object *obj,
const Elm_Genlist_Item_Class *itc,
const void *data,
Elm_Genlist_Item *parent,
Elm_Genlist_Item_Flags flags,
Eina_Compare_Cb comp,
Evas_Smart_Cb func,
const void *func_data)
{
ELM_CHECK_WIDTYPE(obj, widtype) NULL;
Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return NULL;
Elm_Genlist_Item *it = _item_new(wd, itc, data, parent, flags, func,
func_data);
if (!it) return NULL;
_elm_genlist_item_compare_cb = comp;
if (it->parent)
{
it->parent->items =
eina_list_sorted_insert(it->parent->items, _elm_genlist_item_compare, it);
}
wd->items = eina_inlist_sorted_insert(wd->items, EINA_INLIST_GET(it),
_elm_genlist_item_compare);
if (EINA_INLIST_GET(it)->next)
{
it->rel = ELM_GENLIST_ITEM_FROM_INLIST(EINA_INLIST_GET(it)->next);
it->rel->relcount++;
it->before = EINA_TRUE;
}
else if (EINA_INLIST_GET(it)->prev)
{
it->rel = ELM_GENLIST_ITEM_FROM_INLIST(EINA_INLIST_GET(it)->prev);
it->rel->relcount++;
it->before = EINA_FALSE;
}
_item_queue(wd, it);
return it;
}
/**
* Insert a new item into the sorted genlist object
*
@ -3722,36 +3775,10 @@ elm_genlist_item_sorted_insert(Evas_Object *obj,
Evas_Smart_Cb func,
const void *func_data)
{
ELM_CHECK_WIDTYPE(obj, widtype) NULL;
Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return NULL;
Elm_Genlist_Item *it = _item_new(wd, itc, data, parent, flags, func,
func_data);
if (!it) return NULL;
_elm_genlist_item_compare_data_cb = comp;
_elm_genlist_item_compare_cb = comp;
if (it->parent)
{
it->parent->items =
eina_list_sorted_insert(it->parent->items, comp, it);
}
wd->items = eina_inlist_sorted_insert(wd->items, EINA_INLIST_GET(it),
_elm_genlist_item_compare);
if (EINA_INLIST_GET(it)->next)
{
it->rel = ELM_GENLIST_ITEM_FROM_INLIST(EINA_INLIST_GET(it)->next);
it->rel->relcount++;
it->before = EINA_TRUE;
}
else if (EINA_INLIST_GET(it)->prev)
{
it->rel = ELM_GENLIST_ITEM_FROM_INLIST(EINA_INLIST_GET(it)->prev);
it->rel->relcount++;
it->before = EINA_FALSE;
}
_item_queue(wd, it);
return it;
return elm_genlist_item_direct_sorted_insert(obj, itc, data, parent, flags,
_elm_genlist_item_compare_data, func, func_data);
}
/**
@ -4876,6 +4903,14 @@ elm_genlist_item_item_class_update(Elm_Genlist_Item *it,
elm_genlist_item_update(it);
}
EAPI const Elm_Genlist_Item_Class *
elm_genlist_item_item_class_get(const Elm_Genlist_Item *it)
{
ELM_WIDGET_ITEM_WIDTYPE_CHECK_OR_RETURN(it, NULL);
if (it->delete_me) return NULL;
return it->itc;
}
static Evas_Object *
_elm_genlist_item_label_create(void *data,
Evas_Object *obj,