When update view, db data still update, and save scroll's position
authorQingtao Zhang <qintao.zhang@samsung.com>
Tue, 9 Apr 2013 07:25:38 +0000 (15:25 +0800)
committerQingtao Zhang <qintao.zhang@samsung.com>
Tue, 9 Apr 2013 07:25:38 +0000 (15:25 +0800)
Change-Id: Id676a02b3251c12837b92a4c5af895dcf7f652fc

include/features/gl-tags.h
include/util/gl-ui-util.h
src/features/gl-albums-sel.c
src/features/gl-albums.c
src/features/gl-tags.c
src/features/gl-thumbs-sel.c
src/features/gl-thumbs.c
src/util/gl-ui-util.c
src/util/gl-util.c
src/widget/gl-controlbar.c

index 95908aaeaeb5d25a84948907a32ec1cd2b02e8ac..33fa9faf24636c02e7745f96ce653b0055f0570a 100755 (executable)
@@ -24,7 +24,6 @@ int _gl_tags_add_btns(void *data);
 int gl_tag_unset_rename(void *data);
 Evas_Object *gl_tag_create_view(void *data, Evas_Object * parent);
 int gl_tag_update_view(void *data);
-int gl_tag_update_realized_view(void *data);
 int _gl_tag_comeback_from_view(void *data);
 bool _gl_tags_sel_home_tag(void *data, const char *tag_id);
 int _gl_tags_reset_view(void *data, const char *tag_id, const char *aul_type);
index 3c8dccaef2bedc1a395f9da0f535b94d2fe0774f..f3b7d6277059a18612dde08a146d6b3ceacf53c0 100755 (executable)
@@ -121,6 +121,10 @@ Evas_Object *_gl_ui_get_btn(void *data, Elm_Object_Item *nf_it,
 void _gl_ui_slideshow_cb(void *data, Evas_Object *obj, void *event_info);
 void _gl_ui_edit_cb(void *data, Evas_Object *obj, void *event_info);
 int _gl_ui_set_btns_text(Elm_Object_Item *nf_it, char *btn_text, char *btn_text2);
+int _gl_ui_reset_scroller_pos(Evas_Object *obj);
+int _gl_ui_del_scroller_pos(Evas_Object *obj);
+int _gl_ui_save_scroller_pos(Evas_Object *obj);
+int _gl_ui_restore_scroller_pos(Evas_Object *obj);
 
 #ifdef _cplusplus
 }
index c41c2082825b35c800d7d0573f39c87d1b75092c..d1f15a6d78caae469ddd767b393fc788975d76ac 100755 (executable)
@@ -88,6 +88,17 @@ static int __gl_albums_sel_push_view(void *data, Evas_Object *parent,
        return 0;
 }
 
+/* Free data after layout deleted */
+static void __gl_albums_sel_delete_layout_cb(void *data, Evas *e,
+                                            Evas_Object *obj, void *ei)
+{
+       gl_dbg("Delete layout ---");
+       GL_CHECK(data);
+       gl_appdata *ad = (gl_appdata *)data;
+       _gl_ui_del_scroller_pos(ad->albuminfo.select_view);
+       gl_dbg("Delete layout +++");
+}
+
 int _gl_albums_sel_create_view(void *data)
 {
        GL_CHECK_VAL(data, -1);
@@ -102,7 +113,9 @@ int _gl_albums_sel_create_view(void *data)
        evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND,
                                         EVAS_HINT_EXPAND);
        evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
-
+       /* Register delete callback */
+       evas_object_event_callback_add(layout, EVAS_CALLBACK_DEL,
+                                      __gl_albums_sel_delete_layout_cb, data);
        /* Save view mode */
        int pre_view_m = gl_get_view_mode(data);
        /* Set view mode of Select album */
index 06fc7a3ef860cf121431c2676c6c911c68d1bc8d..47e7c0a17fc22201b2274ea41e4dc048891c43e1 100755 (executable)
@@ -179,6 +179,7 @@ static void __gl_albums_sel_cb(void *data, Evas_Object *obj, void *event_info)
                        gl_dbgW("Empty album, return!");
                        return;
                }
