cedric pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=aa920444224785527ce718fb2f41adcd45a0cdd0

commit aa920444224785527ce718fb2f41adcd45a0cdd0
Author: Jee-Yong Um <jc9...@samsung.com>
Date:   Mon Mar 28 11:24:02 2016 -0700

    edje: add edje_object_box_part_insert_after()
    
    Summary:
    In evas and elm box, function for inserting child object after
    referenced one is available, but edje doesn't have it.
    This adds edje_object_box_part_insert_after() API.
    
    @feature
    
    Reviewers: raster, jpeg, cedric
    
    Reviewed By: jpeg
    
    Subscribers: jpeg
    
    Differential Revision: https://phab.enlightenment.org/D3733
    
    Signed-off-by: Cedric BAIL <ced...@osg.samsung.com>
---
 src/lib/edje/edje_object.eo | 30 ++++++++++++++++++++++++-----
 src/lib/edje/edje_private.h |  1 +
 src/lib/edje/edje_util.c    | 47 +++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 73 insertions(+), 5 deletions(-)

diff --git a/src/lib/edje/edje_object.eo b/src/lib/edje/edje_object.eo
index 63f4c22..be0c902 100644
--- a/src/lib/edje/edje_object.eo
+++ b/src/lib/edje/edje_object.eo
@@ -1030,7 +1030,8 @@ class Edje.Object (Evas.Smart_Clipped, Efl.File)
            Adds child to the box indicated by part, in the position given by
            pos.
 
-           See also @.part_box_append(), @.part_box_prepend() and 
@.part_box_insert_before()]]
+           See also @.part_box_append(), @.part_box_prepend(),
+           @.part_box_insert_before() and @.part_box_insert_after()]]
 
          return: bool; [[$true: Successfully added.
                          $false: An error occurred.]]
@@ -1097,7 +1098,8 @@ class Edje.Object (Evas.Smart_Clipped, Efl.File)
 
            Prepends child to the box indicated by part.
 
-           See also @.part_box_append(), @.part_box_insert_before() and 
@.part_box_insert_at()]]
+           See also @.part_box_append(), @.part_box_insert_before(),
+           @.part_box_insert_after and @.part_box_insert_at()]]
 
          return: bool; [[$true: Successfully added.
                          $false: An error occurred.]]
@@ -1594,7 +1596,25 @@ class Edje.Object (Evas.Smart_Clipped, Efl.File)
            Inserts child in the box given by part, in the position marked by
            reference.
 
-           See also @.part_box_append(), @.part_box_prepend() and 
@.part_box_insert_at()]]
+           See also @.part_box_append(), @.part_box_prepend(),
+           @.part_box_insert_after() and @.part_box_insert_at()]]
+
+         return: bool; [[$true: Successfully added.
+                         $false: An error occurred.]]
+         params {
+            @in part: const(char)*; [[The part name]]
+            @in child: Evas.Object *; [[The object to insert]]
+            @in reference: const(Evas.Object)*; [[The object to be used as 
reference]]
+         }
+      }
+      part_box_insert_after {
+         [[Adds an object to the box.
+
+           Inserts child in the box given by part, in the position marked by
+           reference.
+
+           See also @.part_box_append(), @.part_box_prepend(),
+           @.part_box_insert_before() and @.part_box_insert_at()]]
 
          return: bool; [[$true: Successfully added.
                          $false: An error occurred.]]
@@ -1680,8 +1700,8 @@ class Edje.Object (Evas.Smart_Clipped, Efl.File)
 
            Appends child to the box indicated by part.
 
-           See also @.part_box_prepend(), @.part_box_insert_before()
-           and @.part_box_insert_at()]]
+           See also @.part_box_prepend(), @.part_box_insert_before(),
+           @.part_box_insert_after() and @.part_box_insert_at()]]
 
          return: bool; [[$true: Successfully added.
                          $false: An error occurred.]]
