2010-07-01 11:49:22 -07:00
|
|
|
#include "ephoto.h"
|
|
|
|
|
2010-09-13 09:40:33 -07:00
|
|
|
typedef struct _Ephoto_Thumb_Data Ephoto_Thumb_Data;
|
|
|
|
typedef struct _Ephoto_Thumb_Browser Ephoto_Thumb_Browser;
|
|
|
|
|
|
|
|
struct _Ephoto_Thumb_Data
|
|
|
|
{
|
|
|
|
char *thumb_path;
|
|
|
|
char *file;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct _Ephoto_Thumb_Browser
|
|
|
|
{
|
|
|
|
Evas_Object *layout;
|
|
|
|
Evas_Object *thumb_browser;
|
|
|
|
Evas_Object *dir_label;
|
|
|
|
Evas_Object *toolbar;
|
|
|
|
Evas_Object *thumb_slider;
|
|
|
|
Evas_Object *thbox;
|
|
|
|
Evas_Object *fsel_win;
|
|
|
|
Elm_Gengrid_Item_Class eg;
|
|
|
|
Ethumb_Client *ec;
|
|
|
|
const char *current_directory;
|
|
|
|
Eio_File *list;
|
|
|
|
};
|
|
|
|
|
2010-09-13 15:24:59 -07:00
|
|
|
#define THUMB_RATIO (256 / 192)
|
2010-09-13 09:40:33 -07:00
|
|
|
|
2010-07-01 11:49:22 -07:00
|
|
|
/*Callbacks*/
|
|
|
|
static void _ephoto_slider_changed(void *data, Evas_Object *obj, void *event_info);
|
|
|
|
static void _ephoto_thumber_connected(void *data, Ethumb_Client *client, Eina_Bool success);
|
|
|
|
static void _ephoto_thumbnail_generated(void *data, Ethumb_Client *client, int id,
|
|
|
|
const char *file, const char *key,
|
|
|
|
const char *thumb_path, const char *thumb_key,
|
|
|
|
Eina_Bool success);
|
|
|
|
static char *_ephoto_get_label(const void *data, Evas_Object *obj, const char *part);
|
|
|
|
static Evas_Object *_ephoto_get_icon(const void *data, Evas_Object *obj, const char *part);
|
|
|
|
static Eina_Bool _ephoto_get_state(const void *data, Evas_Object *obj, const char *part);
|
|
|
|
static void _ephoto_grid_del(const void *data, Evas_Object *obj);
|
2010-07-14 16:23:54 -07:00
|
|
|
static void _ephoto_thumb_clicked_job(void *data);
|
|
|
|
static void _ephoto_thumb_clicked(void *data, Evas_Object *obj, void *event_info);
|
2010-07-05 14:07:53 -07:00
|
|
|
static void _ephoto_view_large(void *data, Evas_Object *obj, void *event_info);
|
2010-07-07 19:37:45 -07:00
|
|
|
static void _ephoto_change_directory(void *data, Evas_Object *obj, void *event_info);
|
2010-07-27 19:06:03 -07:00
|
|
|
static void _ephoto_view_slideshow(void *data, Evas_Object *obj, void *event_info);
|
2010-09-13 09:40:33 -07:00
|
|
|
static void _ephoto_del_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
|
|
|
|
static void _ephoto_show_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
|
2010-07-01 11:49:22 -07:00
|
|
|
/*Create the thumbnail browser object*/
|
2010-09-13 09:40:33 -07:00
|
|
|
Evas_Object *
|
|
|
|
ephoto_create_thumb_browser(Evas_Object *parent, const char *directory)
|
2010-07-01 11:49:22 -07:00
|
|
|
{
|
|
|
|
Evas_Object *o;
|
|
|
|
char buf[PATH_MAX];
|
2010-09-13 09:40:33 -07:00
|
|
|
Ephoto_Thumb_Browser *tb;
|
|
|
|
|
|
|
|
tb = calloc(1, sizeof(Ephoto_Thumb_Browser));
|
2010-07-01 11:49:22 -07:00
|
|
|
|
|
|
|
elm_theme_extension_add(NULL, PACKAGE_DATA_DIR "/themes/default/ephoto.edj");
|
|
|
|
|
2010-09-13 09:40:33 -07:00
|
|
|
tb->ec = ethumb_client_connect(_ephoto_thumber_connected, tb, NULL);
|
|
|
|
|
|
|
|
tb->layout = elm_layout_add(parent);
|
|
|
|
elm_layout_file_set(tb->layout,
|
|
|
|
PACKAGE_DATA_DIR "/themes/default/ephoto.edj",
|
|
|
|
"ephoto/browser/layout");
|
|
|
|
|
|
|
|
evas_object_size_hint_weight_set(tb->layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
|
|
|
evas_object_size_hint_fill_set(tb->layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
|
|
|
|
evas_object_show(tb->layout);
|
2010-07-01 11:49:22 -07:00
|
|
|
|
2010-07-10 14:52:14 -07:00
|
|
|
if (!directory)
|
|
|
|
{
|
|
|
|
getcwd(buf, PATH_MAX);
|
2010-09-13 09:40:33 -07:00
|
|
|
tb->current_directory = eina_stringshare_add(buf);
|
2010-07-10 14:52:14 -07:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2010-09-13 09:40:33 -07:00
|
|
|
tb->current_directory = eina_stringshare_add(directory);
|
2010-07-10 14:52:14 -07:00
|
|
|
}
|
2010-07-01 11:49:22 -07:00
|
|
|
|
2010-09-13 09:40:33 -07:00
|
|
|
tb->thbox = elm_box_add(tb->layout);
|
|
|
|
elm_box_horizontal_set(tb->thbox, EINA_TRUE);
|
|
|
|
evas_object_size_hint_weight_set(tb->thbox, EVAS_HINT_EXPAND, EVAS_HINT_FILL);
|
|
|
|
evas_object_size_hint_fill_set(tb->thbox, EVAS_HINT_FILL, EVAS_HINT_FILL);
|
|
|
|
elm_layout_content_set(tb->layout, "ephoto.location.swallow", tb->thbox);
|
|
|
|
|
|
|
|
tb->dir_label = elm_label_add(tb->thbox);
|
|
|
|
elm_label_label_set(tb->dir_label, tb->current_directory);
|
|
|
|
evas_object_size_hint_weight_set(tb->dir_label, EVAS_HINT_EXPAND, 0.0);
|
|
|
|
evas_object_size_hint_align_set(tb->dir_label, 0.01, 0.5);
|
|
|
|
elm_box_pack_end(tb->thbox, tb->dir_label);
|
|
|
|
|
|
|
|
tb->thumb_slider = elm_slider_add(tb->thbox);
|
|
|
|
elm_slider_label_set(tb->thumb_slider, "Thumb Size:");
|
|
|
|
elm_slider_span_size_set(tb->thumb_slider, 100);
|
2010-09-13 15:24:59 -07:00
|
|
|
elm_slider_min_max_set(tb->thumb_slider, 80, 300);
|
|
|
|
elm_slider_value_set(tb->thumb_slider, em->config->thumb_size);
|
2010-09-13 09:40:33 -07:00
|
|
|
elm_box_pack_end(tb->thbox, tb->thumb_slider);
|
|
|
|
evas_object_smart_callback_add(tb->thumb_slider, "changed",
|
|
|
|
_ephoto_slider_changed, tb);
|
|
|
|
evas_object_show(tb->thumb_slider);
|
|
|
|
evas_object_show(tb->dir_label);
|
|
|
|
|
|
|
|
tb->thumb_browser = elm_gengrid_add(tb->layout);
|
|
|
|
elm_gengrid_align_set(tb->thumb_browser, 0.5, 0.5);
|
2010-09-13 15:24:59 -07:00
|
|
|
elm_gengrid_item_size_set(tb->thumb_browser, em->config->thumb_size, em->config->thumb_size / THUMB_RATIO);
|
2010-09-13 09:40:33 -07:00
|
|
|
elm_gengrid_horizontal_set(tb->thumb_browser, EINA_TRUE);
|
|
|
|
evas_object_size_hint_align_set(tb->thumb_browser, EVAS_HINT_FILL, EVAS_HINT_FILL);
|
|
|
|
evas_object_size_hint_weight_set(tb->thumb_browser, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
|
|
|
evas_object_size_hint_fill_set(tb->thumb_browser, EVAS_HINT_FILL, EVAS_HINT_FILL);
|
|
|
|
|
|
|
|
elm_object_style_set(tb->thumb_browser, "ephoto");
|
|
|
|
evas_object_smart_callback_add(tb->thumb_browser, "clicked", _ephoto_thumb_clicked, tb);
|
|
|
|
elm_layout_content_set(tb->layout, "ephoto.thumb.swallow", tb->thumb_browser);
|
|
|
|
|
|
|
|
tb->toolbar = elm_toolbar_add(tb->layout);
|
|
|
|
elm_toolbar_icon_size_set(tb->toolbar, 24);
|
|
|
|
elm_toolbar_homogenous_set(tb->toolbar, EINA_TRUE);
|
|
|
|
elm_toolbar_scrollable_set(tb->toolbar, EINA_FALSE);
|
|
|
|
|
|
|
|
evas_object_size_hint_weight_set(tb->toolbar, EVAS_HINT_EXPAND, 0.0);
|
|
|
|
evas_object_size_hint_align_set(tb->toolbar, EVAS_HINT_FILL, 0.5);
|
|
|
|
|
|
|
|
elm_layout_content_set(tb->layout, "ephoto.toolbar.swallow", tb->toolbar);
|
|
|
|
|
|
|
|
o = elm_icon_add(tb->toolbar);
|
2010-08-25 17:40:31 -07:00
|
|
|
elm_icon_file_set(o, PACKAGE_DATA_DIR "/images/change_directory.png", NULL);
|
2010-09-13 09:40:33 -07:00
|
|
|
elm_toolbar_item_add(tb->toolbar, o, "Change Directory", _ephoto_change_directory, tb);
|
2010-08-25 17:40:31 -07:00
|
|
|
|
2010-09-13 09:40:33 -07:00
|
|
|
o = elm_icon_add(tb->toolbar);
|
2010-08-25 17:40:31 -07:00
|
|
|
elm_icon_file_set(o, PACKAGE_DATA_DIR "/images/filter.png", NULL);
|
2010-09-13 09:40:33 -07:00
|
|
|
elm_toolbar_item_add(tb->toolbar, o, "Filter", NULL, NULL);
|
2010-08-25 17:40:31 -07:00
|
|
|
|
2010-09-13 09:40:33 -07:00
|
|
|
o = elm_icon_add(tb->toolbar);
|
2010-08-25 17:40:31 -07:00
|
|
|
elm_icon_file_set(o, PACKAGE_DATA_DIR "/images/view_presentation.png", NULL);
|
2010-09-13 09:40:33 -07:00
|
|
|
elm_toolbar_item_add(tb->toolbar, o, "View Large", _ephoto_view_large, tb);
|
2010-08-25 17:40:31 -07:00
|
|
|
|
2010-09-13 09:40:33 -07:00
|
|
|
o = elm_icon_add(tb->toolbar);
|
2010-08-25 17:40:31 -07:00
|
|
|
elm_icon_file_set(o, PACKAGE_DATA_DIR "/images/play_slideshow.png", NULL);
|
2010-09-13 09:40:33 -07:00
|
|
|
elm_toolbar_item_add(tb->toolbar, o, "Play Slideshow", _ephoto_view_slideshow, tb);
|
|
|
|
|
|
|
|
tb->eg.item_style = "ephoto";
|
|
|
|
tb->eg.func.label_get = _ephoto_get_label;
|
|
|
|
tb->eg.func.icon_get = _ephoto_get_icon;
|
|
|
|
tb->eg.func.state_get = _ephoto_get_state;
|
|
|
|
tb->eg.func.del = _ephoto_grid_del;
|
|
|
|
|
|
|
|
evas_object_data_set(tb->layout, "thumb_browser", tb);
|
|
|
|
evas_object_event_callback_add(tb->layout, EVAS_CALLBACK_DEL, _ephoto_del_cb, tb);
|
|
|
|
evas_object_event_callback_add(tb->layout, EVAS_CALLBACK_SHOW, _ephoto_show_cb, tb);
|
|
|
|
return tb->layout;
|
2010-07-01 11:49:22 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
/*Show the thumbnail browser*/
|
2010-09-13 09:40:33 -07:00
|
|
|
static void
|
|
|
|
_ephoto_show_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
|
|
|
|
|
2010-07-01 11:49:22 -07:00
|
|
|
{
|
2010-09-13 09:40:33 -07:00
|
|
|
Ephoto_Thumb_Browser *tb = evas_object_data_get(obj, "thumb_browser");
|
2010-09-07 06:12:08 -07:00
|
|
|
|
2010-09-13 09:40:33 -07:00
|
|
|
/* evas_object_show(tb->toolbar); */
|
|
|
|
/* evas_object_show(tb->thumb_browser); */
|
|
|
|
/* evas_object_show(tb->dir_label); */
|
|
|
|
/* evas_object_show(tb->thumb_slider); */
|
|
|
|
/* evas_object_show(tb->thbox); */
|
|
|
|
|
|
|
|
if (tb->current_directory)
|
2010-09-07 06:12:08 -07:00
|
|
|
{
|
|
|
|
char *buffer;
|
|
|
|
int length;
|
|
|
|
|
2010-09-13 09:40:33 -07:00
|
|
|
length = strlen(tb->current_directory) + strlen("Ephoto - ") + 1;
|
2010-09-07 06:12:08 -07:00
|
|
|
buffer = alloca(length);
|
2010-09-13 09:40:33 -07:00
|
|
|
snprintf(buffer, length, "Ephoto - %s", tb->current_directory);
|
2010-09-07 06:12:08 -07:00
|
|
|
elm_win_title_set(em->win, buffer);
|
|
|
|
} else {
|
|
|
|
elm_win_title_set(em->win, "Ephoto");
|
|
|
|
}
|
2010-07-01 11:49:22 -07:00
|
|
|
}
|
|
|
|
|
2010-07-02 04:17:59 -07:00
|
|
|
/* Use ecore thread facility to avoid lock completly */
|
2010-07-01 11:49:22 -07:00
|
|
|
|
2010-07-22 09:15:16 -07:00
|
|
|
/* Check image type from another thread */
|
|
|
|
static Eina_Bool
|
2010-08-03 10:14:54 -07:00
|
|
|
_ephoto_populate_filter(const void *data, const char *file)
|
2010-07-02 04:17:59 -07:00
|
|
|
{
|
|
|
|
const char *type;
|
|
|
|
|
2010-08-03 10:57:10 -07:00
|
|
|
if (!(type = efreet_mime_type_get(file)))
|
2010-07-22 09:15:16 -07:00
|
|
|
return EINA_FALSE;
|
|
|
|
if (!strncmp(type, "image", 5))
|
|
|
|
return EINA_TRUE;
|
2010-07-02 04:17:59 -07:00
|
|
|
|
2010-07-22 09:15:16 -07:00
|
|
|
return EINA_FALSE;
|
2010-07-01 11:49:22 -07:00
|
|
|
}
|
|
|
|
|
2010-07-05 14:07:53 -07:00
|
|
|
/*Done populating images*/
|
2010-07-01 11:49:22 -07:00
|
|
|
static void
|
2010-08-03 10:57:10 -07:00
|
|
|
_ephoto_populate_end(const void *data)
|
2010-07-01 11:49:22 -07:00
|
|
|
{
|
2010-09-13 09:40:33 -07:00
|
|
|
Ephoto_Thumb_Browser *tb = (Ephoto_Thumb_Browser *)data;
|
2010-07-01 11:49:22 -07:00
|
|
|
|
2010-09-13 09:40:33 -07:00
|
|
|
tb->list = NULL;
|
|
|
|
efreet_mime_shutdown();
|
2010-07-01 11:49:22 -07:00
|
|
|
}
|
|
|
|
|
2010-09-07 06:12:08 -07:00
|
|
|
static void
|
|
|
|
_ephoto_populate_error(int error, const void *data)
|
|
|
|
{
|
2010-09-13 09:40:33 -07:00
|
|
|
Ephoto_Thumb_Browser *tb = (Ephoto_Thumb_Browser*)data;
|
2010-09-07 06:12:08 -07:00
|
|
|
/* We don't handle error case in ephoto */
|
2010-09-13 09:40:33 -07:00
|
|
|
tb->list = NULL;
|
2010-09-07 06:12:08 -07:00
|
|
|
|
|
|
|
efreet_mime_shutdown();
|
|
|
|
}
|
|
|
|
|
2010-07-22 09:15:16 -07:00
|
|
|
/* Build the interface component after detection from main thread */
|
2010-07-02 04:17:59 -07:00
|
|
|
static void
|
2010-08-03 10:14:54 -07:00
|
|
|
_ephoto_populate_main(const void *data, const char *file)
|
2010-07-01 11:49:22 -07:00
|
|
|
{
|
2010-09-13 09:40:33 -07:00
|
|
|
Ephoto_Thumb_Browser *tb = (Ephoto_Thumb_Browser*)data;
|
2010-07-02 04:17:59 -07:00
|
|
|
const char *thumb;
|
2010-07-01 11:49:22 -07:00
|
|
|
|
2010-07-22 09:15:16 -07:00
|
|
|
file = eina_stringshare_ref(file);
|
|
|
|
|
|
|
|
em->images = eina_list_append(em->images, file);
|
2010-09-13 09:40:33 -07:00
|
|
|
ethumb_client_file_set(tb->ec, file, NULL);
|
|
|
|
if (!ethumb_client_thumb_exists(tb->ec))
|
2010-07-01 11:49:22 -07:00
|
|
|
{
|
2010-09-13 09:40:33 -07:00
|
|
|
ethumb_client_generate(tb->ec, _ephoto_thumbnail_generated, tb, NULL);
|
2010-07-01 11:49:22 -07:00
|
|
|
}
|
2010-07-02 04:17:59 -07:00
|
|
|
else
|
|
|
|
{
|
2010-09-13 09:40:33 -07:00
|
|
|
ethumb_client_thumb_path_get(tb->ec, &thumb, NULL);
|
|
|
|
_ephoto_thumbnail_generated(tb, tb->ec, 0, file, NULL,
|
2010-07-02 04:17:59 -07:00
|
|
|
thumb, NULL, EINA_TRUE);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Start a thread to list images in a directory without locking the interface */
|
|
|
|
void
|
2010-09-13 09:40:33 -07:00
|
|
|
ephoto_populate_thumbnails(Evas_Object *obj)
|
2010-07-02 04:17:59 -07:00
|
|
|
{
|
2010-09-13 09:40:33 -07:00
|
|
|
Ephoto_Thumb_Browser *tb = evas_object_data_get(obj, "thumb_browser");
|
|
|
|
|
|
|
|
if (!tb->current_directory) return ;
|
2010-07-02 04:17:59 -07:00
|
|
|
|
2010-07-22 09:15:16 -07:00
|
|
|
if (!efreet_mime_init())
|
|
|
|
fprintf(stderr, "Could not init efreet_mime!\n");
|
|
|
|
|
2010-09-13 09:40:33 -07:00
|
|
|
tb->list = eio_file_ls(tb->current_directory,
|
2010-07-22 09:15:16 -07:00
|
|
|
_ephoto_populate_filter,
|
|
|
|
_ephoto_populate_main,
|
|
|
|
_ephoto_populate_end,
|
2010-09-07 06:12:08 -07:00
|
|
|
_ephoto_populate_error,
|
2010-09-13 09:40:33 -07:00
|
|
|
tb);
|
2010-07-02 04:17:59 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
/*Change the thumbnail size*/
|
|
|
|
static void
|
|
|
|
_ephoto_slider_changed(void *data, Evas_Object *obj, void *event)
|
|
|
|
{
|
2010-09-13 15:24:59 -07:00
|
|
|
int val;
|
2010-09-13 09:40:33 -07:00
|
|
|
Ephoto_Thumb_Browser *tb = data;
|
2010-07-01 11:49:22 -07:00
|
|
|
|
2010-09-13 09:40:33 -07:00
|
|
|
val = elm_slider_value_get(tb->thumb_slider);
|
2010-09-13 15:24:59 -07:00
|
|
|
elm_gengrid_item_size_set(tb->thumb_browser, val, val / THUMB_RATIO);
|
|
|
|
|
|
|
|
em->config->thumb_size = val;
|
|
|
|
ephoto_config_save(em);
|
2010-07-01 11:49:22 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
/*Callback when the client is connected*/
|
|
|
|
static void _ephoto_thumber_connected(void *data, Ethumb_Client *client, Eina_Bool success)
|
|
|
|
{
|
2010-09-13 09:40:33 -07:00
|
|
|
Ephoto_Thumb_Browser *tb = data;
|
2010-07-01 11:49:22 -07:00
|
|
|
if (success == EINA_TRUE)
|
|
|
|
{
|
2010-09-13 09:40:33 -07:00
|
|
|
ethumb_client_fdo_set(tb->ec, ETHUMB_THUMB_LARGE);
|
|
|
|
ethumb_client_format_set(tb->ec, ETHUMB_THUMB_FDO);
|
|
|
|
ethumb_client_aspect_set(tb->ec, ETHUMB_THUMB_KEEP_ASPECT);
|
|
|
|
ephoto_populate_thumbnails(tb->layout);
|
2010-07-01 11:49:22 -07:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
printf("Could not connect to ethumb!\n");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/*Callback when the thumbnail has been generated!*/
|
|
|
|
static void
|
|
|
|
_ephoto_thumbnail_generated(void *data, Ethumb_Client *client, int id,
|
|
|
|
const char *file, const char *key,
|
|
|
|
const char *thumb_path, const char *thumb_key,
|
|
|
|
Eina_Bool success)
|
|
|
|
{
|
2010-09-13 09:40:33 -07:00
|
|
|
Ephoto_Thumb_Browser *tb = data;
|
2010-07-01 11:49:22 -07:00
|
|
|
if (success)
|
|
|
|
{
|
2010-07-07 21:25:28 -07:00
|
|
|
Ephoto_Thumb_Data *etd;
|
|
|
|
|
2010-08-04 17:50:43 -07:00
|
|
|
etd = calloc(1, sizeof(*etd));
|
2010-07-07 21:25:28 -07:00
|
|
|
etd->thumb_path = eina_stringshare_add(thumb_path);
|
|
|
|
etd->file = eina_stringshare_add(file);
|
|
|
|
|
2010-09-13 09:40:33 -07:00
|
|
|
elm_gengrid_item_append(tb->thumb_browser, &tb->eg, etd, NULL, NULL);
|
2010-07-01 11:49:22 -07:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/*Get the label for the icon in the grid*/
|
|
|
|
static char *
|
|
|
|
_ephoto_get_label(const void *data, Evas_Object *obj, const char *part)
|
|
|
|
{
|
2010-07-02 14:35:51 -07:00
|
|
|
const char *bname;
|
2010-07-07 21:25:28 -07:00
|
|
|
Ephoto_Thumb_Data *etd;
|
2010-07-01 11:49:22 -07:00
|
|
|
|
2010-07-07 21:25:28 -07:00
|
|
|
etd = (Ephoto_Thumb_Data *)data;
|
2010-07-01 11:49:22 -07:00
|
|
|
|
2010-07-07 21:25:28 -07:00
|
|
|
bname = basename(etd->file);
|
2010-07-01 11:49:22 -07:00
|
|
|
|
|
|
|
return strdup(bname);
|
|
|
|
}
|
|
|
|
|
|
|
|
/*Get the image for the icon in the grid*/
|
|
|
|
static Evas_Object *
|
|
|
|
_ephoto_get_icon(const void *data, Evas_Object *obj, const char *part)
|
|
|
|
{
|
2010-07-02 14:35:51 -07:00
|
|
|
Evas_Object *thumb, *o;
|
2010-07-07 21:25:28 -07:00
|
|
|
Ephoto_Thumb_Data *etd;
|
|
|
|
|
|
|
|
etd = (Ephoto_Thumb_Data *)data;
|
2010-07-01 11:49:22 -07:00
|
|
|
|
|
|
|
if (!strcmp(part, "elm.swallow.icon"))
|
|
|
|
{
|
2010-09-13 09:40:33 -07:00
|
|
|
thumb = elm_layout_add(obj);
|
2010-07-02 14:35:51 -07:00
|
|
|
elm_layout_file_set(thumb, PACKAGE_DATA_DIR "/themes/default/ephoto.edj",
|
|
|
|
"/ephoto/thumb");
|
|
|
|
evas_object_size_hint_weight_set(thumb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
2010-07-01 11:49:22 -07:00
|
|
|
evas_object_show(thumb);
|
2010-07-02 14:35:51 -07:00
|
|
|
|
2010-09-13 09:40:33 -07:00
|
|
|
o = elm_bg_add(thumb);
|
2010-07-07 21:25:28 -07:00
|
|
|
elm_bg_file_set(o, etd->thumb_path, NULL);
|
2010-07-03 10:00:58 -07:00
|
|
|
evas_object_resize(o, 176, 117);
|
2010-07-02 14:35:51 -07:00
|
|
|
|
|
|
|
elm_layout_content_set(thumb, "ephoto.swallow.content", o);
|
2010-07-01 11:49:22 -07:00
|
|
|
|
|
|
|
return thumb;
|
|
|
|
}
|
|
|
|
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
/*Get the state of the icon in the grid!*/
|
|
|
|
static Eina_Bool
|
|
|
|
_ephoto_get_state(const void *data, Evas_Object *obj, const char *part)
|
|
|
|
{
|
|
|
|
return EINA_FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
/*Delete the grid*/
|
|
|
|
static void
|
|
|
|
_ephoto_grid_del(const void *data, Evas_Object *obj)
|
|
|
|
{
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2010-07-14 16:23:54 -07:00
|
|
|
/*Thumb clicked job*/
|
|
|
|
static void
|
|
|
|
_ephoto_thumb_clicked_job(void *data)
|
|
|
|
{
|
|
|
|
const char *file;
|
|
|
|
|
|
|
|
file = data;
|
2010-09-13 09:40:33 -07:00
|
|
|
|
|
|
|
/* evas_object_smart_callback_call(ef->flow_browser, "selected", file); */
|
2010-07-14 16:23:54 -07:00
|
|
|
|
2010-09-13 09:40:33 -07:00
|
|
|
/* em->flow_browser = ephoto_create_flow_browser(em->layout); */
|
|
|
|
/* ephoto_flow_browser_image_set(em->flow_browser, file); */
|
|
|
|
/* elm_layout_content_set(em->layout, "ephoto.content.swallow", em->flow_browser); */
|
2010-07-14 16:23:54 -07:00
|
|
|
}
|
|
|
|
|
2010-07-05 15:58:16 -07:00
|
|
|
/*Check to see if the thumbnail was double clicked*/
|
|
|
|
static void
|
2010-07-14 16:23:54 -07:00
|
|
|
_ephoto_thumb_clicked(void *data, Evas_Object *obj, void *event_info)
|
2010-07-05 15:58:16 -07:00
|
|
|
{
|
|
|
|
const Eina_List *selected;
|
2010-07-07 21:25:28 -07:00
|
|
|
Ephoto_Thumb_Data *etd;
|
2010-07-05 15:58:16 -07:00
|
|
|
Evas_Object *o;
|
2010-09-13 09:40:33 -07:00
|
|
|
Ephoto_Thumb_Browser *tb = data;
|
2010-07-05 15:58:16 -07:00
|
|
|
|
2010-09-13 09:40:33 -07:00
|
|
|
selected = elm_gengrid_selected_items_get(tb->thumb_browser);
|
2010-07-14 16:23:54 -07:00
|
|
|
o = eina_list_data_get(selected);
|
|
|
|
etd = (Ephoto_Thumb_Data *)elm_gengrid_item_data_get((Elm_Gengrid_Item *)o);
|
2010-09-13 09:40:33 -07:00
|
|
|
evas_object_smart_callback_call(tb->layout, "selected", etd->file);
|
|
|
|
// ecore_job_add(_ephoto_thumb_clicked_job, etd->file);
|
2010-07-05 15:58:16 -07:00
|
|
|
}
|
|
|
|
|
2010-07-27 19:06:03 -07:00
|
|
|
/*File Selector is shown*/
|
2010-07-07 19:37:45 -07:00
|
|
|
static void
|
|
|
|
_ephoto_fileselector_shown(void *data, Evas *e, Evas_Object *obj, void *event_info)
|
|
|
|
{
|
2010-09-13 09:40:33 -07:00
|
|
|
Ephoto_Thumb_Browser *tb = data;
|
|
|
|
elm_fileselector_path_set(obj, tb->current_directory);
|
2010-07-07 19:37:45 -07:00
|
|
|
evas_render(em->e);
|
|
|
|
}
|
|
|
|
|
|
|
|
/*Directory has been chosen*/
|
|
|
|
static void
|
|
|
|
_ephoto_directory_chosen(void *data, Evas_Object *obj, void *event_info)
|
|
|
|
{
|
2010-07-07 21:25:28 -07:00
|
|
|
const Eina_List *l, *iter;
|
|
|
|
Elm_Gengrid_Item *item;
|
|
|
|
Ephoto_Thumb_Data *etd;
|
2010-07-07 19:37:45 -07:00
|
|
|
const char *directory;
|
2010-09-13 09:40:33 -07:00
|
|
|
Ephoto_Thumb_Browser *tb = data;
|
2010-07-07 19:37:45 -07:00
|
|
|
|
|
|
|
directory = elm_fileselector_selected_get(obj);
|
|
|
|
|
2010-09-13 09:40:33 -07:00
|
|
|
if ((directory) && (eina_stringshare_replace(&tb->current_directory, directory)))
|
2010-07-07 19:37:45 -07:00
|
|
|
{
|
2010-09-13 09:40:33 -07:00
|
|
|
l = elm_gengrid_items_get(tb->thumb_browser);
|
2010-07-08 11:53:18 -07:00
|
|
|
EINA_LIST_FOREACH(l, iter, item)
|
|
|
|
{
|
|
|
|
etd = (Ephoto_Thumb_Data *)elm_gengrid_item_data_get(item);
|
|
|
|
eina_stringshare_del(etd->thumb_path);
|
|
|
|
eina_stringshare_del(etd->file);
|
|
|
|
free(etd);
|
|
|
|
}
|
2010-09-13 09:40:33 -07:00
|
|
|
elm_gengrid_clear(tb->thumb_browser);
|
2010-07-08 11:53:18 -07:00
|
|
|
eina_list_free(em->images);
|
|
|
|
em->images = NULL;
|
2010-09-13 09:40:33 -07:00
|
|
|
ephoto_populate_thumbnails(tb->layout);
|
|
|
|
elm_label_label_set(tb->dir_label, tb->current_directory);
|
2010-09-07 06:12:08 -07:00
|
|
|
|
2010-09-13 09:40:33 -07:00
|
|
|
if (tb->current_directory)
|
2010-09-07 06:12:08 -07:00
|
|
|
{
|
|
|
|
char *buffer;
|
|
|
|
int length;
|
|
|
|
|
2010-09-13 09:40:33 -07:00
|
|
|
length = strlen(tb->current_directory) + strlen("Ephoto - ") + 1;
|
2010-09-07 06:12:08 -07:00
|
|
|
buffer = alloca(length);
|
2010-09-13 09:40:33 -07:00
|
|
|
snprintf(buffer, length, "Ephoto - %s", tb->current_directory);
|
2010-09-07 06:12:08 -07:00
|
|
|
elm_win_title_set(em->win, buffer);
|
|
|
|
} else {
|
|
|
|
elm_win_title_set(em->win, "Ephoto");
|
|
|
|
}
|
2010-07-07 19:37:45 -07:00
|
|
|
}
|
2010-09-13 10:36:16 -07:00
|
|
|
|
2010-09-13 10:02:32 -07:00
|
|
|
evas_object_smart_callback_call(tb->layout, "directory,changed", tb->current_directory);
|
2010-09-13 09:40:33 -07:00
|
|
|
|
|
|
|
evas_object_del(tb->fsel_win);
|
|
|
|
elm_toolbar_item_unselect_all(tb->toolbar);
|
2010-07-07 19:37:45 -07:00
|
|
|
}
|
|
|
|
|
2010-07-05 14:07:53 -07:00
|
|
|
/*Show the flow browser*/
|
|
|
|
static void
|
|
|
|
_ephoto_view_large(void *data, Evas_Object *obj, void *event_info)
|
|
|
|
{
|
2010-07-05 15:58:16 -07:00
|
|
|
const Eina_List *selected;
|
|
|
|
Evas_Object *o;
|
2010-07-07 21:25:28 -07:00
|
|
|
Ephoto_Thumb_Data *etd;
|
2010-09-13 09:40:33 -07:00
|
|
|
Ephoto_Thumb_Browser *tb = data;
|
2010-07-05 15:58:16 -07:00
|
|
|
|
2010-09-13 09:40:33 -07:00
|
|
|
selected = elm_gengrid_selected_items_get(tb->thumb_browser);
|
|
|
|
|
|
|
|
/* em->flow_browser = ephoto_create_flow_browser(em->layout); */
|
2010-07-05 15:58:16 -07:00
|
|
|
|
|
|
|
if (eina_list_data_get(selected))
|
|
|
|
{
|
|
|
|
o = eina_list_data_get(selected);
|
2010-07-07 21:25:28 -07:00
|
|
|
etd = (Ephoto_Thumb_Data *)elm_gengrid_item_data_get((Elm_Gengrid_Item *)o);
|
2010-09-13 09:40:33 -07:00
|
|
|
/* _ephoto_thumb_clicked_job(etd->file); */
|
|
|
|
evas_object_smart_callback_call(tb->layout, "selected", etd->file);
|
|
|
|
|
2010-07-05 15:58:16 -07:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2010-09-13 09:40:33 -07:00
|
|
|
/* _ephoto_thumb_clicked_job( eina_list_data_get(em->images)); */
|
|
|
|
evas_object_smart_callback_call(tb->layout, "selected", eina_list_data_get(em->images));
|
|
|
|
|
2010-07-05 15:58:16 -07:00
|
|
|
}
|
2010-09-13 09:40:33 -07:00
|
|
|
|
|
|
|
elm_toolbar_item_unselect_all(tb->toolbar);
|
2010-07-05 14:07:53 -07:00
|
|
|
}
|
2010-07-07 19:37:45 -07:00
|
|
|
|
|
|
|
/*Change directory*/
|
|
|
|
static void
|
|
|
|
_ephoto_change_directory(void *data, Evas_Object *obj, void *event_info)
|
|
|
|
{
|
2010-09-13 09:40:33 -07:00
|
|
|
Evas_Object *fsel;
|
|
|
|
Ephoto_Thumb_Browser *tb = data;
|
2010-07-07 19:37:45 -07:00
|
|
|
|
2010-09-13 09:40:33 -07:00
|
|
|
tb->fsel_win = elm_win_inwin_add(em->win);
|
2010-07-07 19:37:45 -07:00
|
|
|
|
2010-09-13 09:40:33 -07:00
|
|
|
fsel = elm_fileselector_add(tb->fsel_win);
|
2010-07-07 19:37:45 -07:00
|
|
|
elm_fileselector_folder_only_set(fsel, EINA_TRUE);
|
|
|
|
elm_fileselector_buttons_ok_cancel_set(fsel, EINA_TRUE);
|
2010-09-13 09:40:33 -07:00
|
|
|
elm_fileselector_path_set(fsel, tb->current_directory);
|
|
|
|
evas_object_event_callback_add(fsel, EVAS_CALLBACK_SHOW,
|
|
|
|
_ephoto_fileselector_shown, tb);
|
2010-07-07 19:37:45 -07:00
|
|
|
evas_object_smart_callback_add(fsel, "done",
|
2010-09-13 09:40:33 -07:00
|
|
|
_ephoto_directory_chosen, tb);
|
2010-07-07 19:37:45 -07:00
|
|
|
|
2010-09-13 09:40:33 -07:00
|
|
|
elm_win_inwin_content_set(tb->fsel_win, fsel);
|
|
|
|
elm_win_inwin_activate(tb->fsel_win);
|
2010-07-07 19:37:45 -07:00
|
|
|
|
|
|
|
evas_object_show(fsel);
|
2010-09-13 09:40:33 -07:00
|
|
|
evas_object_show(tb->fsel_win);
|
2010-07-07 19:37:45 -07:00
|
|
|
}
|
|
|
|
|
2010-07-27 19:06:03 -07:00
|
|
|
/*Show slideshow*/
|
|
|
|
static void
|
|
|
|
_ephoto_view_slideshow(void *data, Evas_Object *obj, void *event_info)
|
2010-09-13 09:40:33 -07:00
|
|
|
{
|
|
|
|
Ephoto_Thumb_Browser *tb = data;
|
|
|
|
/* FIXME */
|
|
|
|
//ephoto_hide_thumb_browser();
|
2010-07-27 19:06:03 -07:00
|
|
|
ephoto_show_slideshow(0, NULL);
|
2010-09-13 09:40:33 -07:00
|
|
|
elm_toolbar_item_unselect_all(tb->toolbar);
|
|
|
|
}
|
|
|
|
|
|
|
|
/*Destroy the thumbnail browser object itself*/
|
|
|
|
static void
|
|
|
|
_ephoto_del_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
|
|
|
|
{
|
|
|
|
Ephoto_Thumb_Browser *tb = data;
|
|
|
|
const Eina_List *items, *l, *iter;
|
|
|
|
Elm_Gengrid_Item *item;
|
|
|
|
Ephoto_Thumb_Data *etd;
|
|
|
|
|
|
|
|
l = elm_gengrid_items_get(tb->thumb_browser);
|
|
|
|
EINA_LIST_FOREACH(l, iter, item)
|
|
|
|
{
|
|
|
|
etd = (Ephoto_Thumb_Data *)elm_gengrid_item_data_get(item);
|
|
|
|
eina_stringshare_del(etd->thumb_path);
|
|
|
|
eina_stringshare_del(etd->file);
|
|
|
|
free(etd);
|
|
|
|
}
|
|
|
|
eina_stringshare_del(tb->current_directory);
|
|
|
|
ethumb_client_disconnect(tb->ec);
|
2010-07-27 19:06:03 -07:00
|
|
|
}
|