elementary: add some usefull function around sorted insert.
authorcedric <cedric@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Sat, 25 Jun 2011 23:20:22 +0000 (23:20 +0000)
committercedric <cedric@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Sat, 25 Jun 2011 23:20:22 +0000 (23:20 +0000)
git-svn-id: https://svn.enlightenment.org/svn/e/trunk/elementary@60691 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/lib/elm_gengrid.c
src/lib/elm_genlist.c

index 1648be2..7e35b03 100644 (file)
@@ -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_data_cb;
 
 static Eina_Bool
 _event_hook(Evas_Object       *obj,
@@ -1731,12 +1732,21 @@ _scr_scroll(void            *data,
 }
 
 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
 _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);
+   return _elm_gengrid_item_compare_cb(item, item1);
 }
 
 /**
@@ -2106,12 +2116,12 @@ elm_gengrid_item_insert_after(Evas_Object                  *obj,
 }
 
 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_direct_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;
@@ -2120,8 +2130,8 @@ elm_gengrid_item_sorted_insert(Evas_Object                  *obj,
 
    item = _item_create(wd, gic, data, func, func_data);
    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),
                                          _elm_gengrid_item_compare);
    if (wd->calc_job) ecore_job_del(wd->calc_job);
@@ -2130,6 +2140,19 @@ elm_gengrid_item_sorted_insert(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_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.
  *
@@ -2351,6 +2374,25 @@ elm_gengrid_item_data_set(Elm_Gengrid_Item *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.
  *
index 005541e..c3358de 100644 (file)
@@ -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_data_cb;
 
 static Eina_Bool
 _event_hook(Evas_Object       *obj,
@@ -3483,12 +3484,21 @@ _item_queue(Widget_Data      *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
 _elm_genlist_item_compare(const void *data, const void *data1)
 {
    Elm_Genlist_Item *item, *item1;
    item = ELM_GENLIST_ITEM_FROM_INLIST(data);
    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
@@ -3697,30 +3707,15 @@ elm_genlist_item_insert_before(Evas_Object                  *obj,
    return it;
 }
 
-/**
- * Insert a new item into the sorted genlist object
- *
- * @param obj The genlist object
- * @param itc The item class for the item
- * @param data The item data
- * @param parent The parent item, or NULL if none
- * @param flags Item flags
- * @param comp The function called for the sort
- * @param func Convenience function called when item selected
- * @param func_data Data passed to @p func above.
- * @return A handle to the item added or NULL if not possible
- *
- * @ingroup Genlist
- */
 EAPI Elm_Genlist_Item *
-elm_genlist_item_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_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);
@@ -3730,10 +3725,11 @@ elm_genlist_item_sorted_insert(Evas_Object                  *obj,
    if (!it) return NULL;
 
    _elm_genlist_item_compare_cb = comp;
+
    if (it->parent)
      {
         it->parent->items =
-           eina_list_sorted_insert(it->parent->items, comp, it);
+          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);
@@ -3755,6 +3751,37 @@ elm_genlist_item_sorted_insert(Evas_Object                  *obj,
 }
 
 /**
+ * Insert a new item into the sorted genlist object
+ *
+ * @param obj The genlist object
+ * @param itc The item class for the item
+ * @param data The item data
+ * @param parent The parent item, or NULL if none
+ * @param flags Item flags
+ * @param comp The function called for the sort
+ * @param func Convenience function called when item selected
+ * @param func_data Data passed to @p func above.
+ * @return A handle to the item added or NULL if not possible
+ *
+ * @ingroup Genlist
+ */
+EAPI Elm_Genlist_Item *
+elm_genlist_item_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_genlist_item_compare_data_cb = comp;
+
+   return elm_genlist_item_direct_sorted_insert(obj, itc, data, parent, flags,
+                                                _elm_genlist_item_compare_data, func, func_data);
+}
+
+/**
  * Insert an item after another in the genlst
  *
  * This inserts an item after another in the list. It will be in the
@@ -4876,6 +4903,14 @@ elm_genlist_item_item_class_update(Elm_Genlist_Item             *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 *
 _elm_genlist_item_label_create(void        *data,
                                Evas_Object *obj,