Eina_List *media_list;
- app_media_info *recent_info;
+ app_media *recent_info;
};
static char *_grid_text_get(void *data, Evas_Object *obj, const char *part)
return false;
}
- info = priv->recent_info;
+ info = app_media_get_info(priv->recent_info);
+ if (!info) {
+ _ERR("failed to get app media info");
+ return false;
+ }
elm_image_file_set(image, info->thumbnail_path, NULL);
elm_image_aspect_fixed_set(image, EINA_FALSE);
return true;
}
+static void _item_selected_cb(struct _priv *priv, app_media *am)
+{
+ struct view_update_data vdata;
+
+ 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 void _recent_selected_cb(void *data, Evas_Object *obj)
+{
+ struct _priv *priv;
+
+ if (!data || !obj)
+ return;
+
+ priv = data;
+
+ _item_selected_cb(priv, priv->recent_info);
+}
+
static void _grid_selected_cb(void *data, Elm_Object_Item *it)
{
app_media *am;
- struct view_update_data vdata;
struct _priv *priv;
if (!data || !it) {
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);
+ _item_selected_cb(priv, am);
}
static struct listmgr_data *_create_listmgr_data(struct _priv *priv)
pops->draw = _draw_recent;
pops->update = _update_recent;
+ pops->selected_cb = _recent_selected_cb;
pops->ops_data = priv;
gops = calloc(1, sizeof(*gops));
enum _object_type {
LISTMGR_SCROLLER = 0,
LISTMGR_INDEX,
+ LISTMGR_PLAY_INFO,
LISTMGR_GRID
};
switch (id) {
case LISTMGR_INDEX:
+ case LISTMGR_PLAY_INFO:
if (!elm_object_focus_get(obj)) {
lmgr->scr_focus = EINA_FALSE;
elm_object_focus_set(obj, EINA_TRUE);
}
}
+static void _clicked_cb(int id, void *data, Evas_Object *obj)
+{
+ if (!obj)
+ return;
+
+ switch (id) {
+ case LISTMGR_PLAY_INFO:
+ elm_object_signal_emit(obj, SIG_BTN_CLICKED, SIG_SOURCE_SRC);
+ break;
+ default:
+ break;
+ }
+}
+
+static void _play_info_selected_cb(void *data, Evas_Object *obj,
+ const char *emission, const char *source)
+{
+ struct listmgr *lmgr;
+ struct play_info_ops *pops;
+
+ if (!data || !obj)
+ return;
+
+ lmgr = data;
+ pops = lmgr->data->pops;
+
+ if (pops->selected_cb)
+ pops->selected_cb(pops->ops_data, obj);
+}
+
static void _grid_selected_cb(void *data, Elm_Object_Item *it,
const char *emission, const char *source)
{
break;
case LISTMGR_INDEX:
+ case LISTMGR_PLAY_INFO:
case LISTMGR_GRID:
lmgr->focused = elm_object_parent_widget_get(obj);
lmgr->scr_focus = EINA_TRUE;
static input_handler _handler = {
.key_down = _key_down_cb,
.mouse_move = _mouse_move_cb,
+ .clicked = _clicked_cb,
.focused = _focused_cb
};
static bool _draw_play_info(struct listmgr *lmgr)
{
- Evas_Object *ly;
+ Evas_Object *ly, *index, *content;
struct play_info_ops *pops;
ly = elm_layout_add(lmgr->box);
return false;
}
+ index = elm_object_part_content_get(ly, PART_ITEM_TITLE);
+
+ inputmgr_add_callback(index, LISTMGR_INDEX, &_handler, lmgr);
+ elm_object_focus_next_object_set(index, lmgr->data->menu_btn,
+ ELM_FOCUS_UP);
+
+ content = elm_object_part_content_get(ly, PART_ITEM_CONTENT);
+
+ inputmgr_add_callback(content, LISTMGR_PLAY_INFO, &_handler, lmgr);
+ elm_object_signal_callback_add(content, SIG_ITEM_SELECTED,
+ SIG_SOURCE_EDC, _play_info_selected_cb, lmgr);
+
lmgr->play_info = ly;
return true;
elm_box_pack_start(lmgr->box, lmgr->play_info);
evas_object_show(lmgr->play_info);
lmgr->show_play_info = EINA_TRUE;
+ lmgr->focused = lmgr->play_info;
}
return true;
void listmgr_destroy(struct listmgr *lmgr)
{
Eina_List *item, *l;
- Evas_Object *ly, *btn, *grid;
+ Evas_Object *ly, *btn, *content, *grid;
if (!lmgr) {
_ERR("invalid argument");
return;
}
+ if (lmgr->play_info) {
+ btn = elm_object_part_content_get(lmgr->play_info,
+ PART_ITEM_TITLE);
+ content = elm_object_part_content_get(lmgr->play_info,
+ PART_ITEM_CONTENT);
+
+ inputmgr_remove_callback(btn, &_handler);
+ inputmgr_remove_callback(content, &_handler);
+
+ elm_object_signal_callback_del(content, SIG_ITEM_SELECTED,
+ SIG_SOURCE_EDC, _play_info_selected_cb);
+
+ elm_box_unpack(lmgr->box, lmgr->play_info);
+ evas_object_del(lmgr->play_info);
+ }
+
item = elm_box_children_get(lmgr->box);
EINA_LIST_FOREACH(item, l, ly) {
btn = elm_object_part_content_get(ly, PART_ITEM_TITLE);