action_menu: draw favorite area 88/46288/3
authorJehun Lim <jehun.lim@samsung.com>
Tue, 18 Aug 2015 05:02:17 +0000 (14:02 +0900)
committerJehun Lim <jehun.lim@samsung.com>
Wed, 19 Aug 2015 06:36:39 +0000 (15:36 +0900)
Change-Id: I2562f008e5ca13c4768a0afcb2553204a6e446c1
Signed-off-by: Jehun Lim <jehun.lim@samsung.com>
include/util/util.h
include/view/action_menu.h
res/edc/view/action_menu.edc
res/edc/widgets/gengrid.edc
src/util/listmgr.c
src/util/util.c
src/view/action_menu.c

index 01901f6..b2e6175 100644 (file)
@@ -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);
index ccd5367..7b0e8d9 100644 (file)
 #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"
 #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__ */
index 3d6261e..7514ebf 100644 (file)
@@ -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;
                        }
index 30a336c..b0e3eba 100644 (file)
@@ -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;
+                       }
+               }
+       }
+}
index 88e34ec..c2a1831 100644 (file)
@@ -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);
index 41f0cd8..ec55187 100644 (file)
@@ -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);
 
index c588ca7..6b6d004 100644 (file)
 
 #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,
 };