Create elm_list_item_sorted_insert

Function that include items to an elm list in a sorted way defined by
an Eina_Compare_Cb function.

Author: Bruno Dilly <bdilly@profusion.mobi>




SVN revision: 48777
This commit is contained in:
Luis Felipe Strano Moraes 2010-05-12 15:43:54 +00:00
parent d888b71dba
commit 8e692f5686
2 changed files with 41 additions and 0 deletions

View File

@ -965,6 +965,7 @@ extern "C" {
EAPI Elm_List_Item *elm_list_item_prepend(Evas_Object *obj, const char *label, Evas_Object *icon, Evas_Object *end, Evas_Smart_Cb func, const void *data);
EAPI Elm_List_Item *elm_list_item_insert_before(Evas_Object *obj, Elm_List_Item *before, const char *label, Evas_Object *icon, Evas_Object *end, Evas_Smart_Cb func, const void *data);
EAPI Elm_List_Item *elm_list_item_insert_after(Evas_Object *obj, Elm_List_Item *after, const char *label, Evas_Object *icon, Evas_Object *end, Evas_Smart_Cb func, const void *data);
EAPI Elm_List_Item *elm_list_item_sorted_insert(Evas_Object *obj, const char *label, Evas_Object *icon, Evas_Object *end, Evas_Smart_Cb func, const void *data, Eina_Compare_Cb cmp_func);
EAPI void elm_list_clear(Evas_Object *obj);
EAPI void elm_list_go(Evas_Object *obj);
EAPI void elm_list_multi_select_set(Evas_Object *obj, Eina_Bool multi);

View File

@ -873,6 +873,46 @@ elm_list_item_insert_after(Evas_Object *obj, Elm_List_Item *after, const char *l
return it;
}
/**
* Insert a new item into the sorted list object.
*
* @param obj The list object
* @param label The label of the list item
* @param icon The icon object to use for the left side of the item
* @param end The icon object to use for the right side of the item
* @param func The function to call when the item is clicked
* @param data The data to associate with the item for related callbacks
* @param cmp_func The function called for the sort.
*
* @return The created item or NULL upon failure
*
* @ingroup List
*/
EAPI Elm_List_Item *
elm_list_item_sorted_insert(Evas_Object *obj, const char *label, Evas_Object *icon, Evas_Object *end, Evas_Smart_Cb func, const void *data, Eina_Compare_Cb cmp_func)
{
ELM_CHECK_WIDTYPE(obj, widtype) NULL;
Widget_Data *wd = elm_widget_data_get(obj);
Elm_List_Item *it = _item_new(obj, label, icon, end, func, data);
Eina_List *l;
wd->items = eina_list_sorted_insert(wd->items, cmp_func, it);
l = eina_list_data_find_list(wd->items, it);
l = eina_list_next(l);
if (!l)
{
it->node = eina_list_last(wd->items);
elm_box_pack_end(wd->box, it->base);
}
else
{
Elm_List_Item *before = eina_list_data_get(l);
it->node = before->node->prev;
elm_box_pack_before(wd->box, it->base, before->base);
}
return it;
}
/**
* Clears a list of all items.
*