base: draw title and menu area 32/42032/3
authorJehun Lim <jehun.lim@samsung.com>
Mon, 22 Jun 2015 02:42:47 +0000 (11:42 +0900)
committerJehun Lim <jehun.lim@samsung.com>
Mon, 22 Jun 2015 12:55:34 +0000 (21:55 +0900)
Change-Id: I21a91148f38e55f6e38753b52cfd510864edd8e9
Signed-off-by: Jehun Lim <jehun.lim@samsung.com>
include/define.h
include/view/base.h
res/edc/view/base.edc
res/edc/widgets/button.edc
src/view/base.c

index 01e05bf..c0e2317 100644 (file)
@@ -40,6 +40,7 @@
 #define COLOR_TEXT_FOCUS 255 255 255 255
 #define COLOR_TEXT_SELECTED 64 136 211 255
 #define COLOR_TEXT_DISABLED 87 87 87 128
-#define COLOR_BTN_FOCUS 22 120 224 255
+#define COLOR_BTN_FOCUS 0 119 246 255
+#define COLOR_BTN_SELECTED 64 136 211 255
 
 #endif /* __AIR_MEDIAHUB_DEFINE_H__ */
index 201d07f..965493c 100644 (file)
 
 #define GRP_BASE_VIEW "group.base_view"
 
+#define PART_TITLE "part.title"
 #define PART_MENU_AREA "part.menu_area"
 #define PART_THUMBNAIL_AREA "part.thumbnail_area"
 #define PART_BOTTOM_AREA "part.bottom_area"
 
+#define STYLE_MENU_BTN "menu_btn"
+
 #endif /* __AIR_MEDIAHUB_VIEW_BASE_H__ */