+               _gl_ui_save_scroller_pos(obj);
                gl_albums_sel_album(album_item);
        }
 }
@@ -213,7 +214,7 @@ static void _gl_albums_rename_btn_cb(void *data, Evas_Object *obj,
        ck = elm_object_item_part_content_get(album_item->item,
                                              GL_TILE_CHECKBOX);
        _gl_albums_update_check_state(ad, album_item, ck, false);
-
+       _gl_ui_save_scroller_pos(ad->albuminfo.albums_view);
        if(ad->maininfo.rename_album_job) {
                ecore_job_del(ad->maininfo.rename_album_job);
                ad->maininfo.rename_album_job = NULL;
@@ -429,8 +430,13 @@ int _gl_albums_create_items(void *data, Evas_Object *parent)
        gl_dbg("");
 
        gl_ctrl_disable_tab_event(ad, true);
-       /* Clear albums view */
-       elm_gengrid_clear(parent);
+
+       if (elm_gengrid_items_count(parent) > 0) {
+               /* Save scroller position before clearing gengrid */
+               _gl_ui_save_scroller_pos(parent);
+               /* Clear albums view */
+               elm_gengrid_clear(parent);
+       }
 
        if (gl_get_view_mode(ad) == GL_VIEW_ALBUMS_EDIT)
                ad->albuminfo.albumgic.item_style = GL_GENGRID_STYLE_ALBUM_EDIT_VIEW;
@@ -476,6 +482,8 @@ int _gl_albums_create_items(void *data, Evas_Object *parent)
        }
        gl_dbg_launch("      for:elm_gengrid_item_append:end");
 
+       /* Restore previous position of scroller */
+       _gl_ui_restore_scroller_pos(parent);
        ad->albuminfo.albums_cnt = item_cnt;
 
        gl_ctrl_disable_tab_event(ad, false);
@@ -565,6 +573,7 @@ Evas_Object *_gl_albums_add_gengrid(void *data, Evas_Object *parent)
        evas_object_smart_callback_add(grid, "realized", _gl_albums_realized,
                                       data);
        evas_object_show(grid);
+       _gl_ui_reset_scroller_pos(grid);
        return grid;
 }
 
