BTN_UNINSTALL,
BTN_OK,
BTN_CANCEL,
+ BTN_MORE,
};
struct _priv {
struct app_data *adata;
Evas_Object *win;
Evas_Object *base;
- Evas_Object *menu_area;
+ Evas_Object *scroller;
+ Evas_Object *box;
Evas_Object *grid;
+ Evas_Object *contents_ly;
Evas_Object *live_btn;
Evas_Object *menu[ACTION_MENU_COUNT];
+ Evas_Object *more_btn;
Evas_Object *popup;
struct gridmgr *gmgr;
Eina_List *fav_list;
.key_down = _key_down_cb
};
-static bool _draw_livetv_area(struct _priv *priv)
+static bool _add_livetv_button(struct _priv *priv)
{
Evas_Object *btn;
- btn = utils_add_button(priv->menu_area,
- PART_TOP_BTN, STR_LIVETV, STYLE_LIVETV_BTN);
+ btn = utils_add_button(priv->contents_ly, PART_TOP_BTN,
+ STR_LIVETV, STYLE_LIVETV_BTN);
if (!btn) {
_ERR("Add button failed.");
return false;
return true;
}
+static bool _add_grid(struct _priv *priv)
+{
+ struct grid_class *gclass;
+ Evas_Object *grid;
+
+ grid = utils_add_gengrid(priv->contents_ly, EINA_FALSE,
+ SIZE_FAVORITE_GRID_WIDTH, SIZE_FAVORITE_GRID_HEIGHT);
+ if (!grid) {
+ _ERR("Add gengrid failed.");
+ return false;
+ }
+
+ inputmgr_add_callback(grid, 0, &_grid_input_handler, priv);
+
+ gclass = get_favorite_grid_class();
+ if (!gclass) {
+ _ERR("Get favorite grid class failed.");
+ evas_object_del(grid);
+ return false;
+ }
+
+ if (!gridmgr_add_grid(priv->gmgr, STR_FAVORITE, grid, gclass)) {
+ _ERR("Gridmgr add grid failed.");
+ evas_object_del(grid);
+ return false;
+ }
+
+ priv->grid = grid;
+
+ return true;
+}
+
+static bool _add_more_button(struct _priv *priv)
+{
+ Evas_Object *btn;
+
+ btn = utils_add_button(priv->box, NULL, STR_MORE, STYLE_MORE_BTN);
+ if (!btn) {
+ _ERR("Add button failed.");
+ return false;
+ }
+
+ inputmgr_add_callback(btn, BTN_MORE, &_btn_input_handler, priv);
+
+ elm_box_pack_end(priv->box, btn);
+
+ priv->more_btn = btn;
+
+ return true;
+}
+
+static void _add_view_contents(struct _priv *priv)
+{
+ priv->contents_ly = utils_add_layout(priv->box,
+ GRP_ACTION_MENU_CONTENTS, EINA_FALSE);
+ if (!priv->contents_ly) {
+ _ERR("Add layout failed.");
+ return;
+ }
+
+ evas_object_show(priv->contents_ly);
+ elm_box_pack_end(priv->box, priv->contents_ly);
+
+ if (!_add_livetv_button(priv)) {
+ _ERR("Add livetv button failed.");
+ return;
+ }
+
+ if (!_add_grid(priv)) {
+ _ERR("Add grid failed.");
+ return;
+ }
+
+ if (!_add_more_button(priv))
+ _ERR("Add more button failed.");
+}
+
+static void _hide_done_cb(void *data, Evas_Object *obj,
+ const char *emission, const char *source)
+{
+ viewmgr_hide_view(VIEW_ACTION_MENU);
+}
+
static void _set_action_state(int idx, Evas_Object *btn, struct _priv *priv)
{
char *pkgtype;
} else if (action_info[idx].id == BTN_UNINSTALL) {
/* The 'rpm' type package uninstallation is not supported */
pkgtype = get_pkg_type(priv->adata);
- if (!strcmp(pkgtype, STR_WGT) || !strcmp(pkgtype, STR_TPK))
+ if (pkgtype && (!strcmp(pkgtype, STR_WGT)
+ || !strcmp(pkgtype, STR_TPK)))
action_info[idx].disable = EINA_FALSE;
else
action_info[idx].disable = EINA_TRUE;
elm_object_disabled_set(btn, EINA_TRUE);
}
-static bool _draw_action_area(struct _priv *priv)
+static bool _update_action_area(struct _priv *priv)
{
Evas_Object *table, *btn;
int i, row = 0, col = 0;
- table = utils_add_table(priv->menu_area, PART_MENU,
+ table = utils_add_table(priv->contents_ly, PART_MENU,
SIZE_ACTION_TABLE_BORDER, SIZE_ACTION_TABLE_BORDER);
if (!table) {
_ERR("Add table failed.");
return true;
}
-static void _set_focus_policy(struct _priv *priv)
+static void _draw_no_contents(struct _priv *priv)
{
- int i;
-
- elm_object_focus_next_object_set(priv->live_btn, priv->live_btn,
- ELM_FOCUS_UP);
- elm_object_focus_next_object_set(priv->live_btn, priv->live_btn,
- ELM_FOCUS_LEFT);
- elm_object_focus_next_object_set(priv->live_btn, priv->live_btn,
- ELM_FOCUS_RIGHT);
- elm_object_focus_next_object_set(priv->live_btn, priv->menu[0],
- ELM_FOCUS_DOWN);
+ Evas_Object *ly;
- for (i = 0; i < ACTION_MENU_COUNT; i++) {
- if (priv->fav_list)
- elm_object_focus_next_object_set(priv->menu[i],
- priv->grid, ELM_FOCUS_DOWN);
- else
- elm_object_focus_next_object_set(priv->menu[i],
- priv->menu[i], ELM_FOCUS_DOWN);
+ ly = utils_add_layout(priv->contents_ly, GRP_ACTION_MENU_NO_FAVORITE,
+ EINA_FALSE);
+ if (!ly) {
+ _ERR("Add layout failed.");
+ return;
}
- elm_object_focus_next_object_set(priv->menu[0], priv->menu[0],
- ELM_FOCUS_LEFT);
- elm_object_focus_next_object_set(priv->menu[ACTION_MENU_COUNT - 1],
- priv->menu[ACTION_MENU_COUNT - 1], ELM_FOCUS_RIGHT);
-
- elm_object_focus_next_object_set(priv->grid, priv->menu[0],
- ELM_FOCUS_UP);
- elm_object_focus_next_object_set(priv->grid, priv->grid,
- ELM_FOCUS_LEFT);
+ elm_object_focus_allow_set(priv->contents_ly, EINA_FALSE);
+ elm_object_part_content_set(priv->contents_ly, PART_NO_FAVORITE, ly);
}
static int _get_favorite_grid_height(int cnt)
return height;
}
-static bool _draw_favorite_area(struct _priv *priv)
+static bool _update_favorite_area(struct _priv *priv)
{
int cnt;
if (!priv->fav_list) {
- elm_object_signal_emit(priv->menu_area,
- SIG_NO_CONTENT, SRC_FAVORITE_AREA);
- _set_focus_policy(priv);
-
+ elm_gengrid_clear(priv->grid);
+ _draw_no_contents(priv);
return true;
}
- elm_object_signal_emit(priv->menu_area, SIG_CONTENT, SRC_FAVORITE_AREA);
+ elm_object_part_content_unset(priv->contents_ly, PART_NO_FAVORITE);
if (!gridmgr_append_list(priv->gmgr, STR_FAVORITE, priv->fav_list)) {
_ERR("Gridmgr append list failed.");
SIZE_FAVORITE_GRID_WIDTH * SIZE_FAVORITE_COL_MAX,
_get_favorite_grid_height(cnt));
- elm_object_part_content_set(priv->menu_area, PART_FAVORITE, priv->grid);
-
- _set_focus_policy(priv);
+ elm_object_part_content_set(priv->contents_ly,
+ PART_FAVORITE, priv->grid);
return true;
}
-static Evas_Object *_add_grid(struct _priv *priv)
+static void _set_focus_policy(struct _priv *priv)
{
- struct grid_class *gclass;
- Evas_Object *grid;
-
- grid = utils_add_gengrid(priv->menu_area, EINA_FALSE,
- SIZE_FAVORITE_GRID_WIDTH, SIZE_FAVORITE_GRID_HEIGHT);
- if (!grid) {
- _ERR("Add gengrid failed.");
- return NULL;
- }
+ int i;
- inputmgr_add_callback(grid, 0, &_grid_input_handler, priv);
+ elm_object_focus_next_object_set(priv->live_btn, priv->live_btn,
+ ELM_FOCUS_LEFT);
+ elm_object_focus_next_object_set(priv->live_btn, priv->menu[0],
+ ELM_FOCUS_DOWN);
- gclass = get_favorite_grid_class();
- if (!gclass) {
- _ERR("Get favorite grid class failed.");
- evas_object_del(grid);
- return NULL;
+ for (i = 0; i < ACTION_MENU_COUNT; i++) {
+ if (priv->fav_list)
+ elm_object_focus_next_object_set(priv->menu[i],
+ priv->grid, ELM_FOCUS_DOWN);
+ else
+ elm_object_focus_next_object_set(priv->menu[i],
+ priv->more_btn, ELM_FOCUS_DOWN);
}
- if (!gridmgr_add_grid(priv->gmgr, STR_FAVORITE, grid, gclass)) {
- _ERR("Gridmgr add grid failed.");
- evas_object_del(grid);
- return NULL;
- }
+ elm_object_focus_next_object_set(priv->menu[0], priv->menu[0],
+ ELM_FOCUS_LEFT);
+ elm_object_focus_next_object_set(priv->menu[ACTION_MENU_COUNT - 1],
+ priv->menu[ACTION_MENU_COUNT - 1], ELM_FOCUS_RIGHT);
- return grid;
-}
+ elm_object_focus_next_object_set(priv->grid, priv->menu[0],
+ ELM_FOCUS_UP);
+ elm_object_focus_next_object_set(priv->grid, priv->grid,
+ ELM_FOCUS_LEFT);
-static void _hide_done_cb(void *data, Evas_Object *obj,
- const char *emission, const char *source)
-{
- viewmgr_hide_view(VIEW_ACTION_MENU);
+ if (!priv->fav_list)
+ elm_object_focus_next_object_set(priv->more_btn, priv->menu[0],
+ ELM_FOCUS_UP);
+ else
+ elm_object_focus_next_object_set(priv->more_btn, priv->grid,
+ ELM_FOCUS_UP);
+
+ elm_object_focus_next_object_set(priv->more_btn, priv->more_btn,
+ ELM_FOCUS_LEFT);
}
static Evas_Object *_create(Evas_Object *win, void *data)
{
struct _priv *priv;
struct gridmgr *gmgr;
- Evas_Object *base, *menu_area, *scr, *grid;
+ Evas_Object *base, *scr, *box;
if (!win) {
_ERR("Get window object failed.");
return NULL;
}
- menu_area = utils_add_layout(base, GRP_ACTION_MENU, EINA_FALSE);
- if (!menu_area) {
- _ERR("Add layout failed.");
+ scr = utils_add_scroller(base, PART_ACTION_MENU, NULL);
+ if (!scr) {
+ _ERR("Add scroller failed.");
goto end;
}
- scr = utils_add_scroller(base, PART_ACTION_MENU, menu_area);
- if (!scr) {
- _ERR("Add scroller failed.");
+ elm_scroller_step_size_set(scr, 0, SIZE_SCROLLER_STEP);
+
+ box = utils_add_box(scr, NULL, EINA_FALSE, 0.0, 0.0);
+ if (!box) {
+ _ERR("Add box failed.");
goto end;
}
+ elm_box_align_set(box, 0.5, 0.0);
+
gmgr = gridmgr_create();
if (!gmgr) {
_ERR("Create gridmgr failed.");
priv->win = win;
priv->base = base;
- priv->menu_area = menu_area;
+ priv->scroller = scr;
+ priv->box = box;
priv->gmgr = gmgr;
- grid = _add_grid(priv);
- if (!grid) {
- _ERR("Add grid failed.");
- gridmgr_destroy(gmgr);
- goto end;
- }
-
- priv->grid = grid;
+ _add_view_contents(priv);
if (!viewmgr_set_view_data(VIEW_ACTION_MENU, priv)) {
_ERR("Set view data failed.");
return NULL;
}
-static void _draw_action_menu(struct _priv *priv)
-{
- _draw_livetv_area(priv);
- _draw_action_area(priv);
- _draw_favorite_area(priv);
-}
-
static void _show(void *data)
{
struct _priv *priv;
}
priv = data;
+ elm_scroller_region_show(priv->scroller, 0, 0, 0, 0);
+
+ if (!_update_action_area(priv)) {
+ _ERR("Update action area failed.");
+ return;
+ }
+
+ if (!_update_favorite_area(priv)) {
+ _ERR("Update favorite area failed.");
+ return;
+ }
+
+ _set_focus_policy(priv);
+
if (priv->base)
evas_object_show(priv->base);
- _draw_action_menu(priv);
-
elm_object_signal_emit(priv->base, SIG_SHOW, SIG_SOURCE_EDC);
elm_object_focus_set(priv->live_btn, EINA_TRUE);
}