From: cedric Date: Sat, 25 Jun 2011 15:39:05 +0000 (+0000) Subject: elementary: add elm_gengrid_item_sorted_insert. X-Git-Tag: REL_F_I9200_20110722_1~8^2~50^2~91 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ac314bbb4d1123935abe89e2fba5f951470ea0d6;p=framework%2Fuifw%2Felementary.git 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 --- 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. *