[Elementary] Add icon/end objects to the scrolled entry.

SVN revision: 52602
This commit is contained in:
Leandro Pereira 2010-09-22 18:25:35 +00:00
parent 2aa5e5313f
commit 8c7e3016e1
3 changed files with 135 additions and 2 deletions

View File

@ -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);

View File

@ -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);

View File

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