From 84e7dd1d6a9672ba7a914fc244ce8aac0138638e Mon Sep 17 00:00:00 2001 From: Soohye Shin Date: Mon, 29 Jun 2015 14:35:11 +0900 Subject: [PATCH] pack recent data Change-Id: I2328f146f9074d73b198d1a41ffeeeab637ace50 Signed-off-by: Soohye Shin --- edje/view/recent.edc | 48 ++------------------- edje/widget/label.edc | 107 ++++++++++++++++++++++++++++++++++++++++++++++ include/datamgr.h | 7 ++++ include/defs.h | 2 + src/view/view_recent.c | 112 +++++++++++++++++++++++++++++++++++++++++++++++-- 5 files changed, 228 insertions(+), 48 deletions(-) diff --git a/edje/view/recent.edc b/edje/view/recent.edc index 35a9f32..b6d8352 100644 --- a/edje/view/recent.edc +++ b/edje/view/recent.edc @@ -460,37 +460,17 @@ group { } } 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 8; - 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"; + to, PART_RECENT_TITLE; relative, 0.0 1.0; } rel2 { - to, "pad.text.subtitle"; + to, PART_RECENT_TITLE; relative, 1.0 1.0; } min, 0 24; @@ -721,37 +701,17 @@ group { } } 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 8; - 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"; + to, PART_RECENT_TITLE; relative, 0.0 1.0; } rel2 { - to, "pad.text.subtitle"; + to, PART_RECENT_TITLE; relative, 1.0 1.0; } min, 0 24; diff --git a/edje/widget/label.edc b/edje/widget/label.edc index 5c9c825..e908ed1 100644 --- a/edje/widget/label.edc +++ b/edje/widget/label.edc @@ -23,6 +23,14 @@ styles { name, "home_label_title_focus"; base, "font=TizenSans font_size=22 color=#ffffff align=center"; } + style { + name, "recent_label_title"; + base, "font=TizenSans font_size=28 color=#ffffff align=left"; + } + style { + name, "recent_label_subtitle"; + base, "font=TizenSans font_size=24 color=#7f7f7f align=left"; + } } group { @@ -204,3 +212,102 @@ group { } } } + +group { + name, "elm/label/base/slide_recent_title"; + inherit, "elm/label/base/slide_home_title"; + parts { + part { + name, "elm.text"; + type, TEXTBLOCK; + scale, 1; + clip_to, "label.text.clip"; + description { + state, "default" 0.0; + rel1.relative, 0.0 0.0; + rel2.relative, 1.0 1.0; + align, 0.0 0.5; + text { + style, "recent_label_title"; + align, 0.0 1.0; + min, 0 1; + } + } + description { + state, "slide_end" 0.0; + inherit, "default" 0.0; + rel1.relative, 1.0 0.0; + rel2.relative, 1.0 1.0; + align, 1.0 0.5; + text { + style, "recent_label_title"; + align, 0.0 0.0; + min, 1 1; + ellipsis, -1.0; + } + } + description { + state, "slide_begin" 0.0; + inherit, "default" 0.0; + rel1.relative, 0.0 0.0; + rel2.relative, 0.0 1.0; + align, 0.0 0.5; + text { + style, "recent_label_title"; + align, 0.0 0.0; + min, 1 1; + ellipsis, -1.0; + } + } + } + } +} +group { + name, "elm/label/base/slide_recent_subtitle"; + inherit, "elm/label/base/slide_home_title"; + parts { + part { + name, "elm.text"; + type, TEXTBLOCK; + scale, 1; + clip_to, "label.text.clip"; + description { + state, "default" 0.0; + rel1.relative, 0.0 0.0; + rel2.relative, 1.0 1.0; + align, 0.0 0.5; + text { + style, "recent_label_subtitle"; + align, 0.0 1.0; + min, 0 1; + } + } + description { + state, "slide_end" 0.0; + inherit, "default" 0.0; + rel1.relative, 1.0 0.0; + rel2.relative, 1.0 1.0; + align, 1.0 0.5; + text { + style, "recent_label_subtitle"; + align, 0.0 0.0; + min, 1 1; + ellipsis, -1.0; + } + } + description { + state, "slide_begin" 0.0; + inherit, "default" 0.0; + rel1.relative, 0.0 0.0; + rel2.relative, 0.0 1.0; + align, 0.0 0.5; + text { + style, "recent_label_subtitle"; + align, 0.0 0.0; + min, 1 1; + ellipsis, -1.0; + } + } + } + } +} diff --git a/include/datamgr.h b/include/datamgr.h index 982694d..ef0a272 100644 --- a/include/datamgr.h +++ b/include/datamgr.h @@ -28,6 +28,12 @@ enum datamgr_item_select_action { ITEM_SELECT_ACTION_MAX }; +enum recent_item_type { + RECENT_ITEM_ICON, + RECENT_ITEM_PREVIEW, + RECENT_ITEM_MAX +}; + struct datamgr { Eina_List *list; const char *view_id; @@ -43,6 +49,7 @@ struct datamgr_item { char *parameter; bool noti; enum datamgr_item_select_action action; + enum recent_item_type rtype; }; struct data_class { diff --git a/include/defs.h b/include/defs.h index aaf8d47..b412957 100644 --- a/include/defs.h +++ b/include/defs.h @@ -102,6 +102,8 @@ #define STYLE_LABEL_TITLE "slide_home_title" #define STYLE_LABEL_TITLE_FOCUS "slide_home_title_focus" +#define STYLE_LABEL_RECENT_TITLE "slide_recent_title" +#define STYLE_LABEL_RECENT_SUBTITLE "slide_recent_subtitle" #define STYLE_INPUT "input.field" #define COLOR_DEFAULT_R 0 diff --git a/src/view/view_recent.c b/src/view/view_recent.c index 653d926..be4c5a2 100644 --- a/src/view/view_recent.c +++ b/src/view/view_recent.c @@ -41,13 +41,17 @@ struct _priv { struct _bar_item { Evas_Object *eo; + + struct datamgr_item *di; + struct _priv *priv; }; 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); + btn = utils_add_layout(base, GRP_RECENT_DELETE, true, + PART_RECENT_DELETE_ICON); if (!btn) { _ERR("failed to add delete icon"); return false; @@ -120,7 +124,8 @@ static Evas_Object *_create(Evas_Object *win, void *data) free(priv); return NULL; } - evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND, + EVAS_HINT_EXPAND); elm_win_resize_object_add(win, base); priv->win = win; @@ -143,10 +148,95 @@ static Evas_Object *_create(Evas_Object *win, void *data) return base; } +static void _focused(int id, void *data, Evas_Object *obj, + Elm_Object_Item *item) +{ + 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_item(struct _priv *priv, Evas_Object *box, + struct datamgr_item *di) +{ + Evas_Object *eo, *lbl, *sub_lbl, *ic; + struct _bar_item *bi; + const char *group; + + switch (di->rtype) { + case RECENT_ITEM_PREVIEW: + group = GRP_RECENT_PREVIEW; + break; + case RECENT_ITEM_ICON: + group = GRP_RECENT_ICON; + break; + default: + return NULL; + } + + bi = calloc(1, sizeof(*bi)); + if (!bi) { + _ERR("failed to calloc bar item"); + return NULL; + } + + eo = utils_add_layout(box, group, true, NULL); + if (!eo) { + _ERR("failed to add layout"); + free(bi); + return NULL; + } + evas_object_show(eo); + + ic = utils_add_icon(eo, di->icon, PART_BAR_ITEM_ICON); + if (!ic) { + _ERR("failed to add icon"); + evas_object_del(eo); + free(bi); + return NULL; + } + + lbl = utils_add_label(eo, di->title, STYLE_LABEL_RECENT_TITLE, + PART_RECENT_TITLE); + if (!lbl) { + _ERR("failed to add title"); + evas_object_del(eo); + free(bi); + return NULL; + } + + if(di->subtitle) { + sub_lbl = utils_add_label(eo, di->subtitle, + STYLE_LABEL_RECENT_SUBTITLE, + PART_RECENT_SUBTITLE); + if (!sub_lbl) + _ERR("failed to add sub title"); + } + + inputmgr_add_callback(eo, 0, &eo_handler, bi); + elm_box_pack_end(box, eo); + + bi->eo = eo; + bi->di = di; + + return bi; +} + static void _load_recent(struct _priv *priv) { - Eina_List *list; + Eina_List *list, *l; Evas_Object *scr, *box; + struct _bar_item *bi; + struct datamgr_item *di; list = datamgr_get_items(priv->dm); if (!list) { @@ -171,8 +261,14 @@ static void _load_recent(struct _priv *priv) 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 */ + EINA_LIST_FOREACH(list, l, di) { + bi = _pack_item(priv, box, di); + if (!bi) + continue; + bi->priv = priv; + priv->list = eina_list_append(priv->list, bi); + } priv->scr = scr; priv->box = box; } @@ -180,6 +276,7 @@ static void _load_recent(struct _priv *priv) static void _show(void *data) { struct _priv *priv; + struct _bar_item *bi; if (!data) { _ERR("Invalid argument"); @@ -192,6 +289,12 @@ static void _show(void *data) elm_object_signal_emit(priv->base, SIG_SHOW_RECENT, SRC_PROG); _load_recent(priv); + + if (!priv->list) + return; + + bi = eina_list_data_get(priv->list); + elm_object_focus_set(bi->eo, EINA_TRUE); } static void _unload_recent(struct _priv *priv) @@ -199,6 +302,7 @@ static void _unload_recent(struct _priv *priv) struct _bar_item *bi; EINA_LIST_FREE(priv->list, bi) { + inputmgr_remove_callback(bi->eo, &eo_handler); evas_object_del(bi->eo); free(bi); } -- 2.7.4