index 029bb9c..2d98689 100644 (file)
@@ -27,13 +27,69 @@ group {
                        }
                }
                part {
+                       name: "padding_title";
+                       type: SPACER;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               rel2.relative: 1.0 0.0;
+                               min: 0 44;
+                               align: 0.5 0.0;
+                               fixed: 0 1;
+                       }
+               }
+               part {
+                       name: PART_TITLE;
+                       type: TEXT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               rel1 {
+                                       to: "padding_title";
+                                       relative: 0.0 1.0;
+                               }
+                               rel2.to: "padding_title";
+                               text {
+                                       font: FONT_REGULAR;
+                                       size: 46;
+                                       align: 0.5 0.5;
+                               }
+                               min: 0 46;
+                               align: 0.5 0.0;
+                               color: COLOR_TEXT_TITLE;
+                               fixed: 0 1;
+                       }
+               }
+               part {
+                       name: "padding_menu_area";
+                       type: SPACER;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               rel1 {
+                                       to: PART_TITLE;
+                                       relative: 0.0 1.0;
+                               }
+                               rel2.to: PART_TITLE;
+                               min: 0 12;
+                               align: 0.5 0.0;
+                               fixed: 0 1;
+                       }
+               }
+               part {
                        name: PART_MENU_AREA;
                        type: SWALLOW;
                        scale: 1;
                        description {
                                state: "default" 0.0;
-                               rel2.relative: 1.0 0.0;
+                               rel1 {
+                                       to: "padding_menu_area";
+                                       relative: 0.0 1.0;
+                               }
+                               rel2.to: "padding_menu_area";
+                               min: 0 82;
                                align: 0.5 0.0;
+                               fixed: 0 1;
                        }
                }
                part {
@@ -47,7 +103,7 @@ group {
                                        relative: 0.0 1.0;
                                }
                                rel2.to: PART_MENU_AREA;
-                               min: 0 71;
+                               min: 0 70;
                                align: 0.5 0.0;
                                color: 223 223 223 255;
                                fixed: 0 1;
@@ -64,7 +120,9 @@ group {
                                        relative: 0.0 1.0;
                                }
                                rel2.to: "padding_thumbnail_area";
+                               min: 0 678;
                                align: 0.5 0.0;
+                               fixed: 0 1;
                        }
                }
                part {
index d837845..4971c8d 100644 (file)
 #define STATE_PAUSE 1
 
 group {
+       name: "elm/button/base/menu_btn";
+       data.item: "focus_highlight" "on";
+       parts {
+               part {
+                       name: "bg";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 200 81;
+                       }
+                       description {
+                               state: "focused" 0.0;
+                               inherit: "default" 0.0;
+                               color: COLOR_BTN_FOCUS;
+                       }
+                       description {
+                               state: "selected" 0.0;
+                               inherit: "default" 0.0;
+                       }
+               }
+               part {
+                       name: "elm.text";
+                       type: TEXT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               rel1.to: "bg";
+                               rel2.to: "bg";
+                               text {
+                                       font: FONT_LIGHT;
+                                       size: 31;
+                                       align: 0.5 0.5;
+                               }
+                               min: 82 0;
+                               align: 0.0 0.5;
+                               color: COLOR_TEXT_MENU;
+                               align: 0.0 0.0;
+                       }
+                       description {
+                               state: "focused" 0.0;
+                               inherit: "default" 0.0;
+                               text.font: "TizenSans";
+                               color: COLOR_TEXT_FOCUS;
+                       }
+                       description {
+                               state: "selected" 0.0;
+                               inherit: "default" 0.0;
+                               text.font: "TizenSans";
+                               color: COLOR_TEXT_SELECTED;
+                       }
+               }
+               part {
+                       name: "bottom_line";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               rel1 {
+                                       to: "bg";
+                                       relative: 0.5 1.0;
+                               }
+                               rel2 {
+                                       to: "bg";
+                                       relative: 0.5 1.0;
+                               }
+                               min: 142 3;
+                               align: 0.5 1.0;
+                               color: 0 0 0 0;
+                               fixed: 1 1;
+                       }
+                       description {
+                               state: "focused" 0.0;
+                               inherit: "default" 0.0;
+                       }
+                       description {
+                               state: "selected" 0.0;
+                               inherit: "default" 0.0;
+                               color: COLOR_BTN_SELECTED;
+                       }
+               }
+       }
+       programs {
+               program {
+                       name: "focused";
+                       signal: "elm,action,focus";
+                       source: "elm";
+                       action: STATE_SET "focused" 0.0;
+                       target: "bg";
+                       target: "elm.text";
+                       target: "bottom_line";
+                       transition: LINEAR 0.17;
+               }
+               program {
+                       name: "unfocused";
+                       signal: "elm,action,unfocus";
+                       source: "elm";
+                       action: STATE_SET "default" 0.0;
+                       target: "bg";
+                       target: "elm.text";
+                       target: "bottom_line";
+                       transition: LINEAR 0.17;
+               }
+       }
+}
+
+group {
        name: "elm/button/base/viewer_btn_prev";
        data.item, "focus_highlight" "on";
        images {
index 92d5399..fb118f0 100644 (file)
 
 #include <Elementary.h>
 #include <app_debug.h>
+#include <inputmgr.h>
 #include <viewmgr.h>
 #include <layoutmgr.h>
 
 #include "define.h"
 #include "layout.h"
 
+#define TITLE_TEXT "Media Hub"
+
+#define MENU_BTN_SIZE 3
+
 struct _priv {
        Evas_Object *win;
        Evas_Object *base;
+       Evas_Object *btn[MENU_BTN_SIZE];
 
        layoutmgr *lmgr;
+
+       int current_layout;
+};
+
+struct _menu_item {
+       const char *name;
+       const char *layout_id;
 };
 
+static struct _menu_item g_menu_item[MENU_BTN_SIZE] = {
+       {
+               "Movie",
+               LAYOUT_MOVIE
+       },
+       {
+               "Gallery",
+               LAYOUT_GALLERY
+       },
+       {
+               "Music",
+               LAYOUT_MUSIC
+       }
+};
+
+static void _mouse_move_cb(int id, void *data, Evas *e,
+                       Evas_Object *obj, Evas_Event_Mouse_Move *ev)
+{
+       if (!elm_object_focus_get(obj))
+               elm_object_focus_set(obj, EINA_TRUE);
+}
+
+static void _focused_cb(int id, void *data, Evas_Object *obj,
+                       Elm_Object_Item *it)
+{
+       struct _priv *priv;
+       int i;
+
+       if (!data) {
+               _ERR("failed to get data");
+               return;
+       }
+
+       priv = data;
+
+       for (i = 0; i < MENU_BTN_SIZE; i++) {
+               if (priv->btn[i] == obj)
+                       break;
+       }
+
+       if (i == priv->current_layout || i == MENU_BTN_SIZE)
+               return;
+
+       layoutmgr_hide_layout(priv->lmgr,
+                       g_menu_item[priv->current_layout].layout_id);
+       layoutmgr_show_layout(priv->lmgr, g_menu_item[i].layout_id);
+
+       priv->current_layout = i;
+}
+
+static input_handler handler = {
+       .mouse_move = _mouse_move_cb,
+       .focused = _focused_cb
+};
+
+static bool _draw_title(struct _priv *priv)
+{
+       if (!priv)
+               return false;
+
+       elm_object_part_text_set(priv->base, PART_TITLE, TITLE_TEXT);
+
+       return true;
+}
+
+static bool _draw_menu_btn(struct _priv *priv)
+{
+       Evas_Object *box, *btn;
+       int i;
+
+       if (!priv)
+               return false;
+
+       box = elm_box_add(priv->base);
+       if (!box) {
+               _ERR("failed to create box object");
+               return false;
+       }
+
+       elm_box_horizontal_set(box, EINA_TRUE);
+
+       evas_object_size_hint_weight_set(box,
+                       EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+       for (i = 0; i < MENU_BTN_SIZE; i++) {
+               btn = elm_button_add(box);
+               if (!btn) {
+                       _ERR("failed to create button object");
+                       return false;
+               }
+
+               elm_object_style_set(btn, STYLE_MENU_BTN);
+               elm_object_text_set(btn, g_menu_item[i].name);
+
+               elm_box_pack_end(box, btn);
+
+               evas_object_show(btn);
+
+               inputmgr_add_callback(btn, 0, &handler, priv);
+
+               priv->btn[i] = btn;
+       }
+
+       evas_object_show(box);
+
+       elm_object_part_content_set(priv->base, PART_MENU_AREA, box);
+
+       elm_object_focus_set(priv->btn[0], EINA_TRUE);
+
+       elm_object_focus_next_object_set(priv->btn[MENU_BTN_SIZE - 1],
+                               priv->btn[0], ELM_FOCUS_RIGHT);
+       elm_object_focus_next_object_set(priv->btn[0],
+                               priv->btn[MENU_BTN_SIZE - 1], ELM_FOCUS_LEFT);
+
+       return true;
+}
+
+static bool _draw_items(struct _priv *priv)
+{
+       if (!priv)
+               return false;
+
+       if (!_draw_title(priv))
+               return false;
+
+       if (!_draw_menu_btn(priv))
+               return false;
+
+       return true;
+}
+
 static Evas_Object *_create(Evas_Object *win, void *data)
 {
        struct _priv *priv;
@@ -67,6 +212,12 @@ static Evas_Object *_create(Evas_Object *win, void *data)
        priv->base = base;
        priv->lmgr = lmgr;
 
+       if (!_draw_items(priv)) {
+               _ERR("failed to draw items");
+               free(priv);
+               return NULL;
+       }
+
        viewmgr_set_view_data(VIEW_BASE, priv);
 
        return base;
@@ -103,6 +254,7 @@ static void _hide(void *view_data)
 static void _destroy(void *view_data)
 {
        struct _priv *priv;
+       int i;
 
        if (!view_data) {
                _ERR("failed to get view data");
@@ -111,7 +263,15 @@ static void _destroy(void *view_data)
 
        priv = view_data;
 
+       for (i = 0; i < MENU_BTN_SIZE; i++)
+               inputmgr_remove_callback(priv->btn[i], &handler);
+
+       layoutmgr_remove_layout(priv->lmgr, LAYOUT_MOVIE);
+       layoutmgr_remove_layout(priv->lmgr, LAYOUT_GALLERY);
+       layoutmgr_remove_layout(priv->lmgr, LAYOUT_MUSIC);
+
        layoutmgr_destroy(priv->lmgr);
+
        evas_object_del(priv->base);
 
        free(priv);