@@ -594,6 +603,7 @@ Evas_Object *gl_albums_create_view(void *data, Evas_Object *parent)
        if (view_mode == GL_VIEW_ALBUMS_SELECT) {
                if (ad->albuminfo.albums_cnt == 0) {
                        gl_dbgE("None albums!");
+                       _gl_ui_del_scroller_pos(grid);
                        evas_object_del(grid);
                        grid = _gl_nocontents_create(ad);
                } else {
@@ -604,6 +614,7 @@ Evas_Object *gl_albums_create_view(void *data, Evas_Object *parent)
 
        /* show no contents none album exists */
        if (gl_check_gallery_empty(ad)) {
+               _gl_ui_del_scroller_pos(grid);
                evas_object_del(grid);
                grid = NULL;
 
@@ -654,8 +665,10 @@ int gl_albums_change_to_view(void *data)
        gl_set_view_mode(ad, GL_VIEW_ALBUMS);
        /* changed to show no contents if needed */
        if (gl_check_gallery_empty(ad)) {
-               if (ad->albuminfo.albums_view)
+               if (ad->albuminfo.albums_view) {
+                       _gl_ui_del_scroller_pos(ad->albuminfo.albums_view);
                        evas_object_del(ad->albuminfo.albums_view);
+               }
 
                /* Set the grid view mode for creating nocontents view */
                ad->gridinfo.view_mode = GL_THUMB_ALBUMS;
@@ -667,6 +680,7 @@ int gl_albums_change_to_view(void *data)
                Evas_Object *old_view = NULL;
                old_view = elm_object_part_content_unset(ad->ctrlinfo.ctrlbar_view_ly,
                                                         "contents");
+               _gl_ui_del_scroller_pos(old_view);
                evas_object_del(old_view);
                elm_object_part_content_set(ad->ctrlinfo.ctrlbar_view_ly,
                                            "contents", noc);
@@ -690,6 +704,7 @@ int gl_albums_update_items(void *data)
        if (gl_check_gallery_empty(ad)) {
                /* Set the grid view mode for creating nocontents view */
                ad->gridinfo.view_mode = GL_THUMB_ALBUMS;
+               _gl_ui_del_scroller_pos(ad->albuminfo.albums_view);
                evas_object_del(ad->albuminfo.albums_view);
 
                Evas_Object *noc = _gl_nocontents_create(ad);
@@ -700,6 +715,7 @@ int gl_albums_update_items(void *data)
                Evas_Object *old_view = NULL;
                old_view = elm_object_part_content_unset(ad->ctrlinfo.ctrlbar_view_ly,
                                                         "contents");
+               _gl_ui_del_scroller_pos(old_view);
                evas_object_del(old_view);
                elm_object_part_content_set(ad->ctrlinfo.ctrlbar_view_ly,
                                            "contents", noc);
index e1c608fe306891ce8acfbcd518c0bb6f072cca91..7f0d43062b6a0c3d5d1236eb5ce09d44c82b54be 100755 (executable)
@@ -470,6 +470,9 @@ static void _gl_tag_sel(void *data, Evas_Object *obj, void *event_info)
        elm_genlist_item_selected_set(gen_item, EINA_FALSE);
        if (elm_genlist_item_flip_get(gen_item))
                return;
+
+       /* Save scroller position before clearing gengrid */
+       _gl_ui_save_scroller_pos(obj);
        if (ad->taginfo.rename_item) {
                gl_tag_unset_rename(ad);
                return;
@@ -521,7 +524,12 @@ static void _gl_tag_update_view(void *data, Evas_Object * obj, void *event_info)
        int view_mode = gl_get_view_mode(ad);
        gl_dbg("view_mode: %d.", view_mode);
 
-       elm_genlist_clear(genlist);
+       if (elm_genlist_items_count(genlist) > 0) {
+               /* Save scroller position before clearing gengrid */
+               _gl_ui_save_scroller_pos(genlist);
+               /* Clear old view */
+               elm_genlist_clear(genlist);
+       }
 
        if (view_mode == GL_VIEW_TAGS) {
                ad->taginfo.taglic.item_style = GL_GENLIST_ITEM_STYLE_TAGS;
@@ -563,6 +571,8 @@ static void _gl_tag_update_view(void *data, Evas_Object * obj, void *event_info)
                item_cnt++;
        }
 
+       /* Restore previous position of scroller */
+       _gl_ui_restore_scroller_pos(genlist);
        ad->taginfo.tags_cnt = item_cnt;
        evas_object_smart_callback_add(genlist, "selected", _gl_tag_list_sel,
                                       NULL);
@@ -718,6 +728,17 @@ int gl_tag_unset_rename(void *data)
        return 0;
 }
 
+/* Free data after layout deleted */
+static void __gl_tags_delete_layout_cb(void *data, Evas *e, Evas_Object *obj,
+                                      void *ei)
+{
+       gl_dbg("Delete layout ---");
+       GL_CHECK(data);
+       gl_appdata *ad = (gl_appdata *)data;
+       _gl_ui_del_scroller_pos(ad->taginfo.tags_view);
+       gl_dbg("Delete layout +++");
+}
+
 Evas_Object *gl_tag_create_view(void *data, Evas_Object *parent)
 {
        GL_CHECK_NULL(data);
@@ -750,6 +771,7 @@ Evas_Object *gl_tag_create_view(void *data, Evas_Object *parent)
        evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND,
                                         EVAS_HINT_EXPAND);
        evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       _gl_ui_reset_scroller_pos(genlist);
 
        Eina_List *tag_elist = NULL;
        _gl_data_get_tag_list(ad, &tag_elist);
@@ -814,6 +836,10 @@ Evas_Object *gl_tag_create_view(void *data, Evas_Object *parent)
        else
                gl_dbgE("Favorites tag would be displayed at least!");
 
+       /* Register delete callback */
+       evas_object_event_callback_add(parent, EVAS_CALLBACK_DEL,
+                                      __gl_tags_delete_layout_cb, data);
+
        return genlist;
 }
 
@@ -838,43 +864,6 @@ int gl_tag_update_view(void *data)
        return 0;
 }
 
-/* Update all realized items */
-int gl_tag_update_realized_view(void *data)
-{
-       GL_CHECK_VAL(data, -1);
-       gl_appdata *ad = (gl_appdata *)data;
-       int view_mode = gl_get_view_mode(ad);
-       Evas_Object *view_obj = NULL;
-       const Elm_Object_Item *mode_it = NULL;
-       gl_dbg("view_mode: %d.", view_mode);
-
-       if (view_mode == GL_VIEW_TAGS) {
-               GL_CHECK_VAL(ad->taginfo.tags_view, -1);
-               view_obj = ad->taginfo.tags_view;
-               mode_it = elm_genlist_decorated_item_get(view_obj);
-       } else if (view_mode == GL_VIEW_TAGS_EDIT) {
-               GL_CHECK_VAL(ad->ctrlinfo.ctrlbar_edit_view, -1);
-               view_obj = ad->ctrlinfo.ctrlbar_edit_view;
-       }
-
-       Eina_List *list = NULL;
-       Eina_List *l = NULL;
-       Elm_Object_Item *it = NULL;
-       list = elm_genlist_realized_items_get(view_obj);
-       EINA_LIST_FOREACH(list, l, it) {
-               if (elm_genlist_item_flip_get(it)) {
-                       gl_dbg("Flip item.");
-                       continue;
-               } else if (mode_it && mode_it == it) {
-                       gl_dbg("Sweep item.");
-                       continue;
-               }
-               elm_genlist_item_update(it);
-       }
-
-       return 0;
-}
-
 /*
 *  back to tags list view
 */
index 13b126c911f13a2eb1a88afc3228fcf2d6dce76e..214615e5491f545d395975cfbee102b11a55113b 100755 (executable)
@@ -110,6 +110,17 @@ static int __gl_thumbs_sel_push_view(void *data, Evas_Object *parent,
        return 0;
 }
 
+/* Free data after layout deleted */
+static void __gl_thumbs_sel_delete_layout_cb(void *data, Evas *e,
+                                            Evas_Object *obj, void *ei)
+{
+       gl_dbg("Delete layout ---");
+       GL_CHECK(data);
+       gl_appdata *ad = (gl_appdata *)data;
+       _gl_ui_del_scroller_pos(ad->gridinfo.select_view);
+       gl_dbg("Delete layout +++");
+}
+
 /**
  * Album selected for adding tags to photo
  */
@@ -139,7 +150,9 @@ int _gl_thumbs_sel_create_view(void *data, gl_cluster *album_item)
        evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND,
                                         EVAS_HINT_EXPAND);
        evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
-
+       /* Register delete callback */
+       evas_object_event_callback_add(layout, EVAS_CALLBACK_DEL,
+                                      __gl_thumbs_sel_delete_layout_cb, data);
        /* Save view mode */
        int pre_view_m = gl_get_view_mode(data);
        /* Set new view mode */
index c0052a581e9c3280c4a9c1809408da3e74dc09de..4ad4150cfd0d26ff91216fd727817900874fdc48 100755 (executable)
@@ -69,6 +69,7 @@ static void __gl_thumbs_open_file(void *data)
 
 static void __gl_thumbs_sel_cb(void *data, Evas_Object *obj, void *event_info)
 {
+       _gl_ui_save_scroller_pos(obj);
        __gl_thumbs_open_file(data);
 }
 
@@ -304,7 +305,12 @@ static bool __gl_thumbs_create_items(void *data, Evas_Object *parent)
        ad->gridinfo.thumbgic.func.text_get = NULL;
        ad->gridinfo.thumbgic.func.content_get = __gl_thumbs_get_content;
 
-       elm_gengrid_clear(parent);
+       if (elm_gengrid_items_count(parent) > 0) {
+               /* Save scroller position before clearing gengrid */
+               _gl_ui_save_scroller_pos(parent);
+               elm_gengrid_clear(parent);
+       }
+
        for (i = 1; i <= cnt; i++) {
                _gl_data_get_item_by_index(ad, i, false, &gitem);
                if (gitem == NULL || gitem->item == NULL ||
@@ -348,6 +354,7 @@ static bool __gl_thumbs_create_items(void *data, Evas_Object *parent)
 
        }
 
+       _gl_ui_restore_scroller_pos(parent);
        ad->gridinfo.thumbs_cnt = item_cnt;
        ad->gridinfo.back_to_normal = false;
 
@@ -544,10 +551,12 @@ Evas_Object *_gl_thumbs_add_grid(void *data, Evas_Object *parent,
 
        /* Set grid view type */
        __gl_thumbs_set_type(ad);
+       _gl_ui_reset_scroller_pos(grid);
 
        int view_mode = gl_get_view_mode(ad);
 
        if (!__gl_thumbs_create_items(ad, grid)) {
+               _gl_ui_del_scroller_pos(grid);
                evas_object_del(grid);
                grid = NULL;
                Evas_Object *noc = _gl_nocontents_create(ad);
@@ -653,6 +662,7 @@ Eina_Bool _gl_thumbs_update_view(void *data)
                if (!res) {
                        gl_dbg("__gl_thumbs_create_items() return false...");
                        evas_object_hide(gv);
+                       _gl_ui_del_scroller_pos(gv);
                        evas_object_del(gv);
                        __gl_thumbs_set_view(ad, NULL, false);
                        Evas_Object *noc = _gl_nocontents_create(ad);
@@ -669,6 +679,7 @@ Eina_Bool _gl_thumbs_update_view(void *data)
        } else {
                gl_dbg("Remove nocontents view.");
                evas_object_hide(gv);
+               _gl_ui_del_scroller_pos(gv);
                evas_object_del(gv);
                __gl_thumbs_set_view(ad, NULL, false);
                bool b_noc = false;
@@ -843,6 +854,7 @@ int _gl_thumbs_delete_view(void *data)
        _gl_thumbs_del_append_idler(data);
 
        if (ad->gridinfo.all_grid_view != NULL) {
+               _gl_ui_del_scroller_pos(ad->gridinfo.all_grid_view);
                _gl_thumbs_clear_cbs(ad->gridinfo.all_grid_view);
                evas_object_del(ad->gridinfo.all_grid_view);
                ad->gridinfo.all_grid_view = NULL;
index 3a137a4bcc796c531c8a770278734b3c0b183f8e..be781ac7d24e9f16ab7ce305a44da0910b267104 100755 (executable)
@@ -1044,3 +1044,58 @@ Evas_Object *_gl_ui_get_btn(void *data, Elm_Object_Item *nf_it,
        return elm_object_item_part_content_get(_nf_it, part);
 }
 
+int _gl_ui_reset_scroller_pos(Evas_Object *obj)
+{
+       GL_CHECK_VAL(obj, -1);
+       evas_object_data_set(obj, "prev_scroller_x", (void *)0);
+       evas_object_data_set(obj, "prev_scroller_y", (void *)0);
+       evas_object_data_set(obj, "prev_scroller_w", (void *)0);
+       evas_object_data_set(obj, "prev_scroller_h", (void *)0);
+       return 0;
+}
+
+int _gl_ui_del_scroller_pos(Evas_Object *obj)
+{
+       GL_CHECK_VAL(obj, -1);
+       evas_object_data_del(obj, "prev_scroller_x");
+       evas_object_data_del(obj, "prev_scroller_y");
+       evas_object_data_del(obj, "prev_scroller_w");
+       evas_object_data_del(obj, "prev_scroller_h");
+       return 0;
+}
+
+int _gl_ui_save_scroller_pos(Evas_Object *obj)
+{
+       GL_CHECK_VAL(obj, -1);
+       Evas_Coord x = 0;
+       Evas_Coord y = 0;
+       Evas_Coord w = 0;
+       Evas_Coord h = 0;
+
+       elm_scroller_region_get(obj, &x, &y, &w, &h);
+       gl_dbg("(%dx%d), (%dx%d)", x, y, w, h);
+       evas_object_data_set(obj, "prev_scroller_x", (void *)x);
+       evas_object_data_set(obj, "prev_scroller_y", (void *)y);
+       evas_object_data_set(obj, "prev_scroller_w", (void *)w);
+       evas_object_data_set(obj, "prev_scroller_h", (void *)h);
+       return 0;
+}
+
+int _gl_ui_restore_scroller_pos(Evas_Object *obj)
+{
+       GL_CHECK_VAL(obj, -1);
+       Evas_Coord x = 0;
+       Evas_Coord y = 0;
+       Evas_Coord w = 0;
+       Evas_Coord h = 0;
+
+       x = (Evas_Coord)evas_object_data_get(obj, "prev_scroller_x");
+       y = (Evas_Coord)evas_object_data_get(obj, "prev_scroller_y");
+       w = (Evas_Coord)evas_object_data_get(obj, "prev_scroller_w");
+       h = (Evas_Coord)evas_object_data_get(obj, "prev_scroller_h");
+       gl_dbg("(%dx%d), (%dx%d)", x, y, w, h);
+       if (w > 0 && h > 0)
+               elm_scroller_region_show(obj, x, y, w, h);
+       return 0;
+}
+
index ba2627afd3dd31078e7883c8009f3b43fb320e5e..6bc623bfc48618c623dc52909bb203f07fc5750e 100755 (executable)
@@ -401,11 +401,14 @@ static Eina_Bool __gl_file_mv(gl_item *gitem, const char *src, const char *dst)
        GL_CHECK_FALSE(dst);
        GL_CHECK_FALSE(gitem);
        /* Move thumb first */
-       if (_gl_local_data_move_media(gitem->item, dst) < 0) {
-               gl_dbgE("Move media thumbnail failed!");
-               return EINA_FALSE;
+       if (_gl_fs_move(src, dst)) {
+               if (_gl_local_data_move_media(gitem->item, dst) < 0) {
+                       gl_dbgE("Move media thumbnail failed!");
+                       return EINA_FALSE;
+               }
+               return EINA_TRUE;
        }
-       return _gl_fs_move(src, dst);
+       return EINA_FALSE;
 }
 
 #ifdef _USE_ROTATE_BG
@@ -2128,7 +2131,7 @@ int _gl_update_rotate_view(void *data)
        if (ad->ctrlinfo.tab_mode == GL_CTRL_TAB_TAGS)
                _gl_data_update_item_list(ad);
        else
-               __gl_refresh_albums_list(ad, true, false);
+               __gl_refresh_albums_list(ad, false, false);
 
        memset(ad->albuminfo.dest_folder, 0x00, GL_DIR_PATH_LEN_MAX);
 
@@ -2184,7 +2187,7 @@ Eina_Bool gl_update_view(void *data, int mode)
        } else if (view_mode == GL_VIEW_TAGS ||
                   view_mode == GL_VIEW_TAGS_EDIT) {
                /* Update genlist changed to tab Tags */
-               gl_tag_update_realized_view(ad);
+               gl_tag_update_view(data);
        } else if (view_mode == GL_VIEW_THUMBS) {
                /* Albums list should be updated first in tab Albums*/
                if (ad->ctrlinfo.tab_mode == GL_CTRL_TAB_TAGS) {
index 2945be06d29caac947940ed443cc026857de68cc..ae689537b2545ca0bbb3012603172743c2b78fbe 100755 (executable)
@@ -295,11 +295,12 @@ static int __gl_ctrl_disable_btn(void *data, int mode)
        } else if (mode == GL_NAVI_TAGS) {
                gl_dbg("GL_NAVI_TAGS");
                /* disable 'edit' button */
-               ad->taginfo.b_edit_disable = false;
+               ad->taginfo.b_edit_disable = true;
        }else if (mode == GL_NAVI_THUMBS) {
                gl_dbg("GL_NAVI_THUMBS");
                /* disable 'edit' button */
                _gl_ui_disable_btn(ad->gridinfo.edit_btn);
+               _gl_ui_disable_btn(ad->gridinfo.slideshow_btn);
                /* Check title button */
                if (ad->ctrlinfo.tab_mode == GL_CTRL_TAB_TAGS)
                        _gl_ui_show_add_btn(ad);