X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Flayout%2Fgallery.c;h=41ec2c437e9b0d6e65af36b7e9920ba514812398;hb=69f49ca6cc0974614d6a48fb85ccdc34496c7097;hp=61607c23d08bba836d0de7e1ec5670ad39f51108;hpb=9e4393c020e2dddc2198a726fdfb200267b90447;p=profile%2Ftv%2Fapps%2Fnative%2Fair_mediahub.git diff --git a/src/layout/gallery.c b/src/layout/gallery.c index 61607c2..41ec2c4 100644 --- a/src/layout/gallery.c +++ b/src/layout/gallery.c @@ -28,20 +28,28 @@ #include "util/listmgr.h" #include "util/util.h" +/* + FIXME #define LIST_MEDIA_COND "media_type=0 OR \ (media_type=1 AND copyright LIKE \"Unknown\")" +*/ +#define LIST_MEDIA_COND "(media_type=0 OR media_type=1) AND copyright LIKE \"Unknown\"" #define TEXT_NOCONTENT "No Photo & Video" -#define GRID_ITEM_X 206 -#define GRID_ITEM_Y 206 +#define GRID_PADDING 6 +#define GRID_ITEM_X (200 + GRID_PADDING) +#define GRID_ITEM_Y (200 + GRID_PADDING) #define GRID_NUM_ITEM 3 -#define BOX_PADDING 62 +#define BOX_PADDING (62 - GRID_PADDING) + +#define IMAGE_FAVORITE_ALPHA 150 struct _priv { Evas_Object *base; Evas_Object *layout; + Evas_Object *menu_btn; layoutmgr *lmgr; @@ -49,10 +57,40 @@ struct _priv { struct listmgr_data *ldata; struct mediadata *md; + int cur_index; Eina_List *media_list; }; +static char *_grid_text_get(void *data, Evas_Object *obj, const char *part) +{ + app_media *am; + app_media_info *info; + char buf[32]; + + if (!data) + return NULL; + + am = data; + info = app_media_get_info(am); + if (!info) { + _ERR("failed to get media info"); + return NULL; + } + + if (info->media_type != MEDIA_CONTENT_TYPE_VIDEO) + return NULL; + + if (!strcmp(part, PART_ELM_TEXT_PLAYTIME)) { + util_time_string(buf, sizeof(buf), + info->video->duration, false); + + return strdup(buf); + } + + return NULL; +} + static Evas_Object *_grid_content_get(void *data, Evas_Object *obj, const char *part) { @@ -89,6 +127,19 @@ static Evas_Object *_grid_content_get(void *data, evas_object_show(image); } + } else if (!strcmp(part, PART_ELM_SWALLOW_FAVORITE)) { + if (!info->favorite) + return NULL; + + image = util_add_image(obj, IMAGE_THUMBNAIL_FAVORITE); + if (!image) { + _ERR("failed to create image object"); + return NULL; + } + + util_set_alpha_color(image, IMAGE_FAVORITE_ALPHA); + + evas_object_show(image); } return image; @@ -96,6 +147,7 @@ static Evas_Object *_grid_content_get(void *data, static struct grid_class _gclass = { .item_style = STYLE_GRID_GALLERY_ITEM, + .text_get = _grid_text_get, .content_get = _grid_content_get }; @@ -120,6 +172,7 @@ static void _grid_selected_cb(void *data, Elm_Object_Item *it) vdata.list = mediadata_get_medialist(priv->md); vdata.index = util_get_media_index(vdata.list, am); + priv->cur_index = vdata.index; viewmgr_update_view(VIEW_VIEWER, UPDATE_CONTENT, &vdata); viewmgr_push_view(VIEW_VIEWER); @@ -128,27 +181,55 @@ static void _grid_selected_cb(void *data, Elm_Object_Item *it) static struct listmgr_data *_create_listmgr_data(struct _priv *priv) { struct listmgr_data *data; + struct grid_ops *gops; data = calloc(1, sizeof(*data)); - if (!data) { - _ERR("failed to allocate listmgr data"); - return NULL; - } + if (!data) + goto err; + + data->menu_btn = priv->menu_btn; data->grid_item_x = GRID_ITEM_X; data->grid_item_y = GRID_ITEM_Y; data->grid_num_item = GRID_NUM_ITEM; data->box_padding = BOX_PADDING; - data->gclass = &_gclass; + gops = calloc(1, sizeof(*gops)); + if (!gops) + goto err; + + gops->gclass = &_gclass; + gops->selected_cb = _grid_selected_cb; + gops->ops_data = priv; - data->grid_selected_cb = _grid_selected_cb; - data->cb_data = priv; + data->gops = gops; return data; + +err: + _ERR("failed to allocate memory"); + return NULL; } -static void _update_list_area(struct _priv *priv) +static void _update_content_info(struct _priv *priv) +{ + int photo, video; + char buf[128]; + + photo = mediadata_get_media_count(priv->md, E_MEDIA_PHOTO); + video = mediadata_get_media_count(priv->md, E_MEDIA_VIDEO); + + if (photo < 0 || video < 0) { + _ERR("failed to get media count"); + return; + } + + snprintf(buf, sizeof(buf), "%d Photos, %d Videos", photo, video); + + elm_object_part_text_set(priv->layout, PART_CONTENT_INFO, buf); +} + +static void _update_content_list(struct _priv *priv) { Eina_List *list; @@ -162,10 +243,12 @@ static void _update_list_area(struct _priv *priv) return; } - if (!listmgr_update_list_area(priv->listmgr, list)) + if (!listmgr_update_content_list(priv->listmgr, list)) _ERR("failed to update list area"); priv->media_list = list; + + _update_content_info(priv); } static bool _create(layoutmgr *lmgr, void *data) @@ -181,12 +264,19 @@ static bool _create(layoutmgr *lmgr, void *data) return false; } + if (!data) { + _ERR("invalid argument"); + return false; + } + priv = calloc(1, sizeof(*priv)); if (!priv) { _ERR("failed to allocate priv"); return false; } + priv->menu_btn = (Evas_Object *)data; + base = layoutmgr_get_base(lmgr); if (!base) { _ERR("failed to get base object"); @@ -265,6 +355,7 @@ static void _destroy(void *layout_data) mediadata_destroy(priv->md); listmgr_destroy(priv->listmgr); + free(priv->ldata->gops); free(priv->ldata); evas_object_del(priv->layout); @@ -305,7 +396,9 @@ static void _hide(void *layout_data) static void _update(void *layout_data, int update_type, void *data) { + struct view_update_data *vdata; struct _priv *priv; + bool update; if (!layout_data) { _ERR("failed to get layout data"); @@ -313,8 +406,33 @@ static void _update(void *layout_data, int update_type, void *data) } priv = layout_data; + vdata = data; + + switch (update_type) { + case UPDATE_CONTENT: + _update_content_list(priv); + break; + case UPDATE_FOCUS: + if (!vdata) { + _ERR("invalid argument"); + return; + } - _update_list_area(priv); + if (priv->cur_index != vdata->index) + update = true; + else + update = false; + + listmgr_focus_content_list(priv->listmgr, vdata->index, update); + + break; + case UPDATE_RESUME: + listmgr_focus_content_list(priv->listmgr, + priv->cur_index, false); + break; + default: + break; + } } static layout_class _lclass = {