src/data/app.c
src/view/view_base.c
src/view/view_action_menu.c
- src/grid/grid_myapps.c
+ src/grid/grid.c
)
SET(TARGET_EDJ "${PROJECT_NAME}.edj")
bool get_app_text_bg_color(struct app_data *adata,
int *r, int *g, int *b, int *a);
void free_app_list(Eina_List *list);
+Eina_List *get_app_favorite_list(void);
#endif /* __AIR_APPS_APP_H__ */
/* Group for EDC */
#define GRP_VIEW_BASE "grp.view.base"
#define GRP_VIEW_ACTION_MENU "grp.view.action.menu"
-#define GRP_APP_THUMB_BG "grp.app.thumb.bg"
/* Part for EDC */
#define PART_TOP_TITLE "part.top.title"
#define PART_FAVORITE_ICON "part.favorite.icon"
#define PART_THUMB_BG "part.thumb.bg"
#define PART_THUMB_ICON "part.thumb.icon"
-#define PART_THUMB_ICON_BG "part.thumb.icon.bg"
-#define PART_THUMB_TEXT_BG "part.thumb.text.bg"
+#define PART_TEXT_BG "part.text.bg"
#define PART_THUMB_TEXT "part.thumb.text"
#define PART_THUMB_TEXT_BROWSER "part.thumb.text.browser"
#define PART_INSIDE_LINE "part.inside.line"
#define PART_TOP_BTN "part.top.button"
+#define PART_FAVORITE "part.favorite"
/* Style */
#define STYLE_MENU_BTN "style.menu.button"
#define STYLE_SORT_BTN "style.sort.button"
#define STYLE_OPTION_BTN "style.option.button"
#define STYLE_SORT_CTXPOPUP "style.sort.ctxpopup"
-#define STYLE_APP "style.app"
+#define STYLE_MYAPP "style.myapp"
+#define STYLE_FAVORITE "style.favorite"
#define STYLE_LIVETV_BTN "style.livetv.button"
#define STYLE_ACTION_MENU_FAV_BTN "style.action.menu.favorite.button"
#define STYLE_ACTION_MENU_LOCK_BTN "style.action.menu.lock.button"
#define ACTION_MENU_COUNT 3
/* Size */
-#define SIZE_GRID_WIDTH (212 + 26)
-#define SIZE_GRID_HEIGHT (294 + 26)
+#define SIZE_MYAPPS_GRID_WIDTH (212 + 26)
+#define SIZE_MYAPPS_GRID_HEIGHT (294 + 26)
+#define SIZE_FAVORITE_GRID_WIDTH (210 + 20)
+#define SIZE_FAVORITE_GRID_HEIGHT (292 + 20)
#define SIZE_STR 1024
#define SIZE_MENU_BOX_PAD_H (40 + 40)
#define SIZE_MENU_BOX_PAD_V 0
* limitations under the License.
*/
-#ifndef __AIR_APPS_GRID_MYAPPS_H__
-#define __AIR_APPS_GRID_MYAPPS_H__
+#ifndef __AIR_APPS_GRID_H__
+#define __AIR_APPS_GRID_H__
struct grid_class *get_myapps_grid_class(void);
+struct grid_class *get_favorite_grid_class(void);
-#endif /* __AIR_APPS_GRID_MYAPPS_H__ */
+#endif /* __AIR_APPS_GRID_H__ */
Evas_Coord padding_v);
Evas_Object *utils_add_button(Evas_Object *parent, const char *part,
const char *text, const char *style);
-Evas_Object *utils_add_gengrid(Evas_Object *parent);
+Evas_Object *utils_add_gengrid(Evas_Object *parent, Eina_Bool horizontal,
+ int width, int height);
Evas_Object *utils_add_table(Evas_Object *table, const char *part,
int padding_x, int padding_y);
bool utils_launch_app(const char *appid);
}
part {
- name, "padding.menu.divider.up";
+ name, "part.menu.divider.up";
type, RECT;
scale, 1;
description {
description {
state, "default" 0.0;
rel1 {
- to, "padding.menu.divider.up";
+ to, "part.menu.divider.up";
relative, 0.0 1.0;
}
rel2 {
- to, "padding.menu.divider.up";
+ to, "part.menu.divider.up";
relative, 0.0 1.0;
}
min, 375 124;
}
part {
- name, "padding.menu.divider.down";
+ name, "part.menu.divider.down";
type, RECT;
scale, 1;
description {
fixed, 1 1;
}
}
+
+ part {
+ name, "padding.favorite.text.left";
+ type, SPACER;
+ scale, 1;
+ description {
+ state, "default" 0.0;
+ rel1 {
+ to, "part.menu.divider.down";
+ relative, 0.0 1.0;
+ }
+ rel2 {
+ to, "part.menu.divider.down";
+ relative, 0.0 1.0;
+ }
+ min, 30 40;
+ align, 0.0 0.0;
+ fixed, 1 1;
+ }
+ }
+
+ part {
+ name, "padding.favorite.text.right";
+ type, SPACER;
+ scale, 1;
+ description {
+ state, "default" 0.0;
+ rel1 {
+ to, "part.menu.divider.down";
+ relative, 1.0 1.0;
+ }
+ rel2.to, "part.menu.divider.down";
+ min, 30 40;
+ align, 1.0 0.0;
+ fixed, 1 1;
+ }
+ }
+
+ part {
+ name, "part.favorite.text";
+ type, TEXT;
+ scale, 1;
+ description {
+ state, "default" 0.0;
+ color, 77 77 77 255;
+ min, 0 32;
+ rel1 {
+ to, "padding.favorite.text.left";
+ relative, 1.0 1.0;
+ }
+ rel2 {
+ to, "padding.favorite.text.right";
+ relative, 0.0 1.0;
+ }
+ text {
+ text, STR_FAVORITE;
+ font, FONT_TIZENSANS_LIGHT;
+ size, 32;
+ align, 0.0 0.5;
+ }
+ align, 0.5 0.0;
+ fixed, 0 1;
+ }
+ }
+
+ part {
+ name, "padding.favorite.topleft";
+ type, SPACER;
+ scale, 1;
+ description {
+ state, "default" 0.0;
+ min, 0 30;
+ rel1 {
+ to, "part.favorite.text";
+ relative, 0.0 1.0;
+ }
+ rel2.to, "part.favorite.text";
+ align, 0.5 0.0;
+ fixed, 0 1;
+ }
+ }
+
+ part {
+ name, "padding.favorite.bottomright";
+ type, SPACER;
+ scale, 1;
+ description {
+ state, "default" 0.0;
+ min, 10 0;
+ rel1 {
+ to, "bg";
+ relative, 1.0 0.0;
+ }
+ rel2.to, "bg";
+ align, 1.0 0.5;
+ fixed, 1 0;
+ }
+ }
+
+ part {
+ name, PART_FAVORITE;
+ type, SWALLOW;
+ scale, 1;
+ description {
+ state, "default" 0.0;
+ rel1 {
+ to, "padding.favorite.topleft";
+ relative, 0.0 1.0;
+ }
+ rel2 {
+ to, "padding.favorite.bottomright";
+ relative, 0.0 1.0;
+ }
+ }
+ }
}
}
}
}
}
-
-group {
- name, GRP_APP_THUMB_BG;
- parts {
- part {
- name, PART_THUMB_ICON_BG;
- type, SWALLOW;
- scale, 1;
- description {
- state, "default" 0.0;
- min, 212 212;
- rel2.relative, 0.0 0.0;
- align, 0.0 0.0;
- fixed, 1 1;
- }
- }
-
- part {
- name, PART_THUMB_TEXT_BG;
- type, SWALLOW;
- scale, 1;
- description {
- state, "default" 0.0;
- min, 212 82;
- rel1 {
- to, PART_THUMB_ICON_BG;
- relative, 0.0 1.0;
- }
- rel2 {
- to, PART_THUMB_ICON_BG;
- relative, 0.0 1.0;
- }
- align, 0.0 0.0;
- fixed, 1 1;
- }
- }
- }
-}
*/
group {
- name, "elm/gengrid/item/style.app/default";
+ name, "elm/gengrid/item/style.myapp/default";
data.item, "focus_highlight" "on";
data.item, "texts" "part.thumb.text part.thumb.text.browser";
- data.item, "contents" "part.thumb.icon part.thumb.bg part.favorite.icon";
+ data.item, "contents" "part.thumb.icon part.thumb.bg part.text.bg part.favorite.icon";
images {
image, FAVORITE_ICON_PNG COMP;
}
description {
state, "default" 0.0;
rel1.to, "part.bg";
- rel2.to, "part.bg";
+ rel2 {
+ to, PART_TEXT_BG;
+ relative, 1.0 0.0;
+ }
map {
perspective_on, 1;
perspective, "map";
}
part {
- name, "part.thumb.icon.bg";
- type, RECT;
+ name, PART_TEXT_BG;
+ type, SWALLOW;
scale, 1;
description {
state, "default" 0.0;
- min, 212 212;
- rel2.relative, 0.0 0.0;
- align, 0.0 0.0;
- fixed, 1 1;
- visible, 0;
+ min, 0 82;
+ rel1 {
+ to, "part.bg";
+ relative, 0.0 1.0;
+ }
+ rel2.to, "part.bg";
+ align, 0.5 1.0;
+ fixed, 0 1;
+ map {
+ perspective_on, 1;
+ perspective, "map";
+ }
}
}
state, "default" 0.0;
min, SIZE_ICON_MAX SIZE_ICON_MAX;
rel1 {
- to, "part.thumb.icon.bg";
+ to, PART_THUMB_BG;
relative, 0.5 0.5;
}
rel2 {
- to, "part.thumb.icon.bg";
+ to, PART_THUMB_BG;
relative, 0.5 0.5;
}
align, 0.5 0.5;
description {
state, "default" 0.0;
color, 194 194 194 255;
- min, 212 1;
- rel2.relative, 0.0 0.0;
- align, 0.0 0.0;
- fixed, 1 1;
+ min, 0 1;
+ rel1.to, "part.bg";
+ rel2 {
+ to, "part.bg";
+ relative, 1.0 0.0;
+ }
+ align, 0.5 0.0;
+ fixed, 0 1;
visible, 0;
}
description {
description {
state, "default" 0.0;
color, 194 194 194 255;
- min, 1 294;
- rel2.relative, 0.0 0.0;
- align, 0.0 0.0;
- fixed, 1 1;
- visible, 0;
- }
- description {
- state, "visible" 0.0;
- inherit, "default" 0.0;
- visible, 1;
- }
- }
-
- part {
- name, "part.inside.line.down";
- type, RECT;
- scale, 1;
- description {
- state, "default" 0.0;
- color, 194 194 194 255;
- min, 212 1;
+ min, 1 0;
rel1 {
- to, "part.inside.line.left";
+ to, "part.inside.line.up";
relative, 0.0 1.0;
}
rel2 {
- to, "part.inside.line.left";
+ to, "part.bg";
relative, 0.0 1.0;
}
- align, 0.0 1.0;
- fixed, 1 1;
+ align, 0.0 0.5;
+ fixed, 1 0;
visible, 0;
}
description {
description {
state, "default" 0.0;
color, 194 194 194 255;
- min, 1 294;
+ min, 1 0;
rel1 {
to, "part.inside.line.up";
- relative, 1.0 0.0;
- }
- rel2 {
- to, "part.inside.line.up";
- relative, 1.0 0.0;
+ relative, 1.0 1.0;
}
- align, 1.0 0.0;
- fixed, 1 1;
+ rel2.to, "part.bg";
+ align, 1.0 0.5;
+ fixed, 1 0;
visible, 0;
}
description {
}
part {
- name, "padding.divide.line";
- type, SPACER;
+ name, "part.inside.line.down";
+ type, RECT;
scale, 1;
description {
state, "default" 0.0;
- min, 0 82;
+ color, 194 194 194 255;
+ min, 0 1;
rel1 {
- to, "part.bg";
- relative, 0.0 1.0;
+ to, "part.inside.line.left";
+ relative, 1.0 1.0;
}
rel2 {
- to, "part.bg";
+ to, "part.inside.line.right";
relative, 0.0 1.0;
}
align, 0.5 1.0;
fixed, 0 1;
+ visible, 0;
+ }
+ description {
+ state, "visible" 0.0;
+ inherit, "default" 0.0;
+ visible, 1;
}
}
description {
state, "default" 0.0;
color, 194 194 194 255;
- min, 212 1;
- rel1.to, "padding.divide.line";
+ min, 0 1;
+ rel1.to, PART_TEXT_BG;
rel2 {
- to, "padding.divide.line";
- relative, 0.0 0.0;
+ to, PART_TEXT_BG;
+ relative, 1.0 0.0;
}
- align, 0.0 0.0;
- fixed, 1 1;
+ align, 0.5 0.0;
+ fixed, 0 1;
visible, 0;
}
description {
description {
state, "default" 0.0;
color, 0 119 246 255;
- min, 0 3;
+ min, 0 6;
rel1.to, "part.bg";
rel2 {
to, "part.bg";
description {
state, "default" 0.0;
color, 0 119 246 255;
- min, 3 0;
+ min, 6 0;
rel1 {
to, "part.focus.up";
relative, 0.0 1.0;
description {
state, "default" 0.0;
color, 0 119 246 255;
- min, 3 0;
+ min, 6 0;
rel1 {
to, "part.focus.up";
relative, 1.0 1.0;
}
part {
- name, "padding.thumb.text";
+ name, "padding.thumb.text.left";
type, SPACER;
scale, 1;
description {
}
part {
+ name, "padding.thumb.text.right";
+ type, SPACER;
+ scale, 1;
+ description {
+ state, "default" 0.0;
+ min, 18 0;
+ rel1 {
+ to, "part.focus.down";
+ relative, 1.0 0.0;
+ }
+ rel2.to, "part.focus.down";
+ align, 1.0 0.5;
+ fixed, 1 0;
+ }
+ }
+
+ part {
name, PART_THUMB_TEXT;
type, TEXT;
scale, 1;
description {
state, "default" 0.0;
color, 255 255 255 255;
- min, 176 82;
rel1 {
- to, "padding.thumb.text";
+ to, "padding.thumb.text.left";
relative, 1.0 0.0;
}
rel2 {
- to, "padding.thumb.text";
- relative, 1.0 0.0;
+ to, "padding.thumb.text.right";
+ relative, 0.0 1.0;
}
- align, 0.0 0.0;
- fixed, 1 1;
text {
font, FONT_TIZENSANS_LIGHT;
size, 28;
description {
state, "default" 0.0;
color, 92 92 92 255;
- min, 176 82;
rel1 {
- to, "padding.thumb.text";
+ to, "padding.thumb.text.left";
relative, 1.0 0.0;
}
rel2 {
- to, "padding.thumb.text";
- relative, 1.0 0.0;
+ to, "padding.thumb.text.right";
+ relative, 0.0 1.0;
}
- align, 0.0 0.0;
- fixed, 1 1;
text {
font, FONT_TIZENSANS_LIGHT;
size, 28;
}
}
}
+
+group {
+ name, "elm/gengrid/item/style.favorite/default";
+ inherit, "elm/gengrid/item/style.myapp/default";
+ data.item, "focus_highlight" "on";
+ data.item, "contents" "part.thumb.icon part.thumb.bg part.text.bg";
+ parts {
+ part {
+ name, "padding.bottom.right";
+ type, SPACER;
+ scale, 1;
+ description {
+ state, "default" 0.0;
+ rel1.relative, 1.0 1.0;
+ min, 20 20;
+ align, 1.0 1.0;
+ fixed, 1 1;
+ }
+ }
+ }
+}
adata = NULL;
}
}
+
+Eina_List *get_app_favorite_list(void)
+{
+ Eina_List *list = NULL, *l = NULL, *fav_list = NULL;
+ struct app_data *adata;
+
+ list = get_app_list();
+ if (!list)
+ return NULL;
+
+ EINA_LIST_FOREACH(list, l, adata) {
+ if (adata && get_app_favorite(adata))
+ fav_list = eina_list_append(fav_list, adata);
+ }
+
+ return fav_list;
+}
static Evas_Object *_content_get(void *data, Evas_Object *obj, const char *part)
{
struct app_data *adata;
- Evas_Object *img, *ly, *icon_bg, *text_bg;
+ Evas_Object *img, *icon_bg, *text_bg;
char *icon, *img_path;
int w, h, r, g, b, a;
return img;
} else if (!strcmp(part, PART_THUMB_BG)) {
- ly = elm_layout_add(obj);
- if (!ly) {
- _ERR("elm_bg_add failed.");
- return NULL;
- }
-
- elm_layout_file_set(ly, EDJEFILE, GRP_APP_THUMB_BG);
- evas_object_show(ly);
-
- icon_bg = evas_object_rectangle_add(ly);
+ icon_bg = evas_object_rectangle_add(obj);
if (!icon_bg) {
_ERR("elm_rectangle_add failed.");
- evas_object_del(ly);
- return NULL;
- }
-
- text_bg = evas_object_rectangle_add(icon_bg);
- if (!text_bg) {
- _ERR("elm_rectangle_add failed.");
- evas_object_del(ly);
return NULL;
}
if (!get_app_icon_bg_color(adata, &r, &g, &b, &a)) {
_ERR("Get color failed.");
- evas_object_del(ly);
return NULL;
}
evas_object_color_set(icon_bg, r, g, b, a);
+ return icon_bg;
+ } else if (!strcmp(part, PART_TEXT_BG)) {
+ text_bg = evas_object_rectangle_add(obj);
+ if (!text_bg) {
+ _ERR("elm_rectangle_add failed.");
+ return NULL;
+ }
+
if (!get_app_text_bg_color(adata, &r, &g, &b, &a)) {
_ERR("Get color failed.");
- evas_object_del(ly);
return NULL;
}
evas_object_color_set(text_bg, r, g, b, a);
- elm_object_part_content_set(ly, PART_THUMB_ICON_BG, icon_bg);
- elm_object_part_content_set(ly, PART_THUMB_TEXT_BG, text_bg);
-
- return ly;
+ return text_bg;
} else if (!strcmp(part, PART_FAVORITE_ICON)) {
if (!get_app_favorite(adata))
return NULL;
return NULL;
}
-static struct grid_class _gclass = {
- .item_style = STYLE_APP,
+static struct grid_class _myapp_gclass = {
+ .item_style = STYLE_MYAPP,
+ .text_get = _text_get,
+ .content_get = _content_get,
+ .state_get = NULL,
+ .del = NULL,
+};
+
+static struct grid_class _fav_gclass = {
+ .item_style = STYLE_FAVORITE,
.text_get = _text_get,
.content_get = _content_get,
.state_get = NULL,
struct grid_class *get_myapps_grid_class(void)
{
- return &_gclass;
+ return &_myapp_gclass;
+}
+
+struct grid_class *get_favorite_grid_class(void)
+{
+ return &_fav_gclass;
}
return btn;
}
-Evas_Object *utils_add_gengrid(Evas_Object *parent)
+Evas_Object *utils_add_gengrid(Evas_Object *parent, Eina_Bool horizontal,
+ int width, int height)
{
Evas_Object *grid;
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_horizontal_set(grid, horizontal);
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() * SIZE_GRID_WIDTH,
- elm_config_scale_get() * SIZE_GRID_HEIGHT);
+ elm_config_scale_get() * width,
+ elm_config_scale_get() * height);
elm_scroller_policy_set(grid, ELM_SCROLLER_POLICY_OFF,
ELM_SCROLLER_POLICY_OFF);
#include <Elementary.h>
#include <viewmgr.h>
#include <inputmgr.h>
+#include <gridmgr.h>
#include <app_debug.h>
#include "define.h"
#include "utils.h"
+#include "data/app.h"
+#include "grid.h"
+
+enum action_type {
+ ACTION_FAVORITE = 0,
+ ACTION_LOCK,
+ ACTION_UNINSTALL,
+};
struct _priv {
Evas_Object *win;
Evas_Object *base;
+ Evas_Object *grid;
Evas_Object *live_btn;
Evas_Object *menu_btn[ACTION_MENU_COUNT];
+ struct gridmgr *gmgr;
+ Eina_List *fav_list;
};
struct _action_info {
}
if (!strcmp(ev->keyname, KEY_BACK)
+ || !strcmp(ev->keyname, KEY_BACK_REMOTE)) {
+ viewmgr_hide_view(VIEW_ACTION_MENU);
+ } else if (!strcmp(ev->keyname, KEY_ENTER)
+ || !strcmp(ev->keyname, KEY_ENTER_REMOTE)) {
+ switch (id) {
+ case ACTION_FAVORITE:
+ /* It will be implemented later. */
+ break;
+
+ case ACTION_LOCK:
+ /* It is not supported yet. */
+ break;
+
+ case ACTION_UNINSTALL:
+ /* It is not supported yet. */
+ break;
+
+ default:
+ _ERR("Unhandled action type.");
+ }
+ }
+}
+
+static void _grid_mouse_move_cb(int id, void *data, Evas *e, Evas_Object *obj,
+ Evas_Event_Mouse_Move *ev)
+{
+ Elm_Object_Item *it;
+
+ if (!obj || !ev) {
+ _ERR("Invalid argument.");
+ return;
+ }
+
+ it = elm_gengrid_at_xy_item_get(obj, ev->cur.canvas.x,
+ ev->cur.canvas.y, NULL, NULL);
+ if (!it)
+ return;
+
+ if (!elm_object_item_focus_get(it))
+ elm_object_item_focus_set(it, EINA_TRUE);
+}
+
+static void _grid_item_selected_cb(void *data, Elm_Object_Item *it,
+ const char *emission, const char *source)
+{
+ struct app_data *adata;
+
+ if (!it) {
+ _ERR("Invalid argument.");
+ return;
+ }
+ adata = elm_object_item_data_get(it);
+
+ if (!utils_launch_app(get_app_id(adata)))
+ _ERR("Launch app failed.");
+
+ elm_gengrid_item_selected_set(it, EINA_FALSE);
+}
+
+static void _grid_realized_cb(int id, void *data, Evas_Object *obj,
+ Elm_Object_Item *item)
+{
+ if (!data || !item) {
+ _ERR("Invalid argument.");
+ return;
+ }
+
+ elm_object_item_signal_callback_add(item, SIG_ITEM_SELECTED,
+ SIG_SOURCE_EDC, _grid_item_selected_cb, data);
+}
+
+static void _grid_unrealized_cb(int id, void *data, Evas_Object *obj,
+ Elm_Object_Item *item)
+{
+ if (!item) {
+ _ERR("Invalid argument.");
+ return;
+ }
+
+ elm_object_item_signal_callback_del(item, SIG_ITEM_SELECTED,
+ SIG_SOURCE_EDC, _grid_item_selected_cb);
+}
+
+static void _grid_key_down_cb(int id, void *data, Evas *e, Evas_Object *obj,
+ Evas_Event_Key_Down *ev)
+{
+ if (!ev) {
+ _ERR("Invalid argument.");
+ return;
+ }
+
+ if (!strcmp(ev->keyname, KEY_BACK)
|| !strcmp(ev->keyname, KEY_BACK_REMOTE))
viewmgr_hide_view(VIEW_ACTION_MENU);
}
.key_down = _action_key_down_cb
};
+static input_handler _grid_input_handler = {
+ .mouse_move = _grid_mouse_move_cb,
+ .realized = _grid_realized_cb,
+ .unrealized = _grid_unrealized_cb,
+ .key_down = _grid_key_down_cb
+};
+
static bool _draw_livetv_area(struct _priv *priv)
{
Evas_Object *btn;
return false;
}
- /* It will be implemented later */
+ priv->fav_list = get_app_favorite_list();
+ if (!priv->fav_list) {
+ //emit no contents signal
+ return true;
+ }
+
+ if (!gridmgr_append_list(priv->gmgr, STR_FAVORITE, priv->fav_list)) {
+ _ERR("Gridmgr append list failed.");
+ return false;
+ }
+
+ elm_object_part_content_set(priv->base, PART_FAVORITE, priv->grid);
+
+ elm_object_focus_next_object_set(priv->menu_btn[0], priv->grid,
+ ELM_FOCUS_DOWN);
+ elm_object_focus_next_object_set(priv->grid, priv->menu_btn[0],
+ ELM_FOCUS_UP);
+ elm_object_focus_next_object_set(priv->grid, priv->grid, ELM_FOCUS_LEFT);
return true;
}
+static Evas_Object *_add_grid(struct _priv *priv)
+{
+ struct grid_class *gclass;
+ Evas_Object *grid;
+
+ if (!priv || !priv->base || !priv->gmgr) {
+ _ERR("Invalid argument.");
+ return NULL;
+ }
+
+ grid = utils_add_gengrid(priv->base, EINA_FALSE,
+ SIZE_FAVORITE_GRID_WIDTH, SIZE_FAVORITE_GRID_HEIGHT);
+ if (!grid) {
+ _ERR("Add gengrid failed.");
+ return NULL;
+ }
+
+ 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 NULL;
+ }
+
+ if (!gridmgr_add_grid(priv->gmgr, STR_FAVORITE, grid, gclass)) {
+ _ERR("Gridmgr add grid failed.");
+ evas_object_del(grid);
+ return NULL;
+ }
+
+ return grid;
+}
+
static void _draw_view_content(struct _priv *priv)
{
if (!priv) {
static Evas_Object *_create(Evas_Object *win, void *data)
{
struct _priv *priv;
- Evas_Object *base;
+ struct gridmgr *gmgr;
+ Evas_Object *base, *grid;
if (!win) {
_ERR("Get window object failed.");
return NULL;
}
+ gmgr = gridmgr_create();
+ if (!gmgr) {
+ _ERR("Create gridmgr failed.");
+ goto end;
+ }
+
priv->win = win;
priv->base = base;
+ priv->gmgr = gmgr;
+
+ grid = _add_grid(priv);
+ if (!grid) {
+ _ERR("Add grid failed.");
+ gridmgr_destroy(gmgr);
+ goto end;
+ }
+
+ priv->grid = grid;
if (!viewmgr_set_view_data(VIEW_ACTION_MENU, priv)) {
_ERR("Set view data failed.");
- evas_object_del(base);
- free(priv);
- return NULL;
+ gridmgr_destroy(gmgr);
+ goto end;
}
_draw_view_content(priv);
return base;
+
+end:
+ evas_object_del(base);
+ free(priv);
+
+ return NULL;
}
static void _show(void *data)
}
priv = (struct _priv *)data;
+ if (priv->gmgr)
+ gridmgr_destroy(priv->gmgr);
+
if (priv->base)
evas_object_del(priv->base);
#include "utils.h"
#include "data/app.h"
#include "view_base.h"
-#include "grid_myapps.h"
+#include "grid.h"
enum menu_type {
MENU_MYAPPS = 0,
return NULL;
}
- grid = utils_add_gengrid(priv->base);
+ grid = utils_add_gengrid(priv->base, EINA_TRUE,
+ SIZE_MYAPPS_GRID_WIDTH, SIZE_MYAPPS_GRID_HEIGHT);
if (!grid) {
_ERR("Add gengrid failed.");
return NULL;