elm_hoversel: add elm_hoversel_label_auto_changed_set/get() API

Summary:
Hoversel can be used like dropdown or pulldown menu.
In that case, changing hoversel label into selected item lable can be
considered as common usage of hoversel.
This API automatizes changing label.

Reviewers: SanghyeonLee, Hermet, cedric

Reviewed By: cedric

Subscribers: cedric

Differential Revision: https://phab.enlightenment.org/D2963

Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
This commit is contained in:
Jee-Yong Um 2015-10-04 15:09:22 +02:00 committed by Cedric BAIL
parent 9a9cc71a8a
commit 60ff0a3c6e
4 changed files with 49 additions and 0 deletions

View File

@ -182,6 +182,7 @@ test_hoversel(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_
hoversel = elm_hoversel_add(win);
elm_hoversel_scrollable_set(hoversel, EINA_TRUE);
elm_hoversel_label_auto_changed_set(hoversel, EINA_TRUE);
elm_hoversel_hover_parent_set(hoversel, win);
elm_object_text_set(hoversel, "Some Icons");
elm_hoversel_item_add(hoversel, "Item 1", NULL, ELM_ICON_NONE, NULL, NULL);

View File

@ -110,8 +110,33 @@ _on_item_clicked(void *data EINA_UNUSED,
Evas_Object *obj2 = WIDGET(item);
Elm_Object_Item *eo_it = EO_OBJ(item);
ELM_HOVERSEL_DATA_GET(obj2, sd);
if (item->func) item->func((void *)WIDGET_ITEM_DATA_GET(eo_it), obj2, eo_it);
eo_do(obj2, eo_event_callback_call(EVAS_SELECTABLE_INTERFACE_EVENT_SELECTED, eo_it));
if (sd->auto_changed)
{
Evas_Object *ic;
ic = elm_object_part_content_unset(obj2, "icon");
ELM_SAFE_FREE(ic, evas_object_del);
if (item->icon_file)
{
ic = elm_icon_add(obj2);
elm_image_resizable_set(ic, EINA_FALSE, EINA_TRUE);
if (item->icon_type == ELM_ICON_FILE)
elm_image_file_set(ic, item->icon_file, item->icon_group);
else if (item->icon_type == ELM_ICON_STANDARD)
elm_icon_standard_set(ic, item->icon_file);
elm_object_part_content_set(obj2, "icon", ic);
}
if(item->label)
elm_object_text_set(obj2, item->label);
}
elm_hoversel_hover_end(obj2);
return EINA_TRUE;
@ -901,5 +926,17 @@ _elm_hoversel_scrollable_get(Eo *obj EINA_UNUSED, Elm_Hoversel_Data *sd)
return sd->scroll_enabled;
}
EOLIAN void
_elm_hoversel_label_auto_changed_set(Eo *obj EINA_UNUSED, Elm_Hoversel_Data *sd, Eina_Bool auto_changed)
{
sd->auto_changed = !!auto_changed;
}
EOLIAN Eina_Bool
_elm_hoversel_label_auto_changed_get(Eo *obj EINA_UNUSED, Elm_Hoversel_Data *sd)
{
return sd->auto_changed;
}
#include "elm_hoversel_item.eo.c"
#include "elm_hoversel.eo.c"

View File

@ -57,6 +57,16 @@ class Elm.Hoversel (Elm.Button, Evas.Selectable_Interface,
scrollable: bool; [[$true if scrollable $false otherwise.]]
}
}
@property label_auto_changed {
[[Change the label of hoversel to that of selected item automatically.]]
get{
}
set{
}
values {
auto_changed: bool; [[$true if the label is changed automatically or $false otherwise]]
}
}
hover_begin {
[[This triggers the hoversel popup from code, the same as if the user had clicked the button.]]
}

View File

@ -42,6 +42,7 @@ struct _Elm_Hoversel_Data
Eina_Bool horizontal : 1;
Eina_Bool expanded : 1;
Eina_Bool scroll_enabled: 1;
Eina_Bool auto_changed : 1;
};
typedef struct _Elm_Hoversel_Item_Data Elm_Hoversel_Item_Data;