#include "grid/grid_apps.h"
#include "grid/grid_webs.h"
-enum grid_type {
- GRID_INVALID = -1,
- GRID_TV = 0,
- GRID_MOVIE,
- GRID_GALLERY,
- GRID_MUSIC,
- GRID_APPS,
- GRID_WEBS,
- GRID_MAX
+enum menu_type {
+ MENU_INVALID = -1,
+ MENU_TV = 0,
+ MENU_MOVIE,
+ MENU_GALLERY,
+ MENU_MUSIC,
+ MENU_APPS,
+ MENU_WEBS,
+ MENU_MAX
+};
+
+struct _menu_data {
+ Evas_Object *btn;
+ Evas_Object *grid;
+ Eina_List *list;
};
struct _priv {
Evas_Object *win;
Evas_Object *base;
Evas_Object *box;
- Evas_Object *menu_btn[GRID_MAX];
- Evas_Object *grid;
- Eina_List *list[GRID_MAX];
- enum grid_type cur_grid;
+ struct _menu_data *mdata[MENU_MAX];
+ enum menu_type cur_menu;
};
const char *str_menu[] = {
};
static struct grid_class *(*_get_grid_class[])(void) = {
- [GRID_TV] = get_tv_grid_class,
- [GRID_MOVIE] = get_movie_grid_class,
- [GRID_GALLERY] = get_gallery_grid_class,
- [GRID_MUSIC] = get_music_grid_class,
- [GRID_APPS] = get_apps_grid_class,
- [GRID_WEBS] = get_webs_grid_class
+ [MENU_TV] = get_tv_grid_class,
+ [MENU_MOVIE] = get_movie_grid_class,
+ [MENU_GALLERY] = get_gallery_grid_class,
+ [MENU_MUSIC] = get_music_grid_class,
+ [MENU_APPS] = get_apps_grid_class,
+ [MENU_WEBS] = get_webs_grid_class
};
static void _clicked_cb(int id, void *data, Evas_Object *obj);
/* It will be implemented later. */
};
-static Eina_List *_get_contents_list(enum grid_type type)
+static Eina_List *_get_contents_list(enum menu_type type)
{
switch (type) {
- case GRID_TV:
+ case MENU_TV:
/* It will be implemented later. */
return NULL;
- case GRID_MOVIE:
+ case MENU_MOVIE:
/* It will be implemented later. */
return NULL;
- case GRID_GALLERY:
+ case MENU_GALLERY:
return get_media_favorite_list(CONTENTS_GALLERY);
- case GRID_MUSIC:
+ case MENU_MUSIC:
return get_media_favorite_list(CONTENTS_MUSIC);
- case GRID_APPS:
+ case MENU_APPS:
return get_app_favorite_list();
- case GRID_WEBS:
+ case MENU_WEBS:
/* It will be implemented later. */
return NULL;
default:
- _ERR("Invalid data type.");
+ _ERR("Invalid menu type.");
return NULL;
}
}
static bool _load_current_contents(struct _priv *priv)
{
+ struct _menu_data *mdata;
Eina_List *list = NULL;
- struct grid_class *gclass;
+ enum menu_type type;
- if (!priv || !priv->gmgr || !priv->grid) {
+ if (!priv || !priv->gmgr || priv->cur_menu <= MENU_INVALID
+ || priv->cur_menu >= MENU_MAX) {
_ERR("Invalid argument.");
return false;
}
+ type = priv->cur_menu;
- if (!priv->list[priv->cur_grid]) {
- list = _get_contents_list(priv->cur_grid);
+ mdata = priv->mdata[type];
+ if (!mdata || !mdata->grid)
+ return false;
+
+ if (!mdata->list) {
+ list = _get_contents_list(type);
if (!list) {
/* 'No contents' should be displayed. */
return true;
}
- priv->list[priv->cur_grid] = list;
+ mdata->list = list;
}
- gclass = _get_grid_class[priv->cur_grid]();
- if (!gclass) {
- _ERR("Get gclass failed.");
+ if (!gridmgr_append_list(priv->gmgr, str_menu[type], mdata->list)) {
+ _ERR("Gridmgr append list failed.");
return false;
}
- elm_object_part_content_set(priv->base, PART_GENGRID, priv->grid);
-
- if (!gridmgr_add_grid(priv->gmgr, gclass)) {
- _ERR("Gridmgr add grid failed.");
- gridmgr_destroy(priv->gmgr);
- return false;
- }
-
- if (!gridmgr_append_all(priv->gmgr, gclass->grid_id, priv->grid,
- priv->list[priv->cur_grid])) {
- _ERR("Gridmgr update grid failed.");
- gridmgr_destroy(priv->gmgr);
- return false;
- }
+ elm_object_part_content_set(priv->base, PART_GENGRID, mdata->grid);
return true;
}
}
priv = data;
- if (priv->cur_grid == id)
+ if (priv->cur_menu == id)
return;
- priv->cur_grid = id;
+ priv->cur_menu = id;
if (!_load_current_contents(priv))
_ERR("Load current grid view failed.");
static bool _draw_top_area(struct _priv *priv)
{
+ Evas_Object *btn;
int i;
if (!priv || !priv->base) {
return false;
}
- for (i = GRID_INVALID + 1; i < GRID_MAX; i++) {
- priv->menu_btn[i] = add_button(priv->box, NULL);
- if (!priv->menu_btn[i]) {
+ for (i = MENU_INVALID + 1; i < MENU_MAX; i++) {
+ btn = add_button(priv->box, NULL);
+ if (!btn) {
_ERR("Add button failed.");
evas_object_del(priv->box);
return false;
}
- elm_box_pack_end(priv->box, priv->menu_btn[i]);
+ elm_box_pack_end(priv->box, btn);
+ inputmgr_add_callback(btn, i, &_input_handler, priv);
- inputmgr_add_callback(priv->menu_btn[i],
- i, &_input_handler, priv);
+ priv->mdata[i]->btn = btn;
}
/* It will be implemented more later. */
return true;
}
+static Evas_Object *_add_grid(struct _priv *priv, enum menu_type type)
+{
+ struct grid_class *gclass;
+ Evas_Object *grid;
+
+ if (!priv || !priv->base || !priv->gmgr
+ || type <= MENU_INVALID || type >= MENU_MAX) {
+ _ERR("Invalid argument.");
+ return NULL;
+ }
+
+ grid = elm_gengrid_add(priv->base);
+ if (!grid) {
+ _ERR("elm_gengrid_add failed.");
+ return NULL;
+ }
+
+ evas_object_size_hint_weight_set(grid, EVAS_HINT_EXPAND,
+ EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(grid, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+ gclass = _get_grid_class[type]();
+ if (!gclass) {
+ _ERR("Get gclass failed.");
+ evas_object_del(grid);
+ return NULL;
+ }
+
+ if (!gridmgr_add_grid(priv->gmgr, str_menu[type], grid, gclass)) {
+ _ERR("Gridmgr add grid failed.");
+ evas_object_del(grid);
+ return NULL;
+ }
+
+ return grid;
+}
+
static Evas_Object *_create(Evas_Object *win, void *data)
{
struct _priv *priv;
+ struct _menu_data *mdata;
struct gridmgr *gmgr;
Evas_Object *base, *grid;
+ int i;
if (!win) {
_ERR("Invalid argument.");
elm_win_resize_object_add(win, base);
- grid = elm_gengrid_add(base);
- if (!grid) {
- _ERR("elm_gengrid_add failed.");
- goto end;
- }
-
- evas_object_size_hint_weight_set(grid, EVAS_HINT_EXPAND,
- EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(grid, EVAS_HINT_FILL, EVAS_HINT_FILL);
-
gmgr = gridmgr_create();
if (!gmgr) {
_ERR("Grid manager initialized failed.");
- goto end;
+ evas_object_del(base);
+ free(priv);
+ return NULL;
}
priv->win = win;
priv->base = base;
- priv->grid = grid;
priv->gmgr = gmgr;
+ for (i = MENU_INVALID + 1; i < MENU_MAX; i++) {
+ grid = _add_grid(priv, i);
+ if (!grid) {
+ _ERR("Add grid failed.");
+ goto err;
+ }
+
+ mdata = calloc(1, sizeof(*mdata));
+ if (!mdata) {
+ _ERR("Calloc failed.");
+ goto err;
+ }
+
+ mdata->grid = grid;
+ priv->mdata[i] = mdata;
+ }
+
if (!viewmgr_set_view_data(VIEW_ID_BASE, priv)) {
_ERR("Set view data failed.");
- gridmgr_destroy(gmgr);
- goto end;
+ goto err;
}
return base;
-end:
+err:
+ gridmgr_destroy(gmgr);
evas_object_del(base);
+
+ for (i = MENU_INVALID + 1; i < MENU_MAX; i++)
+ free(priv->mdata[i]);
+
free(priv);
return NULL;
evas_object_hide(priv->base);
}
-static void _destroy_data_list(Eina_List *list, enum grid_type type)
+static void _destroy_data_list(Eina_List *list, enum menu_type type)
{
if (!list)
return;
switch (type) {
- case GRID_TV:
+ case MENU_TV:
/* It will be implemented later. */
break;
- case GRID_MOVIE:
- case GRID_GALLERY:
- case GRID_MUSIC:
+ case MENU_MOVIE:
+ case MENU_GALLERY:
+ case MENU_MUSIC:
free_media_favorite_list(list);
break;
- case GRID_APPS:
+ case MENU_APPS:
free_app_favorite_list(list);
break;
- case GRID_WEBS:
+ case MENU_WEBS:
/* It will be implemented later. */
break;
default:
- _ERR("Invalid grid type.");
+ _ERR("Invalid menu type.");
return;
}
}
}
priv = data;
- for (i = GRID_INVALID + 1; i < GRID_MAX; i++)
- _destroy_data_list(priv->list[i], i);
+ for (i = MENU_INVALID + 1; i < MENU_MAX; i++) {
+ _destroy_data_list(priv->mdata[i]->list, i);
+ free(priv->mdata[i]);
+ }
if (priv->base)
evas_object_del(priv->base);