From e31ba17519104cb73959c5802769880222f22d30 Mon Sep 17 00:00:00 2001 From: Soohye Shin Date: Tue, 16 Jun 2015 18:02:45 +0900 Subject: [PATCH 01/16] pack home data and modify home edc Change-Id: I1c44199b9cddfea992b366c0331cbc176b088786 Signed-off-by: Soohye Shin --- edje/view/home.edc | 34 +++++++++++++++----- src/view/view_home.c | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 114 insertions(+), 10 deletions(-) diff --git a/edje/view/home.edc b/edje/view/home.edc index 83321ad..465ad00 100644 --- a/edje/view/home.edc +++ b/edje/view/home.edc @@ -303,6 +303,7 @@ group { group { name, GRP_HOME_ITEM; + data.item, TITLE_WIDTH "128"; parts { part { name, "bg"; @@ -398,6 +399,17 @@ group { } } part { + name, PART_HOME_ITEM_ICON_FOCUS; + type, SWALLOW; + scale, 1; + clip_to, "clip"; + description { + state, "default" 0.0; + rel1.to, PART_HOME_ITEM_ICON; + rel2.to, PART_HOME_ITEM_ICON; + } + } + part { name, "pad.text"; type, RECT; scale, 1; @@ -412,12 +424,11 @@ group { } } part { - name, PART_HOME_ITEM_NAME; - type, TEXT; + name, PART_HOME_ITEM_TITLE; + type, SWALLOW; scale, 1; description { state, "default" 0.0; - min, 127 38; rel1 { to, "pad.text"; relative, 0.0 0.0; @@ -428,11 +439,18 @@ group { } align, 0.5 1.0; fixed, 1 1; - text { - size, 22; - font, "TizenSans"; - } - color, 104 104 104 255; + min, 128 38; + } + } + part { + name, PART_HOME_ITEM_TITLE_FOCUS; + type, SWALLOW; + scale, 1; + clip_to, "clip"; + description { + state, "default" 0.0; + rel1.to, PART_HOME_ITEM_TITLE; + rel2.to, PART_HOME_ITEM_TITLE; } } part { diff --git a/src/view/view_home.c b/src/view/view_home.c index db4e0f7..17eeed6 100644 --- a/src/view/view_home.c +++ b/src/view/view_home.c @@ -28,10 +28,17 @@ struct _priv { Evas_Object *win; Evas_Object *base; + Eina_List *list; struct datamgr *dm; }; +struct bar_item { + Evas_Object *eo; + + struct _priv *priv; +}; + static inline Evas_Object *_add_layout(Evas_Object *base, const char *group, bool focus_allow) { @@ -128,11 +135,69 @@ static bool _add_navigations(Evas_Object *base) return true; } +static struct bar_item *_pack_bar_item(struct _priv *priv, Evas_Object *box, + struct datamgr_item *di) +{ + struct bar_item *bi; + Evas_Object *eo, *ic, *focus_ic, *lbl, *focus_lbl; + + if (!priv || !box || !di) { + _ERR("Invalid argument"); + return NULL; + } + + bi = calloc(1, sizeof(*bi)); + if (!bi) { + _ERR("failed to calloc bar item"); + return NULL; + } + + eo = _add_layout(box, GRP_HOME_ITEM, true); + if (!eo) { + _ERR("failed to add layout"); + free(bi); + return NULL; + } + + ic = _add_icon(eo, di->icon, PART_HOME_ITEM_ICON); + if (!ic) + goto err; + + focus_ic = _add_icon(eo, di->focus_icon, PART_HOME_ITEM_ICON_FOCUS); + if (!focus_ic) + goto err; + + lbl = _add_label(eo, di->title, STYLE_LABEL_TITLE, PART_HOME_ITEM_TITLE); + if (!lbl) + goto err; + + focus_lbl = _add_label(eo, di->title, STYLE_LABEL_TITLE_FOCUS, + PART_HOME_ITEM_TITLE_FOCUS); + if (!focus_lbl) + goto err; + + elm_box_pack_end(box, eo); + + bi->priv = priv; + bi->eo = eo; + + return bi; +err: + _ERR("failed to add home item"); + evas_object_del(eo); + free(bi); + + return NULL; +} + static bool _add_home_menu(struct _priv *priv, Evas_Object *base) { + Eina_List *list, *l; Evas_Object *scr, *box; + struct bar_item *bi; + struct datamgr_item *di; - if (!priv) { + if (!priv || !base) { _ERR("Invalid argument"); return false; } @@ -156,7 +221,20 @@ static bool _add_home_menu(struct _priv *priv, Evas_Object *base) elm_object_part_content_set(base, PART_HOME_MENU_BAR, scr); elm_box_horizontal_set(box, EINA_TRUE); - /* Packing item will be implemented later */ + list = datamgr_get_items(priv->dm); + if (!list) { + _ERR("failed to load list"); + evas_object_del(scr); + return false; + } + + EINA_LIST_FOREACH(list, l, di) { + bi = _pack_bar_item(priv, box, di); + if (!bi) + continue; + + priv->list = eina_list_append(priv->list, bi); + } return true; } @@ -264,6 +342,7 @@ static void _hide(void *data) static void _destroy(void *data) { struct _priv *priv; + struct bar_item *bi; if (!data) { _ERR("Invalid argument"); @@ -272,8 +351,15 @@ static void _destroy(void *data) priv = data; + EINA_LIST_FREE(priv->list, bi) { + evas_object_del(bi->eo); + free(bi); + } + datamgr_fini(priv->dm); evas_object_del(priv->base); + + priv->list = NULL; free(priv); } -- 2.7.4 From 71a571b82e5d6c4cc8d6edfbd9ac72efee49deed Mon Sep 17 00:00:00 2001 From: Soohye Shin Date: Tue, 16 Jun 2015 19:16:55 +0900 Subject: [PATCH 02/16] add focus input handler in view_home Change-Id: I5823c8aafbd29c6b1030b7c387d4a98d602f06e3 Signed-off-by: Soohye Shin --- edje/view/home.edc | 8 +++++++ include/defs.h | 5 +++++ src/view/view_home.c | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 74 insertions(+), 1 deletion(-) diff --git a/edje/view/home.edc b/edje/view/home.edc index 465ad00..9fd5e12 100644 --- a/edje/view/home.edc +++ b/edje/view/home.edc @@ -487,6 +487,14 @@ group { target, "clip"; } program { + name, "sig,unfocus"; + signal, SIG_UNFOCUS; + source, SRC_PROG; + action, STATE_SET "default" 0.0; + transition, LINEAR 0.5; + target, "clip"; + } + program { name, "sig,focus,to,up"; signal, SIG_FOCUS_TO_UP; source, SRC_PROG; diff --git a/include/defs.h b/include/defs.h index 2d2733f..d7869fd 100644 --- a/include/defs.h +++ b/include/defs.h @@ -61,4 +61,9 @@ #define STYLE_LABEL_TITLE "slide_home_title" #define STYLE_LABEL_TITLE_FOCUS "slide_home_title_focus" +#define COLOR_DEFAULT_R 22 +#define COLOR_DEFAULT_G 120 +#define COLOR_DEFAULT_B 224 +#define COLOR_DEFAULT_A 255 + #endif /* __AIR_HOME_DEFS_H__ */ diff --git a/src/view/view_home.c b/src/view/view_home.c index 17eeed6..544e17e 100644 --- a/src/view/view_home.c +++ b/src/view/view_home.c @@ -31,6 +31,7 @@ struct _priv { Eina_List *list; struct datamgr *dm; + struct bar_item *foc; }; struct bar_item { @@ -109,6 +110,28 @@ static inline Evas_Object *_add_label(Evas_Object *eo, char *name, return lbl; } +static inline Evas_Object *_add_bg(Evas_Object *eo, const char *part) +{ + Evas_Object *bg; + + if (!eo || !part) { + _ERR("Invalid argument"); + return NULL; + } + + bg = evas_object_rectangle_add(evas_object_evas_get(eo)); + if (!bg) { + _ERR("failed to add label"); + return NULL; + } + + evas_object_color_set(bg, COLOR_DEFAULT_R, COLOR_DEFAULT_G, + COLOR_DEFAULT_B, COLOR_DEFAULT_A); + elm_object_part_content_set(eo, part, bg); + + return bg; +} + static bool _add_navigations(Evas_Object *base) { Evas_Object *ly; @@ -135,11 +158,38 @@ static bool _add_navigations(Evas_Object *base) return true; } +static void _focused(int id, void *data, Evas_Object *obj, Elm_Object_Item *item) +{ + struct _priv *priv; + struct bar_item *bi; + + if (!data) { + _ERR("Invalid argument"); + return; + } + + bi = data; + priv = bi->priv; + priv->foc = bi; + + elm_object_signal_emit(obj, SIG_FOCUS, SRC_PROG); +} + +static void _unfocused(int id, void *data, Evas_Object *obj, Elm_Object_Item *item) +{ + elm_object_signal_emit(obj, SIG_UNFOCUS, SRC_PROG); +} + +static input_handler eo_handler = { + .focused = _focused, + .unfocused = _unfocused +}; + static struct bar_item *_pack_bar_item(struct _priv *priv, Evas_Object *box, struct datamgr_item *di) { struct bar_item *bi; - Evas_Object *eo, *ic, *focus_ic, *lbl, *focus_lbl; + Evas_Object *eo, *ic, *focus_ic, *lbl, *focus_lbl, *bg; if (!priv || !box || !di) { _ERR("Invalid argument"); @@ -176,6 +226,11 @@ static struct bar_item *_pack_bar_item(struct _priv *priv, Evas_Object *box, if (!focus_lbl) goto err; + bg = _add_bg(eo, PART_HOME_ITEM_BG); + if (!bg) + goto err; + + inputmgr_add_callback(eo, 0, &eo_handler, bi); elm_box_pack_end(box, eo); bi->priv = priv; @@ -323,6 +378,10 @@ static void _show(void *data) evas_object_show(priv->base); elm_object_signal_emit(priv->base, SIG_SHOW_NAVIGATION, SRC_PROG); + + if (!priv->foc) + priv->foc = eina_list_data_get(priv->list); + elm_object_focus_set(priv->foc->eo, EINA_TRUE); } static void _hide(void *data) @@ -352,6 +411,7 @@ static void _destroy(void *data) priv = data; EINA_LIST_FREE(priv->list, bi) { + inputmgr_remove_callback(bi->eo, &eo_handler); evas_object_del(bi->eo); free(bi); } -- 2.7.4 From 1829a0caa4daf76f07b63b43e8a8d9b0957bbe8f Mon Sep 17 00:00:00 2001 From: Soohye Shin Date: Wed, 17 Jun 2015 17:05:47 +0900 Subject: [PATCH 03/16] add recent preview and icon group Change-Id: Idf682370bfa7b3409f26fc8be408336a4fd6221e Signed-off-by: Soohye Shin --- edje/view/recent.edc | 521 +++++++++++++++++++++++++++++++++++++++++++++++++++ include/defs.h | 7 + 2 files changed, 528 insertions(+) diff --git a/edje/view/recent.edc b/edje/view/recent.edc index 3659787..49289b2 100644 --- a/edje/view/recent.edc +++ b/edje/view/recent.edc @@ -253,3 +253,524 @@ group { } } +group { + name, GRP_RECENT_PREVIEW; + parts { + part { + name, "bg"; + type, RECT; + scale, 1; + description { + state, "default" 0.0; + min, 378 294; + color, 0 0 0 70; + } + description { + state, "focus" 0.0; + inherit, "default" 0.0; + color, 22 120 224 255; + } + } + part { + name, "pad.thumbnail.left"; + type, RECT; + scale, 1; + description { + state, "default" 0.0; + min, 1 1; + rel2.relative, 0.0 0.0; + align, 0.0 0.0; + fixed, 1 1; + visible, 0; + } + } + part { + name, "pad.thumbnail.right"; + type, RECT; + scale, 1; + description { + state, "default" 0.0; + min, 1 1; + rel1.relative, 1.0 0.0; + rel2.relative, 1.0 0.0; + align, 1.0 0.0; + fixed, 1 1; + visible, 0; + } + } + part { + name, PART_RECENT_THUMBNAIL; + type, SWALLOW; + scale, 1; + description { + state, "default" 0.0; + rel1 { + to, "pad.thumbnail.left"; + relative, 1.0 1.0; + } + rel2 { + to, "pad.thumbnail.right"; + relative, 0.0 1.0; + } + min, 0 198; + fixed, 0 1; + align, 0.5 0.0; + } + } + part { + name, "pad.icon"; + type, RECT; + scale, 1; + description { + state, "default" 0.0; + rel1 { + to, PART_RECENT_THUMBNAIL; + relative, 0.0 0.0; + } + rel2 { + to, PART_RECENT_THUMBNAIL; + relative, 0.0 0.0; + } + min, 3 3; + fixed, 1 1; + align, 0.0 0.0; + visible, 0; + } + } + part { + name, PART_RECENT_ICON; + type, SWALLOW; + scale, 1; + description { + state, "default" 0.0; + rel1 { + to, "pad.icon"; + relative, 1.0 1.0; + } + rel2 { + to, "pad.icon"; + relative, 1.0 1.0; + } + min, 60 60; + fixed, 1 1; + align, 0.0 0.0; + } + } + part { + name, "pad.fav"; + type, RECT; + scale, 1; + description { + state, "default" 0.0; + rel1 { + to, PART_RECENT_THUMBNAIL; + relative, 1.0 0.0; + } + rel2 { + to, PART_RECENT_THUMBNAIL; + relative, 1.0 0.0; + } + min, 3 3; + fixed, 1 1; + align, 1.0 0.0; + visible, 0; + } + } + part { + name, PART_RECENT_FAVORITE; + type, SWALLOW; + scale, 1; + description { + state, "default" 0.0; + rel1 { + to, "pad.fav"; + relative, 0.0 1.0; + } + rel2 { + to, "pad.fav"; + relative, 0.0 1.0; + } + min, 60 60; + fixed, 1 1; + align, 1.0 0.0; + } + } + part { + name, "pad.text.left"; + type, RECT; + scale, 1; + description { + state, "default" 0.0; + min, 16 18; + rel1 { + to, PART_RECENT_THUMBNAIL; + relative, 0.0 1.0; + } + rel2 { + to, PART_RECENT_THUMBNAIL; + relative, 0.0 1.0; + } + fixed, 1 1; + align, 0.0 0.0; + visible, 0; + } + } + part { + name, "pad.text.right"; + type, RECT; + scale, 1; + description { + state, "default" 0.0; + min, 16 18; + rel1 { + to, PART_RECENT_THUMBNAIL; + relative, 1.0 1.0; + } + rel2 { + to, PART_RECENT_THUMBNAIL; + relative, 1.0 1.0; + } + fixed, 1 1; + align, 1.0 0.0; + visible, 0; + } + } + part { + name, PART_RECENT_TITLE; + type, SWALLOW; + scale, 1; + description { + state, "default" 0.0; + rel1 { + to, "pad.text.left"; + relative, 1.0 1.0; + } + rel2 { + to, "pad.text.right"; + relative, 0.0 1.0; + } + min, 0 27; + fixed, 0 1; + align, 0.5 0.0; + } + } + part { + name, "pad.text.subtitle"; + type, RECT; + scale, 1; + description { + state, "default" 0.0; + rel1 { + to, PART_RECENT_TITLE; + relative, 0.0 1.0; + } + rel2 { + to, PART_RECENT_TITLE; + relative, 1.0 1.0; + } + min, 0 9; + fixed, 0 1; + align, 0.5 0.0; + visible, 0; + } + } + part { + name, PART_RECENT_SUBTITLE; + type, SWALLOW; + scale, 1; + description { + state, "default" 0.0; + rel1 { + to, "pad.text.subtitle"; + relative, 0.0 1.0; + } + rel2 { + to, "pad.text.subtitle"; + relative, 1.0 1.0; + } + min, 0 24; + fixed, 0 1; + align, 0.5 0.0; + } + } + } + programs { + program { + name, "sig,focus"; + signal, SIG_FOCUS; + source, SRC_PROG; + action, STATE_SET "focus" 0.0; + transition, LINEAR 0.5; + target, "bg"; + } + program { + name, "sig,unfocus"; + signal, SIG_UNFOCUS; + source, SRC_PROG; + action, STATE_SET "default" 0.0; + transition, LINEAR 0.5; + target, "bg"; + } + } +} + +group { + name, GRP_RECENT_ICON; + parts { + part { + name, "bg"; + type, RECT; + scale, 1; + description { + state, "default" 0.0; + min, 235 294; + color, 0 0 0 70; + } + description { + state, "focus" 0.0; + inherit, "default" 0.0; + color, 22 120 224 255; + } + } + part { + name, "pad.thumbnail.left"; + type, RECT; + scale, 1; + description { + state, "default" 0.0; + min, 1 1; + rel2.relative, 0.0 0.0; + align, 0.0 0.0; + fixed, 1 1; + visible, 0; + } + } + part { + name, "pad.thumbnail.right"; + type, RECT; + scale, 1; + description { + state, "default" 0.0; + min, 1 1; + rel1.relative, 1.0 0.0; + rel2.relative, 1.0 0.0; + align, 1.0 0.0; + fixed, 1 1; + visible, 0; + } + } + part { + name, PART_RECENT_THUMBNAIL; + type, SWALLOW; + scale, 1; + description { + state, "default" 0.0; + rel1 { + to, "pad.thumbnail.left"; + relative, 1.0 1.0; + } + rel2 { + to, "pad.thumbnail.right"; + relative, 0.0 1.0; + } + min, 0 198; + fixed, 0 1; + align, 0.5 0.0; + } + } + part { + name, "pad.icon"; + type, RECT; + scale, 1; + description { + state, "default" 0.0; + rel1 { + to, PART_RECENT_THUMBNAIL; + relative, 0.0 0.0; + } + rel2 { + to, PART_RECENT_THUMBNAIL; + relative, 0.0 0.0; + } + min, 3 3; + fixed, 1 1; + align, 0.0 0.0; + visible, 0; + } + } + part { + name, PART_RECENT_ICON; + type, SWALLOW; + scale, 1; + description { + state, "default" 0.0; + rel1 { + to, "pad.icon"; + relative, 1.0 1.0; + } + rel2 { + to, "pad.icon"; + relative, 1.0 1.0; + } + min, 60 60; + fixed, 1 1; + align, 0.0 0.0; + } + } + part { + name, "pad.fav"; + type, RECT; + scale, 1; + description { + state, "default" 0.0; + rel1 { + to, PART_RECENT_THUMBNAIL; + relative, 1.0 0.0; + } + rel2 { + to, PART_RECENT_THUMBNAIL; + relative, 1.0 0.0; + } + min, 3 3; + fixed, 1 1; + align, 1.0 0.0; + visible, 0; + } + } + part { + name, PART_RECENT_FAVORITE; + type, SWALLOW; + scale, 1; + description { + state, "default" 0.0; + rel1 { + to, "pad.fav"; + relative, 0.0 1.0; + } + rel2 { + to, "pad.fav"; + relative, 0.0 1.0; + } + min, 60 60; + fixed, 1 1; + align, 1.0 0.0; + } + } + part { + name, "pad.text.left"; + type, RECT; + scale, 1; + description { + state, "default" 0.0; + min, 16 18; + rel1 { + to, PART_RECENT_THUMBNAIL; + relative, 0.0 1.0; + } + rel2 { + to, PART_RECENT_THUMBNAIL; + relative, 0.0 1.0; + } + fixed, 1 1; + align, 0.0 0.0; + visible, 0; + } + } + part { + name, "pad.text.right"; + type, RECT; + scale, 1; + description { + state, "default" 0.0; + min, 16 18; + rel1 { + to, PART_RECENT_THUMBNAIL; + relative, 1.0 1.0; + } + rel2 { + to, PART_RECENT_THUMBNAIL; + relative, 1.0 1.0; + } + fixed, 1 1; + align, 1.0 0.0; + visible, 0; + } + } + part { + name, PART_RECENT_TITLE; + type, SWALLOW; + scale, 1; + description { + state, "default" 0.0; + rel1 { + to, "pad.text.left"; + relative, 1.0 1.0; + } + rel2 { + to, "pad.text.right"; + relative, 0.0 1.0; + } + min, 0 27; + fixed, 0 1; + align, 0.5 0.0; + } + } + part { + name, "pad.text.subtitle"; + type, RECT; + scale, 1; + description { + state, "default" 0.0; + rel1 { + to, PART_RECENT_TITLE; + relative, 0.0 1.0; + } + rel2 { + to, PART_RECENT_TITLE; + relative, 1.0 1.0; + } + min, 0 9; + fixed, 0 1; + align, 0.5 0.0; + visible, 0; + } + } + part { + name, PART_RECENT_SUBTITLE; + type, SWALLOW; + scale, 1; + description { + state, "default" 0.0; + rel1 { + to, "pad.text.subtitle"; + relative, 0.0 1.0; + } + rel2 { + to, "pad.text.subtitle"; + relative, 1.0 1.0; + } + min, 0 24; + fixed, 0 1; + align, 0.5 0.0; + } + } + } + programs { + program { + name, "sig,focus"; + signal, SIG_FOCUS; + source, SRC_PROG; + action, STATE_SET "focus" 0.0; + transition, LINEAR 0.5; + target, "bg"; + } + program { + name, "sig,unfocus"; + signal, SIG_UNFOCUS; + source, SRC_PROG; + action, STATE_SET "default" 0.0; + transition, LINEAR 0.5; + target, "bg"; + } + } +} diff --git a/include/defs.h b/include/defs.h index d7869fd..e932b53 100644 --- a/include/defs.h +++ b/include/defs.h @@ -29,6 +29,8 @@ #define GRP_HOME_ITEM "group.home.item" #define GRP_RECENT "group.recent" #define GRP_RECENT_DELETE "grp.recent.delete" +#define GRP_RECENT_ICON "grp.recent.icon" +#define GRP_RECENT_PREVIEW "grp.recent.preview" #define PART_HOME_MENU_BAR "part.home.menu.bar" #define PART_HOME_UP_ARROW "part.home.up.arrow" @@ -41,6 +43,11 @@ #define PART_RECENT_DELETE_ICON "part.recent.delete.icon" #define PART_RECENT_CONTENTS "part.recent.contents" #define PART_RECENT_NO_CONTENTS "part.recent.no.contents" +#define PART_RECENT_TITLE "part.recent.title" +#define PART_RECENT_SUBTITLE "part.recent.subtitle" +#define PART_RECENT_THUMBNAIL "part.recent.thumbnail" +#define PART_RECENT_ICON "part.recent.icon" +#define PART_RECENT_FAVORITE "part.recent.favorite" #define SIG_SHOW_NAVIGATION "sig.show.navigation" #define SIG_HIDE_NAVIGATION "sig.hide.navigation" -- 2.7.4 From a1ca5cadd6f5f6c2ee02c0bea9953566806eb43a Mon Sep 17 00:00:00 2001 From: Soohye Shin Date: Wed, 17 Jun 2015 17:16:07 +0900 Subject: [PATCH 04/16] add recent icon images Change-Id: Ia358c3d192ceef35fed108fa23b7c694fe465aba Signed-off-by: Soohye Shin --- images/ic_thumbnail_app.png | Bin 0 -> 3049 bytes images/ic_thumbnail_gallery.png | Bin 0 -> 3461 bytes images/ic_thumbnail_movie.png | Bin 0 -> 3151 bytes images/ic_thumbnail_music.png | Bin 0 -> 3808 bytes images/ic_thumbnail_tv.png | Bin 0 -> 3091 bytes images/ic_thumbnail_web.png | Bin 0 -> 4399 bytes 6 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 images/ic_thumbnail_app.png create mode 100644 images/ic_thumbnail_gallery.png create mode 100644 images/ic_thumbnail_movie.png create mode 100644 images/ic_thumbnail_music.png create mode 100644 images/ic_thumbnail_tv.png create mode 100644 images/ic_thumbnail_web.png diff --git a/images/ic_thumbnail_app.png b/images/ic_thumbnail_app.png new file mode 100644 index 0000000000000000000000000000000000000000..88721aa11273263bd3e44cf1a07fadff6da94cd2 GIT binary patch literal 3049 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 literal 0 HcmV?d00001 diff --git a/images/ic_thumbnail_gallery.png b/images/ic_thumbnail_gallery.png new file mode 100644 index 0000000000000000000000000000000000000000..07dc5062e8755071988fd5dd47f354aa5296dcd0 GIT binary patch literal 3461 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 literal 0 HcmV?d00001 diff --git a/images/ic_thumbnail_movie.png b/images/ic_thumbnail_movie.png new file mode 100644 index 0000000000000000000000000000000000000000..78be799a7755708f7232acc2165790e801e71017 GIT binary patch literal 3151 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 literal 0 HcmV?d00001 diff --git a/images/ic_thumbnail_web.png b/images/ic_thumbnail_web.png new file mode 100644 index 0000000000000000000000000000000000000000..05207ed179166d6450e237f65bd5d4806979a28d GIT binary patch literal 4399 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 literal 0 HcmV?d00001 -- 2.7.4 From e4095f277059e19fcd7e07957f7cedfde3ec3c54 Mon Sep 17 00:00:00 2001 From: Soohye Shin Date: Wed, 17 Jun 2015 20:55:49 +0900 Subject: [PATCH 05/16] add key input handler in view_home Change-Id: Icb92d2c97e20efc13cd3e835e2506cd573d78087 Signed-off-by: Soohye Shin --- src/view/view_home.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/view/view_home.c b/src/view/view_home.c index 544e17e..f01ad53 100644 --- a/src/view/view_home.c +++ b/src/view/view_home.c @@ -314,6 +314,31 @@ static bool _add_home(struct _priv *priv, Evas_Object *base) return true; } +static void _key_down(int id, void *data, Evas *e, Evas_Object *obj, + Evas_Event_Key_Down *ev) +{ + if (!data) { + _ERR("Invalid argument"); + return; + } + + if (!strcmp(ev->keyname, KEY_DOWN)) { + viewmgr_push_view(VIEW_RECENT); + } else if (!strcmp(ev->keyname, KEY_UP)) { + /* It should be implemented later */ + } else if (!strcmp(ev->keyname, KEY_ENTER) || + !strcmp(ev->keyname, KEY_ENTER_REMOTE)) { + /* It should be implemented later */ + } else if (!strcmp(ev->keyname, KEY_BACK) || + !strcmp(ev->keyname, KEY_BACK_REMOTE)) { + /* It should be implemented later */ + } +} + +static input_handler base_handler = { + .key_down = _key_down +}; + static Evas_Object *_create(Evas_Object *win, void *data) { struct _priv *priv; @@ -361,6 +386,7 @@ static Evas_Object *_create(Evas_Object *win, void *data) } viewmgr_set_view_data(VIEW_HOME, priv); + inputmgr_add_callback(base, 0, &base_handler, priv); return base; } @@ -417,6 +443,7 @@ static void _destroy(void *data) } datamgr_fini(priv->dm); + inputmgr_remove_callback(priv->base, &base_handler); evas_object_del(priv->base); priv->list = NULL; -- 2.7.4 From 983258c7d8a94ed9fcab4e15ccca0d605551762d Mon Sep 17 00:00:00 2001 From: Soohye Shin Date: Thu, 18 Jun 2015 11:00:58 +0900 Subject: [PATCH 06/16] add notification badge in home edc Change-Id: Idce89816a1b88385b25ea2f823505063650b7b5d Signed-off-by: Soohye Shin --- edje/view/home.edc | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ images/badge_bg.png | Bin 0 -> 15329 bytes include/defs.h | 4 ++++ 3 files changed, 53 insertions(+) create mode 100644 images/badge_bg.png diff --git a/edje/view/home.edc b/edje/view/home.edc index 9fd5e12..326edc0 100644 --- a/edje/view/home.edc +++ b/edje/view/home.edc @@ -468,6 +468,55 @@ group { visible, 1; } } + part { + name, "pad.badge"; + type, RECT; + scale, 1; + description { + state, "default" 0.0; + min, 42 15; + rel1.relative, 1.0 0.0; + rel2.relative, 1.0 0.0; + align, 1.0 0.0; + fixed, 1 1; + visible, 0; + } + } + part { + name, PART_HOME_ITEM_BADGE; + type, SWALLOW; + scale, 1; + description { + state, "default" 0.0; + min, 36 36; + rel1 { + to, "pad.badge"; + relative, 0.0 1.0; + } + rel2 { + to, "pad.badge"; + relative, 0.0 1.0; + } + align, 1.0 0.0; + fixed, 1 1; + } + } + part { + name, PART_HOME_ITEM_BADGE_COUNT; + type, TEXT; + scale, 1; + description { + state, "default" 0.0; + rel1.to, PART_HOME_ITEM_BADGE; + rel2.to, PART_HOME_ITEM_BADGE; + fixed, 1 1; + text { + size, 24; + font, "TizenSans"; + } + color, 255 255 255 255; + } + } } programs { program { diff --git a/images/badge_bg.png b/images/badge_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..0da3ca2da2b02a01a07bcc44ed1031cbde8b2b29 GIT binary patch literal 15329 zcmeI3eQXnD9LI0GxH-WD1zCWEQV>*V@2>B6wnbcrYoH9a$u{NfcK2+%(DusRb?qj> z0Y)I2h!}$b0un?80wE-51cAj&6r&*#h*2UE3`E`(3E^GwxwdP&XWQe9_=m}J$=3d! z@ALgV_k5n;^Ys3?RWoNiH@J92F-1{>gXMur_&M76D|*2Azw0p$emoc}uhS^%p+}9s z0&3lc5{lxE%GI@cZD=|#DiNz7DfPgbjKpAXitSf5oRxJtIF_AcvN5ckW*OSXSy+~LxOvuP%3NlD zG5qFLr3St-Ff}tAjC|%MU61iJok%3C3A*KBr}#)B4Za8 zGdu6zR9b3!qDGENN zL~?{+*-L^h^d(D|zGxmrk{eq3lqJ`*YmQKe4@Nazh>9Q>@WZ)VWm)3g9y`lO9-BoH zSk6)}I0TD_1(L-98i36sxC9_@sY!OVcS{{m#JEvInbZYp`@$@=6L8R_d6k z0*kt~b_!uRbzH;*RRhK@^qD)iVfK8<9v_A$wVQcCG!7cSXw)i@ymXh=+-+r@8JpaF z0sBTdoj=ds`xuEP5XBXII#sGy?@2VJK~D%On9>Mq;%~NLI$>7_n%PSmXL4Bn57s~v zn*ZGj^lc0M-&Y`4yJC|NZ3L2^?kwBRhQ2LYdMUf^r_N)b`~LGvBHy5>5kdFM5up*# zv1p^0&Nb%7^k#pB_);aTs3AoHe!G|MsX5PO{QmIpY=Cttr1m81rMtDE{cDXq9*(E_ zyKM}-;DZXhGS++! zQ%-_#Z9skbj^FdUC3ju-;2`)SzL?yToAo!5r!t+5?f(rqH4+$kbj^FdUC z3ju-;2`)SzL?yToAo!5r!t+5?f(rqH4+$kbj^FdUC3ju-;2`)SzL?yToAo!5r!t+5? zf(rqH53#t4b8l&aD10?D0pG!NPVTV5_cu*qd1Z*AS|6vVw&fIc>mK|(Pf>A(qAo0; zDE=La8m_FF|M^skDtJ8@m{Ohmp<`{uwCY(UD>l7kYMOA?eD|#ZJEt$&e5d0*$19VH z26eo#Wz*)0G4%s1Lq`rBZqeV|_lW+sXHez-QSwHYJvJ=<>n{gxcw;q%r&ef3xla$d zXC3*Hx>8V5_-fmPXNF%X^bEYdw0L*%D6sv*kM4{=?%XT5MqJp(f4}Q`lAAZ9G`FXYu~{x#jHzXYHff5*>nzqQ@TjqCYb#_@{Z+#rEYz zSEtq&`kYF?*pMSX7PSY*-3qR}cDUf-e!GVS=LL_CSwJsaJkGKFr{*JPMz{UVA)@zMA&Zt literal 0 HcmV?d00001 diff --git a/include/defs.h b/include/defs.h index e932b53..3c7f608 100644 --- a/include/defs.h +++ b/include/defs.h @@ -40,6 +40,8 @@ #define PART_HOME_ITEM_BG "part.home.item.bg" #define PART_HOME_ITEM_TITLE "part.home.item.title" #define PART_HOME_ITEM_TITLE_FOCUS "part.home.item.focus" +#define PART_HOME_ITEM_BADGE "part.home.item.badge" +#define PART_HOME_ITEM_BADGE_COUNT "part.home.item.badge.count" #define PART_RECENT_DELETE_ICON "part.recent.delete.icon" #define PART_RECENT_CONTENTS "part.recent.contents" #define PART_RECENT_NO_CONTENTS "part.recent.no.contents" @@ -73,4 +75,6 @@ #define COLOR_DEFAULT_B 224 #define COLOR_DEFAULT_A 255 +#define IMAGE_BADGE IMAGEDIR"/badge_bg.png" + #endif /* __AIR_HOME_DEFS_H__ */ -- 2.7.4 From 932d1a715103c225d55833de08fe1d65aeae2cf2 Mon Sep 17 00:00:00 2001 From: Soohye Shin Date: Thu, 18 Jun 2015 12:40:44 +0900 Subject: [PATCH 07/16] add utils for creating widget and launch app Change-Id: I5f4718f69182f90832321b593c5de31ec00506c1 Signed-off-by: Soohye Shin --- CMakeLists.txt | 1 + include/utils.h | 34 ++++++++++ src/utils.c | 197 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 232 insertions(+) create mode 100644 include/utils.h create mode 100644 src/utils.c diff --git a/CMakeLists.txt b/CMakeLists.txt index 2fe857a..b980692 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -42,6 +42,7 @@ SET(DEFCONFIG "${PROJECT_NAME}.json") SET(THEME_EDJ "${PROJECT_NAME}-theme.edj") SET(SRCS src/main.c + src/utils.c src/data/datamgr.c src/data/data_home.c src/view/view_recent.c diff --git a/include/utils.h b/include/utils.h new file mode 100644 index 0000000..4d34d14 --- /dev/null +++ b/include/utils.h @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __AIR_HOME_UTILS_H__ +#define __AIR_HOME_UTILS_H__ + +#include +#include + +Evas_Object *utils_add_layout(Evas_Object *base, const char *group, bool focus_allow, + const char *part); +Evas_Object *utils_add_icon(Evas_Object *base, const char *file, const char *part); +Evas_Object *utils_add_label(Evas_Object *base, char *text, const char *style, + const char *part); +Evas_Object *utils_add_bg(Evas_Object *base, int r, int g, int b, int a, + const char *part); +Evas_Object *utils_add_scroller(Evas_Object *base); +Evas_Object *utils_add_box(Evas_Object *base, bool horizon); +bool utils_launch_app(const char *pkg); + +#endif /* __AIR_HOME_UTILS_H__ */ diff --git a/src/utils.c b/src/utils.c new file mode 100644 index 0000000..ae84a88 --- /dev/null +++ b/src/utils.c @@ -0,0 +1,197 @@ +/* + * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include + +#include "utils.h" +#include "defs.h" + +Evas_Object *utils_add_layout(Evas_Object *base, const char *group, + bool focus_allow, const char *part) +{ + Evas_Object *ly; + + if (!base || !group) { + _ERR("Invalid argument"); + return NULL; + } + + ly = elm_layout_add(base); + if (!ly) { + _ERR("failed to add layout"); + return false; + } + elm_layout_file_set(ly, EDJEFILE, group); + + if (focus_allow) + elm_object_focus_allow_set(ly, EINA_TRUE); + if (part) + elm_object_part_content_set(base, part, ly); + + evas_object_show(ly); + + return ly; +} + +Evas_Object *utils_add_icon(Evas_Object *base, const char *file, + const char *part) +{ + Evas_Object *ic; + + if (!base || !file) { + _ERR("Invalid argument"); + return NULL; + } + + ic = elm_icon_add(base); + if (!ic) { + _ERR("failed to add icon"); + return NULL; + } + + elm_image_file_set(ic, file, NULL); + + if (part) + elm_object_part_content_set(base, part, ic); + + evas_object_show(ic); + + return ic; +} + +Evas_Object *utils_add_label(Evas_Object *base, char *text, + const char *style, const char *part) +{ + Evas_Object *lbl; + const char *s; + + if (!base || !text) { + _ERR("Invalid argument"); + return NULL; + } + + lbl = elm_label_add(base); + if (!lbl) { + _ERR("failed to add label"); + return NULL; + } + + if (style) + elm_object_style_set(lbl, style); + + s = edje_object_data_get(elm_layout_edje_get(base), TITLE_WIDTH); + if (s) + elm_label_wrap_width_set(lbl, atoi(s)); + + elm_object_text_set(lbl, text); + + if (part) + elm_object_part_content_set(base, part, lbl); + + evas_object_show(lbl); + + return lbl; +} + +Evas_Object *utils_add_bg(Evas_Object *base, int r, int g, int b, int a, + const char *part) +{ + Evas_Object *bg; + + if (!base) { + _ERR("Invalid argument"); + return NULL; + } + + bg = evas_object_rectangle_add(evas_object_evas_get(base)); + if (!bg) { + _ERR("failed to add label"); + return NULL; + } + + evas_object_color_set(bg, r, g, b, a); + + if (part) + elm_object_part_content_set(base, part, bg); + + evas_object_show(bg); + + return bg; +} + +Evas_Object *utils_add_scroller(Evas_Object *base) +{ + Evas_Object *scr; + + scr = elm_scroller_add(base); + if (!scr) { + _ERR("failed to add scroller"); + return NULL; + } + + elm_scroller_policy_set(scr, ELM_SCROLLER_POLICY_OFF, + ELM_SCROLLER_POLICY_OFF); + evas_object_show(scr); + + return scr; +} + +Evas_Object *utils_add_box(Evas_Object *base, bool horizon) +{ + Evas_Object *box; + + box = elm_box_add(base); + if (!box) { + _ERR("failed to add box"); + return NULL; + } + + if (horizon) + elm_box_horizontal_set(box, EINA_TRUE); + + evas_object_show(box); + + return box; +} + +bool utils_launch_app(const char *pkg) +{ + app_control_h app_control; + int r; + + if (!pkg) { + _ERR("Invalid argument"); + return false; + } + + app_control_create(&app_control); + app_control_set_operation(app_control, APP_CONTROL_OPERATION_DEFAULT); + app_control_set_app_id(app_control, pkg); + + r = app_control_send_launch_request(app_control, NULL, NULL); + if (r != APP_CONTROL_ERROR_NONE) { + _ERR("failed to launch pkg"); + app_control_destroy(app_control); + return false; + } + + app_control_destroy(app_control); + + return true; +} -- 2.7.4 From f403832563b037b85634de6aefbe27b3349d224c Mon Sep 17 00:00:00 2001 From: Soohye Shin Date: Thu, 18 Jun 2015 15:17:37 +0900 Subject: [PATCH 08/16] apply utils to view_home for creating widget Change-Id: Ie19d6032d542ce77a935e98457071af835b61e5a Signed-off-by: Soohye Shin --- src/view/view_home.c | 122 ++++++--------------------------------------------- 1 file changed, 13 insertions(+), 109 deletions(-) diff --git a/src/view/view_home.c b/src/view/view_home.c index f01ad53..c21af95 100644 --- a/src/view/view_home.c +++ b/src/view/view_home.c @@ -24,6 +24,7 @@ #include "view_home.h" #include "data_home.h" #include "datamgr.h" +#include "utils.h" struct _priv { Evas_Object *win; @@ -40,98 +41,6 @@ struct bar_item { struct _priv *priv; }; -static inline Evas_Object *_add_layout(Evas_Object *base, const char *group, - bool focus_allow) -{ - Evas_Object *ly; - - if (!base || !group) { - _ERR("Invalid argument"); - return NULL; - } - - ly = elm_layout_add(base); - if (!ly) { - _ERR("failed to add layout"); - return false; - } - elm_layout_file_set(ly, EDJEFILE, group); - if (focus_allow) - elm_object_focus_allow_set(ly, EINA_TRUE); - evas_object_show(ly); - - return ly; -} - -static inline Evas_Object *_add_icon(Evas_Object *eo, const char *file, const char *part) -{ - Evas_Object *ic; - - if (!eo || !file || !part) { - _ERR("Invalid argument"); - return NULL; - } - - ic = elm_icon_add(eo); - if (!ic) { - _ERR("failed to add icon"); - return NULL; - } - - elm_image_file_set(ic, file, NULL); - elm_object_part_content_set(eo, part, ic); - - return ic; -} - -static inline Evas_Object *_add_label(Evas_Object *eo, char *name, - const char *style, const char *part) -{ - Evas_Object *lbl; - const char *s; - - if (!eo || !name || !style || !part) { - _ERR("Invalid argument"); - return NULL; - } - - lbl = elm_label_add(eo); - if (!lbl) { - _ERR("failed to add label"); - return NULL; - } - elm_object_style_set(lbl, style); - s = edje_object_data_get(elm_layout_edje_get(eo), TITLE_WIDTH); - if (s) - elm_label_wrap_width_set(lbl, atoi(s)); - elm_object_text_set(lbl, name); - elm_object_part_content_set(eo, part, lbl); - - return lbl; -} - -static inline Evas_Object *_add_bg(Evas_Object *eo, const char *part) -{ - Evas_Object *bg; - - if (!eo || !part) { - _ERR("Invalid argument"); - return NULL; - } - - bg = evas_object_rectangle_add(evas_object_evas_get(eo)); - if (!bg) { - _ERR("failed to add label"); - return NULL; - } - - evas_object_color_set(bg, COLOR_DEFAULT_R, COLOR_DEFAULT_G, - COLOR_DEFAULT_B, COLOR_DEFAULT_A); - elm_object_part_content_set(eo, part, bg); - - return bg; -} - static bool _add_navigations(Evas_Object *base) { Evas_Object *ly; @@ -141,19 +50,17 @@ static bool _add_navigations(Evas_Object *base) return false; } - ly = _add_layout(base, GRP_HOME_DOWN_ARROW, true); + ly = utils_add_layout(base, GRP_HOME_DOWN_ARROW, true, PART_HOME_DOWN_ARROW); if (!ly) { _ERR("failed to add layout"); return false; } - elm_object_part_content_set(base, PART_HOME_DOWN_ARROW, ly); - ly = _add_layout(base, GRP_HOME_UP_ARROW, true); + ly = utils_add_layout(base, GRP_HOME_UP_ARROW, true, PART_HOME_UP_ARROW); if (!ly) { _ERR("failed to add layout"); return false; } - elm_object_part_content_set(base, PART_HOME_UP_ARROW, ly); return true; } @@ -202,31 +109,32 @@ static struct bar_item *_pack_bar_item(struct _priv *priv, Evas_Object *box, return NULL; } - eo = _add_layout(box, GRP_HOME_ITEM, true); + eo = utils_add_layout(box, GRP_HOME_ITEM, true, NULL); if (!eo) { _ERR("failed to add layout"); free(bi); return NULL; } - ic = _add_icon(eo, di->icon, PART_HOME_ITEM_ICON); + ic = utils_add_icon(eo, di->icon, PART_HOME_ITEM_ICON); if (!ic) goto err; - focus_ic = _add_icon(eo, di->focus_icon, PART_HOME_ITEM_ICON_FOCUS); + focus_ic = utils_add_icon(eo, di->focus_icon, PART_HOME_ITEM_ICON_FOCUS); if (!focus_ic) goto err; - lbl = _add_label(eo, di->title, STYLE_LABEL_TITLE, PART_HOME_ITEM_TITLE); + lbl = utils_add_label(eo, di->title, STYLE_LABEL_TITLE, PART_HOME_ITEM_TITLE); if (!lbl) goto err; - focus_lbl = _add_label(eo, di->title, STYLE_LABEL_TITLE_FOCUS, + focus_lbl = utils_add_label(eo, di->title, STYLE_LABEL_TITLE_FOCUS, PART_HOME_ITEM_TITLE_FOCUS); if (!focus_lbl) goto err; - bg = _add_bg(eo, PART_HOME_ITEM_BG); + bg = utils_add_bg(eo, COLOR_DEFAULT_R, COLOR_DEFAULT_G, COLOR_DEFAULT_B, + COLOR_DEFAULT_A, PART_HOME_ITEM_BG); if (!bg) goto err; @@ -257,24 +165,20 @@ static bool _add_home_menu(struct _priv *priv, Evas_Object *base) return false; } - scr = elm_scroller_add(base); + scr = utils_add_scroller(base); if (!scr) { _ERR("failed to add scroller"); return false; } - elm_scroller_policy_set(scr, ELM_SCROLLER_POLICY_OFF, - ELM_SCROLLER_POLICY_OFF); - box = elm_box_add(scr); + box = utils_add_box(scr, true); if (!box) { _ERR("failed to add box"); evas_object_del(scr); return false; } - evas_object_show(box); elm_object_content_set(scr, box); elm_object_part_content_set(base, PART_HOME_MENU_BAR, scr); - elm_box_horizontal_set(box, EINA_TRUE); list = datamgr_get_items(priv->dm); if (!list) { @@ -363,7 +267,7 @@ static Evas_Object *_create(Evas_Object *win, void *data) return NULL; } - base =_add_layout(win, GRP_HOME, false); + base = utils_add_layout(win, GRP_HOME, false, NULL); if (!base) { _ERR("failed to create base"); datamgr_fini(dm); -- 2.7.4 From 7e0973ce958d48cd429fe90ac00a2cba8efa17ea Mon Sep 17 00:00:00 2001 From: Soohye Shin Date: Thu, 18 Jun 2015 18:31:50 +0900 Subject: [PATCH 09/16] add initial data_recent Change-Id: I8df19a703a20f4fee390b17a53453ed3881a2478 Signed-off-by: Soohye Shin --- CMakeLists.txt | 1 + include/data_recent.h | 24 +++++++++++++++++++++ src/data/data_recent.c | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++ src/view/view_recent.c | 17 ++++++++++++++- 4 files changed, 98 insertions(+), 1 deletion(-) create mode 100644 include/data_recent.h create mode 100644 src/data/data_recent.c diff --git a/CMakeLists.txt b/CMakeLists.txt index b980692..e8f16d7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -45,6 +45,7 @@ SET(SRCS src/utils.c src/data/datamgr.c src/data/data_home.c + src/data/data_recent.c src/view/view_recent.c src/view/view_home.c) INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include) diff --git a/include/data_recent.h b/include/data_recent.h new file mode 100644 index 0000000..be7fa8f --- /dev/null +++ b/include/data_recent.h @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __AIR_HOME_DATA_RECENT_H__ +#define __AIR_HOME_DATA_RECENT_H__ + +#include + +struct data_class *datamgr_recent_get_dclass(void); + +#endif /* __AIR_HOME_DATA_RECENT_H__ */ diff --git a/src/data/data_recent.c b/src/data/data_recent.c new file mode 100644 index 0000000..5bad2b3 --- /dev/null +++ b/src/data/data_recent.c @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include + +#include "data_recent.h" +#include "datamgr.h" + +static Eina_List *_get_items(struct datamgr *dm) +{ + if (!dm) { + _ERR("Invalid argument"); + return NULL; + } + + return dm->list; +} + +static void _fini(struct datamgr *dm) +{ + /* It should be implemented later */ +} + +static bool _init(struct datamgr *dm) +{ + /* It should be implemented later */ + + return true; +} + +static struct data_class dclass = { + .init = _init, + .fini = _fini, + .get_items = _get_items +}; + +struct data_class *datamgr_recent_get_dclass(void) +{ + return &dclass; +} + diff --git a/src/view/view_recent.c b/src/view/view_recent.c index 6fe5fc7..3978df7 100644 --- a/src/view/view_recent.c +++ b/src/view/view_recent.c @@ -22,15 +22,21 @@ #include "defs.h" #include "view_recent.h" +#include "data_recent.h" +#include "datamgr.h" +#include "utils.h" struct _priv { Evas_Object *win; Evas_Object *base; + + struct datamgr *dm; }; static Evas_Object *_create(Evas_Object *win, void *data) { struct _priv *priv; + struct datamgr *dm; Evas_Object *base; if (!win) { @@ -44,9 +50,17 @@ static Evas_Object *_create(Evas_Object *win, void *data) return NULL; } + dm = datamgr_init(datamgr_recent_get_dclass(), VIEW_RECENT); + if (!dm) { + _ERR("failed to initialize datamgr"); + free(priv); + return NULL; + } + base = elm_layout_add(win); if (!base) { _ERR("failed to create base"); + datamgr_fini(dm); free(priv); return NULL; } @@ -56,6 +70,7 @@ static Evas_Object *_create(Evas_Object *win, void *data) priv->win = win; priv->base = base; + priv->dm = dm; viewmgr_set_view_data(VIEW_RECENT, priv); @@ -101,7 +116,7 @@ static void _destroy(void *data) } priv = data; - + datamgr_fini(priv->dm); evas_object_del(priv->base); free(priv); } -- 2.7.4 From ee2498df0181281e5b4f412f2bb2e06205ca3f00 Mon Sep 17 00:00:00 2001 From: Soohye Shin Date: Fri, 19 Jun 2015 10:27:24 +0900 Subject: [PATCH 10/16] add initial view_user Change-Id: I9d1e4eaa4a2463a55e15a3d837cf84ba02a66088 Signed-off-by: Soohye Shin --- CMakeLists.txt | 1 + edje/home.edc | 1 + edje/view/user.edc | 22 ++++++++++ include/defs.h | 7 +-- include/view_user.h | 22 ++++++++++ src/main.c | 2 + src/view/view_user.c | 120 +++++++++++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 172 insertions(+), 3 deletions(-) create mode 100644 edje/view/user.edc create mode 100644 include/view_user.h create mode 100644 src/view/view_user.c diff --git a/CMakeLists.txt b/CMakeLists.txt index e8f16d7..77c56f2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -46,6 +46,7 @@ SET(SRCS src/data/datamgr.c src/data/data_home.c src/data/data_recent.c + src/view/view_user.c src/view/view_recent.c src/view/view_home.c) INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include) diff --git a/edje/home.edc b/edje/home.edc index 0071986..cf65362 100644 --- a/edje/home.edc +++ b/edje/home.edc @@ -19,4 +19,5 @@ collections { #include "view/home.edc" #include "view/recent.edc" + #include "view/user.edc" } diff --git a/edje/view/user.edc b/edje/view/user.edc new file mode 100644 index 0000000..ff790e1 --- /dev/null +++ b/edje/view/user.edc @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "../../include/defs.h" +group { + name, GRP_USER; + parts { + } +} diff --git a/include/defs.h b/include/defs.h index 3c7f608..42f66ab 100644 --- a/include/defs.h +++ b/include/defs.h @@ -28,9 +28,10 @@ #define GRP_HOME_DOWN_ARROW "group.home.down.arrow" #define GRP_HOME_ITEM "group.home.item" #define GRP_RECENT "group.recent" -#define GRP_RECENT_DELETE "grp.recent.delete" -#define GRP_RECENT_ICON "grp.recent.icon" -#define GRP_RECENT_PREVIEW "grp.recent.preview" +#define GRP_RECENT_DELETE "group.recent.delete" +#define GRP_RECENT_ICON "group.recent.icon" +#define GRP_RECENT_PREVIEW "group.recent.preview" +#define GRP_USER "group.user" #define PART_HOME_MENU_BAR "part.home.menu.bar" #define PART_HOME_UP_ARROW "part.home.up.arrow" diff --git a/include/view_user.h b/include/view_user.h new file mode 100644 index 0000000..c9c622c --- /dev/null +++ b/include/view_user.h @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __AIR_HOME_VIEW_USER_H__ +#define __AIR_HOME_VIEW_USER_H__ + +view_class *view_user_get_vclass(void); + +#endif /* __AIR_HOME_VIEW_USER_H__ */ diff --git a/src/main.c b/src/main.c index c4e1027..e00a82c 100644 --- a/src/main.c +++ b/src/main.c @@ -22,6 +22,7 @@ #include "defs.h" #include "view_home.h" #include "view_recent.h" +#include "view_user.h" SET_TAG(PACKAGE); @@ -74,6 +75,7 @@ static bool _create(void *user_data) viewmgr_add_view(view_home_get_vclass(), NULL); viewmgr_add_view(view_recent_get_vclass(), NULL); + viewmgr_add_view(view_user_get_vclass(), NULL); ad->win = win; diff --git a/src/view/view_user.c b/src/view/view_user.c new file mode 100644 index 0000000..3f9c282 --- /dev/null +++ b/src/view/view_user.c @@ -0,0 +1,120 @@ +/* + + * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include + +#include "defs.h" +#include "view_user.h" +#include "datamgr.h" +#include "utils.h" + +struct _priv { + Evas_Object *win; + Evas_Object *base; +}; + +static Evas_Object *_create(Evas_Object *win, void *data) +{ + struct _priv *priv; + Evas_Object *base; + + if (!win) { + _ERR("Invalid argument"); + return NULL; + } + + priv = calloc(1, sizeof(*priv)); + if (!priv) { + _ERR("failed to calloc priv"); + return NULL; + } + + base = utils_add_layout(win, GRP_USER, false, NULL); + if (!base) { + _ERR("failed to create base"); + free(priv); + return NULL; + } + evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, base); + + priv->win = win; + priv->base = base; + + viewmgr_set_view_data(VIEW_USER, priv); + + return base; +} + +static void _show(void *data) +{ + struct _priv *priv; + + if (!data) { + _ERR("Invalid argument"); + return; + } + + priv = data; + + evas_object_show(priv->base); +} + +static void _hide(void *data) +{ + struct _priv *priv; + + if (!data) { + _ERR("Invalid argument"); + return; + } + + priv = data; + + evas_object_hide(priv->base); +} + +static void _destroy(void *data) +{ + struct _priv *priv; + + if (!data) { + _ERR("Invalid argument"); + return; + } + + priv = data; + evas_object_del(priv->base); + free(priv); +} + +static view_class vclass = { + .view_id = VIEW_USER, + .create = _create, + .show = _show, + .hide = _hide, + .destroy = _destroy +}; + +view_class *view_user_get_vclass(void) +{ + return &vclass; +} + -- 2.7.4 From aaf3549d2115e12b0b43b368e108ab8fcd79f052 Mon Sep 17 00:00:00 2001 From: Soohye Shin Date: Fri, 19 Jun 2015 19:55:32 +0900 Subject: [PATCH 11/16] add useredit edc Change-Id: I14b6103bf75bf426fd1932f59166bcf2e5d39112 Signed-off-by: Soohye Shin --- edje/home.edc | 1 + edje/images/btn_user_del.png | Bin 0 -> 1337 bytes edje/images/ic_user_require_01.png | Bin 0 -> 2995 bytes edje/images/ic_user_require_02.png | Bin 0 -> 2943 bytes edje/view/useredit.edc | 792 +++++++++++++++++++++++++++++++++++++ include/defs.h | 12 + 6 files changed, 805 insertions(+) create mode 100644 edje/images/btn_user_del.png create mode 100644 edje/images/ic_user_require_01.png create mode 100644 edje/images/ic_user_require_02.png create mode 100644 edje/view/useredit.edc diff --git a/edje/home.edc b/edje/home.edc index cf65362..c5304b9 100644 --- a/edje/home.edc +++ b/edje/home.edc @@ -20,4 +20,5 @@ collections { #include "view/home.edc" #include "view/recent.edc" #include "view/user.edc" + #include "view/useredit.edc" } diff --git a/edje/images/btn_user_del.png b/edje/images/btn_user_del.png new file mode 100644 index 0000000000000000000000000000000000000000..3c4fa041192b0ea8e12a2c77695aa094ea90e2d4 GIT binary patch literal 1337 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 literal 0 HcmV?d00001 diff --git a/edje/images/ic_user_require_02.png b/edje/images/ic_user_require_02.png new file mode 100644 index 0000000000000000000000000000000000000000..9c26bc9f814782964c11843486048c38092b2a47 GIT binary patch literal 2943 zcmV-_3xM>AP)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z00020NklSz3`8GM7RU;zS;A5>!p{gWf*ApikgUK6L1F?rw_ycFAdMqY z01{0quJhSX_DRmBX=0B~?9>6wCFUyT*F76*U>y+i%hoBs{(0u9m={0;Sa_qDD^LJE z@R$P)FakH=6W$vbqSpgtOTQ%M&j8y_^Kvt^nAbo8?m&uq84&XXC{T5p4?r2&(%ObL phF<`k<_%DV&uWI_z5fn;2LKH`H?3&hj)4FG002ovPDHLkV1f$yZy5jp literal 0 HcmV?d00001 diff --git a/edje/view/useredit.edc b/edje/view/useredit.edc new file mode 100644 index 0000000..a8d780f --- /dev/null +++ b/edje/view/useredit.edc @@ -0,0 +1,792 @@ +/* + * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "../../include/defs.h" +group { + name, GRP_USER_EDIT; + parts { + part { + name, "title"; + type, RECT; + scale, 1; + description { + state, "default" 0.0; + rel2.relative, 1.0 0.0; + min, 0 104; + fixed, 0 1; + align, 0.5 0.0; + } + } + part { + name, PART_USER_EDIT_TITLE; + type, TEXT; + scale, 1; + description { + rel1.to, "title"; + rel2.to, "title"; + fixed, 1 1; + text { + font, 46; + font, "TizenSans"; + } + color, 51 51 51 255; + } + } + part { + name, "divider.up"; + type, RECT; + scale, 1; + description { + state, "default" 0.0; + rel1 { + to, "title"; + relative, 0.0 1.0; + } + rel2.to, "title"; + min, 0 1; + fixed, 0 1; + align, 0.5 0.0; + color, 210 219 230 255; + } + } + part { + name, "function.btn"; + type, RECT; + scale, 1; + description { + rel1 { + to, "divider.up"; + relative, 0.0 1.0; + } + rel2.to, "divider.up"; + min, 0 114; + fixed, 0 1; + align, 0.5 0.0; + color, 221 231 242 255; + } + } + part { + name, "divider.down"; + type, RECT; + scale, 1; + description { + state, "default" 0.0; + rel1 { + to, "function.btn"; + relative, 0.0 1.0; + } + rel2.to, "function.btn"; + min, 0 1; + fixed, 0 1; + align, 0.5 0.0; + color, 210 219 230 255; + } + } + part { + name, "action.btn"; + type, RECT; + scale, 1; + description { + state, "default" 0.0; + rel1.relative, 0.0 1.0; + min, 0 148; + fixed, 0 1; + align, 0.5 1.0; + } + } + part { + name, "pad.action.btn"; + type, RECT; + scale, 1; + description { + state, "default" 0.0; + rel1 { + to, "action.btn"; + relative, 0.5 0.5; + } + rel2 { + to, "action.btn"; + relative, 0.5 0.5; + } + min, 24 64; + fixed, 1 1; + visible, 0; + } + } + part { + name, PART_USER_EDIT_BTN_CACEL; + type, SWALLOW; + scale, 1; + description { + state, "default" 0.0; + rel1.to, "pad.action.btn"; + rel2 { + to, "pad.action.btn"; + relative, 0.0 1.0; + } + min, 308 0; + fixed, 1 0; + align, 1.0 0.5; + } + } + part { + name, PART_USER_EDIT_BTN_DONE; + type, SWALLOW; + scale, 1; + description { + state, "default" 0.0; + rel1 { + to, "pad.action.btn"; + relative, 1.0 0.0; + } + rel2.to, "pad.action.btn"; + min, 308 0; + fixed, 1 0; + align, 0.0 0.5; + } + } + part { + name, "contents"; + type, RECT; + scale, 1; + description { + state, "default" 0.0; + rel1 { + to, "divider.down"; + relative, 0.0 1.0; + } + rel2 { + to, "action.btn"; + relative, 1.0 0.0; + } + fixed, 1 1; + color, 244 244 244 255; + } + } + part { + name, PART_USER_EDIT_CONTENTS; + type, SWALLOW; + scale, 1; + description { + state, "default" 0.0; + rel1 { + to, "contents"; + relative, 0.5 0.5; + } + rel2 { + to, "contents"; + relative, 0.5 0.5; + } + min, 1036 552; + fixed, 1 1; + } + } + } +} + +group { + name, GRP_USER_EDIT_CONTENTS; + images { + image, "ic_user_require_01.png" COMP; + image, "ic_user_require_02.png" COMP; + image, "btn_user_del.png" COMP; + } + parts { + part { + name, "bg"; + type, RECT; + scale, 1; + description { + state, "default" 0.0; + min, 1036 552; + visible, 0; + } + } + part { + name, "pad"; + type, RECT; + scale, 1; + description { + state, "default" 0.0; + min, 138 0; + rel2.relative, 0.0 1.0; + fixed, 1 0; + align, 0.0 0.5; + visible, 0; + } + } + part { + name, "photo"; + type, TEXT; + scale, 1; + description { + state, "default" 0.0; + rel1 { + to, "pad"; + relative, 1.0 0.0; + } + rel2 { + to, "pad"; + relative, 1.0 0.0; + } + min, 90 32; + fixed, 1 1; + align, 0.0 0.0; + text { + font, "TizenSans"; + size, 32; + text, "Photo"; + align, 0.0 0.5; + } + color, 77 77 77 255; + } + } + part { + name, "pad.photo.require"; + type, RECT; + scale, 1; + description { + state, "default" 0.0; + rel1 { + to, "photo"; + relative, 1.0 0.0; + } + rel2 { + to, "photo"; + relative, 1.0 0.0; + } + min, 6 0; + fixed, 1 1; + align, 0.0 0.0; + visible, 0; + } + } + part { + name, "photo.require"; + type, IMAGE; + scale, 1; + description { + state, "default" 0.0; + rel1 { + to, "pad.photo.require"; + relative, 1.0 0.0; + } + rel2 { + to, "pad.photo.require"; + relative, 1.0 0.0; + } + min, 16 20; + fixed, 1 1; + align, 0.0 0.0; + image.normal, "ic_user_require_01.png"; + } + } + part { + name, "pad.photo"; + type, RECT; + scale, 1; + description { + state, "default" 0.0; + rel1 { + to, "photo"; + relative, 0.0 1.0; + } + rel2 { + to, "photo"; + relative, 0.0 1.0; + } + min, 0 22; + fixed, 1 1; + align, 0.0 0.0; + visible, 0; + } + } + part { + name, PART_USER_EDIT_CONTENTS_PHOTO; + type, SWALLOW; + scale, 1; + description { + state, "default" 0.0; + rel1 { + to, "pad.photo"; + relative, 0.0 1.0; + } + rel2 { + to, "pad.photo"; + relative, 0.0 1.0; + } + min, 294 294; + fixed, 1 1; + align, 0.0 0.0; + } + } + part { + name, "pad.profile"; + type, RECT; + scale, 1; + description { + state, "default" 0.0; + rel1 { + to, PART_USER_EDIT_CONTENTS_PHOTO; + relative, 1.0 0.0; + } + rel2 { + to, PART_USER_EDIT_CONTENTS_PHOTO; + relative, 1.0 0.0; + } + min, 72 54; + fixed, 1 1; + align, 0.0 1.0; + visible, 0; + } + } + part { + name, "information"; + type, TEXT; + scale, 1; + description { + state, "default" 0.0; + rel1 { + to, "pad.profile"; + relative, 1.0 0.0; + } + rel2 { + to, "pad.profile"; + relative, 1.0 0.0; + } + min, 180 32; + fixed, 1 1; + align, 0.0 0.0; + text { + font, "TizenSans"; + size, 32; + text, "Information"; + align, 0.0 0.5; + } + color, 77 77 77 255; + } + } + part { + name, "information.require"; + type, IMAGE; + scale, 1; + description { + state, "default" 0.0; + rel1 { + to, "information"; + relative, 1.0 0.0; + } + rel2 { + to, "information"; + relative, 1.0 0.0; + } + min, 16 20; + fixed, 1 1; + align, 0.0 0.0; + image.normal, "ic_user_require_01.png"; + } + } + part { + name, "pad.name"; + type, RECT; + scale, 1; + description { + state, "default" 0.0; + rel1 { + to, "information"; + relative, 0.0 1.0; + } + rel2 { + to, "information"; + relative, 0.0 1.0; + } + min, 0 22; + fixed, 1 1; + align, 0.0 0.0; + visible, 0; + } + } + part { + name, PART_USER_EDIT_CONTENTS_NAME; + type, SWALLOW; + scale, 1; + description { + state, "default" 0.0; + rel1 { + to, "pad.name"; + relative, 1.0 1.0; + } + rel2.to, "pad.name"; + min, 436 64; + fixed, 1 1; + align, 0.0 0.0; + fixed, 1 1; + } + } + part { + name, "pad.pin"; + type, RECT; + scale, 1; + description { + state, "default" 0.0; + rel1 { + to, PART_USER_EDIT_CONTENTS_NAME; + relative, 0.0 1.0; + } + rel2 { + to, PART_USER_EDIT_CONTENTS_NAME; + relative, 0.0 1.0; + } + min, 0 16; + fixed, 1 1; + align, 0.0 0.0; + visible, 0; + } + } + part { + name, PART_USER_EDIT_CONTENTS_PIN; + type, SWALLOW; + scale, 1; + description { + state, "default" 0.0; + rel1 { + to, "pad.pin"; + relative, 1.0 1.0; + } + rel2.to, "pad.pin"; + min, 436 64; + fixed, 1 1; + align, 0.0 0.0; + } + } + part { + name, "pad.account"; + type, RECT; + scale, 1; + description { + state, "default" 0.0; + rel1 { + to, PART_USER_EDIT_CONTENTS_PIN; + relative, 0.0 1.0; + } + rel2 { + to, PART_USER_EDIT_CONTENTS_PIN; + relative, 0.0 1.0; + } + min, 0 32; + fixed, 1 1; + align, 0.0 0.0; + visible, 0; + } + } + part { + name, "account"; + type, TEXT; + scale, 1; + description { + state, "default" 0.0; + rel1 { + to, "pad.account"; + relative, 1.0 1.0; + } + rel2.to, "pad.account"; + min, 436 32; + fixed, 1 1; + align, 0.0 0.0; + text { + font, "TizenSans"; + size, 32; + text, "Account"; + align, 0.0 0.5; + } + color, 77 77 77 255; + } + } + part { + name, "pad.account.down"; + type, RECT; + scale, 1; + description { + state, "default" 0.0; + rel1 { + to, "account"; + relative, 0.0 1.0; + } + rel2 { + to, "account"; + relative, 0.0 1.0; + } + min, 0 22; + fixed, 1 1; + align, 0.0 0.0; + visible, 0; + } + } + part { + name, PART_USER_EDIT_CONTENTS_ACCOUNT; + type, SWALLOW; + scale, 1; + description { + state, "default" 0.0; + rel1 { + to, "pad.account.down"; + relative, 1.0 1.0; + } + rel2.to, "pad.account.down"; + min, 436 64; + fixed, 1 1; + align, 0.0 0.0; + } + } + part { + name, "pad.lock"; + type, RECT; + scale, 1; + description { + state, "default" 0.0; + rel1 { + to, PART_USER_EDIT_CONTENTS_ACCOUNT; + relative, 0.0 1.0; + } + rel2 { + to, PART_USER_EDIT_CONTENTS_ACCOUNT; + relative, 0.0 1.0; + } + min, 0 32; + fixed, 1 1; + align, 0.0 0.0; + visible, 0; + } + } + part { + name, "lock"; + type, TEXT; + scale, 1; + description { + state, "default" 0.0; + rel1 { + to, "pad.lock"; + relative, 1.0 1.0; + } + rel2.to, "pad.lock"; + min, 436 32; + fixed, 1 1; + align, 0.0 0.0; + text { + font, "TizenSans"; + size, 32; + text, "Privacy lock"; + align, 0.0 0.5; + } + color, 77 77 77 255; + } + } + part { + name, "pad.lock.down"; + type, RECT; + scale, 1; + description { + state, "default" 0.0; + rel1 { + to, "lock"; + relative, 0.0 1.0; + } + rel2 { + to, "lock"; + relative, 0.0 1.0; + } + min, 0 22; + fixed, 1 1; + align, 0.0 0.0; + visible, 0; + } + } + part { + name, PART_USER_EDIT_CONTENTS_LOCK; + type, SWALLOW; + scale, 1; + description { + state, "default" 0.0; + rel1 { + to, "pad.lock.down"; + relative, 1.0 1.0; + } + rel2.to, "pad.lock.down"; + min, 104 54; + fixed, 1 1; + align, 0.0 0.0; + } + } + part { + name, "pad.require"; + type, RECT; + scale, 1; + description { + state, "default" 0.0; + rel1 { + to, PART_USER_EDIT_CONTENTS_LOCK; + relative, 0.0 1.0; + } + rel2 { + to, PART_USER_EDIT_CONTENTS_LOCK; + relative, 0.0 1.0; + } + min, 0 22; + fixed, 1 1; + align, 0.0 0.0; + visible, 0; + } + } + part { + name, "icon.require"; + type, IMAGE; + scale, 1; + description { + state, "default" 0.0; + rel1 { + to, "pad.require"; + relative, 1.0 1.0; + } + rel2.to, "pad.require"; + min, 12 24; + fixed, 1 1; + align, 0.0 0.0; + image.normal, "ic_user_require_02.png"; + } + } + part { + name, "pad.require.text"; + type, RECT; + scale, 1; + description { + state, "default" 0.0; + rel1 { + to, "icon.require"; + relative, 1.0 0.0; + } + rel2 { + to, "icon.require"; + relative, 1.0 0.0; + } + min, 6 0; + align, 0.0 0.0; + fixed, 1 1; + visible, 0; + } + } + part { + name, "require"; + type, TEXT; + scale, 1; + description { + state, "default" 0.0; + rel1 { + to, "pad.require.text"; + relative, 1.0 0.0; + } + rel2 { + to, "pad.require.text"; + relative, 1.0 0.0; + } + min, 418 24; + fixed, 1 1; + align, 0.0 0.0; + text { + font, "TizenSans"; + size, 24; + align, 0.0 0.5; + text, "Required fields"; + } + color, 64 136 211 255; + } + } + part { + name, "pad.delete"; + type, RECT; + scale, 1; + description { + state, "default" 0.0; + rel1 { + to, PART_USER_EDIT_CONTENTS_NAME; + relative, 1.0 0.0; + } + rel2 { + to, PART_USER_EDIT_CONTENTS_NAME; + relative, 1.0 0.0; + } + min, 10 0; + fixed, 1 1; + align, 0.0 0.0; + visible, 0; + } + } + part { + name, "bg.delete"; + type, RECT; + scale, 1; + description { + state, "default"; + rel1 { + to, "pad.delete"; + relative, 1.0 0.0; + } + rel2 { + to, "pad.delete"; + relative, 1.0 0.0; + } + min, 86 64; + fixed, 1 1; + align, 0.0 0.0; + color, 126 145 172 255; + } + description { + state, "focus"; + inherit, "default" 0.0; + color, 0 119 246 255; + } + } + part { + name, PART_USER_EDIT_CONTENTS_DELETE; + type, IMAGE; + scale, 1; + description { + state, "default" 0.0; + rel1.to, "bg.delete"; + rel2.to, "bg.delete"; + fixed, 1 1; + image.normal, "btn_user_del.png"; + } + } + } + programs { + program { + name, "sig,focus,delete"; + signal, SIG_FOCUS; + source, SRC_PROG; + action, STATE_SET "focus" 0.0; + transition, LINEAR 0.5; + target, "bg.delete"; + } + program { + name, "sig,unfocus,delete"; + signal, SIG_UNFOCUS; + source, SRC_PROG; + action, STATE_SET "unfocus" 0.0; + transition, LINEAR 0.5; + target, "bg.delete"; + } + } +} diff --git a/include/defs.h b/include/defs.h index 42f66ab..2060ef6 100644 --- a/include/defs.h +++ b/include/defs.h @@ -32,6 +32,8 @@ #define GRP_RECENT_ICON "group.recent.icon" #define GRP_RECENT_PREVIEW "group.recent.preview" #define GRP_USER "group.user" +#define GRP_USER_EDIT "group.user.edit" +#define GRP_USER_EDIT_CONTENTS "group.user.edit.contents" #define PART_HOME_MENU_BAR "part.home.menu.bar" #define PART_HOME_UP_ARROW "part.home.up.arrow" @@ -51,6 +53,16 @@ #define PART_RECENT_THUMBNAIL "part.recent.thumbnail" #define PART_RECENT_ICON "part.recent.icon" #define PART_RECENT_FAVORITE "part.recent.favorite" +#define PART_USER_EDIT_TITLE "part.user.edit.title" +#define PART_USER_EDIT_BTN_DONE "part.user.edit.btn.done" +#define PART_USER_EDIT_BTN_CANCEL "part.user.edit.btn.cancel" +#define PART_USER_EDIT_CONTENTS "part.user.edit.contents" +#define PART_USER_EDIT_CONTENTS_PHOTO "part.user.edit.contents.photo" +#define PART_USER_EDIT_CONTENTS_NAME "part.user.edit.contents.name" +#define PART_USER_EDIT_CONTENTS_PIN "part.user.edit.contents.pin" +#define PART_USER_EDIT_CONTENTS_ACCOUNT "part.user.edit.contents.account" +#define PART_USER_EDIT_CONTENTS_LOCK "part.user.edit.contents.lock" +#define PART_USER_EDIT_CONTETNS_DELETE "part.user.edit.contents.delete" #define SIG_SHOW_NAVIGATION "sig.show.navigation" #define SIG_HIDE_NAVIGATION "sig.hide.navigation" -- 2.7.4 From 1081c2c20a1ba768e0c3e84017ddb6f6683ec89b Mon Sep 17 00:00:00 2001 From: Soohye Shin Date: Fri, 19 Jun 2015 11:26:12 +0900 Subject: [PATCH 12/16] draw recent lists and delete icon Change-Id: I61db5350b2674d8b8eb41fbff8e1993f454ba3b2 Signed-off-by: Soohye Shin --- edje/view/recent.edc | 5 ++ include/defs.h | 2 + src/view/view_recent.c | 128 ++++++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 133 insertions(+), 2 deletions(-) diff --git a/edje/view/recent.edc b/edje/view/recent.edc index 49289b2..910fa7d 100644 --- a/edje/view/recent.edc +++ b/edje/view/recent.edc @@ -219,6 +219,11 @@ group { transition, DECEL 0.5; target, "clip"; target, "guide"; + after, "sig.hide.recent.done"; + } + program { + name, "sig.hide.recent.done"; + action, SIGNAL_EMIT SIG_HIDE_RECENT_DONE SRC_EDJE; } } } diff --git a/include/defs.h b/include/defs.h index 42f66ab..9bd6891 100644 --- a/include/defs.h +++ b/include/defs.h @@ -22,6 +22,7 @@ #define VIEW_USER "VIEW_USER" #define SRC_PROG "prog" +#define SRC_EDJE "edje" #define GRP_HOME "group.home" #define GRP_HOME_UP_ARROW "group.home.up.arrow" @@ -65,6 +66,7 @@ #define SIG_UNFOCUS_TO_LEFT "sig.unfocus.to.left" #define SIG_SHOW_RECENT "sig.show.recent" #define SIG_HIDE_RECENT "sig.hide.recent" +#define SIG_HIDE_RECENT_DONE "sig.hide.recent.done" #define TITLE_WIDTH "title.width" diff --git a/src/view/view_recent.c b/src/view/view_recent.c index 3978df7..197b214 100644 --- a/src/view/view_recent.c +++ b/src/view/view_recent.c @@ -26,13 +26,69 @@ #include "datamgr.h" #include "utils.h" +#define MESSAGE_NO_CONTENTS "No Contents" + struct _priv { Evas_Object *win; Evas_Object *base; + Evas_Object *del_btn; + Evas_Object *scr; + Evas_Object *box; + Eina_List *list; struct datamgr *dm; }; +struct _bar_item { + Evas_Object *eo; +}; + +static bool _add_delete_btn(struct _priv *priv, Evas_Object *base) +{ + Evas_Object *btn; + + btn = utils_add_layout(base, GRP_RECENT_DELETE, true, PART_RECENT_DELETE_ICON); + if (!btn) { + _ERR("failed to add delete icon"); + return false; + } + + priv->del_btn = btn; + + return true; +} + +static void _key_down(int id, void *data, Evas *e, Evas_Object *obj, + Evas_Event_Key_Down *ev) +{ + struct _priv *priv; + + if (!data) { + _ERR("Invalid argument"); + return; + } + + priv = data; + + if (!strcmp(ev->keyname, KEY_BACK) || + !strcmp(ev->keyname, KEY_BACK_REMOTE)) { + elm_object_signal_emit(priv->base, SIG_HIDE_RECENT, SRC_PROG); + } else if (!strcmp(ev->keyname, KEY_ENTER) || + !strcmp(ev->KEY_ENTER_REMOTE)) { + /* It should be implemented later */ + } +} + +static input_handler base_handler = { + .key_down = _key_down +}; + +static void _hide_done(void *data, Evas_Object *obj, const char *emission, + const char *source) +{ + viewmgr_pop_view(); +} + static Evas_Object *_create(Evas_Object *win, void *data) { struct _priv *priv; @@ -57,14 +113,13 @@ static Evas_Object *_create(Evas_Object *win, void *data) return NULL; } - base = elm_layout_add(win); + base = utils_add_layout(win, GRP_RECENT, false, NULL); if (!base) { _ERR("failed to create base"); datamgr_fini(dm); free(priv); return NULL; } - elm_layout_file_set(base, EDJEFILE, GRP_RECENT); evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); elm_win_resize_object_add(win, base); @@ -72,11 +127,56 @@ static Evas_Object *_create(Evas_Object *win, void *data) priv->base = base; priv->dm = dm; + if (!_add_delete_btn(priv, base)) { + _ERR("failed to add recent"); + evas_object_del(base); + datamgr_fini(dm); + free(priv); + return NULL; + } + viewmgr_set_view_data(VIEW_RECENT, priv); + inputmgr_add_callback(base, 0, &base_handler, priv); + elm_object_signal_callback_add(base, SIG_HIDE_RECENT_DONE, SRC_EDJE, + _hide_done, NULL); return base; } +static void _load_recent(struct _priv *priv) +{ + Eina_List *list; + Evas_Object *scr, *box; + + list = datamgr_get_items(priv->dm); + if (!list) { + elm_object_part_text_set(priv->base, PART_RECENT_NO_CONTENTS, + MESSAGE_NO_CONTENTS); + return; + } + + scr = utils_add_scroller(priv->base); + if (!scr) { + _ERR("failed to add scroller"); + return; + } + + box = utils_add_box(scr, true); + if (!box) { + _ERR("failed to add box"); + evas_object_del(scr); + return; + } + elm_object_content_set(scr, box); + elm_object_part_content_set(priv->base, PART_RECENT_CONTENTS, scr); + elm_object_part_text_set(priv->base, PART_RECENT_NO_CONTENTS, ""); + + /* It should be implemented later */ + + priv->scr = scr; + priv->box = box; +} + static void _show(void *data) { struct _priv *priv; @@ -90,6 +190,24 @@ static void _show(void *data) evas_object_show(priv->base); elm_object_signal_emit(priv->base, SIG_SHOW_RECENT, SRC_PROG); + + _load_recent(priv); +} + +static void _unload_recent(struct _priv *priv) +{ + struct _bar_item *bi; + + EINA_LIST_FREE(priv->list, bi) { + evas_object_del(bi->eo); + free(bi); + } + + elm_box_clear(priv->box); + evas_object_del(priv->scr); + priv->box = NULL; + priv->scr = NULL; + priv->list = NULL; } static void _hide(void *data) @@ -103,6 +221,8 @@ static void _hide(void *data) priv = data; + _unload_recent(priv); + evas_object_hide(priv->base); } @@ -116,6 +236,10 @@ static void _destroy(void *data) } priv = data; + + _unload_recent(priv); + + inputmgr_remove_callback(priv->base, &base_handler); datamgr_fini(priv->dm); evas_object_del(priv->base); free(priv); -- 2.7.4 From 124808401700e9995f25ebeaf63cb65c4c692306 Mon Sep 17 00:00:00 2001 From: Soohye Shin Date: Mon, 22 Jun 2015 11:14:53 +0900 Subject: [PATCH 13/16] modify min size and color value according to modified GUI Change-Id: I677113c14f646c39f8529d788b614e3f9b693dc7 Signed-off-by: Soohye Shin --- edje/view/home.edc | 34 +++++++++++++++++----------------- edje/view/recent.edc | 52 ++++++++++++++++++++++++++-------------------------- include/defs.h | 6 +++--- 3 files changed, 46 insertions(+), 46 deletions(-) diff --git a/edje/view/home.edc b/edje/view/home.edc index 326edc0..73ebe13 100644 --- a/edje/view/home.edc +++ b/edje/view/home.edc @@ -25,7 +25,7 @@ group{ description { state, "default" 0.0; rel2.relative, 1.0 0.0; - min, 0 97; + min, 0 98; align, 0.5 1.0; fixed, 0 1; visible, 0; @@ -51,7 +51,7 @@ group{ } fixed, 1 1; align, 0.5 0.0; - min, 97 97; + min, 98 98; } } part { @@ -61,7 +61,7 @@ group{ description { state, "default" 0.0; rel1.relative, 0.0 1.0; - min, 0 97; + min, 0 98; align, 0.5 0.0; fixed, 0 1; visible, 0; @@ -87,7 +87,7 @@ group{ rel2.to, "clip.down.arrow"; fixed, 1 1; align, 0.5 1.0; - min, 97 97; + min, 98 98; } } part { @@ -157,7 +157,7 @@ group { scale, 1; description { state, "default" 0.0; - min, 97 97; + min, 98 98; visible, 0; } } @@ -167,7 +167,7 @@ group { scale, 1; description { state, "default" 0.0; - min, 97 30; + min, 98 32; rel1.relative, 0.5 0.0; rel2.relative, 0.5 0.0; align, 0.5 0.0; @@ -177,7 +177,7 @@ group { font, "TizenSans"; text, "Recent"; } - color, 124 124 124 255; + color, 255 255 255 178; } } part { @@ -186,7 +186,7 @@ group { scale, 1; description { state, "default" 0.0; - min, 0 11; + min, 0 10; rel1 { to, "text"; relative, 0.5 1.0; @@ -206,7 +206,7 @@ group { scale, 1; description { state, "default" 0.0; - min, 97 34; + min, 98 34; rel1 { relative, 1.0 1.0; to, "pad.arrow"; @@ -235,7 +235,7 @@ group { scale, 1; description { state, "default" 0.0; - min, 97 97; + min, 98 98; visible, 0; } } @@ -245,7 +245,7 @@ group { scale, 1; description { state, "default" 0.0; - min, 97 30; + min, 98 32; rel1.relative, 0.5 1.0; rel2.relative, 0.5 1.0; align, 0.5 1.0; @@ -255,7 +255,7 @@ group { font, "TizenSans"; text, "ETG"; } - color, 124 124 124 255; + color, 255 255 255 178; } } part { @@ -264,7 +264,7 @@ group { scale, 1; description { state, "default" 0.0; - min, 0 11; + min, 0 10; rel1 { to, "text"; relative, 0.5 0.0; @@ -284,7 +284,7 @@ group { scale, 1; description { state, "default" 0.0; - min, 97 34; + min, 98 34; rel1 { relative, 0.0 0.0; to, "pad.arrow"; @@ -415,7 +415,7 @@ group { scale, 1; description { state, "default" 0.0; - min, 0 23; + min, 0 24; rel1.relative, 0.5 1.0; rel2.relative, 0.5 1.0; align, 0.5 1.0; @@ -439,7 +439,7 @@ group { } align, 0.5 1.0; fixed, 1 1; - min, 128 38; + min, 130 22; } } part { @@ -474,7 +474,7 @@ group { scale, 1; description { state, "default" 0.0; - min, 42 15; + min, 40 14; rel1.relative, 1.0 0.0; rel2.relative, 1.0 0.0; align, 1.0 0.0; diff --git a/edje/view/recent.edc b/edje/view/recent.edc index 910fa7d..35a9f32 100644 --- a/edje/view/recent.edc +++ b/edje/view/recent.edc @@ -94,7 +94,7 @@ group { } rel2.to, "bg"; fixed, 1 1; - color, 242 242 242 255; + color, 244 244 244 255; } } part { @@ -143,7 +143,7 @@ group { to, "pad.title"; relative, 0.0 1.0; } - min, 70 70; + min, 62 62; fixed, 1 1; align, 0.0 0.0; visible, 0; @@ -159,7 +159,7 @@ group { to, "bg"; relative, 1.0 1.0; } - min, 0 70; + min, 0 62; fixed, 1 1; align, 1.0 1.0; visible, 0; @@ -176,11 +176,11 @@ group { relative, 0.0 1.0; } text { - size, 50; + size, 32; font, "TizenSans"; } fixed, 1 1; - color, 51 51 51 255; + color, 0 0 0 178; } } part { @@ -273,7 +273,7 @@ group { description { state, "focus" 0.0; inherit, "default" 0.0; - color, 22 120 224 255; + color, 0 119 246 255; } } part { @@ -282,7 +282,7 @@ group { scale, 1; description { state, "default" 0.0; - min, 1 1; + min, 3 3; rel2.relative, 0.0 0.0; align, 0.0 0.0; fixed, 1 1; @@ -295,7 +295,7 @@ group { scale, 1; description { state, "default" 0.0; - min, 1 1; + min, 3 3; rel1.relative, 1.0 0.0; rel2.relative, 1.0 0.0; align, 1.0 0.0; @@ -317,7 +317,7 @@ group { to, "pad.thumbnail.right"; relative, 0.0 1.0; } - min, 0 198; + min, 0 196; fixed, 0 1; align, 0.5 0.0; } @@ -336,7 +336,7 @@ group { to, PART_RECENT_THUMBNAIL; relative, 0.0 0.0; } - min, 3 3; + min, 4 4; fixed, 1 1; align, 0.0 0.0; visible, 0; @@ -375,7 +375,7 @@ group { to, PART_RECENT_THUMBNAIL; relative, 1.0 0.0; } - min, 3 3; + min, 4 4; fixed, 1 1; align, 1.0 0.0; visible, 0; @@ -406,7 +406,7 @@ group { scale, 1; description { state, "default" 0.0; - min, 16 18; + min, 15 18; rel1 { to, PART_RECENT_THUMBNAIL; relative, 0.0 1.0; @@ -426,7 +426,7 @@ group { scale, 1; description { state, "default" 0.0; - min, 16 18; + min, 15 18; rel1 { to, PART_RECENT_THUMBNAIL; relative, 1.0 1.0; @@ -454,7 +454,7 @@ group { to, "pad.text.right"; relative, 0.0 1.0; } - min, 0 27; + min, 0 28; fixed, 0 1; align, 0.5 0.0; } @@ -473,7 +473,7 @@ group { to, PART_RECENT_TITLE; relative, 1.0 1.0; } - min, 0 9; + min, 0 8; fixed, 0 1; align, 0.5 0.0; visible, 0; @@ -528,13 +528,13 @@ group { scale, 1; description { state, "default" 0.0; - min, 235 294; + min, 236 294; color, 0 0 0 70; } description { state, "focus" 0.0; inherit, "default" 0.0; - color, 22 120 224 255; + color, 0 119 246 255; } } part { @@ -543,7 +543,7 @@ group { scale, 1; description { state, "default" 0.0; - min, 1 1; + min, 3 3; rel2.relative, 0.0 0.0; align, 0.0 0.0; fixed, 1 1; @@ -556,7 +556,7 @@ group { scale, 1; description { state, "default" 0.0; - min, 1 1; + min, 3 3; rel1.relative, 1.0 0.0; rel2.relative, 1.0 0.0; align, 1.0 0.0; @@ -578,7 +578,7 @@ group { to, "pad.thumbnail.right"; relative, 0.0 1.0; } - min, 0 198; + min, 0 196; fixed, 0 1; align, 0.5 0.0; } @@ -597,7 +597,7 @@ group { to, PART_RECENT_THUMBNAIL; relative, 0.0 0.0; } - min, 3 3; + min, 4 4; fixed, 1 1; align, 0.0 0.0; visible, 0; @@ -636,7 +636,7 @@ group { to, PART_RECENT_THUMBNAIL; relative, 1.0 0.0; } - min, 3 3; + min, 4 4; fixed, 1 1; align, 1.0 0.0; visible, 0; @@ -667,7 +667,7 @@ group { scale, 1; description { state, "default" 0.0; - min, 16 18; + min, 15 18; rel1 { to, PART_RECENT_THUMBNAIL; relative, 0.0 1.0; @@ -687,7 +687,7 @@ group { scale, 1; description { state, "default" 0.0; - min, 16 18; + min, 15 18; rel1 { to, PART_RECENT_THUMBNAIL; relative, 1.0 1.0; @@ -715,7 +715,7 @@ group { to, "pad.text.right"; relative, 0.0 1.0; } - min, 0 27; + min, 0 28; fixed, 0 1; align, 0.5 0.0; } @@ -734,7 +734,7 @@ group { to, PART_RECENT_TITLE; relative, 1.0 1.0; } - min, 0 9; + min, 0 8; fixed, 0 1; align, 0.5 0.0; visible, 0; diff --git a/include/defs.h b/include/defs.h index 34204ce..8d87f09 100644 --- a/include/defs.h +++ b/include/defs.h @@ -85,9 +85,9 @@ #define STYLE_LABEL_TITLE "slide_home_title" #define STYLE_LABEL_TITLE_FOCUS "slide_home_title_focus" -#define COLOR_DEFAULT_R 22 -#define COLOR_DEFAULT_G 120 -#define COLOR_DEFAULT_B 224 +#define COLOR_DEFAULT_R 0 +#define COLOR_DEFAULT_G 119 +#define COLOR_DEFAULT_B 246 #define COLOR_DEFAULT_A 255 #define IMAGE_BADGE IMAGEDIR"/badge_bg.png" -- 2.7.4 From da3bbae0c1095a8413ddc2ea5a2c9c46be3d8027 Mon Sep 17 00:00:00 2001 From: Soohye Shin Date: Mon, 22 Jun 2015 11:29:22 +0900 Subject: [PATCH 14/16] fix build error Change-Id: I5dba57441327eb85045a9dc2d13e109df4bb4982 Signed-off-by: Soohye Shin --- src/view/view_recent.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/view/view_recent.c b/src/view/view_recent.c index 197b214..653d926 100644 --- a/src/view/view_recent.c +++ b/src/view/view_recent.c @@ -74,7 +74,7 @@ static void _key_down(int id, void *data, Evas *e, Evas_Object *obj, !strcmp(ev->keyname, KEY_BACK_REMOTE)) { elm_object_signal_emit(priv->base, SIG_HIDE_RECENT, SRC_PROG); } else if (!strcmp(ev->keyname, KEY_ENTER) || - !strcmp(ev->KEY_ENTER_REMOTE)) { + !strcmp(ev->keyname, KEY_ENTER_REMOTE)) { /* It should be implemented later */ } } -- 2.7.4 From dc5ef245fdee8bec195d1333e8db7ded799c9b37 Mon Sep 17 00:00:00 2001 From: Soohye Shin Date: Mon, 22 Jun 2015 14:10:06 +0900 Subject: [PATCH 15/16] bug fix - exclude layout evas_object_show from utils to each view Change-Id: I039473b67e4ea4a36ee170d0e4c31fe06de64045 Signed-off-by: Soohye Shin --- src/utils.c | 2 -- src/view/view_home.c | 1 + 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/utils.c b/src/utils.c index ae84a88..efb4455 100644 --- a/src/utils.c +++ b/src/utils.c @@ -44,8 +44,6 @@ Evas_Object *utils_add_layout(Evas_Object *base, const char *group, if (part) elm_object_part_content_set(base, part, ly); - evas_object_show(ly); - return ly; } diff --git a/src/view/view_home.c b/src/view/view_home.c index c21af95..ac19b22 100644 --- a/src/view/view_home.c +++ b/src/view/view_home.c @@ -140,6 +140,7 @@ static struct bar_item *_pack_bar_item(struct _priv *priv, Evas_Object *box, inputmgr_add_callback(eo, 0, &eo_handler, bi); elm_box_pack_end(box, eo); + evas_object_show(eo); bi->priv = priv; bi->eo = eo; -- 2.7.4 From 0fbdc4734cf6218b798a1d672479b6d4df81a6da Mon Sep 17 00:00:00 2001 From: Soohye Shin Date: Mon, 22 Jun 2015 15:02:19 +0900 Subject: [PATCH 16/16] add to datamgr_select_item for deciding the action when focused item is pressed by enter key - enum DATAMGR_ITEM_SELECT_ACTION Change-Id: I17afc5988a90655f3e0597578e2191cbd4a39969 Signed-off-by: Soohye Shin --- config/home.json.in | 18 ++++++++++++------ include/datamgr.h | 14 +++++++++++--- src/data/data_home.c | 46 ++++++++++++++++++++++++++++++++++++++++------ src/data/datamgr.c | 8 ++++---- src/view/view_home.c | 8 +++++++- 5 files changed, 74 insertions(+), 20 deletions(-) diff --git a/config/home.json.in b/config/home.json.in index da33bc7..67d77c8 100644 --- a/config/home.json.in +++ b/config/home.json.in @@ -4,42 +4,48 @@ "name": "Owner", "icon": "@IMAGEDIR@/ic_user_08_nor.png", "focus_icon": "@IMAGEDIR@/ic_user_08_foc.png", - "package": "", + "select_action": "push", + "parameter": "VIEW_USER", "notification": false }, { "name": "Favorites", "icon": "@IMAGEDIR@/btn_menu_favorite_nor.png", "focus_icon": "@IMAGEDIR@/btn_menu_favorite_foc.png", - "package": "org.tizen.app-launcher-tv-ref", + "select_action": "launch", + "parameter": "org.tizen.favorite", "notification": false }, { "name": "Media Hub", "icon": "@IMAGEDIR@/btn_menu_media_nor.png", "focus_icon": "@IMAGEDIR@/btn_menu_media_foc.png", - "package": "org.tizen.gallery-tv-ref", + "select_action": "launch", + "parameter": "org.tizen.mediahub", "notification": false }, { "name": "APP", "icon": "@IMAGEDIR@/btn_menu_app_nor.png", "focus_icon": "@IMAGEDIR@/btn_menu_app_foc.png", - "package": "org.tizen.app-launcher-tv-ref", + "select_action": "launch", + "parameter": "org.tizen.apps", "notification": false }, { "name": "Notification", "icon": "@IMAGEDIR@/btn_menu_notification_nor.png", "focus_icon": "@IMAGEDIR@/btn_menu_notification_foc.png", - "package": "org.tizen.music-player-tv-ref", + "select_action": "launch", + "parameter": "org.tizen.infosquare", "notification": true }, { "name": "Settings", "icon": "@IMAGEDIR@/btn_menu_setting_nor.png", "focus_icon": "@IMAGEDIR@/btn_menu_setting_foc.png", - "package": "org.tizen.file-broswer-tv-ref", + "select_action": "launch", + "parameter": "org.tizen.settings", "notification": false } ] diff --git a/include/datamgr.h b/include/datamgr.h index 3d8c38e..9ca5fd4 100644 --- a/include/datamgr.h +++ b/include/datamgr.h @@ -20,6 +20,13 @@ #include #include +enum datamgr_item_select_action { + ITEM_SELECT_ACTION_LAUNCH, + ITEM_SELECT_ACTION_PUSH, + ITEM_SELECT_ACTION_SWITCH, + ITEM_SELECT_ACTION_MAX +}; + struct datamgr { Eina_List *list; const char *view_id; @@ -32,14 +39,15 @@ struct datamgr_item { char *icon; char *focus_icon; char *thumbnail; - char *package; + char *parameter; bool noti; + enum datamgr_item_select_action action; }; struct data_class { bool (*init)(struct datamgr *dm); void (*fini)(struct datamgr *dm); - void (*launch)(struct datamgr *dm); + void (*select)(struct datamgr_item *di); Eina_List *(*get_items)(struct datamgr *dm); /* It should be added later */ }; @@ -47,6 +55,6 @@ struct data_class { struct datamgr *datamgr_init(struct data_class *dclass, const char *view_id); void datamgr_fini(struct datamgr *dm); Eina_List *datamgr_get_items(struct datamgr *dm); -void datamgr_launch(struct datamgr *dm); +void datamgr_select_item(struct datamgr *dm, struct datamgr_item *di); #endif /* __AIR_HOME_DATAMGR_H__ */ diff --git a/src/data/data_home.c b/src/data/data_home.c index a81135a..335ee02 100644 --- a/src/data/data_home.c +++ b/src/data/data_home.c @@ -18,15 +18,22 @@ #include #include #include +#include +#include #include "data_home.h" #include "datamgr.h" +#include "utils.h" + +#define STR_SELECT_ACTION_PUSH "push" +#define STR_SELECT_ACTION_LAUNCH "launch" #define OBJECT_MEMBERS "item" #define MEMBER_STR_NAME "name" #define MEMBER_STR_ICON "icon" #define MEMBER_STR_FOCUS_ICON "focus_icon" -#define MEMBER_STR_PACKAGE "package" +#define MEMBER_STR_SELECT_ACTION "select_action" +#define MEMBER_STR_PARAMETER "parameter" #define MEMBER_INT_NOTIFICATION "notification" static inline char *_read_string(JsonReader *reader, char *member) @@ -64,7 +71,7 @@ static inline gboolean _read_boolean(JsonReader *reader, char *member) static struct datamgr_item *_pack_home_item(JsonReader *reader, int i) { struct datamgr_item *di; - char *name, *icon, *package, *focus_icon; + char *name, *icon, *parameter, *focus_icon, *action; gboolean noti; if (!reader) { @@ -89,7 +96,8 @@ static struct datamgr_item *_pack_home_item(JsonReader *reader, int i) if (!focus_icon) goto err; - package = _read_string(reader, MEMBER_STR_PACKAGE); + action = _read_string(reader, MEMBER_STR_SELECT_ACTION); + parameter = _read_string(reader, MEMBER_STR_PARAMETER); noti = _read_boolean(reader, MEMBER_INT_NOTIFICATION); json_reader_end_element(reader); @@ -100,10 +108,17 @@ static struct datamgr_item *_pack_home_item(JsonReader *reader, int i) return NULL; } + if (!strcmp(action, STR_SELECT_ACTION_PUSH)) + di->action = ITEM_SELECT_ACTION_PUSH; + else if (!strcmp(action, STR_SELECT_ACTION_LAUNCH)) + di->action = ITEM_SELECT_ACTION_LAUNCH; + else + di->action = ITEM_SELECT_ACTION_MAX; + di->title = strdup(name); di->icon = strdup(icon); di->focus_icon = strdup(focus_icon); - di->package = strdup(package); + di->parameter = strdup(parameter); di->noti = noti; return di; @@ -168,7 +183,7 @@ static void _fini(struct datamgr *dm) free(di->title); free(di->icon); free(di->focus_icon); - free(di->package); + free(di->parameter); free(di); } @@ -219,10 +234,29 @@ static bool _init(struct datamgr *dm) return true; } +static void _select(struct datamgr_item *di) +{ + if (!di || !di->parameter) + return; + + switch (di->action) { + case ITEM_SELECT_ACTION_LAUNCH: + utils_launch_app(di->parameter); + break; + case ITEM_SELECT_ACTION_PUSH: + viewmgr_push_view(di->parameter); + break; + default: + _ERR("Invalid state"); + return; + } +} + static struct data_class dclass = { .init = _init, .fini = _fini, - .get_items = _get_items + .get_items = _get_items, + .select = _select }; struct data_class *datamgr_home_get_dclass(void) diff --git a/src/data/datamgr.c b/src/data/datamgr.c index 30579e1..a9d398b 100644 --- a/src/data/datamgr.c +++ b/src/data/datamgr.c @@ -73,15 +73,15 @@ Eina_List *datamgr_get_items(struct datamgr *dm) return dm->dclass->get_items(dm); } -void datamgr_launch(struct datamgr *dm) +void datamgr_select_item(struct datamgr *dm, struct datamgr_item *di) { - if (!dm || !dm->dclass) { + if (!dm || !dm->dclass || !di) { _ERR("Invalid argument"); return; } - if (!dm->dclass->launch) + if (!dm->dclass->select) return; - dm->dclass->launch(dm); + dm->dclass->select(di); } diff --git a/src/view/view_home.c b/src/view/view_home.c index ac19b22..f1900b2 100644 --- a/src/view/view_home.c +++ b/src/view/view_home.c @@ -38,6 +38,7 @@ struct _priv { struct bar_item { Evas_Object *eo; + struct datamgr_item *di; struct _priv *priv; }; @@ -144,6 +145,7 @@ static struct bar_item *_pack_bar_item(struct _priv *priv, Evas_Object *box, bi->priv = priv; bi->eo = eo; + bi->di = di; return bi; err: @@ -222,18 +224,22 @@ static bool _add_home(struct _priv *priv, Evas_Object *base) static void _key_down(int id, void *data, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev) { + struct _priv *priv; + if (!data) { _ERR("Invalid argument"); return; } + priv = data; + if (!strcmp(ev->keyname, KEY_DOWN)) { viewmgr_push_view(VIEW_RECENT); } else if (!strcmp(ev->keyname, KEY_UP)) { /* It should be implemented later */ } else if (!strcmp(ev->keyname, KEY_ENTER) || !strcmp(ev->keyname, KEY_ENTER_REMOTE)) { - /* It should be implemented later */ + datamgr_select_item(priv->dm, priv->foc->di); } else if (!strcmp(ev->keyname, KEY_BACK) || !strcmp(ev->keyname, KEY_BACK_REMOTE)) { /* It should be implemented later */ -- 2.7.4