#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;
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);
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;
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)
priv = data;
+ _unload_recent(priv);
+
evas_object_hide(priv->base);
}
}
priv = data;
+
+ _unload_recent(priv);
+
+ inputmgr_remove_callback(priv->base, &base_handler);
datamgr_fini(priv->dm);
evas_object_del(priv->base);
free(priv);