jpeg pushed a commit to branch master.

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

commit bf0b3e0b75f5c6ebc5cb96211b3b21235422e358
Author: JEONGHYUN YUN <jh0506....@samsung.com>
Date:   Thu Aug 10 14:12:08 2017 +0900

    elm_ctxpopup: Add APIs to insert before/after item to a ctxpopup object.
    
    Summary:
    There were only 2 APIs (item_append, item_prepend) for ctxpopup item add.
    Added more item add APIs (item_insert_before and item_insert_after) for 
convenience.
    
    Test Plan:
    1. launch elementary_test - ctxpopup
    2. click Ctxpopup with callback function sample
    3. check whether there are 3 items on ctxpopup
    
    Reviewers: woohyun, Jaehyun, jpeg, cedric
    
    Reviewed By: jpeg
    
    Subscribers: cedric, jpeg
    
    Differential Revision: https://phab.enlightenment.org/D5004
---
 src/bin/elementary/test_ctxpopup.c |  7 ++---
 src/lib/elementary/elc_ctxpopup.c  | 52 ++++++++++++++++++++++++++++++++++++++
 src/lib/elementary/elm_ctxpopup.eo | 35 ++++++++++++++++++++++++-
 3 files changed, 90 insertions(+), 4 deletions(-)

diff --git a/src/bin/elementary/test_ctxpopup.c 
b/src/bin/elementary/test_ctxpopup.c
index 6be16a50f1..9fc3de3d39 100644
--- a/src/bin/elementary/test_ctxpopup.c
+++ b/src/bin/elementary/test_ctxpopup.c
@@ -327,15 +327,16 @@ _list_item_cb7(void *data EINA_UNUSED, Evas_Object *obj, 
void *event_info EINA_U
 {
    Evas_Object *ctxpopup;
    Evas_Coord x,y;
+   Elm_Object_Item *item;
 
    if (list_mouse_down > 0) return;
    ctxpopup = elm_ctxpopup_add(obj);
    evas_object_smart_callback_add(ctxpopup, "dismissed", _dismissed, NULL);
    evas_object_smart_callback_add(ctxpopup, "geometry,update", 
_geometry_update, NULL);
 
-   elm_ctxpopup_item_append(ctxpopup, "Disable this item", NULL, 
_ctxpopup_item_disable_cb, ctxpopup);
-   elm_ctxpopup_item_append(ctxpopup, "Delete this ctxpopup", NULL, 
_ctxpopup_item_delete_cb, ctxpopup);
-   elm_ctxpopup_item_append(ctxpopup, "Another item", NULL, _ctxpopup_item_cb, 
NULL);
+   item = elm_ctxpopup_item_prepend(ctxpopup, "Disable this item", NULL, 
_ctxpopup_item_disable_cb, ctxpopup);
+   elm_ctxpopup_item_insert_before(ctxpopup, item, "Delete this ctxpopup", 
NULL, _ctxpopup_item_delete_cb, ctxpopup);
+   elm_ctxpopup_item_insert_after(ctxpopup, item, "Another item", NULL, 
_ctxpopup_item_cb, NULL);
 
    evas_pointer_canvas_xy_get(evas_object_evas_get(obj), &x, &y);
    evas_object_size_hint_max_set(ctxpopup, 240, 240);
diff --git a/src/lib/elementary/elc_ctxpopup.c 
b/src/lib/elementary/elc_ctxpopup.c
index 9b42539d6b..ecf418fdb2 100644
--- a/src/lib/elementary/elc_ctxpopup.c
+++ b/src/lib/elementary/elc_ctxpopup.c
@@ -1326,6 +1326,58 @@ _elm_ctxpopup_item_efl_object_constructor(Eo *obj, 
Elm_Ctxpopup_Item_Data *it)
 }
 
 EOLIAN static Elm_Object_Item*
+_elm_ctxpopup_item_insert_before(Eo *obj, Elm_Ctxpopup_Data *sd, 
Elm_Object_Item *eo_before, const char *label, Evas_Object *icon, Evas_Smart_Cb 
func, const void *data)
+{
+   Eo *eo_item;
+
+   EINA_SAFETY_ON_NULL_RETURN_VAL(eo_before, NULL);
+   ELM_CTXPOPUP_ITEM_DATA_GET(eo_before, before_it);
+   ELM_CTXPOPUP_ITEM_CHECK_OR_RETURN(before_it,  NULL);
+
+   if (!before_it->list_item) return NULL;
+
+   eo_item = efl_add(ELM_CTXPOPUP_ITEM_CLASS, obj, 
elm_obj_ctxpopup_item_init(efl_added, func, data));
+   if (!eo_item) return NULL;
+
+   ELM_CTXPOPUP_ITEM_DATA_GET(eo_item, item);
+
+   item->list_item =
+     elm_list_item_insert_before(sd->list, before_it->list_item, label, icon, 
NULL, _item_wrap_cb, item);
+   efl_ref(item->list_item);
+   sd->items = eina_list_prepend_relative(sd->items, eo_item, eo_before);
+
+   if (sd->visible) elm_layout_sizing_eval(obj);
+
+   return eo_item;
+}
+
+EOLIAN static Elm_Object_Item*
+_elm_ctxpopup_item_insert_after(Eo *obj, Elm_Ctxpopup_Data *sd, 
Elm_Object_Item *eo_after, const char *label, Evas_Object *icon, Evas_Smart_Cb 
func, const void *data)
+{
+   Eo *eo_item;
+
+   EINA_SAFETY_ON_NULL_RETURN_VAL(eo_after, NULL);
+   ELM_CTXPOPUP_ITEM_DATA_GET(eo_after, after_it);
+   ELM_CTXPOPUP_ITEM_CHECK_OR_RETURN(after_it,  NULL);
+
+   if (!after_it->list_item) return NULL;
+
+   eo_item = efl_add(ELM_CTXPOPUP_ITEM_CLASS, obj, 
elm_obj_ctxpopup_item_init(efl_added, func, data));
+   if (!eo_item) return NULL;
+
+   ELM_CTXPOPUP_ITEM_DATA_GET(eo_item, item);
+
+   item->list_item =
+     elm_list_item_insert_after(sd->list, after_it->list_item, label, icon, 
NULL, _item_wrap_cb, item);
+   efl_ref(item->list_item);
+   sd->items = eina_list_append_relative(sd->items, eo_item, eo_after);
+
+   if (sd->visible) elm_layout_sizing_eval(obj);
+
+   return eo_item;
+}
+
+EOLIAN static Elm_Object_Item*
 _elm_ctxpopup_item_append(Eo *obj, Elm_Ctxpopup_Data *sd, const char *label, 
Evas_Object *icon, Evas_Smart_Cb func, const void *data)
 {
    Eo *eo_item;
diff --git a/src/lib/elementary/elm_ctxpopup.eo 
b/src/lib/elementary/elm_ctxpopup.eo
index 39448e2f27..69615eecd6 100644
--- a/src/lib/elementary/elm_ctxpopup.eo
+++ b/src/lib/elementary/elm_ctxpopup.eo
@@ -113,10 +113,43 @@ class Elm.Ctxpopup (Efl.Ui.Layout, 
Elm.Interface.Atspi_Widget_Action,
       clear {
          [[Clear all items in the given ctxpopup object.]]
       }
+      item_insert_before {
+         [[Insert a new item to a ctxpopup object before item $before.
+
+           See also elm_object_content_set.
+
+           @since 1.21
+         ]]
+         return: Elm.Widget.Item; [[A handle to the item added or $null, on 
errors.]]
+
+         params {
+            @in before: Elm.Widget.Item; [[The ctxpopup item to insert 
before.]]
+            @in label: string; [[The Label of the new item]]
+            @in icon: Efl.Canvas.Object @optional; [[Icon to be set on new 
item]]
+            @in func: Evas_Smart_Cb @optional; [[Convenience function called 
when item selected]]
+            @in data: const(void_ptr) @optional; [[Data passed to $func]]
+         }
+      }
+      item_insert_after {
+         [[Insert a new item to a ctxpopup object after item $after.
+
+           See also elm_object_content_set.
+
+           @since 1.21
+         ]]
+         return: Elm.Widget.Item; [[A handle to the item added or $null, on 
errors.]]
+
+         params {
+            @in after: Elm.Widget.Item; [[The ctxpopup item to insert after.]]
+            @in label: string; [[The Label of the new item]]
+            @in icon: Efl.Canvas.Object @optional; [[Icon to be set on new 
item]]
+            @in func: Evas_Smart_Cb @optional; [[Convenience function called 
when item selected]]
+            @in data: const(void_ptr) @optional; [[Data passed to $func]]
+         }
+      }
       item_append {
          [[Add a new item to a ctxpopup object.
 
-
            Warning:Ctxpopup can't hold both an item list and a content at the 
same
            time. When an item is added, any previous content will be removed.
 

-- 


Reply via email to