forked from enlightenment/efl
elementary: add some usefull function around sorted insert.
SVN revision: 60691
This commit is contained in:
parent
4717eea85d
commit
74dd82cf60
|
@ -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.
|
||||
*
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Reference in New Issue