forked from enlightenment/efl
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
This commit is contained in:
parent
080c926588
commit
bf0b3e0b75
|
@ -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);
|
||||
|
|
|
@ -1325,6 +1325,58 @@ _elm_ctxpopup_item_efl_object_constructor(Eo *obj, Elm_Ctxpopup_Item_Data *it)
|
|||
return obj;
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
Loading…
Reference in New Issue