#define PART_GENGRID "part.gengrid"
/* Style */
-#define STYLE_TV "style.tv"
-#define STYLE_GALLERY "style.gallery"
-#define STYLE_MOVIE "style.movie"
-#define STYLE_MUSIC "style.music"
-#define STYLE_APPS "style.apps"
-#define STYLE_WEBS "style.webs"
#define STYLE_MENU_BTN "style.menu.button"
/* Signal */
/* Text */
#define STR_FAVORITE "Favorite"
-#define STR_TV "TV"
-#define STR_MOVIE "Movie"
-#define STR_GALLERY "Gallery"
-#define STR_MUSIC "Music"
-#define STR_APPS "Apps"
-#define STR_WEBS "Web bookmark"
+#define STR_NULL "(NULL)"
/* Font */
#define FONT_TIZENSANS_REGULAR "TizenSans"
#define FONT_TIZENSANS_LIGHT "TizenSans:style=Light"
+/* Count */
+#define COUNT_MENU 6
+
#endif /* __AIR_FAVORITE_DEFINE_H__ */
* limitations under the License.
*/
-#ifndef __AIR_FAVORITE_GRID_APPS_H__
-#define __AIR_FAVORITE_GRID_APPS_H__
+#ifndef __AIR_FAVORITE_GRID_H__
+#define __AIR_FAVORITE_GRID_H__
-struct grid_class *get_apps_grid_class(void);
+struct grid_data {
+ const char *id;
+ Evas_Object *grid;
+ int item_size_x;
+ int item_size_y;
+ Eina_List *list;
+ struct grid_class *gclass;
-#endif /* __AIR_FAVORITE_GRID_APPS_H__ */
+ Eina_List *(*create_item_list)(void);
+ void (*destroy_item_list)(Eina_List *list);
+};
+
+struct grid_data *get_tv_grid_data(void);
+struct grid_data *get_movie_grid_data(void);
+struct grid_data *get_gallery_grid_data(void);
+struct grid_data *get_music_grid_data(void);
+struct grid_data *get_apps_grid_data(void);
+struct grid_data *get_webs_grid_data(void);
+
+#endif /* __AIR_FAVORITE_GRID_H__ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __AIR_FAVORITE_GRID_GALLERY_H__
-#define __AIR_FAVORITE_GRID_GALLERY_H__
-
-struct grid_class *get_gallery_grid_class(void);
-
-#endif /* __AIR_FAVORITE_GRID_GALLERY_H__ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __AIR_FAVORITE_GRID_MOVIE_H__
-#define __AIR_FAVORITE_GRID_MOVIE_H__
-
-struct grid_class *get_movie_grid_class(void);
-
-#endif /* __AIR_FAVORITE_GRID_MOVIE_H__ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __AIR_FAVORITE_GRID_MUSIC_H__
-#define __AIR_FAVORITE_GRID_MUSIC_H__
-
-struct grid_class *get_music_grid_class(void);
-
-#endif /* __AIR_FAVORITE_GRID_MUSIC_H__ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __AIR_FAVORITE_GRID_TV_H__
-#define __AIR_FAVORITE_GRID_TV_H__
-
-struct grid_class *get_tv_grid_class(void);
-
-#endif /* __AIR_FAVORITE_GRID_TV_H__ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __AIR_FAVORITE_GRID_WEBS_H__
-#define __AIR_FAVORITE_GRID_WEBS_H__
-
-struct grid_class *get_webs_grid_class(void);
-
-#endif /* __AIR_FAVORITE_GRID_WEBS_H__ */
Evas_Object *add_window(const char *name);
Evas_Object *add_layout(Evas_Object *parent, const char *group);
+Evas_Object *add_gengrid(Evas_Object *parent, int item_size_x, int item_size_y);
Evas_Object *add_box(Evas_Object *parent, const char *part,
Eina_Bool horizontal);
Evas_Object *add_button(Evas_Object *parent, const char *part,
return layout;
}
+Evas_Object *add_gengrid(Evas_Object *parent, int item_size_x, int item_size_y)
+{
+ Evas_Object *grid;
+
+ if (!parent) {
+ _ERR("Invalid argument.");
+ return NULL;
+ }
+
+ grid = elm_gengrid_add(parent);
+ 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);
+
+ elm_gengrid_multi_select_set(grid, EINA_FALSE);
+ elm_gengrid_horizontal_set(grid, EINA_TRUE);
+ elm_gengrid_align_set(grid, 0.0, 0.0);
+ elm_gengrid_select_mode_set(grid, ELM_OBJECT_SELECT_MODE_ALWAYS);
+ elm_gengrid_item_size_set(grid, elm_config_scale_get() * item_size_x,
+ elm_config_scale_get() * item_size_y);
+
+ return grid;
+}
+
Evas_Object *add_box(Evas_Object *parent, const char *part,
Eina_Bool horizontal)
{
#include <app_contents.h>
#include "define.h"
+#include "grid.h"
#include "data/app.h"
+#define STR_APPS "Apps"
+#define STYLE_APPS "style.apps"
+#define ITEM_APPS_X (212 + 26)
+#define ITEM_APPS_Y (294 + 26)
+
static char *_text_get(void *data, Evas_Object *obj, const char *part)
{
struct app_data *adata;
- char *title = NULL;
if (!data) {
_ERR("Data is NULL.");
}
adata = data;
- title = get_app_name(adata);
-
- return title;
+ return strdup(get_app_name(adata));
}
static Evas_Object *_content_get(void *data, Evas_Object *obj, const char *part)
{
struct app_data *adata;
Evas_Object *img = NULL;
+ char *icon;
if (!data || !obj) {
_ERR("Data is NULL.");
}
adata = data;
+ icon = get_app_icon(adata);
+
img = elm_image_add(obj);
if (!img) {
_ERR("elm_image_add failed.");
return NULL;
}
- /* FIXME: It should be fixed when the icon path is NULL. */
- if (get_app_icon(adata))
- elm_image_file_set(img, get_app_icon(adata), NULL);
-
- evas_object_show(img);
+ if (!icon || !strcmp(icon, STR_NULL))
+ /* FIXME: It should be fixed when the icon path is NULL. */
+ elm_image_file_set(img, NULL, NULL);
+ else
+ elm_image_file_set(img, icon, NULL);
return img;
}
.del = NULL,
};
-struct grid_class *get_apps_grid_class(void)
+static Eina_List *_create_item_list(void)
+{
+ return get_app_favorite_list();
+}
+
+static void _destroy_item_list(Eina_List *list)
+{
+ if (!list)
+ return;
+
+ free_app_favorite_list(list);
+}
+
+static struct grid_data _gdata = {
+ .id = STR_APPS,
+ .item_size_x = ITEM_APPS_X,
+ .item_size_y = ITEM_APPS_Y,
+ .gclass = &_gclass,
+ .create_item_list = _create_item_list,
+ .destroy_item_list = _destroy_item_list,
+};
+
+struct grid_data *get_apps_grid_data(void)
{
- return &_gclass;
+ return &_gdata;
}
#include <app_contents.h>
#include "define.h"
+#include "grid.h"
#include "data/media.h"
+#define STR_GALLERY "Gallery"
+#define STYLE_GALLERY "style.gallery"
+#define ITEM_GALLERY_X (200 + 6)
+#define ITEM_GALLERY_Y (200 + 6)
+
static char *_text_get(void *data, Evas_Object *obj, const char *part)
{
app_media *am;
- char *media_id;
if (!data) {
_ERR("Data is NULL.");
}
am = data;
- media_id = get_media_name(am);
- if (!media_id)
- return NULL;
-
- return strdup(media_id);
+ return strdup(get_media_name(am));
}
static Evas_Object *_content_get(void *data, Evas_Object *obj, const char *part)
{
- /* It will be implemented later. */
+ app_media *am;
+ Evas_Object *icon, *img;
+ char *thumbnail;
+
+ if (!data || !obj) {
+ _ERR("Invalid argument.");
+ return NULL;
+ }
+ am = data;
+
+ thumbnail = get_media_thumbnail(am);
+
+ if (!thumbnail) {
+ icon = elm_icon_add(obj);
+ if (!icon) {
+ _ERR("elm_icon_add failed.");
+ return NULL;
+ }
+
+ elm_icon_thumb_set(icon, get_media_path(am), NULL);
+ elm_image_aspect_fixed_set(icon, EINA_FALSE);
+
+ return icon;
+ }
- return NULL;
+ img = elm_image_add(obj);
+ if (!img) {
+ _ERR("elm_image_add failed.");
+ return NULL;
+ }
+
+ elm_image_file_set(img, thumbnail, NULL);
+ elm_image_aspect_fixed_set(img, EINA_FALSE);
+ evas_object_show(img);
+
+ return img;
}
static struct grid_class _gclass = {
.del = NULL,
};
-struct grid_class *get_gallery_grid_class(void)
+static Eina_List *_create_item_list(void)
+{
+ return get_media_favorite_list(CONTENTS_GALLERY);
+}
+
+static void _destroy_item_list(Eina_List *list)
+{
+ if (!list)
+ return;
+
+ free_media_favorite_list(list);
+}
+
+static struct grid_data _gdata = {
+ .id = STR_GALLERY,
+ .item_size_x = ITEM_GALLERY_X,
+ .item_size_y = ITEM_GALLERY_Y,
+ .gclass = &_gclass,
+ .create_item_list = _create_item_list,
+ .destroy_item_list = _destroy_item_list,
+};
+
+struct grid_data *get_gallery_grid_data(void)
{
- return &_gclass;
+ return &_gdata;
}
#include <app_debug.h>
#include "define.h"
+#include "grid.h"
+#include "data/media.h"
+
+#define STR_MOVIE "Movie"
+#define STYLE_MOVIE "style.movie"
+#define ITEM_MOVIE_X (378 + 26)
+#define ITEM_MOVIE_Y (294 + 26)
static char *_text_get(void *data, Evas_Object *obj, const char *part)
{
.del = NULL,
};
-struct grid_class *get_movie_grid_class(void)
+static Eina_List *_create_item_list(void)
+{
+ /* It will be implemented later. */
+
+ return NULL;
+}
+
+static void _destroy_item_list(Eina_List *list)
+{
+ if (!list)
+ return;
+
+ free_media_favorite_list(list);
+}
+
+static struct grid_data _gdata = {
+ .id = STR_MOVIE,
+ .item_size_x = ITEM_MOVIE_X,
+ .item_size_y = ITEM_MOVIE_Y,
+ .gclass = &_gclass,
+ .create_item_list = _create_item_list,
+ .destroy_item_list = _destroy_item_list,
+};
+
+struct grid_data *get_movie_grid_data(void)
{
- return &_gclass;
+ return &_gdata;
}
#include <app_contents.h>
#include "define.h"
+#include "grid.h"
#include "data/media.h"
+#define STR_MUSIC "Music"
+#define STYLE_MUSIC "style.music"
+#define ITEM_MUSIC_X (488 + 26)
+#define ITEM_MUSIC_Y (134 + 26)
+
static char *_text_get(void *data, Evas_Object *obj, const char *part)
{
/* It will be implemented later. */
.del = NULL,
};
-struct grid_class *get_music_grid_class(void)
+static Eina_List *_create_item_list(void)
+{
+ return get_media_favorite_list(CONTENTS_MUSIC);
+}
+
+static void _destroy_item_list(Eina_List *list)
+{
+ if (!list)
+ return;
+
+ free_media_favorite_list(list);
+}
+
+static struct grid_data _gdata = {
+ .id = STR_MUSIC,
+ .item_size_x = ITEM_MUSIC_X,
+ .item_size_y = ITEM_MUSIC_Y,
+ .gclass = &_gclass,
+ .create_item_list = _create_item_list,
+ .destroy_item_list = _destroy_item_list,
+};
+
+struct grid_data *get_music_grid_data(void)
{
- return &_gclass;
+ return &_gdata;
}
#include <app_debug.h>
#include "define.h"
+#include "grid.h"
+
+#define STR_TV "TV"
+#define STYLE_TV "style.tv"
+#define ITEM_TV_X (378 + 26)
+#define ITEM_TV_Y (294 + 26)
static char *_text_get(void *data, Evas_Object *obj, const char *part)
{
.del = NULL,
};
-struct grid_class *get_tv_grid_class(void)
+static Eina_List *_create_item_list(void)
{
- return &_gclass;
+ /* It will be implemented later. */
+
+ return NULL;
}
+static void _destroy_item_list(Eina_List *list)
+{
+ if (!list)
+ return;
+
+ /* It will be implemented later. */
+}
+
+static struct grid_data _gdata = {
+ .id = STR_TV,
+ .item_size_x = ITEM_TV_X,
+ .item_size_y = ITEM_TV_Y,
+ .gclass = &_gclass,
+ .create_item_list = _create_item_list,
+ .destroy_item_list = _destroy_item_list,
+};
+
+struct grid_data *get_tv_grid_data(void)
+{
+ return &_gdata;
+}
#include <app_debug.h>
#include "define.h"
+#include "grid.h"
+
+#define STR_WEBS "Web bookmark"
+#define STYLE_WEBS "style.webs"
+#define ITEM_WEBS_X (378 + 26)
+#define ITEM_WEBS_Y (294 + 26)
static char *_text_get(void *data, Evas_Object *obj, const char *part)
{
.del = NULL,
};
-struct grid_class *get_webs_grid_class(void)
+static Eina_List *_create_item_list(void)
+{
+ /* It will be implemented later. */
+
+ return NULL;
+}
+
+static void _destroy_item_list(Eina_List *list)
+{
+ if (!list)
+ return;
+
+ /* It will be implemented later. */
+}
+
+static struct grid_data _gdata = {
+ .id = STR_WEBS,
+ .item_size_x = ITEM_WEBS_X,
+ .item_size_y = ITEM_WEBS_Y,
+ .gclass = &_gclass,
+ .create_item_list = _create_item_list,
+ .destroy_item_list = _destroy_item_list,
+};
+
+struct grid_data *get_webs_grid_data(void)
{
- return &_gclass;
+ return &_gdata;
}
#include "define.h"
#include "utils.h"
-#include "view/view_base.h"
+#include "view_base.h"
SET_TAG(PACKAGE);
#include "utils.h"
#include "data/media.h"
#include "data/app.h"
-#include "grid/grid_tv.h"
-#include "grid/grid_movie.h"
-#include "grid/grid_gallery.h"
-#include "grid/grid_music.h"
-#include "grid/grid_apps.h"
-#include "grid/grid_webs.h"
-
-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;
-};
+#include "grid.h"
struct _priv {
struct gridmgr *gmgr;
Evas_Object *win;
Evas_Object *base;
Evas_Object *box;
- struct _menu_data *mdata[MENU_MAX];
- enum menu_type cur_menu;
-};
-
-const char *str_menu[] = {
- STR_TV,
- STR_MOVIE,
- STR_GALLERY,
- STR_MUSIC,
- STR_APPS,
- STR_WEBS,
- NULL
+ Evas_Object *menu[COUNT_MENU];
+ int cur_menu_id;
};
-static struct grid_class *(*_get_grid_class[])(void) = {
- [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 struct grid_data *(*_get_grid_data[COUNT_MENU])(void) = {
+ get_tv_grid_data,
+ get_movie_grid_data,
+ get_gallery_grid_data,
+ get_music_grid_data,
+ get_apps_grid_data,
+ get_webs_grid_data
};
-static Eina_List *_get_contents_list(enum menu_type type)
-{
- switch (type) {
- case MENU_TV:
- /* It will be implemented later. */
- return NULL;
-
- case MENU_MOVIE:
- /* It will be implemented later. */
- return NULL;
-
- case MENU_GALLERY:
- return get_media_favorite_list(CONTENTS_GALLERY);
-
- case MENU_MUSIC:
- return get_media_favorite_list(CONTENTS_MUSIC);
-
- case MENU_APPS:
- return get_app_favorite_list();
-
- case MENU_WEBS:
- /* It will be implemented later. */
- return NULL;
-
- default:
- _ERR("Invalid menu type.");
- return NULL;
- }
-}
-
-static bool _load_current_grid(struct _priv *priv, enum menu_type type)
+static bool _load_current_grid(struct _priv *priv, int id)
{
- struct _menu_data *mdata;
+ struct grid_data *gdata;
Eina_List *list = NULL;
Evas_Object *prev_grid;
- if (!priv || !priv->gmgr || !priv->base ||
- type <= MENU_INVALID || type >= MENU_MAX) {
+ if (!priv || !priv->gmgr || !priv->base) {
_ERR("Invalid argument.");
return false;
}
+ gdata = _get_grid_data[id]();
+ if (!gdata || !gdata->id || !gdata->grid)
+ return false;
+
prev_grid = elm_object_part_content_unset(priv->base, PART_GENGRID);
evas_object_hide(prev_grid);
- mdata = priv->mdata[type];
- if (!mdata || !mdata->grid)
- return false;
-
- if (!mdata->list) {
- list = _get_contents_list(type);
+ if (!gdata->list) {
+ list = gdata->create_item_list();
if (!list) {
/* 'No contents' should be displayed. */
return true;
}
- mdata->list = list;
+ gdata->list = list;
}
- if (!gridmgr_append_list(priv->gmgr, str_menu[type], mdata->list)) {
+ if (!gridmgr_append_list(priv->gmgr, gdata->id, gdata->list)) {
_ERR("Gridmgr append list failed.");
return false;
}
- elm_object_part_content_set(priv->base, PART_GENGRID, mdata->grid);
- evas_object_show(mdata->grid);
+ elm_object_part_content_set(priv->base, PART_GENGRID, gdata->grid);
+ evas_object_show(gdata->grid);
return true;
}
}
priv = data;
- if (priv->cur_menu == id)
+ if (priv->cur_menu_id == id)
return;
- priv->cur_menu = id;
+ priv->cur_menu_id = id;
if (!_load_current_grid(priv, id))
_ERR("Load current grid view failed.");
static bool _draw_top_area(struct _priv *priv)
{
Evas_Object *btn;
+ struct grid_data *gdata;
int i;
if (!priv || !priv->base) {
return false;
}
- for (i = MENU_INVALID + 1; i < MENU_MAX; i++) {
- btn = add_button(priv->box, NULL, str_menu[i], STYLE_MENU_BTN);
+ for (i = 0; i < COUNT_MENU; i++) {
+ gdata = _get_grid_data[i]();
+ if (!gdata || !gdata->id) {
+ evas_object_del(priv->box);
+ return false;
+ }
+
+ btn = add_button(priv->box, NULL, gdata->id, STYLE_MENU_BTN);
if (!btn) {
_ERR("Add button failed.");
evas_object_del(priv->box);
elm_box_pack_end(priv->box, btn);
inputmgr_add_callback(btn, i, &_menu_input_handler, priv);
- priv->mdata[i]->btn = btn;
+ priv->menu[i] = btn;
}
- elm_object_focus_next_object_set(priv->mdata[0]->btn,
- priv->mdata[MENU_MAX - 1]->btn, ELM_FOCUS_LEFT);
- elm_object_focus_next_object_set(priv->mdata[MENU_MAX - 1]->btn,
- priv->mdata[0]->btn, ELM_FOCUS_RIGHT);
+ elm_object_focus_next_object_set(priv->menu[0],
+ priv->menu[COUNT_MENU - 1], ELM_FOCUS_LEFT);
+ elm_object_focus_next_object_set(priv->menu[COUNT_MENU - 1],
+ priv->menu[0], ELM_FOCUS_RIGHT);
- elm_object_focus_set(priv->mdata[0]->btn, EINA_TRUE);
+ elm_object_focus_set(priv->menu[0], EINA_TRUE);
return true;
}
-static Evas_Object *_add_grid(struct _priv *priv, enum menu_type type)
+static bool _add_grid(struct _priv *priv, int id)
{
- struct grid_class *gclass;
+ struct grid_data *gdata;
Evas_Object *grid;
- if (!priv || !priv->base || !priv->gmgr
- || type <= MENU_INVALID || type >= MENU_MAX) {
+ if (!priv || !priv->base || !priv->gmgr) {
_ERR("Invalid argument.");
- return NULL;
+ return false;
}
- grid = elm_gengrid_add(priv->base);
- if (!grid) {
- _ERR("elm_gengrid_add failed.");
- return NULL;
+ gdata = _get_grid_data[id]();
+ if (!gdata || !gdata->id || !gdata->gclass) {
+ _ERR("Get grid data failed.");
+ return false;
}
- 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;
+ grid = add_gengrid(priv->base, gdata->item_size_x, gdata->item_size_y);
+ if (!grid) {
+ _ERR("Add grid failed.");
+ return false;
}
- if (!gridmgr_add_grid(priv->gmgr, str_menu[type], grid, gclass)) {
+ if (!gridmgr_add_grid(priv->gmgr, gdata->id, grid, gdata->gclass)) {
_ERR("Gridmgr add grid failed.");
evas_object_del(grid);
- return NULL;
+ return false;
}
- return grid;
+ gdata->grid = grid;
+
+ return true;
}
static Evas_Object *_create(Evas_Object *win, void *data)
{
struct _priv *priv;
- struct _menu_data *mdata;
struct gridmgr *gmgr;
- Evas_Object *base, *grid;
+ Evas_Object *base;
int i;
if (!win) {
gmgr = gridmgr_create();
if (!gmgr) {
_ERR("Grid manager initialized failed.");
- evas_object_del(base);
- free(priv);
- return NULL;
+ goto err;
}
priv->win = win;
priv->base = base;
priv->gmgr = gmgr;
- priv->cur_menu = MENU_INVALID;
+ priv->cur_menu_id = -1;
- for (i = MENU_INVALID + 1; i < MENU_MAX; i++) {
- grid = _add_grid(priv, i);
- if (!grid) {
+ for (i = 0; i < COUNT_MENU; i++) {
+ if (!_add_grid(priv, i)) {
_ERR("Add grid failed.");
+ gridmgr_destroy(gmgr);
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 err;
}
return base;
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 menu_type type)
-{
- if (!list)
- return;
-
- switch (type) {
- case MENU_TV:
- /* It will be implemented later. */
- break;
-
- case MENU_MOVIE:
- case MENU_GALLERY:
- case MENU_MUSIC:
- free_media_favorite_list(list);
- break;
-
- case MENU_APPS:
- free_app_favorite_list(list);
- break;
-
- case MENU_WEBS:
- /* It will be implemented later. */
- break;
-
- default:
- _ERR("Invalid menu type.");
- return;
- }
-}
-
static void _destroy(void *data)
{
struct _priv *priv;
+ struct grid_data *gdata;
int i;
if (!data) {
}
priv = data;
- for (i = MENU_INVALID + 1; i < MENU_MAX; i++) {
- _destroy_data_list(priv->mdata[i]->list, i);
- free(priv->mdata[i]);
+ for (i = 0; i < COUNT_MENU; i++) {
+ gdata = _get_grid_data[i]();
+ if (gdata->list)
+ gdata->destroy_item_list(gdata->list);
}
if (priv->base)