From 1a73a71d36587306a344884902fc055ea3528ccb Mon Sep 17 00:00:00 2001 From: Viktor Kojouharov Date: Sun, 3 Oct 2010 00:13:02 +0000 Subject: [PATCH] add an option to sort the images before displaying them. SVN revision: 52989 --- src/bin/ephoto.h | 2 ++ src/bin/ephoto_config.c | 6 ++++- src/bin/ephoto_preferences.c | 11 +++++++++ src/bin/ephoto_thumb_browser.c | 42 ++++++++++++++++++++++++---------- 4 files changed, 48 insertions(+), 13 deletions(-) diff --git a/src/bin/ephoto.h b/src/bin/ephoto.h index 7b50a40..64a71b4 100644 --- a/src/bin/ephoto.h +++ b/src/bin/ephoto.h @@ -91,6 +91,8 @@ struct _Ephoto_Config const char *slideshow_transition; const char *editor; + + int sort_images; }; /*Ephoto Main Structure*/ diff --git a/src/bin/ephoto_config.c b/src/bin/ephoto_config.c index bcac330..aaf8298 100644 --- a/src/bin/ephoto_config.c +++ b/src/bin/ephoto_config.c @@ -1,6 +1,6 @@ #include "ephoto.h" -#define CONFIG_VERSION 3 +#define CONFIG_VERSION 4 static int _ephoto_config_load(Ephoto *em); static Eina_Bool _ephoto_on_config_save(void *data); @@ -29,6 +29,7 @@ ephoto_config_init(Ephoto *em) C_VAL(D, T, slideshow_timeout, EET_T_DOUBLE); C_VAL(D, T, slideshow_transition, EET_T_STRING); C_VAL(D, T, editor, EET_T_STRING); + C_VAL(D, T, sort_images, EET_T_INT); switch (_ephoto_config_load(em)) { @@ -42,6 +43,7 @@ ephoto_config_init(Ephoto *em) eina_stringshare_add("fade"); em->config->editor = eina_stringshare_add("gimp %s"); + em->config->sort_images = 1; break; case -1: if (em->config->config_version < 2) @@ -54,6 +56,8 @@ ephoto_config_init(Ephoto *em) if (em->config->config_version < 3) em->config->editor = eina_stringshare_add("gimp %s"); + if (em->config->config_version < 4) + em->config->sort_images = 1; /* Incremental additions */ em->config->config_version = CONFIG_VERSION; diff --git a/src/bin/ephoto_preferences.c b/src/bin/ephoto_preferences.c index f459f93..cb07bb5 100644 --- a/src/bin/ephoto_preferences.c +++ b/src/bin/ephoto_preferences.c @@ -56,6 +56,15 @@ ephoto_show_preferences(Ephoto *em) elm_box_pack_end(pg1, o); evas_object_show(o); + o = elm_check_add(pg1); + elm_check_label_set(o, "Sort images"); + elm_check_state_set(o, em->config->sort_images); + evas_object_data_set(o, "config", "sort_images"); + evas_object_smart_callback_add(o, "changed", + _ephoto_preferences_item_change, em); + elm_box_pack_end(pg1, o); + evas_object_show(o); + elm_box_pack_end(box, pager); evas_object_show(pager); @@ -170,6 +179,8 @@ _ephoto_preferences_item_change(void *data, Evas_Object *obj, void *event_info) eina_stringshare_replace( &em->config->editor, eina_stringshare_add(elm_entry_entry_get(obj))); + else if (!strcmp(key, "sort_images")) + em->config->sort_images = elm_check_state_get(obj); ephoto_config_save(em, EINA_FALSE); } diff --git a/src/bin/ephoto_thumb_browser.c b/src/bin/ephoto_thumb_browser.c index 6133206..2044a69 100644 --- a/src/bin/ephoto_thumb_browser.c +++ b/src/bin/ephoto_thumb_browser.c @@ -198,6 +198,23 @@ ephoto_create_thumb_browser(Evas_Object *parent) return tb->layout; } +static void +_ephoto_populate_thumb_browser(Ephoto_Thumb_Browser *tb, const char *file) +{ + const char *thumb; + ethumb_client_file_set(tb->ec, file, NULL); + if (!ethumb_client_thumb_exists(tb->ec)) + { + ethumb_client_generate(tb->ec, _ephoto_thumbnail_generated, tb, NULL); + } + else + { + ethumb_client_thumb_path_get(tb->ec, &thumb, NULL); + _ephoto_thumbnail_generated(tb, tb->ec, 0, file, NULL, + thumb, NULL, EINA_TRUE); + } +} + /*Show the thumbnail browser*/ static void _ephoto_show_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) @@ -244,6 +261,17 @@ _ephoto_populate_end(const void *data) tb->list = NULL; efreet_mime_shutdown(); + + if (em->config->sort_images) + { + Eina_List *l; + const char *file; + em->images = eina_list_sort(em->images, + eina_list_count(em->images), + EINA_COMPARE_CB(strcoll)); + EINA_LIST_FOREACH(em->images, l, file) + _ephoto_populate_thumb_browser(tb, file); + } } static void @@ -261,22 +289,12 @@ static void _ephoto_populate_main(const void *data, const char *file) { Ephoto_Thumb_Browser *tb = (Ephoto_Thumb_Browser*)data; - const char *thumb; file = eina_stringshare_ref(file); em->images = eina_list_append(em->images, file); - ethumb_client_file_set(tb->ec, file, NULL); - if (!ethumb_client_thumb_exists(tb->ec)) - { - ethumb_client_generate(tb->ec, _ephoto_thumbnail_generated, tb, NULL); - } - else - { - ethumb_client_thumb_path_get(tb->ec, &thumb, NULL); - _ephoto_thumbnail_generated(tb, tb->ec, 0, file, NULL, - thumb, NULL, EINA_TRUE); - } + if (em->config->sort_images) return; + _ephoto_populate_thumb_browser(tb, file); } /* Start a thread to list images in a directory without locking the interface */