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. --