int source_type, int sort_type);
void mediadata_destroy(struct mediadata *md);
+Eina_List *mediadata_get_medialist(struct mediadata *md);
+
Eina_List *mediadata_get_list(struct mediadata *md, int list_type);
void mediadata_free_list(Eina_List *list);
#define PART_ELM_SWALLOW_THUMBNAIL "elm.swallow.thumbnail"
#define PART_ELM_SWALLOW_VIDEO "elm.swallow.video"
+/* signal */
+#define SIG_ITEM_SELECTED "item_selected"
+#define SIG_SOURCE_EDC "edc"
+
#endif /* __AIR_MEDIAHUB_DEFINE_H__ */
int box_padding;
struct grid_class *gclass;
+
+ void (*grid_selected_cb)(void *data, Elm_Object_Item *it);
+ void *cb_data;
};
struct listmgr *listmgr_create(Evas_Object *base, void *data);
void util_time_string(char *str, int size, unsigned int ms);
void util_up_string(char *str);
+int util_get_media_index(Eina_List *list, void *info);
+
#endif /* __AIR_MEDIAHUB_UTIL_H__ */
/* viewer */
view_class *view_viewer_get_vclass(void);
+/* view data */
+struct view_data {
+ Eina_List *list;
+ int index;
+};
+
+/* view update type */
+enum update_type {
+ UPDATE_CONTENT = 0,
+ UPDATE_FOCUS
+};
+
#endif /* __AIR_MEDIAHUB_VIEW_H__ */
visible: 0;
}
description {
- state: "clicked" 0.0;
+ state: "selected" 0.0;
inherit: "default" 0.0;
perspective.zplane: -100;
}
target: "part_focus3";
target: "elm.bg.text";
}
+ program {
+ name: "selected";
+ signal: "elm,state,selected";
+ source: "elm";
+ action: STATE_SET "selected" 0.0;
+ target: "map";
+ transition: DECELERATE 0.2;
+ after: "after_selected";
+ }
+ program {
+ name: "after_selected";
+ action: STATE_SET "default" 0.0;
+ target: "map";
+ transition: DECELERATE 0.2;
+ after: "item_selected";
+ }
+ program {
+ name: "item_selected";
+ action: SIGNAL_EMIT SIG_ITEM_SELECTED SIG_SOURCE_EDC;
+ }
}
}
visible: 0;
}
description {
- state: "clicked" 0.0;
+ state: "selected" 0.0;
inherit: "default" 0.0;
perspective.zplane: -100;
}
target: "part_focus3";
target: "part_focus4";
}
+ program {
+ name: "selected";
+ signal: "elm,state,selected";
+ source: "elm";
+ action: STATE_SET "selected" 0.0;
+ target: "map";
+ transition: DECELERATE 0.2;
+ after: "after_selected";
+ }
+ program {
+ name: "after_selected";
+ action: STATE_SET "default" 0.0;
+ target: "map";
+ transition: DECELERATE 0.2;
+ after: "item_selected";
+ }
+ program {
+ name: "item_selected";
+ action: SIGNAL_EMIT SIG_ITEM_SELECTED SIG_SOURCE_EDC;
+ }
}
}
eina_list_free(md->media_list);
}
+Eina_List *mediadata_get_medialist(struct mediadata *md)
+{
+ if (!md) {
+ _ERR("failed to get mediadata");
+ return NULL;
+ }
+
+ return md->media_list;
+}
+
Eina_List *mediadata_get_list(struct mediadata *md, int list_type)
{
Eina_List *list, *l;
#include <app_media.h>
#include <gridmgr.h>
#include <layoutmgr.h>
+#include <viewmgr.h>
#include "define.h"
+#include "view.h"
#include "data/mediadata.h"
#include "util/listmgr.h"
#include "util/util.h"
.content_get = _grid_content_get
};
-static struct listmgr_data *_create_listmgr_data(void)
+static void _grid_selected_cb(void *data, Elm_Object_Item *it)
+{
+ app_media *am;
+ struct view_data *vdata;
+ struct _priv *priv;
+
+ if (!data || !it) {
+ _ERR("invalid argument");
+ return;
+ }
+
+ priv = data;
+
+ am = elm_object_item_data_get(it);
+ if (!am) {
+ _ERR("failed to get app media");
+ return;
+ }
+
+ vdata = calloc(1, sizeof(*vdata));
+ if (!vdata) {
+ _ERR("failed to allocate view data");
+ return;
+ }
+
+ vdata->list = mediadata_get_medialist(priv->md);
+ vdata->index = util_get_media_index(vdata->list, am);
+
+ viewmgr_update_view(VIEW_VIEWER, UPDATE_CONTENT, vdata);
+ viewmgr_push_view(VIEW_VIEWER);
+}
+
+static struct listmgr_data *_create_listmgr_data(struct _priv *priv)
{
struct listmgr_data *data;
data->grid_item_y = GRID_ITEM_Y;
data->grid_num_item = GRID_NUM_ITEM;
data->box_padding = BOX_PADDING;
+
data->gclass = &_gclass;
+ data->grid_selected_cb = _grid_selected_cb;
+ data->cb_data = priv;
+
return data;
}
goto err2;
}
- ldata = _create_listmgr_data();
+ ldata = _create_listmgr_data(priv);
if (!ldata) {
_ERR("failed to create listmgr data");
goto err2;
#include <app_media.h>
#include <gridmgr.h>
#include <layoutmgr.h>
+#include <viewmgr.h>
#include "define.h"
+#include "view.h"
#include "data/mediadata.h"
#include "util/listmgr.h"
#include "util/util.h"
.content_get = _grid_content_get
};
-static struct listmgr_data *_create_listmgr_data(void)
+static void _grid_selected_cb(void *data, Elm_Object_Item *it)
+{
+ app_media *am;
+ struct view_data *vdata;
+ struct _priv *priv;
+
+ if (!data || !it) {
+ _ERR("invalid argument");
+ return;
+ }
+
+ priv = data;
+
+ am = elm_object_item_data_get(it);
+ if (!am) {
+ _ERR("failed to get app media");
+ return;
+ }
+
+ vdata = calloc(1, sizeof(*vdata));
+ if (!vdata) {
+ _ERR("failed to allocate view data");
+ return;
+ }
+
+ vdata->list = mediadata_get_medialist(priv->md);
+ vdata->index = util_get_media_index(vdata->list, am);
+
+ viewmgr_update_view(VIEW_VIEWER, UPDATE_CONTENT, vdata);
+ viewmgr_push_view(VIEW_VIEWER);
+}
+
+static struct listmgr_data *_create_listmgr_data(struct _priv *priv)
{
struct listmgr_data *data;
data->grid_item_y = GRID_ITEM_Y;
data->grid_num_item = GRID_NUM_ITEM;
data->box_padding = BOX_PADDING;
+
data->gclass = &_gclass;
+ data->grid_selected_cb = _grid_selected_cb;
+ data->cb_data = priv;
+
return data;
}
goto err2;
}
- ldata = _create_listmgr_data();
+ ldata = _create_listmgr_data(priv);
if (!ldata) {
_ERR("failed to create listmgr data");
goto err2;
#include <Elementary.h>
#include <app_debug.h>
#include <gridmgr.h>
+#include <inputmgr.h>
#include "define.h"
#include "data/mediadata.h"
struct listmgr_data *data;
};
+void _mouse_move_cb(int id, void *data, Evas *e, Evas_Object *obj,
+ Evas_Event_Mouse_Move *ev)
+{
+ Elm_Object_Item *it;
+
+ if (!obj || !ev)
+ return;
+
+ it = elm_gengrid_at_xy_item_get(obj, ev->cur.canvas.x,
+ ev->cur.canvas.y, NULL, NULL);
+
+ if (!it)
+ return;
+
+ if (elm_object_item_focus_get(it))
+ return;
+
+ elm_object_item_focus_set(it, EINA_TRUE);
+}
+
+void _grid_selected_cb(void *data, Elm_Object_Item *it,
+ const char *emission, const char *source)
+{
+ struct listmgr *lmgr;
+ struct listmgr_data *ldata;
+
+ if (!data || !it)
+ return;
+
+ lmgr = data;
+ ldata = lmgr->data;
+
+ if (ldata->grid_selected_cb)
+ ldata->grid_selected_cb(ldata->cb_data, it);
+}
+
+void _grid_realized_cb(int id, void *data, Evas_Object *obj,
+ Elm_Object_Item *it)
+{
+ if (!data || !it)
+ return;
+
+ elm_object_item_signal_callback_add(it, SIG_ITEM_SELECTED,
+ SIG_SOURCE_EDC, _grid_selected_cb, data);
+}
+
+void _grid_unrealized_cb(int id, void *data, Evas_Object *obj,
+ Elm_Object_Item *it)
+{
+ if (!it)
+ return;
+
+ elm_object_item_signal_callback_del(it, SIG_ITEM_SELECTED,
+ SIG_SOURCE_EDC, _grid_selected_cb);
+}
+
+static input_handler grid_handler = {
+ .mouse_move = _mouse_move_cb,
+ .realized = _grid_realized_cb,
+ .unrealized = _grid_unrealized_cb
+};
+
static int _get_grid_size(int count, int num_item)
{
int size;
evas_object_size_hint_min_set(grid, size * data->grid_item_x,
data->grid_num_item * data->grid_item_y);
+ inputmgr_add_callback(grid, 0, &grid_handler, lmgr);
+
elm_object_part_content_set(ly, PART_ITEM_TITLE, btn);
elm_object_part_content_set(ly, PART_ITEM_CONTENT, grid);
str++;
}
}
+
+int util_get_media_index(Eina_List *list, void *data)
+{
+ Eina_List *l;
+ int index;
+ void *obj;
+
+ index = 0;
+ EINA_LIST_FOREACH(list, l, obj) {
+ if (data == obj)
+ break;
+
+ index++;
+ }
+
+ return index;
+}