Hello,
I added tree feature support to
elm_genlist_item_insert_before/after() APIs.

This patch assumes that the previous patch, '[E-devel] [Patch] Tree support
for elm_genlist_item_prepend() API.', is already applied to upstream.
So this patch does not include the changes of the previous patch.

This patch includes API break. I added parent parameter.
To support genlist group index feature, it should have a parent parameter
like elm_genlist_item_append/prepend() do.
Raster already agreed to this API break.
I or my co-worker will introduce genlist group index feature today.
But for the reviewer's convenience, I separated this patch.

- 001.elm_genlist.patch.txt
   Patch for src/lib/elm_genlist.c
- 002.elm_genlist.patch.txt
   Patch for src/lib/Elementary.h.in, src/bin/test_genlist.c
- 003.elm_genlist.patch.txt
   Due to API break, I changes other EFL libraries and applications on SVN. 

Anybody can review this and please apply previous patch first then apply
this patch next.
Thanks.
Daniel Juyung Seo (SeoZ)
--- src/lib/elm_genlist.c.ori   2010-12-30 10:48:16.000000000 +0900
+++ src/lib/elm_genlist.c       2010-12-30 10:59:57.000000000 +0900
@@ -2731,6 +2731,7 @@
 elm_genlist_item_insert_before(Evas_Object                  *obj,
                                const Elm_Genlist_Item_Class *itc,
                                const void                   *data,
+                               Elm_Genlist_Item             *parent,
                                Elm_Genlist_Item             *before,
                                Elm_Genlist_Item_Flags        flags,
                                Evas_Smart_Cb                 func,
@@ -2739,17 +2740,17 @@
    ELM_CHECK_WIDTYPE(obj, widtype) NULL;
    EINA_SAFETY_ON_NULL_RETURN_VAL(before, NULL);
    Widget_Data *wd = elm_widget_data_get(obj);
-   Elm_Genlist_Item *it = _item_new(wd, itc, data, NULL, flags, func,
+   Elm_Genlist_Item *it = _item_new(wd, itc, data, parent, flags, func,
                                     func_data);
    if (!wd) return NULL;
    if (!it) return NULL;
-   if (!it->parent)
-     wd->items = eina_inlist_prepend_relative(wd->items, EINA_INLIST_GET(it),
-                                              EINA_INLIST_GET(before));
-   else
+   if (it->parent)
      {
-        printf("FIXME: 13 tree not handled yet\n");
+        it->parent->items = eina_list_prepend_relative(it->parent->items, it,
+                                                       before);
      }
+   wd->items = eina_inlist_prepend_relative(wd->items, EINA_INLIST_GET(it),
+                                            EINA_INLIST_GET(before));
    it->rel = before;
    it->rel->relcount++;
    it->before = EINA_TRUE;
@@ -2778,6 +2779,7 @@
 elm_genlist_item_insert_after(Evas_Object                  *obj,
                               const Elm_Genlist_Item_Class *itc,
                               const void                   *data,
+                              Elm_Genlist_Item             *parent,
                               Elm_Genlist_Item             *after,
                               Elm_Genlist_Item_Flags        flags,
                               Evas_Smart_Cb                 func,
@@ -2786,16 +2788,16 @@
    ELM_CHECK_WIDTYPE(obj, widtype) NULL;
    EINA_SAFETY_ON_NULL_RETURN_VAL(after, NULL);
    Widget_Data *wd = elm_widget_data_get(obj);
-   Elm_Genlist_Item *it = _item_new(wd, itc, data, NULL, flags, func,
+   Elm_Genlist_Item *it = _item_new(wd, itc, data, parent, flags, func,
                                     func_data);
    if (!wd) return NULL;
    if (!it) return NULL;
-   if (!it->parent)
-     wd->items = eina_inlist_append_relative(wd->items, EINA_INLIST_GET(it),
-                                             EINA_INLIST_GET(after));
-   else
+   wd->items = eina_inlist_append_relative(wd->items, EINA_INLIST_GET(it),
+                                           EINA_INLIST_GET(after));
+   if (it->parent)
      {
-        printf("FIXME: 14 tree not handled yet\n");
+        it->parent->items = eina_list_append_relative(it->parent->items, it,
+                                                      after);
      }
    it->rel = after;
    it->rel->relcount++;
Index: src/lib/Elementary.h.in
===================================================================
--- src/lib/Elementary.h.in     (revision 55776)
+++ src/lib/Elementary.h.in     (working copy)
@@ -1728,8 +1728,8 @@ extern "C" {
    /* operations to add items */
    EAPI Elm_Genlist_Item *elm_genlist_item_append(Evas_Object *obj, const 
Elm_Genlist_Item_Class *itc, const void *data, Elm_Genlist_Item *parent, 
Elm_Genlist_Item_Flags flags, Evas_Smart_Cb func, const void *func_data) 
EINA_ARG_NONNULL(1);
    EAPI Elm_Genlist_Item *elm_genlist_item_prepend(Evas_Object *obj, const 
Elm_Genlist_Item_Class *itc, const void *data, Elm_Genlist_Item *parent, 
Elm_Genlist_Item_Flags flags, Evas_Smart_Cb func, const void *func_data) 
EINA_ARG_NONNULL(1);
-   EAPI Elm_Genlist_Item *elm_genlist_item_insert_before(Evas_Object *obj, 
const Elm_Genlist_Item_Class *itc, const void *data, Elm_Genlist_Item *before, 
Elm_Genlist_Item_Flags flags, Evas_Smart_Cb func, const void *func_data) 
EINA_ARG_NONNULL(1, 4);
-   EAPI Elm_Genlist_Item *elm_genlist_item_insert_after(Evas_Object *obj, 
const Elm_Genlist_Item_Class *itc, const void *data, Elm_Genlist_Item *after, 
Elm_Genlist_Item_Flags flags, Evas_Smart_Cb func, const void *func_data) 
EINA_ARG_NONNULL(1, 4);
+   EAPI Elm_Genlist_Item *elm_genlist_item_insert_before(Evas_Object *obj, 
const Elm_Genlist_Item_Class *itc, const void *data, Elm_Genlist_Item *parent, 
Elm_Genlist_Item *before, Elm_Genlist_Item_Flags flags, Evas_Smart_Cb func, 
const void *func_data) EINA_ARG_NONNULL(1, 4);
+   EAPI Elm_Genlist_Item *elm_genlist_item_insert_after(Evas_Object *obj, 
const Elm_Genlist_Item_Class *itc, const void *data, Elm_Genlist_Item *parent, 
Elm_Genlist_Item *after, Elm_Genlist_Item_Flags flags, Evas_Smart_Cb func, 
const void *func_data) EINA_ARG_NONNULL(1, 4);
    /* operations to retrieve existing items */
    EAPI Elm_Genlist_Item *elm_genlist_selected_item_get(const Evas_Object 
*obj) EINA_ARG_NONNULL(1);
    EAPI const Eina_List  *elm_genlist_selected_items_get(const Evas_Object 
*obj) EINA_ARG_NONNULL(1);
Index: src/bin/test_genlist.c
===================================================================
--- src/bin/test_genlist.c      (revision 55776)
+++ src/bin/test_genlist.c      (working copy)
@@ -222,6 +222,7 @@ my_gl_insert_before(void *data, Evas_Object *obj _
 
    elm_genlist_item_insert_before(gl, &itc1,
                                   (void *)(long)i/* item data */,
+                                  NULL/* parent */,
                                   gli_selected /* item before */,
                                   ELM_GENLIST_ITEM_NONE,
                                   gl_sel/* func */,
@@ -251,6 +252,7 @@ my_gl_insert_after(void *data, Evas_Object *obj __
 
    elm_genlist_item_insert_after(gl, &itc1,
                                  (void *)(long)i/* item data */,
+                                 NULL/* parent */,
                                  gli_selected /* item after */,
                                  ELM_GENLIST_ITEM_NONE,
                                 gl_sel/* func */,
@@ -384,11 +386,11 @@ test_genlist2(void *data __UNUSED__, Evas_Object *
                                     (void *)1005/* item data */, NULL/* parent 
*/, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
                                     (void *)1005/* func data */);
    gli[5] = elm_genlist_item_insert_before(gl, &itc1,
-                                          (void *)1006/* item data */, 
gli[2]/* rel */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
-                                          (void *)1006/* func data */);
+                                          (void *)1006/* item data */, NULL/* 
parent */, gli[2]/* rel */, ELM_GENLIST_ITEM_NONE,
+                                          gl_sel/* func */, (void *)1006/* 
func data */);
    gli[6] = elm_genlist_item_insert_after(gl, &itc1,
-                                         (void *)1007/* item data */, gli[2]/* 
rel */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
-                                         (void *)1007/* func data */);
+                                         (void *)1007/* item data */, NULL/* 
parent */, gli[2]/* rel */, ELM_GENLIST_ITEM_NONE,
+                                         gl_sel/* func */, (void *)1007/* func 
data */);
 
    elm_box_pack_end(bx, gl);
 
Index: BINDINGS/perl/Elementary/Elementary.xs
===================================================================
--- BINDINGS/perl/Elementary/Elementary.xs      (revision 55777)
+++ BINDINGS/perl/Elementary/Elementary.xs      (working copy)
@@ -1275,10 +1275,10 @@ Elm_Genlist_Item *
 elm_genlist_item_prepend(Evas_Object *obj, Elm_Genlist_Item_Class *itc, void 
*data, Elm_Genlist_Item *parent, Elm_Genlist_Item_Flags flags, void (*func) 
(void *data, Evas_Object *obj, void *event_info), void *func_data);
 
 Elm_Genlist_Item *
-elm_genlist_item_insert_before(Evas_Object *obj, Elm_Genlist_Item_Class *itc, 
void *data, Elm_Genlist_Item *before, Elm_Genlist_Item_Flags flags, void 
(*func) (void *data, Evas_Object *obj, void *event_info), void *func_data);
+elm_genlist_item_insert_before(Evas_Object *obj, Elm_Genlist_Item_Class *itc, 
void *data, Elm_Genlist_Item *parent, Elm_Genlist_Item *before, 
Elm_Genlist_Item_Flags flags, void (*func) (void *data, Evas_Object *obj, void 
*event_info), void *func_data);
 
 Elm_Genlist_Item *
-elm_genlist_item_insert_after(Evas_Object *obj, Elm_Genlist_Item_Class *itc, 
void *data, Elm_Genlist_Item *after, Elm_Genlist_Item_Flags flags, void (*func) 
(void *data, Evas_Object *obj, void *event_info), void *func_data);
+elm_genlist_item_insert_after(Evas_Object *obj, Elm_Genlist_Item_Class *itc, 
void *data, Elm_Genlist_Item *parent, Elm_Genlist_Item *after, 
Elm_Genlist_Item_Flags flags, void (*func) (void *data, Evas_Object *obj, void 
*event_info), void *func_data);
 
 =cut
 
Index: BINDINGS/perl/t/elementary_test.t
===================================================================
--- BINDINGS/perl/t/elementary_test.t   (revision 55777)
+++ BINDINGS/perl/t/elementary_test.t   (working copy)
@@ -2637,6 +2637,7 @@ my_gl_insert_before(void *data, Evas_Object *obj,
 
    gli = elm_genlist_item_insert_before(gl, &itc1,
                                 (void *)i/* item data */,
+                                undef/* parent */,
                                 gli_selected /* item before */,
                                 ELM_GENLIST_ITEM_NONE,
                                 gl_sel/* func */,
@@ -2667,6 +2668,7 @@ my_gl_insert_after(void *data, Evas_Object *obj, v
 
    gli = elm_genlist_item_insert_after(gl, &itc1,
                                 (void *)i/* item data */,
+                                undef/* parent */,
                                 gli_selected /* item after */,
                                 ELM_GENLIST_ITEM_NONE,
                                 gl_sel/* func */,
@@ -2788,10 +2790,10 @@ test_genlist2(void *data, Evas_Object *obj, void *
                                     (void *)1005/* item data */, undef/* 
parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
                                     (void *)1005/* func data */);
    gli[5] = elm_genlist_item_insert_before(gl, &itc1,
-                                          (void *)1006/* item data */, 
gli[2]/* rel */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
+                                          (void *)1006/* item data */, undef/* 
parent */, gli[2]/* rel */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
                                           (void *)1006/* func data */);
    gli[6] = elm_genlist_item_insert_after(gl, &itc1,
-                                         (void *)1007/* item data */, gli[2]/* 
rel */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
+                                         (void *)1007/* item data */, undef/* 
parent */, gli[2]/* rel */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
                                          (void *)1007/* func data */);
 
    elm_box_pack_end(bx, gl);
Index: 
BINDINGS/python/python-elementary/elementary/elementary.c_elementary_genlist.pxi
===================================================================
--- 
BINDINGS/python/python-elementary/elementary/elementary.c_elementary_genlist.pxi
    (revision 55777)
+++ 
BINDINGS/python/python-elementary/elementary/elementary.c_elementary_genlist.pxi
    (working copy)
@@ -788,6 +788,7 @@ cdef class Genlist(Object):
         prm = (item_class, item_data, ret, func)
         item = elm_genlist_item_insert_before(self.obj, &item_class.obj,
                                               <void*>prm,
+                                              NULL,
                                               before,
                                               <Elm_Genlist_Item_Flags>flags, 
cb,
                                               <void*>prm)
@@ -840,6 +841,7 @@ cdef class Genlist(Object):
         prm = (item_class, item_data, ret, func)
         item = elm_genlist_item_insert_after(self.obj, &item_class.obj,
                                              <void*>prm,
+                                             NULL,
                                              after,
                                              <Elm_Genlist_Item_Flags>flags, cb,
                                              <void*>prm)
Index: BINDINGS/cxx/elementaryxx/src/GenList.cpp
===================================================================
--- BINDINGS/cxx/elementaryxx/src/GenList.cpp   (revision 55777)
+++ BINDINGS/cxx/elementaryxx/src/GenList.cpp   (working copy)
@@ -216,6 +216,7 @@ GenListItem *GenList::insertInternal (GenListColum
       gli = elm_genlist_item_insert_before (o, &mModel->mGLIC,
                                             construction /* item data */,
                                             opItem ? opItem->mItem : NULL /* 
parent */,
+                                            NULL,
                                             flags,
                                             GenList::gl_sel/* func */,
                                             selection /* func data */);
@@ -225,6 +226,7 @@ GenListItem *GenList::insertInternal (GenListColum
       gli = elm_genlist_item_insert_after (o, &mModel->mGLIC,
                                             construction /* item data */,
                                             opItem ? opItem->mItem : NULL /* 
parent */,
+                                            NULL,
                                             flags,
                                             GenList::gl_sel/* func */,
                                             selection /* func data */);
Index: BINDINGS/cxx/elementaryxx/include/elementaryxx/GenList.h
===================================================================
--- BINDINGS/cxx/elementaryxx/include/elementaryxx/GenList.h    (revision 55777)
+++ BINDINGS/cxx/elementaryxx/include/elementaryxx/GenList.h    (working copy)
@@ -384,8 +384,8 @@ class GenList : public Object
 #if 0
    /* operations to add items */
    EAPI Elm_Genlist_Item *elm_genlist_item_prepend(Evas_Object *obj, const 
Elm_Genlist_Item_Class *itc, const void *data, Elm_Genlist_Item *parent, 
Elm_Genlist_Item_Flags flags, Evas_Smart_Cb func, const void *func_data);
-   EAPI Elm_Genlist_Item *elm_genlist_item_insert_before(Evas_Object *obj, 
const Elm_Genlist_Item_Class *itc, const void *data, Elm_Genlist_Item *before, 
Elm_Genlist_Item_Flags flags, Evas_Smart_Cb func, const void *func_data);
-   EAPI Elm_Genlist_Item *elm_genlist_item_insert_after(Evas_Object *obj, 
const Elm_Genlist_Item_Class *itc, const void *data, Elm_Genlist_Item *after, 
Elm_Genlist_Item_Flags flags, Evas_Smart_Cb func, const void *func_data);
+   EAPI Elm_Genlist_Item *elm_genlist_item_insert_before(Evas_Object *obj, 
const Elm_Genlist_Item_Class *itc, const void *data, Elm_Genlist_Item *parent, 
Elm_Genlist_Item *before, Elm_Genlist_Item_Flags flags, Evas_Smart_Cb func, 
const void *func_data);
+   EAPI Elm_Genlist_Item *elm_genlist_item_insert_after(Evas_Object *obj, 
const Elm_Genlist_Item_Class *itc, const void *data, Elm_Genlist_Item *parent, 
Elm_Genlist_Item *after, Elm_Genlist_Item_Flags flags, Evas_Smart_Cb func, 
const void *func_data);
    /* operations to retrieve existing items */
 
 
Index: elmdentica/src/elmdentica.c
===================================================================
--- elmdentica/src/elmdentica.c (revision 55777)
+++ elmdentica/src/elmdentica.c (working copy)
@@ -1450,7 +1450,7 @@ void add_status(aStatus *as, Elm_Genlist_Item *gli
        itc1.func.del           = ed_status_del;
 
        if(gli) {
-               li = elm_genlist_item_insert_after(gui.timeline, &itc1, as, 
gli, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+               li = elm_genlist_item_insert_after(gui.timeline, &itc1, as, 
NULL, gli, ELM_GENLIST_ITEM_NONE, NULL, NULL);
                elm_genlist_item_show(li);
        } else
                li = elm_genlist_item_append(gui.timeline, &itc1, as, NULL, 
ELM_GENLIST_ITEM_NONE, NULL, NULL);
Index: enki/src/bin/list_left.c
===================================================================
--- enki/src/bin/list_left.c    (revision 55777)
+++ enki/src/bin/list_left.c    (working copy)
@@ -133,7 +133,7 @@ void list_left_append_relative(List_Left *list_lef
            album);
     else
       enlil_album_data->list_album_item = 
elm_genlist_item_insert_after(list_left->gl_albums, &itc_album,
-           album, relative, ELM_GENLIST_ITEM_NONE, _gl_sel,
+           album, NULL, relative, ELM_GENLIST_ITEM_NONE, _gl_sel,
            album);
 }
 
Index: PROTO/eyelight_edit/src/bin/slides_list.c
===================================================================
--- PROTO/eyelight_edit/src/bin/slides_list.c   (revision 55777)
+++ PROTO/eyelight_edit/src/bin/slides_list.c   (working copy)
@@ -253,6 +253,7 @@ void slides_list_slide_append_relative(List_Item *
     if(item_prev)
         item->item = elm_genlist_item_insert_after(slides_list, &itc_slides,
                 item,
+                NULL,
                 item_prev->item,
                 ELM_GENLIST_ITEM_NONE,
                 _slides_list_sel,
@@ -299,6 +300,7 @@ void slides_list_item_move(int id, int id_after)
     {
         item->item = elm_genlist_item_insert_after(slides_list, &itc_slides,
                 item,
+                NULL,
                 item_after->item,
                 ELM_GENLIST_ITEM_NONE,
                 _slides_list_sel,
------------------------------------------------------------------------------
Learn how Oracle Real Application Clusters (RAC) One Node allows customers
to consolidate database storage, standardize their database environment, and, 
should the need arise, upgrade to a full multi-node Oracle RAC database 
without downtime or disruption
http://p.sf.net/sfu/oracle-sfdevnl
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to