From: Minseok Kim <minseok3.kim@samsung.com>

Subject: [E-devel] [E-deve] [Patch] Add new apis for editable set/get
in multibuttonentry

Typically multibuttonentry is used as a composer.
But sometimes, Multibuttonentry can be used as a viewer.
Currently there is no way to use multibuttonentry as non-editable
viewer.
So I added new APIs which are elm_multibuttonentry_editable_set/get().
If editable is true, entry in multibuttonentry is activated and user can
compose item by pressing the return key.
If not, entry is hidden and muttibuttonentry works as a non-editable
viewer.



SVN revision: 73223
This commit is contained in:
Minseok Kim 2012-07-03 11:22:46 +00:00 committed by Carsten Haitzler
parent 55e3f1df07
commit 06be3e5ab6
4 changed files with 96 additions and 20 deletions

View File

@ -60,3 +60,4 @@ Davide Andreoli (davemds) <dave@gurumeditation.it>
Michal Pakula vel Rutka <m.pakula@samsung.com>
Thiep Ha <thiep.ha@samsung.com>
Artem Popov <artem.popov@samsung.com>
Minseok Kim <minseok3.kim@samsung.com>

View File

@ -259,3 +259,9 @@
2012-07-3 Cedric Bail
* Initialize Emotion when necessary.
2012-07-3 Minseok Kim
* Add elm_multibuttonentry_editable_set() and
elm_multibuttonentry_editable_get()

View File

