elementary: add elm_gengrid_item_sorted_insert.
authorcedric <cedric@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Sat, 25 Jun 2011 15:39:05 +0000 (15:39 +0000)
committercedric <cedric@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Sat, 25 Jun 2011 15:39:05 +0000 (15:39 +0000)
Original patch from Thiery.

git-svn-id: https://svn.enlightenment.org/svn/e/trunk/elementary@60686 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

AUTHORS
src/lib/Elementary.h.in
src/lib/elm_gengrid.c

diff --git a/AUTHORS b/AUTHORS
index 13c3aa7..e1406da 100644 (file)
--- a/AUTHORS
+++ b/AUTHORS
@@ -40,3 +40,4 @@ Shinwoo Kim <kimcinoo@gmail.com>
 Govindaraju SM <govi.sm@samsung.com> <govism@gmail.com>
 Prince Kumar Dubey <prince.dubey@samsung.com> <prince.dubey@gmail.com>
 Sung W. Park <sungwoo@gmail.com>
+Thierry el Borgi <thierry@substantiel.fr>
index cecc357..803e8b8 100644 (file)
@@ -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.
index 275cc30..1648be2 100644 (file)
@@ -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.
  *