#define GL_TIMELINE_TITLE_H 46
#define GL_TIMELINE_PAD_H 8
-#define GL_TIMELINE_CONTENT_P_H 956
-#define GL_TIMELINE_CONTENT_L_H 429
-#define GL_TIMELINE_PAGE_SIZE 450
-
-#define GL_TL_PINCH_OUT_2_CNT 15
-#define GL_TL_PINCH_OUT_1_CNT 8
-#define GL_TL_PINCH_OUT_CNT_STEP 3
-
-/* Signals to hide/show title swallow */
-#define GL_TL_SWALLOW_TITLE_SHOW "elm,swallow_title,state,show"
-#define GL_TL_SWALLOW_TITLE_HIDE "elm,swallow_title,state,hide"
-/* Signals to transit title during updating if date(time) changed */
-#define GL_TL_TITLE2_SHOW_FINISHED "elm,action,title2,show,finished"
-#define GL_TL_TITLE_HIDE_FINISHED "elm,action,title,hide,finished"
-#define GL_TL_TITLE_FADE_OUT "elm,action,title,fade_out"
-#define GL_TL_TITLE2_FADE_IN "elm,action,title2,fade_in"
-#define GL_TL_TITLE_HIDE_DEFERRED "elm,state,title,hide,deferred"
-#define GL_TL_TITLE2_SHOW_DEFERRED "elm,state,title2,show,deferred"
-#define GL_TL_TITLE_SHOW "elm,state,title,show"
-#define GL_TL_TITLE2_CREATED "elm,state,title2,created"
#define GL_TL_CONTENTS_FORMAT "contents_%d_%d"
#define GL_TL_CHECKBOX_FORMAT "contents_%d_%d_checkbox"
#define GL_TL_CONTENT_FORMAT "content_%d"
-#define GL_TL_TILE_DATA_KEY "gl_tile_data"
-#define GL_TL_DATA_KEY "gl_tl_data"
-
#define GL_GRID_4_PER_ROW 4
#define GL_GRID_7_PER_ROW 7
#define GL_GRID_6_PER_ROW 6
#define GL_GRID_10_PER_ROW 10
-#define GL_GRID_H_ZOOM_03 178
-#define GL_GRID_H_ZOOM_02 267
-
-#define GL_TL_DEL_TRANSITS(tiles) \
- do { \
- gl_tile_s *tile = NULL; \
- if (tiles) { \
- gl_dbgW("Delete transits of tiles!"); \
- Eina_List *l = NULL; \
- EINA_LIST_FOREACH(tiles, l, tile) { \
- if (tile) { \
- GL_IF_DEL_TRANSIT(tile->trans); \
- tile = NULL; \
- } \
- } \
- } \
- } while (0)
-
-#define GL_TL_DEL_IDLERS(idlers) \
- do { \
- if (idlers) { \
- gl_tlp_s *it_d = NULL; \
- EINA_LIST_FREE(idlers, it_d) { \
- if (it_d) { \
- GL_IF_DEL_IDLER(it_d->update_idler); \
- it_d = NULL; \
- } \
- } \
- idlers = NULL; \
- } \
- } while (0)
-
-/* Slider unload->free pages ==> Delete contents first before release list */
-#define GL_TL_CLEAR_PAGES(timeline_d, b_set_zop) \
- do { \
- GL_TL_DEL_TRANSITS(timeline_d->tiles); \
- GL_TL_DEL_IDLERS(timeline_d->idlers); \
- if (b_set_zop) \
- _gl_slider_set_zop(timeline_d->view, GL_SLIDE_ZOP_DEFAULT); \
- _gl_slider_unload(timeline_d->view); \
- __gl_timeline_free_pages(timeline_d); \
- } while (0)
-
typedef enum _gl_zoom_mode_t {
GL_TM_ZOOM_NONE = -3,
GL_TM_ZOOM_OUT_TWO,
GL_TM_ZOOM_MAX,
} gl_zoom_mode_e;
-typedef enum _gl_trans_op_t {
- GL_TRANS_OP_DEFAULT, /* Initial state */
- GL_TRANS_OP_DONE, /* Transition is done, do some updating */
- GL_TRANS_OP_START, /* Preparation is one, start to transit tiles */
- GL_TRANS_OP_PREPARE, /* Prepare to add transition */
- GL_TRANS_OP_SHOW, /* Tiles already created, just show them with transition */
- GL_TRANS_OP_MAX,
-} gl_trans_op_e;
-
typedef enum _gl_tl_view_t {
GL_TL_VIEW_NORMAL,
GL_TL_VIEW_EDIT,
- GL_TL_VIEW_SHARE,
- GL_TL_VIEW_MAX,
GL_TL_VIEW_COPY,
} gl_tl_view_e;
int image_cnt;
};
-typedef enum _gl_time_view_display_order {
- TIME_ORDER_ASC = 0,
- TIME_ORDER_DESC
-} _gl_time_view_order;
-
struct _gl_timeline_t {
gl_appdata *ad;
Evas_Object *parent;
int h;
bool delete_data;
gl_mouse_s mouse;
- Eina_List *count_list; /* List about image count of each item in default zoom level */
gl_tl_view_e view_m; /* View mode: normal/edit/share */
gl_zoom_mode_e zoom_level;
Eina_List *list; /* Page data list */
gl_tm_s tm_s;
gl_tm_s tm_e;
bool b_created;
- Ecore_Animator *animator;
bool b_updating_title; /* Flag: updating title, it's not done if TRUE set */
- gl_cluster *album; /* Create 'All albums' album for share/edit operation */
- int tran_op; /* Add effect */
- Eina_List *tiles; /* All tiles of one page */
- Eina_List *idlers; /* For showing original file */
- Eina_List *thumbs; /* Object list for creating thumbnails */
Eina_List *data_list; /* Media list */
gl_sel_s *sel_d;
- bool is_list_reverse;
- _gl_time_view_order time_media_display_order; /* keep track of the media items display order */
Elm_Object_Item *realized_item;
};
int w;
int h;
Evas_Object *layout;
- Ecore_Idler *update_idler;
bool b_created;
gl_timeline_s *timeline_d;
};
-typedef struct _gl_tile_t gl_tile_s;
-struct _gl_tile_t {
- Evas_Object *bg;
- Evas_Object *parent;
- Elm_Transit *trans;
- int count;
- int total;
- gl_tlp_s *it_d;
- gl_timeline_s *timeline_d;
-};
typedef struct _gl_date_item_data_t {
char *text;
int _get_count_of_items_on_same_date(gl_media_s *item, Eina_List *list, char **text, int start_index);
int _gl_time_get_number_of_items_per_row(void *data);
-static void __gl_timeline_page_deleted_cb(void *data, Evas_Object *obj,
- void *ei);
static int __gl_timeline_change_mode(void *data, int mode);
static Evas_Object *__gl_timeline_create_list_view(gl_timeline_s *timeline_d, bool update);
return 0;
}
-/* Reset title for previous animation if another animation is triggerred */
-static int __gl_timeline_reset_title(gl_timeline_s *timeline_d)
-{
- GL_CHECK_VAL(timeline_d, -1);
-
- Evas_Object *title = elm_object_part_content_unset(timeline_d->layout,
- "title2");
- GL_CHECK_VAL(title, -1);
- gl_dbg("Set new title: %p", title);
- elm_object_part_content_set(timeline_d->layout, "title", title);
-
- edje_object_signal_emit(_EDJ(timeline_d->layout), GL_TL_TITLE_SHOW,
- "elm");
- edje_object_message_signal_process(_EDJ(timeline_d->layout));
- return 0;
-}
-
-/* "elm,state,title,hide"
- */
-static void __gl_timeline_on_title_hide_finished(void *data, Evas_Object *obj,
- const char *emission,
- const char *source)
-{
- GL_CHECK(data);
- gl_timeline_s *timeline_d = (gl_timeline_s *)data;
-
- if (!timeline_d->b_updating_title) {
- gl_dbgW("Updating done!");
- return;
- }
-
- Evas_Object *title = elm_object_part_content_unset(timeline_d->layout,
- "title");
- gl_dbg("Delete old title: %p", title);
- GL_IF_DEL_OBJ(title);
-}
-
-/* "elm,state,title2,show"
- */
-static void __gl_timeline_on_title2_show_finished(void *data, Evas_Object *obj,
- const char *emission,
- const char *source)
-{
- GL_CHECK(data);
- gl_timeline_s *timeline_d = (gl_timeline_s *)data;
-
- if (!timeline_d->b_updating_title) {
- gl_dbgW("Updating done!");
- return;
- }
-
- gl_dbg("Update title");
- __gl_timeline_reset_title(timeline_d);
-}
-
-static int __gl_timeline_add_title_trans_finished_cbs(gl_timeline_s *timeline_d,
- bool b_add)
-{
- GL_CHECK_VAL(timeline_d, -1);
- gl_dbg("b_add: %d", b_add);
-
- if (b_add) {
- /* Add callback for title updating */
- edje_object_signal_callback_add(_EDJ(timeline_d->layout),
- GL_TL_TITLE2_SHOW_FINISHED, "",
- __gl_timeline_on_title2_show_finished,
- (void *)timeline_d);
- edje_object_signal_callback_add(_EDJ(timeline_d->layout),
- GL_TL_TITLE_HIDE_FINISHED, "",
- __gl_timeline_on_title_hide_finished,
- (void *)timeline_d);
- } else {
- /* Add callback for title updating */
- edje_object_signal_callback_del(_EDJ(timeline_d->layout),
- GL_TL_TITLE2_SHOW_FINISHED, "",
- __gl_timeline_on_title2_show_finished);
- edje_object_signal_callback_del(_EDJ(timeline_d->layout),
- GL_TL_TITLE_HIDE_FINISHED, "",
- __gl_timeline_on_title_hide_finished);
- }
- return 0;
-}
-
-/* Free data after page deleted */
-static void __gl_timeline_del_page_cb(void *data, Evas *e, Evas_Object *obj,
- void *ei)
-{
- gl_dbgW("Delete page ---");
- GL_CHECK(data);
- evas_object_smart_callback_del(obj, "layout,page,deleted",
- __gl_timeline_page_deleted_cb);
- gl_tlp_s *it_d = (gl_tlp_s *)data;
- GL_IF_DEL_IDLER(it_d->update_idler);
- it_d->b_created = false;
- gl_dbgW("Delete page +++");
-}
-
-static void __gl_timeline_page_deleted_cb(void *data, Evas_Object *obj,
- void *ei)
-{
- gl_dbgW("Deleted page ------");
- evas_object_event_callback_del(obj, EVAS_CALLBACK_DEL,
- __gl_timeline_del_page_cb);
- GL_CHECK(data);
- gl_tlp_s *it_d = (gl_tlp_s *)data;
- GL_IF_DEL_IDLER(it_d->update_idler);
- it_d->b_created = false;
- gl_dbgW("Deleted page ++++++");
-}
-
-/* Cancel thumb creation*/
-static int __gl_timeline_cancel_thumbs(gl_timeline_s *timeline_d)
-{
- GL_CHECK_VAL(timeline_d, -1);
- Eina_List *l = NULL;
- Evas_Object *bg = NULL;
- gl_media_s *item = NULL;
-
- EINA_LIST_FOREACH(timeline_d->thumbs, l, bg) {
- if (bg == NULL) {
- continue;
- }
- item = (gl_media_s *)evas_object_data_get(bg,
- GL_TL_TILE_DATA_KEY);
- if (item && item->b_create_thumb) {
- gl_dbgW("Cancel thumb creation!");
- _gl_data_cancel_thumb(item);
- }
- }
- return 0;
-}
-
static void __gl_timeline_resize_layout_cb(void *data, Evas *e,
Evas_Object *obj, void *ei)
{
} else {
if (item && item->file_url) {
int index = _gl_timeline_get_item_index(ad, item->file_url);
- _gl_ext_load_iv_timeline(ad, item->file_url, index, ad->tlinfo->time_media_display_order);
+ _gl_ext_load_iv_timeline(ad, item->file_url, index, GL_SORT_BY_DATE_ASC);
} else {
gl_dbgW("Image wasn't found!");
}
gl_appdata *ad = (gl_appdata *)gitem->ad;
gl_dbg("Loading UG-IMAGE-VIEWER-SELECT-MODE");
- gl_ext_load_iv_time_ug_select_mode(ad, gitem, GL_UG_IV, ad->tlinfo->time_media_display_order);
+ gl_ext_load_iv_time_ug_select_mode(ad, gitem, GL_UG_IV, GL_SORT_BY_DATE_ASC);
}
void _gl_timeline_open_image_in_select_mode(void *data, Evas_Object *obj, void *event_info)
ck = elm_check_add(obj);
GL_CHECK_NULL(ck);
-#ifdef _USE_GRID_CHECK
elm_object_style_set(ck, "grid");
-#else
- elm_object_style_set(ck, GL_CHECKBOX_STYLE_THUMB);
-#endif
evas_object_propagate_events_set(ck, EINA_FALSE);
elm_check_state_set(ck, gitem->check_state);
evas_object_data_set(ck, "data", (void *)timeline_d);
ck = elm_check_add(pObject);
GL_CHECK_NULL(ck);
-#ifdef _USE_GRID_CHECK
elm_object_style_set(ck, "grid");
-#else
- elm_object_style_set(ck, GL_CHECKBOX_STYLE_THUMB);
-#endif
evas_object_propagate_events_set(ck, EINA_FALSE);
elm_check_state_set(ck, date_item->check_state);
evas_object_show(ck);
__gl_timelne_del_nocontents(timeline_d);
elm_naviframe_item_title_enabled_set(timeline_d->nf_it, EINA_TRUE, EINA_TRUE);
}
- if ((!update || !timeline_d->is_list_reverse) && timeline_d->time_media_display_order == TIME_ORDER_ASC) {
- list = eina_list_reverse(list);
- timeline_d->is_list_reverse = true;
- } else if (timeline_d->is_list_reverse && timeline_d->time_media_display_order == TIME_ORDER_DESC) {
- list = eina_list_reverse(list);
- timeline_d->is_list_reverse = false;
- }
item_cnt = eina_list_count(list);
timeline_d->count = item_cnt;
evas_object_data_del(obj, "page_h");
if (data) {
gl_timeline_s *timeline_d = (gl_timeline_s *)data;
- GL_IF_DEL_ANIMATOR(timeline_d->animator);
- GL_IF_FREE_ELIST(timeline_d->count_list);
- GL_IF_FREE_ELIST(timeline_d->thumbs);
- if (timeline_d->album) {
- _gl_data_util_free_gcluster(timeline_d->album);
- timeline_d->album = NULL;
- }
__gl_timeline_clear_sel_list(timeline_d);
GL_GFREEIF(timeline_d->sel_d);
_gl_time_finialize_media_data(timeline_d);
GL_CHECK_VAL(timeline_d, -1);
GL_CHECK_VAL(timeline_d->ad, -1);
- /* Add callback for title updating */
- __gl_timeline_add_title_trans_finished_cbs(timeline_d, true);
/* Register delete callback */
evas_object_event_callback_add(timeline_d->layout, EVAS_CALLBACK_DEL,
__gl_timeline_del_layout_cb, timeline_d);
return 0;
}
-void __gl_timeline_desc_mode_set(void *data)
-{
- gl_dbg("ENTRY");
- GL_CHECK(data);
- gl_appdata *ad = (gl_appdata *)data;
- if (ad->tlinfo->time_media_display_order == TIME_ORDER_DESC) {
- gl_dbg("EXIT 1");
- return;
- }
- ad->tlinfo->time_media_display_order = TIME_ORDER_DESC;
- __gl_update_timeline(ad);
-}
-
-void __gl_timeline_asc_mode_set(void *data)
-{
- gl_dbg("ENTRY");
- GL_CHECK(data);
- gl_appdata *ad = (gl_appdata *)data;
- if (ad->tlinfo->time_media_display_order == TIME_ORDER_ASC) {
- gl_dbg("EXIT 1");
- return;
- }
- ad->tlinfo->time_media_display_order = TIME_ORDER_ASC;
- __gl_update_timeline(ad);
-}
-
-static void __gl_timeline_sort_cb(void *data, Evas_Object *obj, void *ei)
-{
- gl_dbg("ENTRY");
- GL_CHECK(data);
- gl_appdata *ad = (gl_appdata *)data;
- int state_index = -1;
- state_index = ad->tlinfo->time_media_display_order == TIME_ORDER_ASC ? 1 : 0;
- _gl_list_pop_create(data, obj, ei, GL_STR_SORT, GL_STR_DATE_MOST_RECENT, GL_STR_DATE_OLDEST, state_index);
- gl_dbg("EXIT");
-}
-
static void __gl_timeline_edit_cb(void *data, Evas_Object *obj, void *ei)
{
GL_CHECK(data);
/* Delete */
_gl_ctxpopup_append(parent, GL_STR_ID_DELETE,
__gl_timeline_edit_cb, data);
- /* Sort */
- _gl_ctxpopup_append(parent, GL_STR_SORT,
- __gl_timeline_sort_cb, data);
/* Copy to album */
_gl_ctxpopup_append(parent, GL_STR_ID_COPY_TO_ALBUM,
__gl_timeline_copy_cb, data);
}
-
return 0;
}
GL_GFREEIF(ad->tlinfo->sel_d);
break;
case GL_TL_VIEW_EDIT:
- case GL_TL_VIEW_SHARE:
case GL_TL_VIEW_COPY:
GL_GFREEIF(ad->tlinfo->sel_d);
ad->tlinfo->sel_d = g_new0(gl_sel_s, 1);
if (ad->tlinfo) {
gl_dbgW("Update view");
- /*To show transition*/
- ad->tlinfo->tran_op = GL_TRANS_OP_PREPARE;
/*Update view*/
ad->tlinfo->view = __gl_timeline_create_list_view(ad->tlinfo, false);
elm_object_part_content_set(parent, "elm.swallow.view", ad->tlinfo->layout);
timeline_d->parent = parent;
timeline_d->nf_it = ad->ctrlinfo.nf_it;
ad->tlinfo = timeline_d;
- timeline_d->tran_op = GL_TRANS_OP_PREPARE;
- timeline_d->time_media_display_order = TIME_ORDER_DESC;
ad->pinchinfo.zoom_level = GL_ZOOM_IN_ONE;
char *path = _gl_get_edje_path();
evas_object_data_set(layout, "page_h", (void *)h);
timeline_d->w = w;
timeline_d->h = h;
- timeline_d->is_list_reverse = false;
gl_dbg("content's size(%dx%d)", w, h);
view = __gl_timeline_create_list_view(timeline_d, false);
return -1;
}
- GL_TL_DEL_TRANSITS(ad->tlinfo->tiles);
/* To hide slide items */
evas_object_hide(ad->tlinfo->view);
- /* Cancel thumb creation*/
- __gl_timeline_cancel_thumbs(ad->tlinfo);
/* Hide previous view */
Evas_Object *pre_view = NULL;
pre_view = elm_object_part_content_unset(ad->tlinfo->parent,