Dear all.

I made a patch that's adding elm_gengrid_item_index_get function.

+EAPI int
+elm_gengrid_item_index_get(const Elm_Object_Item *it)

It works like elm_genlist_item_index_get()

Thanks
From 0d4e445288c21768541cffae58ad40af2e319c09 Mon Sep 17 00:00:00 2001
From: Hyoyoung Chang <hyoyoung.ch...@samsung.com>
Date: Wed, 7 Mar 2012 22:11:18 +0900
Subject: [PATCH] [elm_gengrid] add elm_gengrid_item_index_get

---
 src/lib/elm_gengrid.c |   45 +++++++++++++++++++++++++++++++++++++++++++++
 src/lib/elm_gengrid.h |   11 +++++++++--
 2 files changed, 54 insertions(+), 2 deletions(-)

diff --git a/src/lib/elm_gengrid.c b/src/lib/elm_gengrid.c
index c0c2807..4a71cf9 100644
--- a/src/lib/elm_gengrid.c
+++ b/src/lib/elm_gengrid.c
@@ -130,6 +130,7 @@ static const char SIG_EDGE_BOTTOM[] = "edge,bottom";
 static const char SIG_EDGE_LEFT[] = "edge,left";
 static const char SIG_EDGE_RIGHT[] = "edge,right";
 static const char SIG_MOVED[] = "moved";
+static const char SIG_INDEX_UPDATE[] = "index,update";
 
 static const Evas_Smart_Cb_Description _signals[] = {
    {SIG_ACTIVATED, ""},
@@ -924,6 +925,16 @@ _item_highlight(Elm_Gen_Item *it)
 }
 
 static void
+_elm_gengrid_item_index_update(Elm_Gen_Item *it)
+{
+   if (it->position_update)
+     {
+        evas_object_smart_callback_call(WIDGET(it), SIG_INDEX_UPDATE, it);
+        it->position_update = EINA_FALSE;
+     }
+}
+
+static void
 _item_realize(Elm_Gen_Item *it)
 {
    char buf[1024];
@@ -1042,6 +1053,8 @@ _item_realize(Elm_Gen_Item *it)
         evas_object_event_callback_add(VIEW(it), EVAS_CALLBACK_MOUSE_MOVE,
                                        _mouse_move, it);
 
+        _elm_gengrid_item_index_update(it);
+
         if (it->selected)
           edje_object_signal_emit(VIEW(it), "elm,state,selected", "elm");
         if (elm_widget_item_disabled_get(it))
@@ -1443,6 +1456,18 @@ _item_place(Elm_Gen_Item *it,
 }
 
 static void
+_item_position_update(Eina_Inlist *list, int idx)
+{
+   Elm_Gen_Item *it;
+
+   EINA_INLIST_FOREACH(list, it)
+     {
+        it->position = idx++;
+        it->position_update = EINA_TRUE;
+     }
+}
+
+static void
 _item_del(Elm_Gen_Item *it)
 {
    Evas_Object *obj = WIDGET(it);
@@ -2093,6 +2118,8 @@ elm_gengrid_item_append(Evas_Object                  *obj,
    it = _item_new(wd, itc, data, func, func_data);
    if (!it) return NULL;
    wd->items = eina_inlist_append(wd->items, EINA_INLIST_GET(it));
+   it->position = eina_inlist_count(wd->items);
+   it->position_update = EINA_TRUE;
 
    if (it->group)
      wd->group_items = eina_list_prepend(wd->group_items, it);
@@ -2118,6 +2145,8 @@ elm_gengrid_item_prepend(Evas_Object                  *obj,
    it = _item_new(wd, itc, data, func, func_data);
    if (!it) return NULL;
    wd->items = eina_inlist_prepend(wd->items, EINA_INLIST_GET(it));
+   _item_position_update(wd->items, 0);
+
    if (it->group)
      wd->group_items = eina_list_append(wd->group_items, it);
 
@@ -2145,6 +2174,9 @@ elm_gengrid_item_insert_before(Evas_Object                  *obj,
    if (!it) return NULL;
    wd->items = eina_inlist_prepend_relative
       (wd->items, EINA_INLIST_GET(it), EINA_INLIST_GET((Elm_Gen_Item *) relative));
+   Eina_Inlist *tmp = eina_inlist_find(wd->items, EINA_INLIST_GET(it));
+   _item_position_update(tmp, ((Elm_Gen_Item *)relative)->position);
+
    if (it->group)
      wd->group_items = eina_list_append_relative(wd->group_items, it, ((Elm_Gen_Item *) relative)->parent);
 
@@ -2172,6 +2204,9 @@ elm_gengrid_item_insert_after(Evas_Object                  *obj,
    if (!it) return NULL;
    wd->items = eina_inlist_append_relative
       (wd->items, EINA_INLIST_GET(it), EINA_INLIST_GET((Elm_Gen_Item *) relative));
+   Eina_Inlist *tmp = eina_inlist_find(wd->items, EINA_INLIST_GET(it));
+   _item_position_update(tmp, ((Elm_Gen_Item *)relative)->position+1);
+
    if (it->group)
      wd->group_items = eina_list_prepend_relative(wd->group_items, it, ((Elm_Gen_Item *) relative)->parent);
 
@@ -2203,6 +2238,8 @@ elm_gengrid_item_sorted_insert(Evas_Object                  *obj,
    wd->item_compare_cb = comp;
    wd->items = eina_inlist_sorted_state_insert(wd->items, EINA_INLIST_GET(it),
                                          _elm_gengrid_item_compare, wd->state);
+   _item_position_update(wd->items, 0);
+
    if (wd->calc_job) ecore_job_del(wd->calc_job);
    wd->calc_job = ecore_job_add(_calc_job, wd);
 
@@ -2928,3 +2965,11 @@ elm_gengrid_no_highlight_mode_get(const Evas_Object *obj)
    return elm_genlist_no_highlight_mode_get(obj);
 }
 
+EAPI int
+elm_gengrid_item_index_get(const Elm_Object_Item *it)
+{
+   ELM_OBJ_ITEM_CHECK_OR_RETURN(it, -1);
+   Elm_Gen_Item *_it = (Elm_Gen_Item *)it;
+
+   return _it->position;
+}
diff --git a/src/lib/elm_gengrid.h b/src/lib/elm_gengrid.h
index 4a4f450..005e62c 100644
--- a/src/lib/elm_gengrid.h
+++ b/src/lib/elm_gengrid.h
@@ -791,8 +791,15 @@ EAPI void                          elm_gengrid_item_item_class_update(Elm_Object
  */
 EAPI const Elm_Gengrid_Item_Class *elm_gengrid_item_item_class_get(const Elm_Object_Item *it);
 
-//XXX: Let's add
-//EAPI int                           elm_gengrid_item_index_get(const Elm_Object_Item *it);
+/**
+ * Get the index of the item. It is only valid once displayed.
+ *
+ * @param it a gengrid item
+ * @return the position inside the list of item.
+ *
+ * @ingroup Gengrid
+ */
+EAPI int                           elm_gengrid_item_index_get(const Elm_Object_Item *it);
 
 /**
  * Return how many items are currently in a list
-- 
1.7.5.4

------------------------------------------------------------------------------
Virtualization & Cloud Management Using Capacity Planning
Cloud computing makes use of virtualization - but cloud computing 
also focuses on allowing computing to be delivered as a service.
http://www.accelacomm.com/jaw/sfnl/114/51521223/
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to