Add a flow browser. It can be accessed by clicking View Large from the toolbar. It is functional for viewing your images at high resolutions.

SVN revision: 50048
This commit is contained in:
titan 2010-07-05 21:07:53 +00:00 committed by titan
parent 652468a6e8
commit c334b2ab20
11 changed files with 228 additions and 51 deletions

View File

@ -4,7 +4,12 @@ IMAGES = \
change_directory.png \ change_directory.png \
filter.png \ filter.png \
view_presentation.png \ view_presentation.png \
play_slideshow.png play_slideshow.png \
first.png \
last.png \
next.png \
previous.png \
go_back.png
imagesdir = $(pkgdatadir)/images imagesdir = $(pkgdatadir)/images
images_DATA = $(IMAGES) images_DATA = $(IMAGES)

BIN
data/images/first.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
data/images/go_back.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

BIN
data/images/last.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
data/images/next.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

BIN
data/images/previous.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@ -8,6 +8,7 @@ bin_PROGRAMS = ephoto
ephoto_SOURCES = \ ephoto_SOURCES = \
ephoto.c \ ephoto.c \
ephoto.h \ ephoto.h \
ephoto_flow_browser.c \
ephoto_main.c \ ephoto_main.c \
ephoto_thumb_browser.c ephoto_thumb_browser.c

View File

@ -26,6 +26,12 @@
/*Main Functions*/ /*Main Functions*/
void ephoto_create_main_window(void); void ephoto_create_main_window(void);
/*Ephoto Flow Browser*/
void ephoto_create_flow_browser(void);
void ephoto_show_flow_browser(const char *current_image);
void ephoto_hide_flow_browser(void);
void ephoto_delete_flow_browser(void);
/*Ephoto Thumb Browser*/ /*Ephoto Thumb Browser*/
void ephoto_create_thumb_browser(void); void ephoto_create_thumb_browser(void);
void ephoto_show_thumb_browser(void); void ephoto_show_thumb_browser(void);
@ -40,11 +46,8 @@ struct _Ephoto
Evas_Object *win; Evas_Object *win;
Evas_Object *bg; Evas_Object *bg;
Evas_Object *box; Evas_Object *box;
Evas_Object *dir_label; Evas_Object *flow_browser;
Evas_Object *thbox;
Evas_Object *thumb_browser; Evas_Object *thumb_browser;
Evas_Object *thumb_slider;
Evas_Object *toolbar;
Eina_Hash *thumbs_images; Eina_Hash *thumbs_images;
Eina_List *images; Eina_List *images;
}; };

View File

