draw recent lists and delete icon 98/41898/4
authorSoohye Shin <soohye.shin@samsung.com>
Fri, 19 Jun 2015 02:26:12 +0000 (11:26 +0900)
committerSoohye Shin <soohye.shin@samsung.com>
Fri, 19 Jun 2015 12:31:17 +0000 (21:31 +0900)
Change-Id: I61db5350b2674d8b8eb41fbff8e1993f454ba3b2
Signed-off-by: Soohye Shin <soohye.shin@samsung.com>
edje/view/recent.edc
include/defs.h
src/view/view_recent.c

index 49289b2..910fa7d 100644 (file)
@@ -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;
                }
        }
 }
index 42f66ab..9bd6891 100644 (file)
@@ -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"
 
index 3978df7..197b214 100644 (file)
 #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);