add an option to sort the images before displaying them.

SVN revision: 52989
This commit is contained in:
Viktor Kojouharov 2010-10-03 00:13:02 +00:00
parent 1c512b83f8
commit 1a73a71d36
4 changed files with 48 additions and 13 deletions

View File

@ -91,6 +91,8 @@ struct _Ephoto_Config
const char *slideshow_transition;
const char *editor;
int sort_images;
};
/*Ephoto Main Structure*/

View File

@ -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;

View File

@ -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);
}

View File

@ -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 */