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_cb;
|
||||||
|
static Eina_Compare_Cb _elm_gengrid_item_compare_data_cb;
|
||||||
|
|
||||||
static Eina_Bool
|
static Eina_Bool
|
||||||
_event_hook(Evas_Object *obj,
|
_event_hook(Evas_Object *obj,
|
||||||
|
@ -1730,13 +1731,22 @@ _scr_scroll(void *data,
|
||||||
evas_object_smart_callback_call(data, SIG_SCROLL, NULL);
|
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
|
static int
|
||||||
_elm_gengrid_item_compare(const void *data, const void *data1)
|
_elm_gengrid_item_compare(const void *data, const void *data1)
|
||||||
{
|
{
|
||||||
Elm_Gengrid_Item *item, *item1;
|
Elm_Gengrid_Item *item, *item1;
|
||||||
item = ELM_GENGRID_ITEM_FROM_INLIST(data);
|
item = ELM_GENGRID_ITEM_FROM_INLIST(data);
|
||||||
item1 = ELM_GENGRID_ITEM_FROM_INLIST(data1);
|
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 *
|
EAPI Elm_Gengrid_Item *
|
||||||
elm_gengrid_item_sorted_insert(Evas_Object *obj,
|
elm_gengrid_item_direct_sorted_insert(Evas_Object *obj,
|
||||||
const Elm_Gengrid_Item_Class *gic,
|
const Elm_Gengrid_Item_Class *gic,
|
||||||
const void *data,
|
const void *data,
|
||||||
Eina_Compare_Cb comp,
|
Eina_Compare_Cb comp,
|
||||||
Evas_Smart_Cb func,
|
Evas_Smart_Cb func,
|
||||||
const void *func_data)
|
const void *func_data)
|
||||||
{
|
{
|
||||||
Elm_Gengrid_Item *item;
|
Elm_Gengrid_Item *item;
|
||||||
ELM_CHECK_WIDTYPE(obj, widtype) NULL;
|
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);
|
item = _item_create(wd, gic, data, func, func_data);
|
||||||
if (!item) return NULL;
|
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),
|
wd->items = eina_inlist_sorted_insert(wd->items, EINA_INLIST_GET(item),
|
||||||
_elm_gengrid_item_compare);
|
_elm_gengrid_item_compare);
|
||||||
if (wd->calc_job) ecore_job_del(wd->calc_job);
|
if (wd->calc_job) ecore_job_del(wd->calc_job);
|
||||||
|
@ -2130,6 +2140,19 @@ elm_gengrid_item_sorted_insert(Evas_Object *obj,
|
||||||
return item;
|
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.
|
* Remove an item from the Gengrid.
|
||||||
*
|
*
|
||||||
|
@ -2351,6 +2374,25 @@ elm_gengrid_item_data_set(Elm_Gengrid_Item *item,
|
||||||
elm_gengrid_item_update(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.
|
* 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_cb;
|
||||||
|
static Eina_Compare_Cb _elm_genlist_item_compare_data_cb;
|
||||||
|
|
||||||
static Eina_Bool
|
static Eina_Bool
|
||||||
_event_hook(Evas_Object *obj,
|
_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);
|
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
|
static int
|
||||||
_elm_genlist_item_compare(const void *data, const void *data1)
|
_elm_genlist_item_compare(const void *data, const void *data1)
|
||||||
{
|
{
|
||||||
Elm_Genlist_Item *item, *item1;
|
Elm_Genlist_Item *item, *item1;
|
||||||
item = ELM_GENLIST_ITEM_FROM_INLIST(data);
|
item = ELM_GENLIST_ITEM_FROM_INLIST(data);
|
||||||
item1 = ELM_GENLIST_ITEM_FROM_INLIST(data1);
|
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
|
static void
|
||||||
|
@ -3697,6 +3707,49 @@ elm_genlist_item_insert_before(Evas_Object *obj,
|
||||||
return it;
|
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
|
* 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,
|
Evas_Smart_Cb func,
|
||||||
const void *func_data)
|
const void *func_data)
|
||||||
{
|
{
|
||||||
ELM_CHECK_WIDTYPE(obj, widtype) NULL;
|
_elm_genlist_item_compare_data_cb = comp;
|
||||||
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;
|
return elm_genlist_item_direct_sorted_insert(obj, itc, data, parent, flags,
|
||||||
if (it->parent)
|
_elm_genlist_item_compare_data, func, func_data);
|
||||||
{
|
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -4876,6 +4903,14 @@ elm_genlist_item_item_class_update(Elm_Genlist_Item *it,
|
||||||
elm_genlist_item_update(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 *
|
static Evas_Object *
|
||||||
_elm_genlist_item_label_create(void *data,
|
_elm_genlist_item_label_create(void *data,
|
||||||
Evas_Object *obj,
|
Evas_Object *obj,
|
||||||
|
|
Loading…
Reference in New Issue