@ -0,0 +1,154 @@
#include "ephoto.h"
/*Callbacks*/
static void _ephoto_go_back(void *data, Evas_Object *obj, void *event_info);
static void _ephoto_go_first(void *data, Evas_Object *obj, void *event_info);
static void _ephoto_go_last(void *data, Evas_Object *obj, void *event_info);
static void _ephoto_go_next(void *data, Evas_Object *obj, void *event_info);
static void _ephoto_go_previous(void *data, Evas_Object *obj, void *event_info);
/*Inline variables*/
static Eina_List *iter;
static Evas_Object *image, *toolbar;
/*Create the flow browser*/
void ephoto_create_flow_browser(void)
{
Evas_Object *o;
em->flow_browser = elm_box_add(em->win);
elm_win_resize_object_add(em->win, em->flow_browser);
evas_object_size_hint_weight_set(em->flow_browser, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(em->flow_browser, EVAS_HINT_FILL, EVAS_HINT_FILL);
image = elm_photocam_add(em->win);
elm_photocam_zoom_mode_set(image, ELM_PHOTOCAM_ZOOM_MODE_AUTO_FIT);
evas_object_size_hint_weight_set(image, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(image, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_box_pack_end(em->flow_browser, image);
toolbar = elm_toolbar_add(em->win);
elm_toolbar_icon_size_set(toolbar, 24);
elm_toolbar_homogenous_set(toolbar, EINA_TRUE);
evas_object_size_hint_weight_set(toolbar, EVAS_HINT_EXPAND, 0.0);
evas_object_size_hint_align_set(toolbar, EVAS_HINT_FILL, 0.5);
elm_box_pack_end(em->flow_browser, toolbar);
evas_object_show(toolbar);
o = elm_icon_add(em->win);
elm_icon_file_set(o, PACKAGE_DATA_DIR "/images/go_back.png", NULL);
elm_toolbar_item_add(toolbar, o, "Go Back", _ephoto_go_back, NULL);
o = elm_icon_add(em->win);
elm_icon_file_set(o, PACKAGE_DATA_DIR "/images/first.png", NULL);
elm_toolbar_item_add(toolbar, o, "First", _ephoto_go_first, NULL);
o = elm_icon_add(em->win);
elm_icon_file_set(o, PACKAGE_DATA_DIR "/images/previous.png", NULL);
elm_toolbar_item_add(toolbar, o, "Previous", _ephoto_go_previous, NULL);
o = elm_icon_add(em->win);
elm_icon_file_set(o, PACKAGE_DATA_DIR "/images/next.png", NULL);
elm_toolbar_item_add(toolbar, o, "Next", _ephoto_go_next, NULL);
o = elm_icon_add(em->win);
elm_icon_file_set(o, PACKAGE_DATA_DIR "/images/last.png", NULL);
elm_toolbar_item_add(toolbar, o, "Last", _ephoto_go_last, NULL);
o = elm_icon_add(em->win);
elm_icon_file_set(o, PACKAGE_DATA_DIR "/images/play_slideshow.png", NULL);
elm_toolbar_item_add(toolbar, o, "Slideshow", NULL, NULL);
}
/*Show the flow browser*/
void ephoto_show_flow_browser(const char *current_image)
{
iter = eina_list_data_find_list(em->images, current_image);
if (iter == NULL)
iter = eina_list_nth_list(em->images, 0);
elm_photocam_file_set(image, current_image);
evas_object_show(image);
evas_object_show(toolbar);
evas_object_show(em->flow_browser);
}
/*Hide the flow browser*/
void ephoto_hide_flow_browser(void)
{
evas_object_hide(image);
evas_object_hide(toolbar);
evas_object_hide(em->flow_browser);
}
/*Delete the flow browser*/
void ephoto_delete_flow_browser(void)
{
Eina_List *items;
items = elm_toolbar_item_get_all(toolbar);
while (items)
{
evas_object_del(eina_list_data_get(items));
items = eina_list_next(items);
}
evas_object_del(image);
evas_object_del(toolbar);
evas_object_del(em->flow_browser);
}
/*Go back to the thumbnail viewer*/
static void _ephoto_go_back(void *data, Evas_Object *obj, void *event_info)
{
ephoto_hide_flow_browser();
ephoto_show_thumb_browser();
elm_toolbar_item_unselect_all(toolbar);
}
/*Go to the very first image in the list*/
static void _ephoto_go_first(void *data, Evas_Object *obj, void *event_info)
{
iter = eina_list_nth_list(em->images, 0);
elm_photocam_file_set(image, eina_list_data_get(iter));
elm_toolbar_item_unselect_all(toolbar);
}
/*Go to the very last image in the list*/
static void _ephoto_go_last(void *data, Evas_Object *obj, void *event_info)
{
iter = eina_list_last(em->images);
elm_photocam_file_set(image, eina_list_data_get(iter));
elm_toolbar_item_unselect_all(toolbar);
}
/*Go to the next image in the list*/
static void _ephoto_go_next(void *data, Evas_Object *obj, void *event_info)
{
iter = iter->next;
if (!iter)
iter = eina_list_nth_list(em->images, 0);
elm_photocam_file_set(image, eina_list_data_get(iter));
elm_toolbar_item_unselect_all(toolbar);
}
/*Go to the previous image in the list*/
static void _ephoto_go_previous(void *data, Evas_Object *obj, void *event_info)
{
iter = iter->prev;
if (!iter)
iter = eina_list_last(em->images);
elm_photocam_file_set(image, eina_list_data_get(iter));
elm_toolbar_item_unselect_all(toolbar);
}

View File

@ -38,12 +38,14 @@ void ephoto_create_main_window(void)
evas_object_show(em->box); evas_object_show(em->box);
ephoto_create_thumb_browser(); ephoto_create_thumb_browser();
ephoto_create_flow_browser();
} }
/*Delete the main ephoto window*/ /*Delete the main ephoto window*/
static void _ephoto_delete_main_window(void *data, Evas_Object *obj, void *event_info) static void _ephoto_delete_main_window(void *data, Evas_Object *obj, void *event_info)
{ {
ephoto_delete_thumb_browser(); ephoto_delete_thumb_browser();
ephoto_delete_flow_browser();
evas_object_del(em->box); evas_object_del(em->box);
evas_object_del(em->bg); evas_object_del(em->bg);
evas_object_del(em->win); evas_object_del(em->win);

View File

@ -11,12 +11,14 @@ static char *_ephoto_get_label(const void *data, Evas_Object *obj, const char *p
static Evas_Object *_ephoto_get_icon(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 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); static void _ephoto_grid_del(const void *data, Evas_Object *obj);
static void _ephoto_view_large(void *data, Evas_Object *obj, void *event_info);
/*Inline Variables*/ /*Inline Variables*/
static Elm_Gengrid_Item_Class eg; static Elm_Gengrid_Item_Class eg;
static Ethumb_Client *ec; static Ethumb_Client *ec;
static int cur_val; static int cur_val;
static Ecore_Thread *thread = NULL; static Ecore_Thread *thread = NULL;
static Evas_Object *toolbar, *dir_label, *thumb_slider, *thbox;
/*Create the thumbnail browser object*/ /*Create the thumbnail browser object*/
void void
@ -31,29 +33,29 @@ ephoto_create_thumb_browser(void)
getcwd(buf, PATH_MAX); getcwd(buf, PATH_MAX);
em->toolbar = elm_toolbar_add(em->win); toolbar = elm_toolbar_add(em->win);
elm_toolbar_icon_size_set(em->toolbar, 32); elm_toolbar_icon_size_set(toolbar, 24);
elm_toolbar_homogenous_set(em->toolbar, EINA_TRUE); elm_toolbar_homogenous_set(toolbar, EINA_TRUE);
evas_object_size_hint_weight_set(em->toolbar, EVAS_HINT_EXPAND, 0.0); evas_object_size_hint_weight_set(toolbar, EVAS_HINT_EXPAND, 0.0);
evas_object_size_hint_align_set(em->toolbar, EVAS_HINT_FILL, 0.5); evas_object_size_hint_align_set(toolbar, EVAS_HINT_FILL, 0.5);
elm_box_pack_end(em->box, em->toolbar); elm_box_pack_end(em->box, toolbar);
evas_object_show(em->toolbar); evas_object_show(toolbar);
o = elm_icon_add(em->win); o = elm_icon_add(em->win);
elm_icon_file_set(o, PACKAGE_DATA_DIR "/images/change_directory.png", NULL); elm_icon_file_set(o, PACKAGE_DATA_DIR "/images/change_directory.png", NULL);
elm_toolbar_item_add(em->toolbar, o, "Change Directory", NULL, NULL); elm_toolbar_item_add(toolbar, o, "Change Directory", NULL, NULL);
o = elm_icon_add(em->win); o = elm_icon_add(em->win);
elm_icon_file_set(o, PACKAGE_DATA_DIR "/images/filter.png", NULL); elm_icon_file_set(o, PACKAGE_DATA_DIR "/images/filter.png", NULL);
elm_toolbar_item_add(em->toolbar, o, "Filter", NULL, NULL); elm_toolbar_item_add(toolbar, o, "Filter", NULL, NULL);
o = elm_icon_add(em->win); o = elm_icon_add(em->win);
elm_icon_file_set(o, PACKAGE_DATA_DIR "/images/view_presentation.png", NULL); elm_icon_file_set(o, PACKAGE_DATA_DIR "/images/view_presentation.png", NULL);
elm_toolbar_item_add(em->toolbar, o, "View Presentation", NULL, NULL); elm_toolbar_item_add(toolbar, o, "View Large", _ephoto_view_large, NULL);
o = elm_icon_add(em->win); o = elm_icon_add(em->win);
elm_icon_file_set(o, PACKAGE_DATA_DIR "/images/play_slideshow.png", NULL); elm_icon_file_set(o, PACKAGE_DATA_DIR "/images/play_slideshow.png", NULL);
elm_toolbar_item_add(em->toolbar, o, "Play Slideshow", NULL, NULL); elm_toolbar_item_add(toolbar, o, "Play Slideshow", NULL, NULL);
em->thumb_browser = elm_gengrid_add(em->win); em->thumb_browser = elm_gengrid_add(em->win);
elm_gengrid_align_set(em->thumb_browser, 0.5, 0.6); elm_gengrid_align_set(em->thumb_browser, 0.5, 0.6);
@ -66,29 +68,29 @@ ephoto_create_thumb_browser(void)
elm_box_pack_end(em->box, em->thumb_browser); elm_box_pack_end(em->box, em->thumb_browser);
evas_object_show(em->thumb_browser); evas_object_show(em->thumb_browser);
em->thbox = elm_box_add(em->win); thbox = elm_box_add(em->win);
elm_win_resize_object_add(em->win, em->thbox); elm_win_resize_object_add(em->win, thbox);
elm_box_horizontal_set(em->thbox, EINA_TRUE); elm_box_horizontal_set(thbox, EINA_TRUE);
evas_object_size_hint_weight_set(em->thbox, EVAS_HINT_EXPAND, EVAS_HINT_FILL); evas_object_size_hint_weight_set(thbox, EVAS_HINT_EXPAND, EVAS_HINT_FILL);
evas_object_size_hint_fill_set(em->thbox, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_size_hint_fill_set(thbox, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_box_pack_end(em->box, em->thbox); elm_box_pack_end(em->box, thbox);
evas_object_show(em->thbox); evas_object_show(thbox);
em->dir_label = elm_label_add(em->win); dir_label = elm_label_add(em->win);
elm_label_label_set(em->dir_label, buf); elm_label_label_set(dir_label, buf);
evas_object_size_hint_weight_set(em->dir_label, EVAS_HINT_EXPAND, 0.0); evas_object_size_hint_weight_set(dir_label, EVAS_HINT_EXPAND, 0.0);
evas_object_size_hint_align_set(em->dir_label, 0.01, 0.5); evas_object_size_hint_align_set(dir_label, 0.01, 0.5);
elm_box_pack_end(em->thbox, em->dir_label); elm_box_pack_end(thbox, dir_label);
evas_object_show(em->dir_label); evas_object_show(dir_label);
em->thumb_slider = elm_slider_add(em->win); thumb_slider = elm_slider_add(em->win);
elm_slider_label_set(em->thumb_slider, "Thumb Size:"); elm_slider_label_set(thumb_slider, "Thumb Size:");
elm_slider_span_size_set(em->thumb_slider, 100); elm_slider_span_size_set(thumb_slider, 100);
elm_slider_min_max_set(em->thumb_slider, 0, 100); elm_slider_min_max_set(thumb_slider, 0, 100);
elm_slider_value_set(em->thumb_slider, 50); elm_slider_value_set(thumb_slider, 50);
elm_box_pack_end(em->thbox, em->thumb_slider); elm_box_pack_end(thbox, thumb_slider);
evas_object_show(em->thumb_slider); evas_object_show(thumb_slider);
evas_object_smart_callback_add(em->thumb_slider, "changed", evas_object_smart_callback_add(thumb_slider, "changed",
_ephoto_slider_changed, NULL); _ephoto_slider_changed, NULL);
cur_val = 50; cur_val = 50;
@ -103,22 +105,22 @@ ephoto_create_thumb_browser(void)
void void
ephoto_show_thumb_browser(void) ephoto_show_thumb_browser(void)
{ {
evas_object_show(em->toolbar); evas_object_show(toolbar);
evas_object_show(em->thumb_browser); evas_object_show(em->thumb_browser);
evas_object_show(em->dir_label); evas_object_show(dir_label);
evas_object_show(em->thumb_slider); evas_object_show(thumb_slider);
evas_object_show(em->thbox); evas_object_show(thbox);
} }
/*Hide the thumbnail browser*/ /*Hide the thumbnail browser*/
void void
ephoto_hide_thumb_browser(void) ephoto_hide_thumb_browser(void)
{ {
evas_object_hide(em->toolbar); evas_object_hide(toolbar);
evas_object_hide(em->thumb_browser); evas_object_hide(em->thumb_browser);
evas_object_hide(em->dir_label); evas_object_hide(dir_label);
evas_object_hide(em->thumb_slider); evas_object_hide(thumb_slider);
evas_object_hide(em->thbox); evas_object_hide(thbox);
} }
/*Destroy the thumbnail browser*/ /*Destroy the thumbnail browser*/
@ -127,18 +129,18 @@ ephoto_delete_thumb_browser(void)
{ {
Eina_List *items; Eina_List *items;
items = elm_toolbar_item_get_all(em->toolbar); items = elm_toolbar_item_get_all(toolbar);
while (items) while (items)
{ {
evas_object_del(eina_list_data_get(items)); evas_object_del(eina_list_data_get(items));
items = eina_list_next(items); items = eina_list_next(items);
} }
evas_object_del(em->toolbar); evas_object_del(toolbar);
evas_object_del(em->thumb_browser); evas_object_del(em->thumb_browser);
evas_object_del(em->dir_label); evas_object_del(dir_label);
evas_object_del(em->thumb_slider); evas_object_del(thumb_slider);
evas_object_del(em->thbox); evas_object_del(thbox);
ethumb_client_disconnect(ec); ethumb_client_disconnect(ec);
} }
@ -170,6 +172,7 @@ _ephoto_access_disk(Ecore_Thread *thread, void *data)
efreet_mime_shutdown(); efreet_mime_shutdown();
} }
/*Done populating images*/
static void static void
_ephoto_populate_end(void *data) _ephoto_populate_end(void *data)
{ {
@ -229,7 +232,7 @@ _ephoto_slider_changed(void *data, Evas_Object *obj, void *event)
{ {
int w, h, val; int w, h, val;
val = elm_slider_value_get(em->thumb_slider); val = elm_slider_value_get(thumb_slider);
elm_gengrid_item_size_get(em->thumb_browser, &w, &h); elm_gengrid_item_size_get(em->thumb_browser, &w, &h);
if (val < cur_val) if (val < cur_val)
{ {
@ -333,3 +336,12 @@ _ephoto_grid_del(const void *data, Evas_Object *obj)
return; return;
} }
/*Show the flow browser*/
static void
_ephoto_view_large(void *data, Evas_Object *obj, void *event_info)
{
ephoto_hide_thumb_browser();
ephoto_show_flow_browser(eina_list_data_get(em->images));
elm_toolbar_item_unselect_all(toolbar);
}