@ -78,6 +78,8 @@ struct _Widget_Data
Eina_Bool last_btn_select: 1;
Elm_Multibuttonentry_Item_Filter_Cb add_callback;
void *add_callback_data;
Eina_Bool editable;
};
static void _del_hook(Evas_Object *obj);
@ -204,15 +206,18 @@ _on_focus_hook(void *data __UNUSED__, Evas_Object *obj)
if (elm_widget_focus_get(obj))
{
if ((wd->selected_it))
if (wd->editable)
{
elm_entry_input_panel_show(wd->entry);
}
else if (((!wd->selected_it) || (!eina_list_count(wd->items))))
{
if (wd->entry) elm_entry_cursor_end_set(wd->entry);
_view_update(obj);
elm_entry_input_panel_show(wd->entry);
if ((wd->selected_it))
{
elm_entry_input_panel_show(wd->entry);
}
else if (((!wd->selected_it) || (!eina_list_count(wd->items))))
{
if (wd->entry) elm_entry_cursor_end_set(wd->entry);
_view_update(obj);
elm_entry_input_panel_show(wd->entry);
}
}
wd->focused = EINA_TRUE;
evas_object_smart_callback_call(obj, SIG_FOCUSED, NULL);
@ -269,8 +274,11 @@ _signal_mouse_clicked(void *data, Evas_Object *obj __UNUSED__, const char *emiss
wd->focused = EINA_TRUE;
_view_update(data);
elm_entry_input_panel_show(wd->entry);
elm_object_focus_set(wd->entry, EINA_TRUE);
if (wd->editable)
{
elm_entry_input_panel_show(wd->entry);
elm_object_focus_set(wd->entry, EINA_TRUE);
}
evas_object_smart_callback_call(data, SIG_CLICKED, NULL);
}
@ -358,11 +366,17 @@ _set_vis_guidetext(Evas_Object *obj)
else
{
evas_object_hide(wd->guidetext);
elm_box_pack_end(wd->box, wd->entry);
evas_object_show(wd->entry);
if (elm_widget_focus_get(obj) || wd->focused)
if (!wd->selected_it)
elm_object_focus_set(wd->entry, EINA_TRUE);
if (wd->editable)
{
elm_box_pack_end(wd->box, wd->entry);
evas_object_show(wd->entry);
if (elm_widget_focus_get(obj) || wd->focused)
{
if (!wd->selected_it)
elm_object_focus_set(wd->entry, EINA_TRUE);
}
}
wd->view_state = MULTIBUTTONENTRY_VIEW_ENTRY;
}
}
@ -776,7 +790,7 @@ _select_button(Evas_Object *obj, Evas_Object *btn)
else
{
_change_current_button_state(obj, MULTIBUTTONENTRY_BUTTON_STATE_DEFAULT);
if (elm_widget_focus_get(obj))
if (elm_widget_focus_get(obj) && wd->editable)
elm_object_focus_set(wd->entry, EINA_TRUE);
}
}
@ -908,7 +922,7 @@ _add_button_item(Evas_Object *obj, const char *str, Multibuttonentry_Pos pos, co
{
if (wd->view_state == MULTIBUTTONENTRY_VIEW_GUIDETEXT)
_set_vis_guidetext(obj);
if (wd->entry)
if (wd->entry && wd->editable)
elm_box_pack_before(wd->box, btn, wd->entry);
else
elm_box_pack_end(wd->box, btn);
@ -933,7 +947,7 @@ _add_button_item(Evas_Object *obj, const char *str, Multibuttonentry_Pos pos, co
{
if (wd->view_state == MULTIBUTTONENTRY_VIEW_GUIDETEXT)
_set_vis_guidetext(obj);
if (wd->entry)
if (wd->entry && wd->editable)
elm_box_pack_before(wd->box, btn, wd->entry);
else
elm_box_pack_end(wd->box, btn);
@ -958,7 +972,7 @@ _add_button_item(Evas_Object *obj, const char *str, Multibuttonentry_Pos pos, co
{
if (wd->view_state == MULTIBUTTONENTRY_VIEW_GUIDETEXT)
_set_vis_guidetext(obj);
if (wd->entry)
if (wd->entry && wd->editable)
elm_box_pack_before(wd->box, btn, wd->entry);
else
elm_box_pack_end(wd->box, btn);
@ -1011,7 +1025,7 @@ _evas_mbe_key_up_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__,
(strcmp(ev->keyname, "Delete") == 0)))
{
item = (Elm_Multibuttonentry_Item *)wd->selected_it;
if (item)
if (item && wd->editable)
{
_del_button_item(item);
elm_widget_item_free(item);
@ -1462,6 +1476,7 @@ elm_multibuttonentry_add(Evas_Object *parent)
wd->rect_for_end = NULL;
wd->add_callback = NULL;
wd->add_callback_data = NULL;
wd->editable = EINA_TRUE;
evas_object_smart_callbacks_descriptions_set(obj, _signals);
@ -1508,6 +1523,36 @@ elm_multibuttonentry_expanded_set(Evas_Object *obj, Eina_Bool expanded)
}
EAPI void
elm_multibuttonentry_editable_set(Evas_Object *obj, Eina_Bool editable)
{
ELM_CHECK_WIDTYPE(obj, widtype);
Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return;
if (wd->editable == editable) return;
wd->editable = editable;
if (wd->entry)
{
if (wd->editable)
evas_object_show(wd->entry);
else
{
elm_entry_input_panel_hide(wd->entry);
evas_object_hide(wd->entry);
}
}
}
EAPI Eina_Bool
elm_multibuttonentry_editable_get(const Evas_Object *obj)
{
ELM_CHECK_WIDTYPE(obj, widtype) -1;
Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return -1;
return wd->editable;
}
EAPI Elm_Object_Item *
elm_multibuttonentry_item_prepend(Evas_Object *obj, const char *label, Evas_Smart_Cb func, void *data)
{

View File

@ -313,6 +313,30 @@ EAPI void elm_multibuttonentry_item_filter_prepend(Evas_Ob
*/
EAPI void elm_multibuttonentry_item_filter_remove(Evas_Object *obj, Elm_Multibuttonentry_Item_Filter_Cb func, void *data);
/**
* Sets if the multibuttonentry is to be editable or not.
*
* @param obj The multibuttonentry object
* @param editable If EINA_TRUE, user can add/delete item in multibuttonentry, if not, the multibuttonentry is non-editable.
*
* @ingroup Multibuttonentry
*
* @since 1.1
*/
EAPI void elm_multibuttonentry_editable_set(Evas_Object *obj, Eina_Bool editable);
/**
* Gets whether the multibuttonentry is editable or not.
*
* @param obj The multibuttonentry object
* @return EINA_TRUE if the multibuttonentry is editable by the user. EINA_FALSE if not.
*
* @ingroup Multibuttonentry
*
* @since 1.1
*/
EAPI Eina_Bool elm_multibuttonentry_editable_get(const Evas_Object *obj);
/**
* @}
*/