From ac314bbb4d1123935abe89e2fba5f951470ea0d6 Mon Sep 17 00:00:00 2001 From: cedric Date: Sat, 25 Jun 2011 15:39:05 +0000 Subject: [PATCH] elementary: add elm_gengrid_item_sorted_insert. Original patch from Thiery. git-svn-id: https://svn.enlightenment.org/svn/e/trunk/elementary@60686 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33 --- AUTHORS | 1 + src/lib/Elementary.h.in | 1 + src/lib/elm_gengrid.c | 36 +++++++++++++++++++++++++++++++++++- 3 files changed, 37 insertions(+), 1 deletion(-) diff --git a/AUTHORS b/AUTHORS index 13c3aa7..e1406da 100644 --- a/AUTHORS +++ b/AUTHORS @@ -40,3 +40,4 @@ Shinwoo Kim Govindaraju SM Prince Kumar Dubey Sung W. Park +Thierry el Borgi diff --git a/src/lib/Elementary.h.in b/src/lib/Elementary.h.in index cecc357..803e8b8 100644 --- a/src/lib/Elementary.h.in +++ b/src/lib/Elementary.h.in @@ -2226,6 +2226,7 @@ extern "C" { EAPI Elm_Gengrid_Item *elm_gengrid_item_prepend(Evas_Object *obj, const Elm_Gengrid_Item_Class *gic, const void *data, Evas_Smart_Cb func, const void *func_data) EINA_ARG_NONNULL(1); EAPI Elm_Gengrid_Item *elm_gengrid_item_insert_before(Evas_Object *obj, const Elm_Gengrid_Item_Class *gic, const void *data, Elm_Gengrid_Item *relative, Evas_Smart_Cb func, const void *func_data) EINA_ARG_NONNULL(1); EAPI Elm_Gengrid_Item *elm_gengrid_item_insert_after(Evas_Object *obj, const Elm_Gengrid_Item_Class *gic, const void *data, Elm_Gengrid_Item *relative, Evas_Smart_Cb func, const void *func_data) EINA_ARG_NONNULL(1); + 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) EINA_ARG_NONNULL(1); /* smart callbacks called: * * selected - User has selected an item. diff --git a/src/lib/elm_gengrid.c b/src/lib/elm_gengrid.c index 275cc30..1648be2 100644 --- a/src/lib/elm_gengrid.c +++ b/src/lib/elm_gengrid.c @@ -295,7 +295,7 @@ static const Evas_Smart_Cb_Description _signals[] = { {NULL, NULL} }; - +static Eina_Compare_Cb _elm_gengrid_item_compare_cb; static Eina_Bool _event_hook(Evas_Object *obj, @@ -1730,6 +1730,15 @@ _scr_scroll(void *data, evas_object_smart_callback_call(data, SIG_SCROLL, NULL); } +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); +} + /** * Add a new Gengrid object. * @@ -2096,6 +2105,31 @@ elm_gengrid_item_insert_after(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 *item; + ELM_CHECK_WIDTYPE(obj, widtype) NULL; + Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return NULL; + + item = _item_create(wd, gic, data, func, func_data); + if (!item) return NULL; + _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); + wd->calc_job = ecore_job_add(_calc_job, wd); + + return item; +} + /** * Remove an item from the Gengrid. * -- 2.7.4