void listmgr_set_list_next_focus(struct listmgr *listmgr, const char *list_id,
Evas_Object *obj_to_focus, Elm_Focus_Direction dir);
-void listmgr_add_realized_cb(struct listmgr *listmgr, const char *list_id,
+void listmgr_add_inner_grid_cb(struct listmgr *listmgr, const char *list_id,
input_handler *handler, void *data);
-void listmgr_remove_realized_cb(struct listmgr *listmgr, const char *list_id,
+void listmgr_remove_inner_grid_cb(struct listmgr *listmgr, const char *list_id,
input_handler *handler);
#endif /* __AIR_SETTINGS_LISTMGR_H__ */
char *(*status)(void *data, int id);
float (*progress_value)(void);
void (*selected)(void *data, int id);
+ void (*focused)(void *data, int id);
void (*selected_menu)(void *data, int id);
};
enum update_type {
UPDATE_FOCUS = 0,
+ UPDATE_SUB_ITEM_SELECTED,
UPDATE_TITLE,
UPDATE_CONTENT,
UPDATE_ENABLE,
#define SIG_ENABLED "elm,state,enabled"
#define SIG_DISABLED "elm,state,disabled"
#define SIG_SELECTED "selected"
+#define SIG_UNSELECTED "unselected"
#define SIG_NOTAVAILABLE "state,notavailable"
#define SIG_ITEM_SELECTED "sig.item.selected"
#define SIG_FAV_ADD "elm,state,favorite,add"
name, "elm/button/base/style.menu.button";
data.item, "focus_highlight" "on";
script {
- public cur_state;
+ public focused;
+ public selected;
}
parts {
part {
signal, SIG_FOCUSED;
source, SRC_ELM;
script {
- set_int(cur_state, STATE_NORMAL);
+ set_int(focused, true);
run_program(PROGRAM:"focused,anim");
}
}
source, SRC_ELM;
script {
new state;
- state = get_int(cur_state);
- if (state == STATE_SELECTED) {
+ state = get_int(selected);
+ if (state) {
set_state(PART:"part.bg", "selected", 0.0);
set_state(PART:"elm.text", "selected", 0.0);
set_state(PART:"part.bottom.line", "selected", 0.0);
} else {
run_program(PROGRAM:"unfocused,anim");
}
+ set_int(focused, false);
}
}
}
program {
- name, SIG_SELECTED;
- signal, "selected";
+ name, "selected";
+ signal, SIG_SELECTED;
script {
- set_int(cur_state, STATE_SELECTED);
set_state(PART:"part.bg", "selected", 0.0);
set_state(PART:"elm.text", "selected", 0.0);
set_state(PART:"part.bottom.line", "selected", 0.0);
+ set_int(selected, true);
+ }
+ }
+
+ program {
+ name, "unselected";
+ signal, SIG_UNSELECTED;
+ script {
+ new state;
+ state = get_int(focused);
+ if (state) {
+ set_state(PART:"part.bg", "focused", 0.0);
+ set_state(PART:"elm.text", "focused", 0.0);
+ set_state(PART:"part.bottom.line", "focused", 0.0);
+ } else {
+ set_state(PART:"part.bg", "default", 0.0);
+ set_state(PART:"elm.text", "default", 0.0);
+ set_state(PART:"part.bottom.line", "default", 0.0);
+ }
+ set_int(selected, false);
}
}
}
return true;
}
-void listmgr_add_realized_cb(struct listmgr *listmgr, const char *list_id,
+void listmgr_add_inner_grid_cb(struct listmgr *listmgr, const char *list_id,
input_handler *handler, void *data)
{
struct list_info *linfo;
_DBG("realized callback added");
}
-void listmgr_remove_realized_cb(struct listmgr *listmgr, const char *list_id,
+void listmgr_remove_inner_grid_cb(struct listmgr *listmgr, const char *list_id,
input_handler *handler)
{
struct list_info *linfo;
Evas_Event_Mouse_Move *ev)
{
SETTING_TRACE_BEGIN;
+
if (!obj) {
_ERR("Invalid argument.");
return;
}
}
+static void _focused(int id, void *data, Evas_Object *obj,
+ Elm_Object_Item *item)
+{
+ struct menumgr *m = (struct menumgr *)data;
+
+ if (!obj || !m)
+ return;
+
+ if (m->info[id] && m->info[id]->focused)
+ m->info[id]->focused(m->data, id);
+}
+
static input_handler _handler = {
.mouse_move = _mouse_move_cb,
.key_down = _key_down_cb,
.clicked = _clicked_cb,
+ .focused = _focused
};
void menumgr_update(struct menumgr *m)
static void _popup_clicked_cb(int id, void *data, Evas_Object *obj);
static void _key_down_cb(int id, void *data, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev);
static void _mouse_down_cb(int id, void *data, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Down *ev);
+static void _focused(int id, void *data, Evas_Object *obj, Elm_Object_Item *item);
static void _stop_popup_show(struct _priv *priv);
static void _stop_popup_create(struct _priv *priv);
.create = _create,
.show = _show,
.hide = _hide,
- .destroy = _destroy,
+ .destroy = _destroy
};
static input_handler _input_handler = {
.mouse_move = _mouse_move_cb,
.key_down = _key_down_cb,
.mouse_down = _mouse_down_cb,
+ .focused = _focused
};
static input_handler _popup_input_handler = {
_button_selected(priv);
}
+static void _focused(int id, void *data, Evas_Object *obj, Elm_Object_Item *item)
+{
+ viewmgr_update_view(VIEW_BASE, UPDATE_SUB_ITEM_SELECTED, (void *)LAYOUT_CHANNEL);
+}
+
static bool _create(layoutmgr *lmgr, void *data)
{
struct _priv *priv = NULL;
}
}
+static void _focused(int id, void *data, Evas_Object *obj, Elm_Object_Item *item)
+{
+ viewmgr_update_view(VIEW_BASE, UPDATE_SUB_ITEM_SELECTED, (void *)LAYOUT_NETWORK);
+}
+
static input_handler _network_type_input_handler = {
.mouse_move = _mouse_move_cb,
.mouse_down = _network_type_mouse_down_cb,
.key_down = _network_type_key_down_cb,
+ .focused = _focused
};
static input_handler _action_input_handler = {
.mouse_move = _mouse_move_cb,
.key_down = _action_key_down_cb,
+ .focused = _focused
};
static input_handler _grid_input_handler = {
.realized = _grid_realized_cb,
+ .focused = _focused
};
static void _draw_no_contents_message(struct _priv *priv)
layoutmgr_set_layout_data(lmgr, LAYOUT_ID_NETWORK, priv);
- listmgr_add_realized_cb(priv->listmgr, LIST_WIRELESS,
+ listmgr_add_inner_grid_cb(priv->listmgr, LIST_WIRELESS,
&_grid_input_handler, NULL);
return true;
datamgr_destroy(priv->wirelessmgr);
if (priv->listmgr) {
- listmgr_remove_realized_cb(priv->listmgr, LIST_WIRELESS,
+ listmgr_remove_inner_grid_cb(priv->listmgr, LIST_WIRELESS,
&_grid_input_handler);
listmgr_destroy(priv->listmgr);
}
static char *_get_tint(void *data, int id);
static char *_get_screen_adj(void *data, int id);
static void _selected(void *data, int id);
+static void _focused(void *data, int id);
static void _selected_menu(void *data, int id);
/* Class functions: */
.progress_value = NULL,
.progress_evas = NULL,
.selected = _selected,
+ .focused = _focused,
.selected_menu = _selected_menu
},
{
.progress_value = settings_picture_get_contrast_relative,
.progress_evas = NULL,
.selected = _selected,
+ .focused = _focused,
.selected_menu = _selected_menu
},
{
.progress_value = settings_picture_get_brightness_relative,
.progress_evas = NULL,
.selected = _selected,
+ .focused = _focused,
.selected_menu = _selected_menu
},
{
.progress_value = settings_picture_get_sharpness_relative,
.progress_evas = NULL,
.selected = _selected,
+ .focused = _focused,
.selected_menu = _selected_menu
},
{
.progress_value = settings_picture_get_color_relative,
.progress_evas = NULL,
.selected = _selected,
+ .focused = _focused,
.selected_menu = _selected_menu
},
{
.progress_value = settings_picture_get_tint_relative,
.progress_evas = NULL,
.selected = _selected,
+ .focused = _focused,
.selected_menu = _selected_menu
},
{
.progress_value = NULL,
.progress_evas = NULL,
.selected = _selected,
+ .focused = _focused,
.selected_menu = _selected_menu
},
};
}
}
+static void _focused(void *data, int id)
+{
+ viewmgr_update_view(VIEW_BASE, UPDATE_SUB_ITEM_SELECTED, (void *)LAYOUT_PICTURE);
+}
+
static void _selected_menu(void *data, int id)
{
switch (id)
#include "common/listmgr.h"
#include "common/datamgr.h"
#include "grid/grid_sound.h"
+#include "common/viewmgr.h"
#define SOUND_MODES_COUNT 3
int speakers_count;
};
-
static bool _select_item(Elm_Object_Item *it, struct _priv *priv,
Elm_Object_Item *prev_it, const char *list_id);
static void _sound_mode_selected_cb(Elm_Object_Item *it, void *data);
static void _hide(void *layout_data);
static void _destroy(void *layout_data);
+static void _grid_focused(int id, void *data, Evas_Object *obj, Elm_Object_Item *item);
+
static layout_class _lclass = {
.layout_id = LAYOUT_ID_SOUND,
.create = _create,
.destroy = _destroy,
};
+static input_handler grid_handler = {
+ .focused = _grid_focused
+};
+
layout_class *layout_sound_get_lclass(void)
{
return &_lclass;
}
-
static bool _create(layoutmgr *lmgr, void *data)
{
struct _priv *priv = NULL;
return false;
}
+ listmgr_add_inner_grid_cb(priv->list_mgr, LIST_SOUND_MODES_ID, &grid_handler, NULL);
+
if (!listmgr_add_list(priv->list_mgr, LIST_SPEAKERS_ID, get_sound_grid_class(),
_speaker_selected_cb, priv)) {
_ERR("Add location list failed.");
return false;
}
+ listmgr_add_inner_grid_cb(priv->list_mgr, LIST_SPEAKERS_ID, &grid_handler, NULL);
+
if(data) {
listmgr_set_list_next_focus(priv->list_mgr, LIST_SOUND_MODES_ID,
(Evas_Object *)data, ELM_FOCUS_UP);
return;
}
+ listmgr_remove_inner_grid_cb(priv->list_mgr, LIST_SOUND_MODES_ID, &grid_handler);
+ listmgr_remove_inner_grid_cb(priv->list_mgr, LIST_SPEAKERS_ID, &grid_handler);
+
evas_object_del(priv->ly);
listmgr_destroy(priv->list_mgr);
free(priv);
}
+static void _grid_focused(int id, void *data, Evas_Object *obj, Elm_Object_Item *item)
+{
+ viewmgr_update_view(VIEW_BASE, UPDATE_SUB_ITEM_SELECTED, (void *)LAYOUT_SOUND);
+}
+
static bool _select_item(Elm_Object_Item *it, struct _priv *priv,
Elm_Object_Item *prev_it, const char *list_id)
{
static char *_get_location(void *data, int id);
static void _selected(void *data, int id);
+static void _focused(void *data, int id);
static void _selected_menu(void *data, int id);
static void _location_selected(void *data, int id);
.favorite = EINA_TRUE,
.status = _get_clock_mode,
.selected = _selected,
+ .focused = _focused,
.selected_menu = _selected_menu
},
{
.disabled = EINA_FALSE,
.status = _get_sleep_timer,
.selected = _selected,
+ .focused = _focused,
.selected_menu = _selected_menu
},
{
.disabled = EINA_FALSE,
.status = _get_wakeup_timer,
.selected = _selected,
+ .focused = _focused,
.selected_menu = _selected_menu
},
{
.style = STYLE_NORMAL_BTN,
.disabled = EINA_FALSE,
.selected = _selected,
+ .focused = _focused,
.selected_menu = _selected_menu
},
{
.disabled = EINA_FALSE,
.status = _get_language,
.selected = _selected,
+ .focused = _focused,
.selected_menu = _selected_menu
},
{
.disabled = EINA_FALSE,
.status = _get_subtitle,
.selected = _selected,
+ .focused = _focused,
.selected_menu = _selected_menu
},
{
.disabled = EINA_FALSE,
.status = _get_location,
.selected = _location_selected,
+ .focused = _focused,
.selected_menu = _selected_menu
},
{
.style = STYLE_NORMAL_BTN,
.disabled = EINA_FALSE,
.selected = _selected,
+ .focused = _focused,
.selected_menu = _selected_menu
},
};
}
}
+static void _focused(void *data, int id)
+{
+ viewmgr_update_view(VIEW_BASE, UPDATE_SUB_ITEM_SELECTED, (void *)LAYOUT_SYSTEM);
+}
+
static void _selected_menu(void *data, int id)
{
switch (id)
return NULL;
}
- listmgr_add_realized_cb(priv->list_mgr, LOCATION_LIST_ID,
+ listmgr_add_inner_grid_cb(priv->list_mgr, LOCATION_LIST_ID,
&_grid_input_handler, NULL);
_fill_list_data(priv);
datamgr_destroy(priv->country_data_mgr);
- listmgr_remove_realized_cb(priv->list_mgr, LOCATION_LIST_ID,
+ listmgr_remove_inner_grid_cb(priv->list_mgr, LOCATION_LIST_ID,
&_grid_input_handler);
listmgr_destroy(priv->list_mgr);
Elm_Object_Item *it)
{
struct _priv *priv;
- int i;
+ int i = -1;
+ int j = 0;
if (!data || !obj) {
_ERR("Invalid argument.");
priv = data;
- for (i = 0; i < LAYOUT_MAX; i++) {
- if (priv->menu[i] == obj)
- break;
+ for (j = 0; j < LAYOUT_MAX; j++) {
+ elm_layout_signal_emit(priv->menu[j], SIG_UNSELECTED, "");
+ if (priv->menu[j] == obj)
+ i = j;
}
if (i == priv->cur_menu) {
case UPDATE_FOCUS:
elm_object_focus_set(priv->menu[priv->cur_menu], EINA_TRUE);
break;
+ case UPDATE_SUB_ITEM_SELECTED:
+ for (i = 0; i < LAYOUT_MAX; i++)
+ elm_layout_signal_emit(priv->menu[i], SIG_UNSELECTED, "");
+ elm_layout_signal_emit(priv->menu[priv->cur_menu], SIG_SELECTED, "");
+ break;
case UPDATE_TITLE:
elm_object_part_text_set(priv->base, PART_TOP_TITLE, _(STR_SETTINGS));
// tabbar buttons