summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJehun Lim <jehun.lim@samsung.com>2015-08-18 14:02:17 +0900
committerJehun Lim <jehun.lim@samsung.com>2015-08-19 15:36:39 +0900
commit231ed03a186903023e77cb1a8f38d7d3745c1790 (patch)
treeb896311a86fd65774bb9030b48f765b111d59a97
parent5cf344b5e42e58005fcfb5d5bc1a9d90777fb1ff (diff)
downloadair_mediahub-231ed03a186903023e77cb1a8f38d7d3745c1790.tar.gz
air_mediahub-231ed03a186903023e77cb1a8f38d7d3745c1790.tar.bz2
air_mediahub-231ed03a186903023e77cb1a8f38d7d3745c1790.zip
action_menu: draw favorite area
Change-Id: I2562f008e5ca13c4768a0afcb2553204a6e446c1 Signed-off-by: Jehun Lim <jehun.lim@samsung.com>
-rw-r--r--include/util/util.h4
-rw-r--r--include/view/action_menu.h11
-rw-r--r--res/edc/view/action_menu.edc2
-rw-r--r--res/edc/widgets/gengrid.edc80
-rw-r--r--src/util/listmgr.c3
-rw-r--r--src/util/util.c6
-rw-r--r--src/view/action_menu.c188
7 files changed, 283 insertions, 11 deletions
diff --git a/include/util/util.h b/include/util/util.h
index 01901f6..b2e6175 100644
--- a/include/util/util.h
+++ b/include/util/util.h
@@ -22,8 +22,8 @@
void util_set_alpha_color(Evas_Object *obj, int alpha);
Evas_Object *util_add_box(Evas_Object *base);
-Evas_Object *util_add_gengrid(Evas_Object *base,
- int item_size_x, int item_size_y);
+Evas_Object *util_add_gengrid(Evas_Object *base, int item_size_x,
+ int item_size_y, Eina_Bool horizontal);
Evas_Object *util_add_genlist(Evas_Object *base);
Evas_Object *util_add_image(Evas_Object *base, const char *file);
Evas_Object *util_add_scroller(Evas_Object *base);
diff --git a/include/view/action_menu.h b/include/view/action_menu.h
index ccd5367..7b0e8d9 100644
--- a/include/view/action_menu.h
+++ b/include/view/action_menu.h
@@ -36,6 +36,10 @@
#define STYLE_BTN_DELETE "action_btn_delete"
#define STYLE_BTN_EMPTY "action_btn_empty"
+#define STYLE_GRID_MOVIE_ITEM_FAVORITE "movie_item_favorite"
+#define STYLE_GRID_GALLERY_ITEM_FAVORITE "gallery_item_favorite"
+#define STYLE_GRID_SONG_ITEM_FAVORITE "song_item_favorite"
+
/* image */
#define IMAGE_ACTION_FAVORITE_NOR "/btn_menu_favorite_nor.png"
#define IMAGE_ACTION_FAVORITE_FOC "/btn_menu_favorite_foc.png"
@@ -47,4 +51,11 @@
#define IMAGE_ACTION_DELETE_SEL "/btn_menu_del_sel.png"
#define IMAGE_ACTION_DELETE_DIS "/btn_menu_del_dis.png"
+#define GRID_ITEM_X_MOVIE 440
+#define GRID_ITEM_Y_MOVIE (328 + 32)
+#define GRID_ITEM_X_GALLERY (210 + 20)
+#define GRID_ITEM_Y_GALLERY (210 + 20)
+#define GRID_ITEM_X_MUSIC 440
+#define GRID_ITEM_Y_MUSIC (134 + 20)
+
#endif /* __AIR_MEDIAHUB_VIEW_ACTION_MENU_H__ */
diff --git a/res/edc/view/action_menu.edc b/res/edc/view/action_menu.edc
index 3d6261e..7514ebf 100644
--- a/res/edc/view/action_menu.edc
+++ b/res/edc/view/action_menu.edc
@@ -170,7 +170,7 @@ group {
relative: 1.0 1.0;
}
rel2.to: PART_ACTION_MENU_AREA;
- min: 30 40;
+ min: 10 40;
align: 1.0 0.0;
fixed: 1 1;
}
diff --git a/res/edc/widgets/gengrid.edc b/res/edc/widgets/gengrid.edc
index 30a336c..b0e3eba 100644
--- a/res/edc/widgets/gengrid.edc
+++ b/res/edc/widgets/gengrid.edc
@@ -1597,3 +1597,83 @@ group {
}
}
}
+
+group {
+ name: "elm/gengrid/item/movie_item_favorite/default";
+ inherit: "elm/gengrid/item/movie_item/default";
+ parts {
+ part {
+ name: "elm.padding.bottom_right";
+ type: SPACER;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1.relative: 1.0 1.0;
+ min: 0 32;
+ align: 1.0 1.0;
+ fixed: 1 1;
+ }
+ }
+ }
+}
+
+group {
+ name: "elm/gengrid/item/gallery_item_favorite/default";
+ inherit: "elm/gengrid/item/gallery_item/default";
+ parts {
+ part {
+ name: "elm.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;
+ }
+ }
+ }
+}
+
+group {
+ name: "elm/gengrid/item/song_item_favorite/default";
+ inherit: "elm/gengrid/item/song_item/default";
+ parts {
+ part {
+ name: "elm.padding.bottom_right";
+ type: SPACER;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1.relative: 1.0 1.0;
+ min: 0 20;
+ align: 1.0 1.0;
+ fixed: 1 1;
+ }
+ }
+ part {
+ name: "defaultbg_text";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 {
+ to: "bg";
+ relative: 1.0 0.0;
+ }
+ rel2.to: "bg";
+ min: 306 0;
+ align: 1.0 0.5;
+ color: COLOR_ITEM_BG;
+ fixed: 1 0;
+ }
+ description {
+ state: "selected" 0.0;
+ inherit: "default" 0.0;
+ color: COLOR_ITEM_FOCUS;
+ map.on: 1;
+ }
+ }
+ }
+}
diff --git a/src/util/listmgr.c b/src/util/listmgr.c
index 88e34ec..c2a1831 100644
--- a/src/util/listmgr.c
+++ b/src/util/listmgr.c
@@ -396,7 +396,8 @@ static Evas_Object *_draw_list_item(struct listmgr *lmgr, struct group_info *gi)
inputmgr_add_callback(btn, LISTMGR_INDEX, &_handler, lmgr);
- grid = util_add_gengrid(ly, data->grid_item_x, data->grid_item_y);
+ grid = util_add_gengrid(ly, data->grid_item_x,
+ data->grid_item_y, EINA_TRUE);
if (!grid) {
_ERR("failed to create gengrid object");
evas_object_del(ly);
diff --git a/src/util/util.c b/src/util/util.c
index 41f0cd8..ec55187 100644
--- a/src/util/util.c
+++ b/src/util/util.c
@@ -54,8 +54,8 @@ Evas_Object *util_add_box(Evas_Object *base)
return box;
}
-Evas_Object *util_add_gengrid(Evas_Object *base,
- int item_size_x, int item_size_y)
+Evas_Object *util_add_gengrid(Evas_Object *base, int item_size_x,
+ int item_size_y, Eina_Bool horizontal)
{
Evas_Object *grid;
@@ -75,7 +75,7 @@ Evas_Object *util_add_gengrid(Evas_Object *base,
elm_gengrid_select_mode_set(grid, ELM_OBJECT_SELECT_MODE_ALWAYS);
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);
diff --git a/src/view/action_menu.c b/src/view/action_menu.c
index c588ca7..6b6d004 100644
--- a/src/view/action_menu.c
+++ b/src/view/action_menu.c
@@ -16,19 +16,32 @@
#include <Elementary.h>
#include <app_debug.h>
+#include <app_contents.h>
#include <inputmgr.h>
#include <viewmgr.h>
#include "define.h"
+#include "view.h"
#include "util/util.h"
#define TEXT_LIVETV "Live TV"
+#define TEXT_FAVORITE "Favorite"
+
+#define VIDEO_COPYRIGHT "Unknown"
#define MAX_NUM_MENU 4
enum _object_type {
ACTION_LIVETV_BTN = 0,
- ACTION_MENU_BTN
+ ACTION_MENU_BTN,
+ ACTION_FAVORITE_GRID
+};
+
+enum _content_type {
+ E_CONTENT_MOVIE = 0,
+ E_CONTENT_GALLERY,
+ E_CONTENT_MUSIC,
+ E_CONTENT_MAX
};
struct _priv {
@@ -37,6 +50,7 @@ struct _priv {
Evas_Object *tv_btn;
Evas_Object *menu_btn[MAX_NUM_MENU];
+ Evas_Object *grid;
};
struct _menu_info {
@@ -45,6 +59,14 @@ struct _menu_info {
Eina_Bool disabled;
};
+struct _content_info {
+ int grid_x;
+ int grid_y;
+ const char *style;
+
+ int app_contents_type;
+};
+
static struct _menu_info menu_info[] = {
{
.title = "Favorite",
@@ -68,6 +90,27 @@ static struct _menu_info menu_info[] = {
}
};
+struct _content_info content_info[] = {
+ {
+ .grid_x = GRID_ITEM_X_MOVIE,
+ .grid_y = GRID_ITEM_Y_MOVIE,
+ .style = STYLE_GRID_MOVIE_ITEM_FAVORITE,
+ .app_contents_type = CONTENTS_MOVIE
+ },
+ {
+ .grid_x = GRID_ITEM_X_GALLERY,
+ .grid_y = GRID_ITEM_Y_GALLERY,
+ .style = STYLE_GRID_GALLERY_ITEM_FAVORITE,
+ .app_contents_type = CONTENTS_GALLERY
+ },
+ {
+ .grid_x = GRID_ITEM_X_MUSIC,
+ .grid_y = GRID_ITEM_Y_MUSIC,
+ .style = STYLE_GRID_SONG_ITEM_FAVORITE,
+ .app_contents_type = CONTENTS_MUSIC
+ }
+};
+
static void _key_down_cb(int id, void *data, Evas *e, Evas_Object *obj,
Evas_Event_Key_Down *ev)
{
@@ -82,11 +125,30 @@ static void _key_down_cb(int id, void *data, Evas *e, Evas_Object *obj,
static void _mouse_move_cb(int id, void *data, Evas *e, Evas_Object *obj,
Evas_Event_Mouse_Move *ev)
{
- if (!obj)
+ Elm_Object_Item *it;
+
+ if (!obj || !ev)
return;
- if (!elm_object_focus_get(obj))
- elm_object_focus_set(obj, EINA_TRUE);
+ switch (id) {
+ case ACTION_LIVETV_BTN:
+ case ACTION_MENU_BTN:
+ if (!elm_object_focus_get(obj))
+ elm_object_focus_set(obj, EINA_TRUE);
+
+ break;
+ case ACTION_FAVORITE_GRID:
+ 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);
+
+ break;
+ }
}
static input_handler _handler = {
@@ -94,6 +156,36 @@ static input_handler _handler = {
.mouse_move = _mouse_move_cb
};
+static bool _check_movie_type(app_media_info *info)
+{
+ return strcmp(info->video->copyright, VIDEO_COPYRIGHT);
+}
+
+static int _get_content_type(app_media_info *info)
+{
+ int type;
+
+ type = E_CONTENT_MAX;
+ switch (info->media_type) {
+ case MEDIA_CONTENT_TYPE_IMAGE:
+ type = E_CONTENT_GALLERY;
+ break;
+ case MEDIA_CONTENT_TYPE_VIDEO:
+ if (_check_movie_type(info))
+ type = E_CONTENT_MOVIE;
+ else
+ type = E_CONTENT_GALLERY;
+ break;
+ case MEDIA_CONTENT_TYPE_MUSIC:
+ type = E_CONTENT_MUSIC;
+ break;
+ default:
+ break;
+ }
+
+ return type;
+}
+
static bool _draw_livetv_btn(struct _priv *priv)
{
Evas_Object *btn;
@@ -173,6 +265,37 @@ static bool _draw_menu_area(struct _priv *priv)
return true;
}
+static bool _draw_favorite_area(struct _priv *priv)
+{
+ Evas_Object *grid;
+
+ elm_object_part_text_set(priv->base, PART_ACTION_FAVORITE_TITLE,
+ TEXT_FAVORITE);
+
+ grid = util_add_gengrid(priv->base, 0, 0, EINA_FALSE);
+ if (!grid) {
+ _ERR("failed to create gengrid object");
+ return false;
+ }
+
+ inputmgr_add_callback(grid, ACTION_FAVORITE_GRID, &_handler, priv);
+
+ elm_object_focus_next_object_set(grid, grid, ELM_FOCUS_LEFT);
+ elm_object_focus_next_object_set(grid, grid, ELM_FOCUS_RIGHT);
+
+ elm_object_part_content_set(priv->base,
+ PART_ACTION_FAVORITE_AREA, grid);
+
+ priv->grid = grid;
+
+ return true;
+}
+
+static void _update_favorite_area(struct _priv *priv, int type)
+{
+ /* It will implemented later */
+}
+
static bool _draw_items(struct _priv *priv)
{
if (!_draw_livetv_btn(priv)) {
@@ -180,6 +303,11 @@ static bool _draw_items(struct _priv *priv)
return false;
}
+ if (!_draw_favorite_area(priv)) {
+ _ERR("failed to draw favorite area");
+ return false;
+ }
+
if (!_draw_menu_area(priv)) {
_ERR("failed to draw menu button");
return false;
@@ -188,6 +316,31 @@ static bool _draw_items(struct _priv *priv)
return true;
}
+static bool _update_items(struct _priv *priv, struct view_update_data *vdata)
+{
+ app_media *am;
+ app_media_info *mi;
+ int type;
+
+ am = eina_list_nth(vdata->list, vdata->index);
+ if (!am) {
+ _ERR("failed to get app media");
+ return false;
+ }
+
+ mi = app_media_get_info(am);
+ if (!mi) {
+ _ERR("failed to get app media info");
+ return false;
+ }
+
+ type = _get_content_type(mi);
+
+ _update_favorite_area(priv, type);
+
+ return true;
+}
+
static Evas_Object *_create(Evas_Object *win, void *data)
{
struct _priv *priv;
@@ -261,6 +414,31 @@ static void _hide(void *view_data)
evas_object_hide(priv->base);
}
+static void _update(void *view_data, int update_type, void *data)
+{
+ struct _priv *priv;
+
+ if (!view_data) {
+ _ERR("failed to get view data");
+ return;
+ }
+
+ if (!data) {
+ _ERR("invalid argument");
+ return;
+ }
+
+ priv = view_data;
+
+ switch (update_type) {
+ case UPDATE_CONTENT:
+ _update_items(priv, data);
+ break;
+ default:
+ break;
+ }
+}
+
static void _destroy(void *view_data)
{
struct _priv *priv;
@@ -274,6 +452,7 @@ static void _destroy(void *view_data)
priv = view_data;
inputmgr_remove_callback(priv->tv_btn, &_handler);
+ inputmgr_remove_callback(priv->grid, &_handler);
for (i = 0; i < MAX_NUM_MENU; i++)
inputmgr_remove_callback(priv->menu_btn[i], &_handler);
@@ -288,6 +467,7 @@ static view_class _vclass = {
.create = _create,
.show = _show,
.hide = _hide,
+ .update = _update,
.destroy = _destroy,
};