diff --git a/src/lib/edje/edje_private.h b/src/lib/edje/edje_private.h
index 402c50f..517a2ca 100644
--- a/src/lib/edje/edje_private.h
+++ b/src/lib/edje/edje_private.h
@@ -2428,6 +2428,7 @@ Edje_Part_Description_Text 
*_edje_real_part_text_text_source_description_get(Edj
 Eina_Bool         _edje_real_part_box_append(Edje *ed, Edje_Real_Part *rp, 
Evas_Object *child_obj);
 Eina_Bool         _edje_real_part_box_prepend(Edje *ed, Edje_Real_Part *rp, 
Evas_Object *child_obj);
 Eina_Bool         _edje_real_part_box_insert_before(Edje *ed, Edje_Real_Part 
*rp, Evas_Object *child_obj, const Evas_Object *ref);
+Eina_Bool         _edje_real_part_box_insert_after(Edje *ed, Edje_Real_Part 
*rp, Evas_Object *child_obj, const Evas_Object *ref);
 Eina_Bool         _edje_real_part_box_insert_at(Edje *ed, Edje_Real_Part *rp, 
Evas_Object *child_obj, unsigned int pos);
 Evas_Object      *_edje_real_part_box_remove(Edje *ed, Edje_Real_Part *rp, 
Evas_Object *child_obj);
 Evas_Object      *_edje_real_part_box_remove_at(Edje *ed, Edje_Real_Part *rp, 
unsigned int pos);
diff --git a/src/lib/edje/edje_util.c b/src/lib/edje/edje_util.c
index cb6300d..97e00f9 100644
--- a/src/lib/edje/edje_util.c
+++ b/src/lib/edje/edje_util.c
@@ -4758,6 +4758,34 @@ _edje_object_part_box_insert_before(Eo *obj EINA_UNUSED, 
Edje *ed, const char *p
 }
 
 EOLIAN Eina_Bool
+_edje_object_part_box_insert_after(Eo *obj EINA_UNUSED, Edje *ed, const char 
*part, Evas_Object *child, const Evas_Object *reference)
+{
+   Eina_Bool ret;
+   Edje_Real_Part *rp;
+   ret = EINA_FALSE;
+
+   if ((!ed) || (!part)) return ret;
+
+   rp = _edje_real_part_recursive_get(&ed, part);
+   if (!rp) return ret;
+   if (rp->part->type != EDJE_PART_TYPE_BOX) return ret;
+
+   if (_edje_real_part_box_insert_after(ed, rp, child, reference))
+     {
+        Edje_User_Defined *eud;
+
+        eud = _edje_user_definition_new(EDJE_USER_BOX_PACK, part, ed);
+        if (!eud) return ret;
+        eud->u.box.child = child;
+
+        evas_object_event_callback_add(child, EVAS_CALLBACK_DEL, 
_edje_user_def_del_cb, eud);
+        ret = EINA_TRUE;
+     }
+
+   return ret;
+}
+
+EOLIAN Eina_Bool
 _edje_object_part_box_insert_at(Eo *obj EINA_UNUSED, Edje *ed, const char 
*part, Evas_Object *child, unsigned int pos)
 {
    Eina_Bool ret;
@@ -5017,6 +5045,25 @@ _edje_real_part_box_insert_before(Edje *ed, 
Edje_Real_Part *rp, Evas_Object *chi
 }
 
 Eina_Bool
+_edje_real_part_box_insert_after(Edje *ed, Edje_Real_Part *rp, Evas_Object 
*child_obj, const Evas_Object *ref)
+{
+   Evas_Object_Box_Option *opt;
+
+   opt = evas_object_box_insert_after(rp->object, child_obj, ref);
+   if (!opt) return EINA_FALSE;
+
+   if (!_edje_box_layout_add_child(rp, child_obj))
+     {
+        evas_object_box_remove(rp->object, child_obj);
+        return EINA_FALSE;
+     }
+
+   _edje_child_add(ed, rp, child_obj);
+
+   return EINA_TRUE;
+}
+
+Eina_Bool
 _edje_real_part_box_insert_at(Edje *ed, Edje_Real_Part *rp, Evas_Object 
*child_obj, unsigned int pos)
 {
    Evas_Object_Box_Option *opt;

-- 


Reply via email to