View: Draw favorite area of action menu 34/46334/1
authorHyojung Jo <hj903.jo@samsung.com>
Wed, 19 Aug 2015 08:31:10 +0000 (17:31 +0900)
committerHyojung Jo <hj903.jo@samsung.com>
Wed, 19 Aug 2015 08:31:10 +0000 (17:31 +0900)
Change-Id: Ibdd8febda854a7c6d89c547ffd997b5eb3fb3170
Signed-off-by: Hyojung Jo <hj903.jo@samsung.com>
13 files changed:
CMakeLists.txt
include/data/app.h
include/define.h
include/grid.h [moved from include/grid_myapps.h with 83% similarity]
include/utils.h
res/view/action_menu.edc
res/view/base.edc
res/widget/gengrid.edc
src/data/app.c
src/grid/grid.c [moved from src/grid/grid_myapps.c with 82% similarity]
src/utils.c
src/view/view_action_menu.c
src/view/view_base.c

index f6e9673..b4bce5c 100644 (file)
@@ -53,7 +53,7 @@ SET(SRCS
        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")
index cc76877..8468ca7 100644 (file)
@@ -31,5 +31,6 @@ bool get_app_icon_bg_color(struct app_data *adata,
 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__ */
index 447075c..5749b64 100644 (file)
@@ -27,7 +27,6 @@
 /* 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
similarity index 83%
rename from include/grid_myapps.h
rename to include/grid.h
index 0f99419..6de6360 100644 (file)
  * 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__ */
index 6089c17..a80ffcc 100644 (file)
@@ -24,7 +24,8 @@ Evas_Object *utils_add_box(Evas_Object *parent, const char *part,
                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);
index b3eedf8..26dc401 100644 (file)
@@ -97,7 +97,7 @@ group {
                }
 
                part {
-                       name, "padding.menu.divider.up";
+                       name, "part.menu.divider.up";
                        type, RECT;
                        scale, 1;
                        description {
@@ -121,11 +121,11 @@ group {
                        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;
@@ -135,7 +135,7 @@ group {
                }
 
                part {
-                       name, "padding.menu.divider.down";
+                       name, "part.menu.divider.down";
                        type, RECT;
                        scale, 1;
                        description {
@@ -154,5 +154,120 @@ group {
                                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;
+                               }
+                       }
+               }
        }
 }
index ec920e8..3792481 100644 (file)
@@ -294,41 +294,3 @@ group {
                }
        }
 }
-
-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;
-                       }
-               }
-       }
-}
index f4a5202..bc3bb21 100644 (file)
  */
 
 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;
        }
@@ -78,7 +78,10 @@ group {
                        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";
@@ -92,16 +95,23 @@ group {
                }
 
                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";
+                               }
                        }
                }
 
@@ -113,11 +123,11 @@ group {
                                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;
@@ -180,10 +190,14 @@ group {
                        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 {
@@ -200,37 +214,17 @@ group {
                        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 {
@@ -247,17 +241,14 @@ group {
                        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 {
@@ -268,22 +259,29 @@ group {
                }
 
                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;
                        }
                }
 
@@ -294,14 +292,14 @@ group {
                        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 {
@@ -318,7 +316,7 @@ group {
                        description {
                                state, "default" 0.0;
                                color, 0 119 246 255;
-                               min, 0 3;
+                               min, 0 6;
                                rel1.to, "part.bg";
                                rel2 {
                                        to, "part.bg";
@@ -353,7 +351,7 @@ group {
                        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;
@@ -391,7 +389,7 @@ group {
                        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;
@@ -458,7 +456,7 @@ group {
                }
 
                part {
-                       name, "padding.thumb.text";
+                       name, "padding.thumb.text.left";
                        type, SPACER;
                        scale, 1;
                        description {
@@ -475,23 +473,37 @@ group {
                }
 
                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;
@@ -520,17 +532,14 @@ group {
                        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;
@@ -664,3 +673,24 @@ group {
                }
        }
 }
+
+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;
+                       }
+               }
+       }
+}
index 191faeb..31c92c8 100644 (file)
@@ -199,3 +199,20 @@ void free_app_list(Eina_List *list)
                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;
+}
similarity index 82%
rename from src/grid/grid_myapps.c
rename to src/grid/grid.c
index 0e5266f..b1c88e1 100644 (file)
@@ -44,7 +44,7 @@ static char *_text_get(void *data, Evas_Object *obj, const char *part)
 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;
 
@@ -80,49 +80,35 @@ static Evas_Object *_content_get(void *data, Evas_Object *obj, const char *part)
 
                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;
@@ -142,8 +128,16 @@ static Evas_Object *_content_get(void *data, Evas_Object *obj, const char *part)
        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,
@@ -152,5 +146,10 @@ static struct grid_class _gclass = {
 
 struct grid_class *get_myapps_grid_class(void)
 {
-       return &_gclass;
+       return &_myapp_gclass;
+}
+
+struct grid_class *get_favorite_grid_class(void)
+{
+       return &_fav_gclass;
 }
index d26d77a..f9a2001 100644 (file)
@@ -128,7 +128,8 @@ Evas_Object *utils_add_button(Evas_Object *parent, const char *part,
        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;
 
@@ -148,12 +149,12 @@ Evas_Object *utils_add_gengrid(Evas_Object *parent)
        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);
 
index 8a96a6c..fb218a3 100644 (file)
 #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 {
@@ -87,6 +99,98 @@ static void _action_key_down_cb(int id, void *data, Evas *e, Evas_Object *obj,
        }
 
        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);
 }
@@ -101,6 +205,13 @@ static input_handler _action_input_handler = {
        .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;
@@ -185,11 +296,63 @@ static bool _draw_favorite_area(struct _priv *priv)
                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) {
@@ -214,7 +377,8 @@ static void _draw_view_content(struct _priv *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.");
@@ -234,19 +398,40 @@ static Evas_Object *_create(Evas_Object *win, void *data)
                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)
@@ -289,6 +474,9 @@ static void _destroy(void *data)
        }
        priv = (struct _priv *)data;
 
+       if (priv->gmgr)
+               gridmgr_destroy(priv->gmgr);
+
        if (priv->base)
                evas_object_del(priv->base);
 
index d1aabc7..2db127b 100644 (file)
@@ -26,7 +26,7 @@
 #include "utils.h"
 #include "data/app.h"
 #include "view_base.h"
-#include "grid_myapps.h"
+#include "grid.h"
 
 enum menu_type {
        MENU_MYAPPS = 0,
@@ -757,7 +757,8 @@ static Evas_Object *_add_grid(struct _priv *priv)
                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;