From 8c7e3016e1157c85b607e5135ea251d44f471811 Mon Sep 17 00:00:00 2001 From: Leandro Pereira Date: Wed, 22 Sep 2010 18:25:35 +0000 Subject: [PATCH] [Elementary] Add icon/end objects to the scrolled entry. SVN revision: 52602 --- legacy/elementary/src/bin/test_entry.c | 17 +++ legacy/elementary/src/lib/Elementary.h.in | 4 + .../elementary/src/lib/elc_scrolled_entry.c | 116 +++++++++++++++++- 3 files changed, 135 insertions(+), 2 deletions(-) diff --git a/legacy/elementary/src/bin/test_entry.c b/legacy/elementary/src/bin/test_entry.c index d689f4fa5c..4fc84d513f 100644 --- a/legacy/elementary/src/bin/test_entry.c +++ b/legacy/elementary/src/bin/test_entry.c @@ -311,6 +311,23 @@ test_entry_scrolled(void *data, Evas_Object *obj, void *event_info) evas_object_show(en_p); elm_box_pack_end(bx, en_p); + /* scrolled entry with icon/end widgets*/ + en = elm_scrolled_entry_add(win); + elm_scrolled_entry_single_line_set(en, 1); + evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(en, EVAS_HINT_FILL, EVAS_HINT_FILL); + bt = elm_button_add(win); + elm_button_label_set(bt, "left"); + evas_object_show(bt); + elm_scrolled_entry_icon_set(en, bt); + bt = elm_button_add(win); + elm_button_label_set(bt, "right"); + evas_object_show(bt); + elm_scrolled_entry_end_set(en, bt); + elm_scrolled_entry_entry_set(en, "scrolled entry with icon and end objects"); + evas_object_show(en); + elm_box_pack_end(bx, en); + /* markup scrolled entry */ en = elm_scrolled_entry_add(win); evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); diff --git a/legacy/elementary/src/lib/Elementary.h.in b/legacy/elementary/src/lib/Elementary.h.in index 83a24937d2..e9f57ecfdd 100644 --- a/legacy/elementary/src/lib/Elementary.h.in +++ b/legacy/elementary/src/lib/Elementary.h.in @@ -1674,6 +1674,10 @@ extern "C" { EAPI Eina_Bool elm_scrolled_entry_context_menu_disabled_get(const Evas_Object *obj); EAPI void elm_scrolled_entry_scrollbar_policy_set(Evas_Object *obj, Elm_Scroller_Policy h, Elm_Scroller_Policy v); EAPI void elm_scrolled_entry_bounce_set(Evas_Object *obj, Eina_Bool h_bounce, Eina_Bool v_bounce); + EAPI void elm_scrolled_entry_icon_set(Evas_Object *obj, Evas_Object *icon); + EAPI void elm_scrolled_entry_icon_visible_set(Evas_Object *obj, Eina_Bool setting); + EAPI void elm_scrolled_entry_end_set(Evas_Object *obj, Evas_Object *end); + EAPI void elm_scrolled_entry_end_visible_set(Evas_Object *obj, Eina_Bool setting); EAPI Evas_Object *elm_conformant_add(Evas_Object *parent); EAPI void elm_conformant_content_set(Evas_Object *obj, Evas_Object *content); diff --git a/legacy/elementary/src/lib/elc_scrolled_entry.c b/legacy/elementary/src/lib/elc_scrolled_entry.c index baf1ab3c9e..478c291d21 100644 --- a/legacy/elementary/src/lib/elc_scrolled_entry.c +++ b/legacy/elementary/src/lib/elc_scrolled_entry.c @@ -35,7 +35,10 @@ typedef struct _Widget_Data Widget_Data; struct _Widget_Data { Evas_Object *scroller; + Evas_Object *box; Evas_Object *entry; + Evas_Object *icon; + Evas_Object *end; Elm_Scroller_Policy policy_h, policy_v; Eina_Bool single_line : 1; }; @@ -284,16 +287,27 @@ elm_scrolled_entry_add(Evas_Object *parent) elm_widget_signal_callback_add_hook_set(obj, _signal_callback_add_hook); elm_widget_signal_callback_del_hook_set(obj, _signal_callback_del_hook); + wd->box = elm_box_add(parent); + elm_widget_resize_object_set(obj, wd->box); + elm_box_horizontal_set(wd->box, EINA_TRUE); + elm_box_homogenous_set(wd->box, EINA_FALSE); + evas_object_show(wd->box); + wd->scroller = elm_scroller_add(parent); - elm_widget_resize_object_set(obj, wd->scroller); + evas_object_size_hint_weight_set(wd->scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(wd->scroller, EVAS_HINT_FILL, EVAS_HINT_FILL); elm_scroller_bounce_set(wd->scroller, 0, 0); - + elm_box_pack_start(wd->box, wd->scroller); + evas_object_show(wd->scroller); + wd->entry = elm_entry_add(parent); evas_object_size_hint_weight_set(wd->entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(wd->entry, EVAS_HINT_FILL, EVAS_HINT_FILL); elm_scroller_content_set(wd->scroller, wd->entry); evas_object_show(wd->entry); + wd->icon = wd->end = NULL; + evas_object_smart_callback_add(wd->entry, "changed", _entry_changed, obj); evas_object_smart_callback_add(wd->entry, "activated", _entry_activated, obj); evas_object_smart_callback_add(wd->entry, "press", _entry_press, obj); @@ -319,6 +333,104 @@ elm_scrolled_entry_add(Evas_Object *parent) return obj; } +/** + * This sets a widget to be displayed to the left of a scrolled entry. + * + * @param obj The scrolled entry object + * @param left_obj The widget to display on the left side of the scrolled entry. + * If it is NULL, and there is already an widget on the left-side, it will be destroyed. + * If it isn't NULL, and there were another widget on the left-side already, the old + * widget will be destroyed. + * + * @ingroup Scrolled_Entry + * @see elm_scrolled_entry_end_set + */ +EAPI void +elm_scrolled_entry_icon_set(Evas_Object *obj, Evas_Object *icon) +{ + ELM_CHECK_WIDTYPE(obj, widtype); + Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return; + if (wd->icon) evas_object_del(wd->icon); + if (icon) + { + wd->icon = icon; + elm_box_pack_before(wd->box, wd->icon, wd->scroller); + } + _sizing_eval(obj); +} + +/** + * Sets the visibility of the left-side widget of the scrolled entry, set by + * @elm_scrolled_entry_icon_set(). + * + * @param obj The scrolled entry object + * @param setting EINA_TRUE if the object should be displayed, EINA_FALSE if not. + * + * @ingroup Scrolled_Entry + */ +EAPI void +elm_scrolled_entry_icon_visible_set(Evas_Object *obj, Eina_Bool setting) +{ + ELM_CHECK_WIDTYPE(obj, widtype); + Widget_Data *wd = elm_widget_data_get(obj); + if (!wd || !wd->icon) return; + if (setting) + evas_object_hide(wd->icon); + else + evas_object_show(wd->icon); + _sizing_eval(obj); +} + +/** + * This sets a widget to be displayed to the end of a scrolled entry. + * + * @param obj The scrolled entry object + * @param left_obj The widget to display on the right side of the scrolled entry. + * If it is NULL, and there is already an widget on the right-side, it will be destroyed. + * If it isn't NULL, and there were another widget on the right-side already, the old + * widget will be destroyed. + * + * @ingroup Scrolled_Entry + * @see elm_scrolled_entry_icon_set + */ +EAPI void +elm_scrolled_entry_end_set(Evas_Object *obj, Evas_Object *end) +{ + ELM_CHECK_WIDTYPE(obj, widtype); + Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return; + if (wd->end) evas_object_del(wd->end); + if (end) + { + wd->end = end; + elm_box_pack_after(wd->box, wd->end, wd->scroller); + } + _sizing_eval(obj); +} + +/** + * Sets the visibility of the end widget of the scrolled entry, set by + * @elm_scrolled_entry_end_set(). + * + * @param obj The scrolled entry object + * @param setting EINA_TRUE if the object should be displayed, EINA_FALSE if not. + * + * @ingroup Scrolled_Entry + */ +EAPI void +elm_scrolled_entry_end_visible_set(Evas_Object *obj, Eina_Bool setting) +{ + ELM_CHECK_WIDTYPE(obj, widtype); + Widget_Data *wd = elm_widget_data_get(obj); + if (!wd || !wd->end) return; + if (setting) + evas_object_hide(wd->end); + else + evas_object_show(wd->end); + _sizing_eval(obj); +} + /** * This sets the scrolled entry object not to line wrap. All input will * be on a single line, and the entry box will scroll with user input.