From f7063b23d262dcafd2159a34c2b6afada65722ec Mon Sep 17 00:00:00 2001 From: Michal Skorupinski Date: Wed, 5 Apr 2017 11:53:45 +0200 Subject: [PATCH] [UI] Item in the clock mode popup is selected based on the clock setting. Change-Id: I633661ae4ae6e2ac455358da9d56cfaa88275c6f Signed-off-by: Michal Skorupinski --- include/view/common/view_generic_popup.h | 7 +++++++ res/widget/radio.edc | 2 +- src/view/common/view_generic_popup.c | 30 ++++++++++++++++++++++-------- src/view/system/view_clock_mode.c | 14 +++++++++++--- 4 files changed, 41 insertions(+), 12 deletions(-) diff --git a/include/view/common/view_generic_popup.h b/include/view/common/view_generic_popup.h index 82e438c..d9b892a 100644 --- a/include/view/common/view_generic_popup.h +++ b/include/view/common/view_generic_popup.h @@ -55,4 +55,11 @@ typedef struct { */ view_class *view_generic_popup_get_vclass(void); +/** + * Sets the item selected when the given popup is displayed. + * @param data The popup's private data. + * @param item The item to select. + */ +void view_generic_popup_set_selected_on_show(void *data, int item); + #endif /* VIEW_GENERIC_POPUP_H_ */ diff --git a/res/widget/radio.edc b/res/widget/radio.edc index 42e49b0..b723829 100644 --- a/res/widget/radio.edc +++ b/res/widget/radio.edc @@ -408,7 +408,7 @@ group { name: "elm/radio/base/style.popup.list"; } description { state: "visible" 0.0; inherit: "default" 0.0; - visible: 1; + visible: 0; } } part { name: "elm.swallow.content"; diff --git a/src/view/common/view_generic_popup.c b/src/view/common/view_generic_popup.c index a0baba7..8f955eb 100644 --- a/src/view/common/view_generic_popup.c +++ b/src/view/common/view_generic_popup.c @@ -35,6 +35,7 @@ struct _priv { Evas_Object *box; Eina_List *popup_buttons; int (*ui_id_on_show_focus)(void); + int item_selected_on_show; }; /* View class functions: */ @@ -43,7 +44,7 @@ static void _show(void *view_data); static void _hide(void *view_data); static void _destroy(void *view_data); -void _key_down_cb(int id, void *data, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev); +static void _key_down_cb(int id, void *data, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev); static input_handler _input_handler = { .key_down = _key_down_cb, @@ -107,18 +108,17 @@ static void _show(void *data) { SETTING_TRACE_BEGIN; struct _priv *priv = (struct _priv *)data; - Eina_List *children = NULL; - Evas_Object *first = NULL; + Eina_List *children = elm_box_children_get(priv->box); + Evas_Object *first = eina_list_data_get(children); + Evas_Object *selected = eina_list_nth(children, priv->item_selected_on_show); if (!priv) { _ERR("Invalid parameter."); return; } - children = elm_box_children_get(priv->box); - first = eina_list_data_get(children); - elm_object_focus_set(first, EINA_TRUE); - + elm_object_focus_set(selected, EINA_TRUE); + elm_radio_value_set(first, priv->item_selected_on_show); evas_object_show(priv->popup); SETTING_TRACE_END; @@ -227,6 +227,7 @@ static void _focus_chain_debug(Evas_Object *box) static bool _fill_items(struct _priv *priv, Evas_Object *popup, int item_count, const char **item_text, input_handler *handler) { Evas_Object *radio = NULL; + Evas_Object *group = NULL; priv->box = elm_box_add(priv->popup); elm_box_horizontal_set(priv->box, EINA_FALSE); @@ -237,6 +238,13 @@ static bool _fill_items(struct _priv *priv, Evas_Object *popup, int item_count, int i; for (i = 0; i < item_count; i++) { radio = utils_add_radio(priv->box, NULL, "style.popup.list", item_text[i % item_count]); + elm_radio_state_value_set(radio, i); + + if (i == 0) + group = radio; + else + elm_radio_group_add(radio, group); + evas_object_size_hint_min_set(radio, 300, 50); evas_object_size_hint_weight_set(radio, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(radio, EVAS_HINT_FILL, EVAS_HINT_FILL); @@ -253,7 +261,7 @@ static bool _fill_items(struct _priv *priv, Evas_Object *popup, int item_count, return true; } -void _key_down_cb(int id, void *data, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev) +static void _key_down_cb(int id, void *data, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev) { if (!obj || !ev) { _ERR("Invalid argument."); @@ -265,3 +273,9 @@ void _key_down_cb(int id, void *data, Evas *e, Evas_Object *obj, Evas_Event_Key_ viewmgr_pop_view(); } } + +void view_generic_popup_set_selected_on_show(void *data, int item) +{ + struct _priv *priv = (struct _priv *)data; + priv->item_selected_on_show = item; +} diff --git a/src/view/system/view_clock_mode.c b/src/view/system/view_clock_mode.c index 11c3cca..cdc4297 100755 --- a/src/view/system/view_clock_mode.c +++ b/src/view/system/view_clock_mode.c @@ -122,8 +122,16 @@ static void _popup_item_selected_cb(int id, void *data, Evas *e, Evas_Object *ob static void _show(void *data) { SETTING_TRACE_BEGIN - generic_popup_attr *g_data = data; + bool automatic; + generic_popup_attr *g_data = (generic_popup_attr *)data; view_class *vc = view_generic_popup_get_vclass(); + + settings_clock_is_time_automatic(&automatic); + if (automatic) + view_generic_popup_set_selected_on_show(g_data->generic_popup_data, TYPE_AUTO); + else + view_generic_popup_set_selected_on_show(g_data->generic_popup_data, TYPE_MANUAL); + vc->show(g_data->generic_popup_data); SETTING_TRACE_END } @@ -131,8 +139,8 @@ static void _show(void *data) static void _hide(void *data) { SETTING_TRACE_BEGIN; - generic_popup_attr *g_data = data; view_class *vc = view_generic_popup_get_vclass(); + generic_popup_attr *g_data = (generic_popup_attr *)data; vc->hide(g_data->generic_popup_data); SETTING_TRACE_END; } @@ -140,8 +148,8 @@ static void _hide(void *data) static void _destroy(void *data) { SETTING_TRACE_BEGIN; - generic_popup_attr *g_data = data; view_class *vc = view_generic_popup_get_vclass(); + generic_popup_attr *g_data = (generic_popup_attr *)data; vc->destroy(g_data->generic_popup_data); SETTING_TRACE_END; } -- 2.7.4