diff --git a/data/images/Makefile.am b/data/images/Makefile.am index ad8d7b3..dfad797 100644 --- a/data/images/Makefile.am +++ b/data/images/Makefile.am @@ -1,7 +1,7 @@ AUTOMAKE_OPTIONS = subdir-objects MAINTAINERCLEANFILES = Makefile.in Makefile -EXTRA_DIST = ephoto.png +EXTRA_DIST = ephoto.png grid.png single.png filesdir = $(datadir)/$(PACKAGE)/images -files_DATA = ephoto.png +files_DATA = ephoto.png grid.png single.png diff --git a/data/themes/Makefile.am b/data/themes/Makefile.am index 1bc217e..19f5e9c 100644 --- a/data/themes/Makefile.am +++ b/data/themes/Makefile.am @@ -5,19 +5,22 @@ EDJE_CC = @edje_cc@ EDJE_FLAGS = -id $(top_srcdir)/data/themes filesdir = $(datadir)/$(PACKAGE)/themes -files_DATA = crop.edj +files_DATA = ephoto.edj -EXTRA_DIST = crop.edc \ - sel_border.png \ - sel_corner1.png \ - sel_corner3.png \ - sel_corner5.png \ - sel_corner7.png +EXTRA_DIST = ephoto.edc \ + images/sel_border.png \ + images/sel_corner1.png \ + images/sel_corner3.png \ + images/sel_corner5.png \ + images/sel_corner7.png \ + images/shadow_circle_horiz.png \ + images/shadow_circle_vert.png \ + images/tile.png -crop.edj: Makefile $(EXTRA_DIST) +ephoto.edj: Makefile $(EXTRA_DIST) $(EDJE_CC) $(EDJE_FLAGS) \ - $(top_srcdir)/data/themes/crop.edc \ - $(top_builddir)/data/themes/crop.edj + $(top_srcdir)/data/themes/ephoto.edc \ + $(top_builddir)/data/themes/ephoto.edj clean-local: rm -f *.edj diff --git a/src/bin/Makefile.am b/src/bin/Makefile.am index b369bed..14fe19b 100644 --- a/src/bin/Makefile.am +++ b/src/bin/Makefile.am @@ -24,6 +24,7 @@ ephoto_SOURCES = \ ephoto_color.c \ ephoto_config.c \ ephoto_cropper.c \ + ephoto_directory_browser.c \ ephoto_editor.c \ ephoto_file.c \ ephoto_filters.c \ diff --git a/src/bin/ephoto.c b/src/bin/ephoto.c index 642a41f..b4de0a9 100644 --- a/src/bin/ephoto.c +++ b/src/bin/ephoto.c @@ -11,7 +11,7 @@ elm_main(int argc, char **argv) elm_need_efreet(); elm_language_set(""); elm_app_compile_data_dir_set(PACKAGE_DATA_DIR); - elm_app_info_set(elm_main, "ephoto", "themes/crop.edj"); + elm_app_info_set(elm_main, "ephoto", "themes/ephoto.edj"); #if HAVE_GETTEXT && ENABLE_NLS elm_app_compile_locale_set(LOCALEDIR); bindtextdomain(PACKAGE, elm_app_locale_dir_get()); diff --git a/src/bin/ephoto.h b/src/bin/ephoto.h index 29b5a95..77ba45d 100644 --- a/src/bin/ephoto.h +++ b/src/bin/ephoto.h @@ -59,6 +59,7 @@ Evas_Object *ephoto_thumb_add(Ephoto *ephoto, Evas_Object *parent, void ephoto_thumb_path_set(Evas_Object *obj, const char *path); void ephoto_directory_set(Ephoto *ephoto, const char *path, Elm_Object_Item *expanded, Eina_Bool dirs_only, Eina_Bool thumbs_only); +void ephoto_show_folders(Ephoto *ephoto, Eina_Bool toggle); /*config panel functions*/ Eina_Bool ephoto_config_init(Ephoto *em); @@ -68,6 +69,7 @@ void ephoto_config_main(Ephoto *em); /*single image functions*/ Evas_Object *ephoto_single_browser_add(Ephoto *ephoto, Evas_Object *parent); +void ephoto_single_browser_show_controls(Ephoto *ephoto); void ephoto_single_browser_entries_set(Evas_Object *obj, Eina_List *entries); void ephoto_single_browser_entry_set(Evas_Object *obj, Ephoto_Entry *entry); void ephoto_single_browser_focus_set(Ephoto *ephoto); @@ -80,6 +82,8 @@ void ephoto_single_browser_image_data_update(Evas_Object *main, void ephoto_single_browser_image_data_done(Evas_Object *main, unsigned int *image_data, Evas_Coord w, Evas_Coord h); void ephoto_single_browser_cancel_editing(Evas_Object *main); +void ephoto_single_browser_slideshow(Evas_Object *obj); +void ephoto_single_browser_adjust_offsets(Ephoto *ephoto); /* smart callbacks called: "back" - the user wants to go back to the previous * screen. */ @@ -87,19 +91,27 @@ void ephoto_single_browser_cancel_editing(Evas_Object *main); Evas_Object *ephoto_slideshow_add(Ephoto *ephoto, Evas_Object *parent); void ephoto_slideshow_entries_set(Evas_Object *obj, Eina_List *entries); void ephoto_slideshow_entry_set(Evas_Object *obj, Ephoto_Entry *entry); +void ephoto_slideshow_show_controls(Ephoto *ephoto); /* smart callbacks called: "back" - the user wants to go back to the previous * screen. */ /*thumbnail browser functions*/ Evas_Object *ephoto_thumb_browser_add(Ephoto *ephoto, Evas_Object *parent); -void ephoto_thumb_browser_fsel_clear(Ephoto *ephoto); -void ephoto_thumb_browser_top_dir_set(Ephoto *ephoto, const char *dir); +void ephoto_thumb_browser_show_controls(Ephoto *ephoto); void ephoto_thumb_browser_insert(Ephoto *ephoto, Ephoto_Entry *entry); void ephoto_thumb_browser_remove(Ephoto *ephoto, Ephoto_Entry *entry); void ephoto_thumb_browser_update(Ephoto *ephoto, Ephoto_Entry *entry); +void ephoto_thumb_browser_update_info_label(Ephoto *ephoto); +void ephoto_thumb_browser_slideshow(Evas_Object *obj); +void ephoto_thumb_browser_paste(Ephoto *ephoto, Elm_Object_Item *item); /* smart callbacks called: "selected" - an item in the thumb browser is * selected. The selected Ephoto_Entry is passed as event_info argument. */ +/*directory browser functions*/ +Evas_Object *ephoto_directory_browser_add(Ephoto *ephoto, Evas_Object *parent); +void ephoto_directory_browser_initialize_structure(Ephoto *ephoto); +void ephoto_directory_browser_top_dir_set(Ephoto *ephoto, const char *dir); + /*thumbnailing functions taken from enlightenment*/ int e_thumb_init(void); int e_thumb_shutdown(void); @@ -116,18 +128,18 @@ int e_ipc_init(void); int e_ipc_shutdown(void); /*editing functions*/ -Evas_Object *ephoto_editor_add(Evas_Object *parent, const char *title, +Evas_Object *ephoto_editor_add(Ephoto *ephoto, const char *title, const char *data_name, void *data); void ephoto_editor_del(Evas_Object *obj); -void ephoto_cropper_add(Evas_Object *main, Evas_Object *parent, +void ephoto_cropper_add(Ephoto *ephoto, Evas_Object *main, Evas_Object *parent, Evas_Object *image_parent, Evas_Object *image); -void ephoto_bcg_add(Evas_Object *main, Evas_Object *parent, +void ephoto_bcg_add(Ephoto *ephoto, Evas_Object *main, Evas_Object *parent, Evas_Object *image); -void ephoto_hsv_add(Evas_Object *main, Evas_Object *parent, +void ephoto_hsv_add(Ephoto *ephoto, Evas_Object *main, Evas_Object *parent, Evas_Object *image); -void ephoto_color_add(Evas_Object *main, Evas_Object *parent, +void ephoto_color_add(Ephoto *ephoto, Evas_Object *main, Evas_Object *parent, Evas_Object *image); -void ephoto_red_eye_add(Evas_Object *main, Evas_Object *parent, +void ephoto_red_eye_add(Ephoto *ephoto, Evas_Object *main, Evas_Object *parent, Evas_Object *image); void ephoto_filter_blur(Evas_Object *main, Evas_Object *image); void ephoto_filter_sharpen(Evas_Object *main, Evas_Object *image); @@ -196,14 +208,12 @@ struct _Ephoto_Config int window_width; int window_height; Eina_Bool fsel_hide; - Eina_Bool tool_hide; double lpane_size; const char *open; Eina_Bool prompts; Eina_Bool drop; Evas_Object *slide_time; Evas_Object *slide_trans; - Evas_Object *hide_toolbar; Evas_Object *open_dir; Evas_Object *open_dir_custom; Evas_Object *show_prompts; @@ -213,12 +223,18 @@ struct _Ephoto_Config struct _Ephoto { Evas_Object *win; - Evas_Object *panel; + Evas_Object *layout; Evas_Object *pager; + Evas_Object *statusbar; + Evas_Object *controls_left; + Evas_Object *controls_right; + Evas_Object *infolabel; Evas_Object *thumb_browser; Evas_Object *single_browser; Evas_Object *slideshow; + Evas_Object *dir_browser; + Evas_Object *right_menu; Elm_Object_Item *tb; Elm_Object_Item *sb; Elm_Object_Item *sl; @@ -228,10 +244,18 @@ struct _Ephoto Eina_List *searchentries; Eina_List *thumbs; + Eina_Bool blocking; + Eina_Bool menu_blocking; + Eina_Bool hover_blocking; + Eina_Bool right_blocking; + Eina_Bool folders_toggle; + Eina_Bool editor_blocking; + Ecore_File_Monitor *monitor; Ecore_Idler *file_idler; Eina_List *file_idler_pos; Eina_List *upload_handlers; + Ecore_Timer *overlay_timer; Ecore_Con_Url *url_up; char *url_ret; char *upload_error; @@ -256,7 +280,6 @@ struct _Ephoto Ephoto_State state, prev_state; Ephoto_Config *config; - Ephoto_Entry *thumb_entry; }; struct _Ephoto_Entry diff --git a/src/bin/ephoto_bcg.c b/src/bin/ephoto_bcg.c index a345f7b..389f09b 100644 --- a/src/bin/ephoto_bcg.c +++ b/src/bin/ephoto_bcg.c @@ -317,7 +317,7 @@ _editor_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, } void -ephoto_bcg_add(Evas_Object *main, Evas_Object *parent, Evas_Object *image) +ephoto_bcg_add(Ephoto *ephoto, Evas_Object *main, Evas_Object *parent, Evas_Object *image) { Evas_Object *slider; Ephoto_BCG *ebcg; @@ -343,7 +343,7 @@ ephoto_bcg_add(Evas_Object *main, Evas_Object *parent, Evas_Object *image) memcpy(ebcg->original_im_data, im_data, sizeof(unsigned int) * ebcg->w * ebcg->h); - ebcg->editor = ephoto_editor_add(parent, _("Brightness/Contrast/Gamma"), + ebcg->editor = ephoto_editor_add(ephoto, _("Brightness/Contrast/Gamma"), "ebcg", ebcg); evas_object_event_callback_add(ebcg->editor, EVAS_CALLBACK_DEL, _editor_del, ebcg); diff --git a/src/bin/ephoto_color.c b/src/bin/ephoto_color.c index cc5d384..4e03222 100644 --- a/src/bin/ephoto_color.c +++ b/src/bin/ephoto_color.c @@ -302,7 +302,7 @@ _editor_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, } void -ephoto_color_add(Evas_Object *main, Evas_Object *parent, Evas_Object *image) +ephoto_color_add(Ephoto *ephoto, Evas_Object *main, Evas_Object *parent, Evas_Object *image) { Evas_Object *slider; Ephoto_Color *eco; @@ -328,7 +328,7 @@ ephoto_color_add(Evas_Object *main, Evas_Object *parent, Evas_Object *image) memcpy(eco->original_im_data, im_data, sizeof(unsigned int) * eco->w * eco->h); - eco->editor = ephoto_editor_add(parent, _("Adjust Color Levels"), + eco->editor = ephoto_editor_add(ephoto, _("Adjust Color Levels"), "eco", eco); evas_object_event_callback_add(eco->editor, EVAS_CALLBACK_DEL, _editor_del, eco); diff --git a/src/bin/ephoto_config.c b/src/bin/ephoto_config.c index 3853d94..936b081 100644 --- a/src/bin/ephoto_config.c +++ b/src/bin/ephoto_config.c @@ -1,6 +1,6 @@ #include "ephoto.h" -#define CONFIG_VERSION 15 +#define CONFIG_VERSION 16 static int _ephoto_config_load(Ephoto *ephoto); static Eina_Bool _ephoto_on_config_save(void *data); @@ -37,8 +37,6 @@ _config_save_cb(void *data, Evas_Object *obj EINA_UNUSED, if (ecore_file_is_dir(path) || !strcmp(path, "Last")) eina_stringshare_replace(&ephoto->config->open, path); - ephoto->config->tool_hide = - elm_check_state_get(ephoto->config->hide_toolbar); ephoto->config->prompts = elm_check_state_get(ephoto->config->show_prompts); ephoto->config->drop = elm_check_state_get(ephoto->config->move_drop); if (elm_spinner_value_get(ephoto->config->slide_time) > 0) @@ -83,14 +81,6 @@ _config_general(Ephoto *ephoto, Evas_Object *parent) elm_object_content_set(frame, table); evas_object_show(table); - check = elm_check_add(table); - elm_object_text_set(check, _("Hide Toolbar On Fullscreen")); - evas_object_size_hint_align_set(check, 0.0, EVAS_HINT_FILL); - elm_check_state_set(check, ephoto->config->tool_hide); - elm_table_pack(table, check, 0, 0, 1, 1); - evas_object_show(check); - ephoto->config->hide_toolbar = check; - check = elm_check_add(table); elm_object_text_set(check, _("Prompt Before Changing The Filesystem")); evas_object_size_hint_align_set(check, 0.0, EVAS_HINT_FILL); @@ -331,9 +321,9 @@ _config_bindings(Evas_Object *parent) _("General Bindings
" "F1: Settings Panel
" "F5: Start Slideshow
" - "F11: Toggle Fullscreen

" + "F11: Toggle Fullscreen
" + "Ctrl+Shift+f: Toggle File Selector

" "Thumbnail Browser Bindings
" - "Ctrl+Shift+f: Toggle File Selector
" "Ctrl++: Zoom In
" "Ctrl+-: Zoom Out
" "Ctrl+Tab: View Image
" @@ -711,7 +701,6 @@ ephoto_config_init(Ephoto *ephoto) C_VAL(D, T, window_width, EET_T_INT); C_VAL(D, T, window_height, EET_T_INT); C_VAL(D, T, fsel_hide, EET_T_INT); - C_VAL(D, T, tool_hide, EET_T_INT); C_VAL(D, T, lpane_size, EET_T_DOUBLE); C_VAL(D, T, open, EET_T_STRING); C_VAL(D, T, prompts, EET_T_INT); @@ -726,7 +715,6 @@ ephoto_config_init(Ephoto *ephoto) ephoto->config->window_width = 900; ephoto->config->window_height = 600; ephoto->config->fsel_hide = 0; - ephoto->config->tool_hide = 0; ephoto->config->lpane_size = .15; ephoto->config->open = eina_stringshare_add(getenv("HOME")); ephoto->config->prompts = 1; diff --git a/src/bin/ephoto_cropper.c b/src/bin/ephoto_cropper.c index 9f43f55..3c2864c 100644 --- a/src/bin/ephoto_cropper.c +++ b/src/bin/ephoto_cropper.c @@ -627,7 +627,7 @@ _editor_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, } void -ephoto_cropper_add(Evas_Object *main, Evas_Object *parent, +ephoto_cropper_add(Ephoto *ephoto, Evas_Object *main, Evas_Object *parent, Evas_Object *image_parent, Evas_Object *image) { Ephoto_Cropper *ec; @@ -656,7 +656,7 @@ ephoto_cropper_add(Evas_Object *main, Evas_Object *parent, evas_object_show(ec->box); ec->layout = elm_layout_add(ec->box); - elm_layout_file_set(ec->layout, PACKAGE_DATA_DIR "/themes/crop.edj", + elm_layout_file_set(ec->layout, PACKAGE_DATA_DIR "/themes/ephoto.edj", "ephoto,image,cropper,base"); evas_object_size_hint_weight_set(ec->layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); @@ -671,7 +671,7 @@ ephoto_cropper_add(Evas_Object *main, Evas_Object *parent, evas_object_show(ec->image); ec->cropper = edje_object_add(evas_object_evas_get(ec->layout)); - edje_object_file_set(ec->cropper, PACKAGE_DATA_DIR "/themes/crop.edj", + edje_object_file_set(ec->cropper, PACKAGE_DATA_DIR "/themes/ephoto.edj", "ephoto,image,cropper"); edje_object_signal_callback_add(elm_layout_edje_get(ec->layout), "cropper,changed", "ephoto.swallow.cropper", _calculate_cropper_size, @@ -701,7 +701,7 @@ ephoto_cropper_add(Evas_Object *main, Evas_Object *parent, evas_object_event_callback_add(ec->layout, EVAS_CALLBACK_RESIZE, _image_resize, ec); - ec->editor = ephoto_editor_add(parent, _("Crop Image"), + ec->editor = ephoto_editor_add(ephoto, _("Crop Image"), "ec", ec); evas_object_event_callback_add(ec->editor, EVAS_CALLBACK_DEL, _editor_del, ec); diff --git a/src/bin/ephoto_editor.c b/src/bin/ephoto_editor.c index d02c440..8e8108b 100644 --- a/src/bin/ephoto_editor.c +++ b/src/bin/ephoto_editor.c @@ -8,31 +8,47 @@ _editor_reset(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, } static void -_editor_apply(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, +_editor_apply(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { + Ephoto *ephoto = data; + ecore_event_add(EPHOTO_EVENT_EDITOR_APPLY, NULL, NULL, NULL); + edje_object_signal_emit(elm_layout_edje_get(ephoto->layout), + "ephoto,editor,hide", "ephoto"); + ephoto->editor_blocking = EINA_FALSE; } static void -_editor_cancel(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, +_editor_cancel(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { + Ephoto *ephoto = data; + ecore_event_add(EPHOTO_EVENT_EDITOR_CANCEL, NULL, NULL, NULL); + edje_object_signal_emit(elm_layout_edje_get(ephoto->layout), + "ephoto,editor,hide", "ephoto"); + ephoto->editor_blocking = EINA_FALSE; } Evas_Object * -ephoto_editor_add(Evas_Object *parent, const char *title, const char *data_name, +ephoto_editor_add(Ephoto *ephoto, const char *title, const char *data_name, void *data) { Evas_Object *frame, *box, *ic, *button; - frame = elm_frame_add(parent); + ephoto->editor_blocking = EINA_TRUE; + edje_object_signal_emit(elm_layout_edje_get(ephoto->layout), + "ephoto,controls,hide", "ephoto"); + edje_object_signal_emit(elm_layout_edje_get(ephoto->layout), + "ephoto,folders,hide", "ephoto"); + + frame = elm_frame_add(ephoto->layout); elm_object_text_set(frame, title); evas_object_size_hint_weight_set(frame, 0.3, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(frame, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_data_set(frame, data_name, data); - elm_box_pack_end(parent, frame); + elm_layout_content_set(ephoto->layout, "ephoto.swallow.editor", frame); evas_object_show(frame); box = elm_box_add(frame); @@ -46,6 +62,7 @@ ephoto_editor_add(Evas_Object *parent, const char *title, const char *data_name, ic = elm_icon_add(box); elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); + evas_object_size_hint_min_set(ic, 20*elm_config_scale_get(), 20*elm_config_scale_get()); evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); elm_icon_standard_set(ic, "edit-undo"); @@ -55,10 +72,12 @@ ephoto_editor_add(Evas_Object *parent, const char *title, const char *data_name, evas_object_smart_callback_add(button, "clicked", _editor_reset, box); evas_object_size_hint_weight_set(button, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_size_hint_align_set(button, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_min_set(button, 220*elm_config_scale_get(), 30*elm_config_scale_get()); elm_box_pack_end(box, button); evas_object_show(button); ic = elm_icon_add(box); + evas_object_size_hint_min_set(ic, 20*elm_config_scale_get(), 20*elm_config_scale_get()); elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); elm_icon_standard_set(ic, "document-save"); @@ -66,13 +85,15 @@ ephoto_editor_add(Evas_Object *parent, const char *title, const char *data_name, button = elm_button_add(box); elm_object_text_set(button, _("Apply")); elm_object_part_content_set(button, "icon", ic); - evas_object_smart_callback_add(button, "clicked", _editor_apply, box); + evas_object_smart_callback_add(button, "clicked", _editor_apply, ephoto); evas_object_size_hint_weight_set(button, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_size_hint_align_set(button, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_min_set(button, 220*elm_config_scale_get(), 30*elm_config_scale_get()); elm_box_pack_end(box, button); evas_object_show(button); ic = elm_icon_add(box); + evas_object_size_hint_min_set(ic, 20*elm_config_scale_get(), 20*elm_config_scale_get()); elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); elm_icon_standard_set(ic, "window-close"); @@ -80,12 +101,16 @@ ephoto_editor_add(Evas_Object *parent, const char *title, const char *data_name, button = elm_button_add(box); elm_object_text_set(button, _("Cancel")); elm_object_part_content_set(button, "icon", ic); - evas_object_smart_callback_add(button, "clicked", _editor_cancel, box); + evas_object_smart_callback_add(button, "clicked", _editor_cancel, ephoto); evas_object_size_hint_weight_set(button, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_size_hint_align_set(button, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_min_set(button, 220*elm_config_scale_get(), 30*elm_config_scale_get()); elm_box_pack_end(box, button); evas_object_show(button); + edje_object_signal_emit(elm_layout_edje_get(ephoto->layout), + "ephoto,editor,show", "ephoto"); + return box; } diff --git a/src/bin/ephoto_file.c b/src/bin/ephoto_file.c index 7b8b334..4d518fe 100644 --- a/src/bin/ephoto_file.c +++ b/src/bin/ephoto_file.c @@ -130,18 +130,6 @@ _save_image_as_overwrite(void *data, Evas_Object *obj EINA_UNUSED, _("Error: Image could not be saved here!")); ephoto_single_browser_path_pending_unset(ephoto->single_browser); } - else - { - char *dir = ecore_file_dir_get(file); - if (strcmp(dir, ephoto->config->directory)) - { - ephoto_thumb_browser_fsel_clear(ephoto); - ephoto_directory_set(ephoto, dir, NULL, EINA_FALSE, EINA_FALSE); - ephoto_thumb_browser_top_dir_set(ephoto, - ephoto->config->directory); - free(dir); - } - } evas_object_del(popup); elm_object_focus_set(ephoto->pager, EINA_TRUE); evas_object_freeze_events_set(ephoto->pager, EINA_FALSE); @@ -1057,6 +1045,7 @@ _prompt_upload_apply(void *data, Evas_Object *obj EINA_UNUSED, evas_object_del(ppopup); popup = _processing(ephoto, _("Upload Image"), ("Please wait while your image is uploaded.")); + evas_object_show(popup); f = fopen(entry->path, "rb"); fseek(f, 0, SEEK_END); @@ -1214,21 +1203,6 @@ _prompt_save_image_as_apply(void *data, Evas_Object *obj EINA_UNUSED, void *even ephoto_single_browser_path_pending_unset (ephoto->single_browser); } - else - { - evas_object_del(opopup); - char *dir = ecore_file_dir_get(buf); - - if (strcmp(dir, ephoto->config->directory)) - { - ephoto_thumb_browser_fsel_clear(ephoto); - ephoto_directory_set(ephoto, dir, NULL, - EINA_FALSE, EINA_FALSE); - ephoto_thumb_browser_top_dir_set(ephoto, - ephoto->config->directory); - free(dir); - } - } } } evas_object_del(opopup); diff --git a/src/bin/ephoto_hsv.c b/src/bin/ephoto_hsv.c index 577137d..1d8acc2 100644 --- a/src/bin/ephoto_hsv.c +++ b/src/bin/ephoto_hsv.c @@ -324,7 +324,7 @@ _editor_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, } void -ephoto_hsv_add(Evas_Object *main, Evas_Object *parent, Evas_Object *image) +ephoto_hsv_add(Ephoto *ephoto, Evas_Object *main, Evas_Object *parent, Evas_Object *image) { Evas_Object *slider; Ephoto_HSV *ehsv; @@ -350,7 +350,7 @@ ephoto_hsv_add(Evas_Object *main, Evas_Object *parent, Evas_Object *image) memcpy(ehsv->original_im_data, im_data, sizeof(unsigned int) * ehsv->w * ehsv->h); - ehsv->editor = ephoto_editor_add(parent, _("Hue/Saturation/Value"), + ehsv->editor = ephoto_editor_add(ephoto, _("Hue/Saturation/Value"), "ehsv", ehsv); evas_object_event_callback_add(ehsv->editor, EVAS_CALLBACK_DEL, _editor_del, ehsv); diff --git a/src/bin/ephoto_main.c b/src/bin/ephoto_main.c index 60f711f..11ae608 100644 --- a/src/bin/ephoto_main.c +++ b/src/bin/ephoto_main.c @@ -40,9 +40,15 @@ _ephoto_thumb_browser_show(Ephoto *ephoto, Ephoto_Entry *entry) elm_object_focus_set(ephoto->thumb_browser, EINA_TRUE); _ephoto_state_set(ephoto, EPHOTO_STATE_THUMB); ephoto_title_set(ephoto, ephoto->config->directory); + ephoto_thumb_browser_update_info_label(ephoto); + elm_box_clear(ephoto->controls_left); + elm_box_clear(ephoto->controls_right); + ephoto->blocking = EINA_FALSE; + ephoto->menu_blocking = EINA_FALSE; + ephoto->hover_blocking = EINA_FALSE; + ephoto->editor_blocking = EINA_FALSE; + ephoto_thumb_browser_show_controls(ephoto); - if (ephoto->thumb_entry) - elm_gengrid_item_selected_set(ephoto->thumb_entry->item, EINA_TRUE); if ((entry) && (entry->item)) elm_gengrid_item_bring_in(entry->item, ELM_GENGRID_ITEM_SCROLLTO_IN); } @@ -60,16 +66,26 @@ _ephoto_single_browser_show(Ephoto *ephoto, Ephoto_Entry *entry) ephoto_single_browser_entries_set(ephoto->single_browser, ephoto->entries); - ephoto->thumb_entry = entry; ephoto_single_browser_entry_set(ephoto->single_browser, entry); elm_naviframe_item_simple_promote(ephoto->pager, ephoto->single_browser); elm_object_focus_set(ephoto->single_browser, EINA_TRUE); _ephoto_state_set(ephoto, EPHOTO_STATE_SINGLE); + + elm_box_clear(ephoto->controls_left); + elm_box_clear(ephoto->controls_right); + ephoto->blocking = EINA_FALSE; + ephoto->menu_blocking = EINA_FALSE; + ephoto->hover_blocking = EINA_FALSE; + ephoto->editor_blocking = EINA_FALSE; + ephoto_single_browser_show_controls(ephoto); + ephoto_single_browser_adjust_offsets(ephoto); } static void _ephoto_slideshow_show(Ephoto *ephoto, Ephoto_Entry *entry) { + ephoto_slideshow_show_controls(ephoto); + if (ephoto->selentries) ephoto_slideshow_entries_set(ephoto->slideshow, ephoto->selentries); else if (ephoto->searchentries) @@ -80,6 +96,15 @@ _ephoto_slideshow_show(Ephoto *ephoto, Ephoto_Entry *entry) elm_naviframe_item_simple_promote(ephoto->pager, ephoto->slideshow); elm_object_focus_set(ephoto->slideshow, EINA_TRUE); _ephoto_state_set(ephoto, EPHOTO_STATE_SLIDESHOW); + edje_object_signal_emit(elm_layout_edje_get(ephoto->layout), + "ephoto,controls,hide", "ephoto"); + edje_object_signal_emit(elm_layout_edje_get(ephoto->layout), + "ephoto,folders,hide", "ephoto"); + ephoto->folders_toggle = EINA_FALSE; + ephoto->blocking = EINA_FALSE; + ephoto->menu_blocking = EINA_FALSE; + ephoto->hover_blocking = EINA_FALSE; + ephoto->editor_blocking = EINA_FALSE; } static void @@ -184,10 +209,40 @@ _win_free(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, ecore_timer_del(ephoto->timer.thumb_regen); if (ephoto->monitor) ecore_file_monitor_del(ephoto->monitor); + if (ephoto->overlay_timer) + ecore_timer_del(ephoto->overlay_timer); ephoto_config_save(ephoto); free(ephoto); } +static void +_mouse_up_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, + void *event_info EINA_UNUSED) +{ + Ephoto *ephoto = data; + Evas_Object *but = evas_object_data_get(ephoto->layout, "folder_button"); + Evas_Coord x, y, w, h, bx, by, bw, bh, cx, cy; + + evas_pointer_canvas_xy_get(evas_object_evas_get(ephoto->dir_browser), &cx, &cy); + evas_object_geometry_get(ephoto->dir_browser, &x, &y, &w, &h); + evas_object_geometry_get(but, &bx, &by, &bw, &bh); + + if (cx >= x && cx <= x+w) + { + if (cy >= y && cy <= y+h) + return; + } + if (cx >= bx && cx <= bx+bw) + { + if (cy >= by && cy <= by+bh) + return; + } + edje_object_signal_emit(elm_layout_edje_get(ephoto->layout), + "ephoto,folders,hide", "ephoto"); + ephoto->folders_toggle = EINA_FALSE; + elm_object_tooltip_text_set(but, _("Show Folders")); +} + static void _resize_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) @@ -203,24 +258,135 @@ _resize_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, } } +static Eina_Bool +_timer_cb(void *data) +{ + Ephoto *ephoto = data; + Edje_Object *edje = elm_layout_edje_get(ephoto->layout); + + if (ephoto->blocking || ephoto->menu_blocking || + ephoto->right_blocking || ephoto->hover_blocking || + ephoto->editor_blocking) + return ECORE_CALLBACK_PASS_ON; + + edje_object_signal_emit(edje, "ephoto,controls,hide", "ephoto"); + if (ephoto->folders_toggle) + edje_object_signal_emit(edje, "ephoto,folders,hide", "ephoto"); + ecore_timer_del(ephoto->overlay_timer); + ephoto->overlay_timer = NULL; + + return ECORE_CALLBACK_CANCEL; +} + static void -_pager_focused(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, +_mouse_move_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, + void *event_info EINA_UNUSED) +{ + Ephoto *ephoto = data; + Edje_Object *edje = elm_layout_edje_get(ephoto->layout); + + if (ephoto->blocking || ephoto->menu_blocking || + ephoto->right_blocking || ephoto->hover_blocking || + ephoto->editor_blocking) + return; + + if (ephoto->overlay_timer) + ecore_timer_del(ephoto->overlay_timer); + ephoto->overlay_timer = NULL; + edje_object_signal_emit(edje, "ephoto,controls,show", "ephoto"); + if (ephoto->folders_toggle) + edje_object_signal_emit(edje, "ephoto,folders,show", "ephoto"); + ephoto->overlay_timer = ecore_timer_add(3.0, _timer_cb, ephoto); +} + +static void +_mouse_out_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, + void *event_info EINA_UNUSED) +{ + Ephoto *ephoto = data; + ephoto->blocking = EINA_FALSE; +} + +static void +_mouse_in_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, + void *event_info EINA_UNUSED) +{ + Ephoto *ephoto = data; + ephoto->blocking = EINA_TRUE; +} + +static void +_folder_icon_clicked(void *data, Evas_Object *obj, + void *event_info EINA_UNUSED) +{ + Ephoto *ephoto = data; + + if (!ephoto->folders_toggle) + { + edje_object_signal_emit(elm_layout_edje_get(ephoto->layout), + "ephoto,folders,show", "ephoto"); + ephoto->folders_toggle = EINA_TRUE; + elm_object_tooltip_text_set(obj, _("Hide Folders")); + } + else + { + edje_object_signal_emit(elm_layout_edje_get(ephoto->layout), + "ephoto,folders,hide", "ephoto"); + ephoto->folders_toggle = EINA_FALSE; + elm_object_tooltip_text_set(obj, _("Show Folders")); + } +} + +/*Ephoto Thumb Browser Main Callbacks*/ +static void +_slideshow_icon_clicked(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { Ephoto *ephoto = data; if (ephoto->state == EPHOTO_STATE_THUMB) - elm_object_focus_set(ephoto->tb, EINA_TRUE); + ephoto_thumb_browser_slideshow(ephoto->thumb_browser); else if (ephoto->state == EPHOTO_STATE_SINGLE) - ephoto_single_browser_focus_set(ephoto); - else - elm_object_focus_set(ephoto->sl, EINA_TRUE); + ephoto_single_browser_slideshow(ephoto->single_browser); +} + + +static void +_settings_icon_clicked(void *data, Evas_Object *obj EINA_UNUSED, + void *event_info EINA_UNUSED) +{ + Ephoto *ephoto = data; + + ephoto_config_main(ephoto); +} + +/*Toggle determines whether to toggle folder visibility, or just force visible*/ +void +ephoto_show_folders(Ephoto *ephoto, Eina_Bool toggle) +{ + Evas_Object *but = evas_object_data_get(ephoto->layout, "folder_button"); + if (!ephoto->folders_toggle || !toggle) + { + _mouse_move_cb(ephoto, NULL, NULL, NULL); + edje_object_signal_emit(elm_layout_edje_get(ephoto->layout), + "ephoto,folders,show", "ephoto"); + ephoto->folders_toggle = EINA_TRUE; + elm_object_tooltip_text_set(but, _("Hide Folders")); + } + else if (ephoto->folders_toggle && toggle) + { + edje_object_signal_emit(elm_layout_edje_get(ephoto->layout), + "ephoto,folders,hide", "ephoto"); + ephoto->folders_toggle = EINA_FALSE; + elm_object_tooltip_text_set(but, _("Show Folders")); + } } Evas_Object * ephoto_window_add(const char *path) { Ephoto *ephoto = calloc(1, sizeof(Ephoto)); + Evas_Object *ic, *but; char buf[PATH_MAX]; EINA_SAFETY_ON_NULL_RETURN_VAL(ephoto, NULL); @@ -234,6 +400,11 @@ ephoto_window_add(const char *path) EPHOTO_EVENT_EDITOR_CANCEL = ecore_event_type_new(); ephoto->selentries = NULL; + ephoto->blocking = EINA_FALSE; + ephoto->menu_blocking = EINA_FALSE; + ephoto->hover_blocking = EINA_FALSE; + ephoto->folders_toggle = EINA_FALSE; + ephoto->editor_blocking = EINA_FALSE; ephoto->win = elm_win_util_standard_add("ephoto", "Ephoto"); if (!ephoto->win) { @@ -241,8 +412,8 @@ ephoto_window_add(const char *path) return NULL; } - evas_object_event_callback_add(ephoto->win, EVAS_CALLBACK_FREE, _win_free, - ephoto); + evas_object_event_callback_add(ephoto->win, EVAS_CALLBACK_FREE, + _win_free, ephoto); evas_object_event_callback_add(ephoto->win, EVAS_CALLBACK_RESIZE, _resize_cb, ephoto); elm_win_autodel_set(ephoto->win, EINA_TRUE); @@ -258,6 +429,20 @@ ephoto_window_add(const char *path) (ephoto->config->thumb_gen_size != 512)) ephoto_thumb_size_set(ephoto, ephoto->config->thumb_size); + ephoto->layout = elm_layout_add(ephoto->win); + elm_layout_file_set(ephoto->layout, PACKAGE_DATA_DIR "/themes/ephoto.edj", + "ephoto,main,layout"); + evas_object_size_hint_weight_set(ephoto->layout, EVAS_HINT_EXPAND, + EVAS_HINT_EXPAND); + evas_object_size_hint_fill_set(ephoto->layout, EVAS_HINT_FILL, + EVAS_HINT_FILL); + evas_object_event_callback_add(ephoto->layout, EVAS_CALLBACK_MOUSE_MOVE, + _mouse_move_cb, ephoto); + evas_object_event_callback_add(ephoto->layout, EVAS_CALLBACK_MOUSE_UP, + _mouse_up_cb, ephoto); + elm_win_resize_object_add(ephoto->win, ephoto->layout); + evas_object_show(ephoto->layout); + ephoto->pager = elm_naviframe_add(ephoto->win); elm_object_focus_allow_set(ephoto->pager, EINA_FALSE); elm_naviframe_prev_btn_auto_pushed_set(ephoto->pager, EINA_FALSE); @@ -265,12 +450,10 @@ ephoto_window_add(const char *path) EVAS_HINT_EXPAND); evas_object_size_hint_fill_set(ephoto->pager, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_event_callback_add(ephoto->pager, EVAS_CALLBACK_FOCUS_IN, - _pager_focused, ephoto); - elm_win_resize_object_add(ephoto->win, ephoto->pager); + elm_layout_content_set(ephoto->layout, "ephoto.swallow.main", ephoto->pager); evas_object_show(ephoto->pager); - ephoto->thumb_browser = ephoto_thumb_browser_add(ephoto, ephoto->pager); + ephoto->thumb_browser = ephoto_thumb_browser_add(ephoto, ephoto->layout); if (!ephoto->thumb_browser) { evas_object_del(ephoto->win); @@ -286,8 +469,8 @@ ephoto_window_add(const char *path) _ephoto_thumb_browser_changed_directory, ephoto); evas_object_smart_callback_add(ephoto->thumb_browser, "slideshow", _ephoto_thumb_browser_slideshow, ephoto); - - ephoto->single_browser = ephoto_single_browser_add(ephoto, ephoto->pager); + + ephoto->single_browser = ephoto_single_browser_add(ephoto, ephoto->layout); if (!ephoto->single_browser) { evas_object_del(ephoto->win); @@ -301,8 +484,7 @@ ephoto_window_add(const char *path) _ephoto_single_browser_back, ephoto); evas_object_smart_callback_add(ephoto->single_browser, "slideshow", _ephoto_single_browser_slideshow, ephoto); - - ephoto->slideshow = ephoto_slideshow_add(ephoto, ephoto->pager); + ephoto->slideshow = ephoto_slideshow_add(ephoto, ephoto->layout); if (!ephoto->slideshow) { evas_object_del(ephoto->win); @@ -315,6 +497,104 @@ ephoto_window_add(const char *path) evas_object_smart_callback_add(ephoto->slideshow, "back", _ephoto_slideshow_back, ephoto); + ephoto->dir_browser = ephoto_directory_browser_add(ephoto, ephoto->layout); + elm_layout_content_set(ephoto->layout, "ephoto.swallow.folders", + ephoto->dir_browser); + evas_object_event_callback_add(ephoto->dir_browser, EVAS_CALLBACK_MOUSE_IN, + _mouse_in_cb, ephoto); + evas_object_event_callback_add(ephoto->dir_browser, EVAS_CALLBACK_MOUSE_OUT, + _mouse_out_cb, ephoto); + evas_object_show(ephoto->dir_browser); + + ephoto->statusbar = elm_box_add(ephoto->layout); + elm_object_tree_focus_allow_set(ephoto->statusbar, EINA_FALSE); + elm_box_horizontal_set(ephoto->statusbar, EINA_TRUE); + evas_object_size_hint_weight_set(ephoto->statusbar, + EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(ephoto->statusbar, EVAS_HINT_FILL, + EVAS_HINT_FILL); + elm_layout_content_set(ephoto->layout, "ephoto.swallow.controls", + ephoto->statusbar); + evas_object_event_callback_add(ephoto->statusbar, EVAS_CALLBACK_MOUSE_IN, + _mouse_in_cb, ephoto); + evas_object_event_callback_add(ephoto->statusbar, EVAS_CALLBACK_MOUSE_OUT, + _mouse_out_cb, ephoto); + evas_object_show(ephoto->statusbar); + + ic = elm_icon_add(ephoto->statusbar); + evas_object_size_hint_min_set(ic, 20*elm_config_scale_get(), + 20*elm_config_scale_get()); + elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); + elm_icon_standard_set(ic, "folder"); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_BOTH, 1, 1); + but = elm_button_add(ephoto->statusbar); + elm_object_part_content_set(but, "icon", ic); + evas_object_smart_callback_add(but, "clicked", _folder_icon_clicked, ephoto); + elm_object_tooltip_text_set(but, _("Show Folders")); + elm_object_tooltip_orient_set(but, ELM_TOOLTIP_ORIENT_RIGHT); + elm_box_pack_end(ephoto->statusbar, but); + evas_object_show(but); + evas_object_data_set(ephoto->layout, "folder_button", but); + + ephoto->controls_left = elm_box_add(ephoto->statusbar); + elm_box_horizontal_set(ephoto->controls_left, EINA_TRUE); + evas_object_size_hint_weight_set(ephoto->controls_left, + 0.0, 0.0); + evas_object_size_hint_align_set(ephoto->controls_left, EVAS_HINT_FILL, + EVAS_HINT_FILL); + elm_box_pack_end(ephoto->statusbar, ephoto->controls_left); + evas_object_show(ephoto->controls_left); + + ephoto->infolabel = elm_label_add(ephoto->statusbar); + elm_object_style_set(ephoto->infolabel, "info"); + elm_label_line_wrap_set(ephoto->infolabel, ELM_WRAP_MIXED); + elm_object_text_set(ephoto->infolabel, _("Information")); + evas_object_size_hint_weight_set(ephoto->infolabel, + EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ephoto->infolabel, EVAS_HINT_FILL, + EVAS_HINT_FILL); + evas_object_size_hint_aspect_set(ephoto->infolabel, EVAS_ASPECT_CONTROL_HORIZONTAL, + 1, 1); + elm_box_pack_end(ephoto->statusbar, ephoto->infolabel); + evas_object_show(ephoto->infolabel); + + ephoto->controls_right = elm_box_add(ephoto->statusbar); + elm_box_horizontal_set(ephoto->controls_right, EINA_TRUE); + evas_object_size_hint_weight_set(ephoto->controls_right, + 0.0, 0.0); + evas_object_size_hint_align_set(ephoto->controls_right, EVAS_HINT_FILL, + EVAS_HINT_FILL); + elm_box_pack_end(ephoto->statusbar, ephoto->controls_right); + evas_object_show(ephoto->controls_right); + + ic = elm_icon_add(ephoto->statusbar); + evas_object_size_hint_min_set(ic, 20*elm_config_scale_get(), + 20*elm_config_scale_get()); + elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); + elm_icon_standard_set(ic, "media-playback-start"); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_BOTH, 1, 1); + but = elm_button_add(ephoto->statusbar); + elm_object_part_content_set(but, "icon", ic); + evas_object_smart_callback_add(but, "clicked", _slideshow_icon_clicked, ephoto); + elm_object_tooltip_text_set(but, _("Slideshow")); + elm_object_tooltip_orient_set(but, ELM_TOOLTIP_ORIENT_TOP); + elm_box_pack_end(ephoto->statusbar, but); + evas_object_show(but); + + ic = elm_icon_add(ephoto->statusbar); + evas_object_size_hint_min_set(ic, 20*elm_config_scale_get(), + 20*elm_config_scale_get()); + elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); + elm_icon_standard_set(ic, "preferences-system"); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_BOTH, 1, 1); + but = elm_button_add(ephoto->statusbar); + elm_object_part_content_set(but, "icon", ic); + evas_object_smart_callback_add(but, "clicked", _settings_icon_clicked, ephoto); + elm_object_tooltip_text_set(but, _("Settings")); + elm_object_tooltip_orient_set(but, ELM_TOOLTIP_ORIENT_LEFT); + elm_box_pack_end(ephoto->statusbar, but); + evas_object_show(but); + if ((!path) || (!ecore_file_exists(path))) { if (ephoto->config->open) @@ -337,14 +617,16 @@ ephoto_window_add(const char *path) if (ecore_file_is_dir(path)) { - ephoto_directory_set(ephoto, path, NULL, EINA_FALSE, EINA_FALSE); + eina_stringshare_replace(&ephoto->config->directory, + ecore_file_realpath(path)); _ephoto_thumb_browser_show(ephoto, NULL); } else { char *dir = ecore_file_dir_get(path); - ephoto_directory_set(ephoto, dir, NULL, EINA_FALSE, EINA_FALSE); + eina_stringshare_replace(&ephoto->config->directory, + ecore_file_realpath(dir)); free(dir); ephoto_single_browser_path_pending_set(ephoto->single_browser, path); @@ -352,11 +634,14 @@ ephoto_window_add(const char *path) ephoto->single_browser); ephoto->state = EPHOTO_STATE_SINGLE; } - ephoto_thumb_browser_top_dir_set(ephoto, ephoto->config->directory); + ephoto_directory_browser_top_dir_set(ephoto, ephoto->config->directory); + ephoto_directory_browser_initialize_structure(ephoto); evas_object_resize(ephoto->win, ephoto->config->window_width, ephoto->config->window_height); evas_object_show(ephoto->win); + ephoto->overlay_timer = ecore_timer_add(5.0, _timer_cb, ephoto); + return ephoto->win; } @@ -490,7 +775,6 @@ _ephoto_change_dir(void *data) { Ephoto_Dir_Data *ed = data; - ed->ephoto->thumb_entry = NULL; ed->ephoto->job.change_dir = NULL; _ephoto_populate_entries(ed); } diff --git a/src/bin/ephoto_red_eye.c b/src/bin/ephoto_red_eye.c index fbf5df3..c97a950 100644 --- a/src/bin/ephoto_red_eye.c +++ b/src/bin/ephoto_red_eye.c @@ -195,7 +195,7 @@ _editor_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, } void -ephoto_red_eye_add(Evas_Object *main, Evas_Object *parent, Evas_Object *image) +ephoto_red_eye_add(Ephoto *ephoto, Evas_Object *main, Evas_Object *parent, Evas_Object *image) { Evas_Object *slider, *label; Ephoto_Reye *er; @@ -222,7 +222,7 @@ ephoto_red_eye_add(Evas_Object *main, Evas_Object *parent, Evas_Object *image) evas_object_event_callback_add(er->image, EVAS_CALLBACK_MOUSE_UP, _reye_clicked, er); - er->editor = ephoto_editor_add(parent, _("Red Eye Removal"), + er->editor = ephoto_editor_add(ephoto, _("Red Eye Removal"), "ereye", er); evas_object_event_callback_add(er->editor, EVAS_CALLBACK_DEL, _editor_del, er); diff --git a/src/bin/ephoto_single_browser.c b/src/bin/ephoto_single_browser.c index dc101e2..8c29199 100644 --- a/src/bin/ephoto_single_browser.c +++ b/src/bin/ephoto_single_browser.c @@ -14,9 +14,7 @@ struct _Ephoto_Single_Browser Evas_Object *mhbox; Evas_Object *table; Evas_Object *viewer; - Evas_Object *infolabel; Evas_Object *nolabel; - Evas_Object *botbox; Evas_Object *event; Elm_Object_Item *save; const char *pending_path; @@ -54,8 +52,6 @@ static void _ephoto_main_key_down(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED,void *event_info EINA_UNUSED); static void _ephoto_main_focused(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED,void *event_info EINA_UNUSED); -static void _ephoto_show_slideshow(void *data, Evas_Object *obj EINA_UNUSED, - void *event_info EINA_UNUSED); static void _ephoto_show_settings(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED); static void _ephoto_main_back(void *data, Evas_Object *obj EINA_UNUSED, @@ -108,29 +104,7 @@ _ephoto_update_bottom_bar(Ephoto_Single_Browser *sb) _("Resolution"), w, h, _("File Size"), tmp); free(tmp); - if (!evas_object_visible_get(sb->botbox)) - { - - evas_object_del(sb->botbox); - - sb->botbox = elm_notify_add(sb->ephoto->win); - elm_notify_align_set(sb->botbox, 0.5, 1.0); - evas_object_size_hint_weight_set(sb->botbox, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_size_hint_fill_set(sb->botbox, EVAS_HINT_FILL, EVAS_HINT_FILL); - - sb->infolabel = elm_label_add(sb->botbox); - elm_label_line_wrap_set(sb->infolabel, ELM_WRAP_NONE); - evas_object_size_hint_weight_set(sb->infolabel, EVAS_HINT_EXPAND, - EVAS_HINT_FILL); - evas_object_size_hint_align_set(sb->infolabel, EVAS_HINT_FILL, - EVAS_HINT_FILL); - elm_object_content_set(sb->botbox, sb->infolabel); - evas_object_show(sb->infolabel); - } - - elm_object_text_set(sb->infolabel, image_info); - elm_notify_timeout_set(sb->botbox, 5); - evas_object_show(sb->botbox); + elm_object_text_set(sb->ephoto->infolabel, image_info); } static char * @@ -1053,13 +1027,11 @@ _crop_image(void *data, Evas_Object *obj EINA_UNUSED, if (sb->viewer) { sb->editing = EINA_TRUE; - if (sb->botbox) - evas_object_hide(sb->botbox); sb->cropping = EINA_TRUE; Ephoto_Viewer *v = evas_object_data_get(sb->viewer, "viewer"); elm_table_unpack(v->table, v->image); - ephoto_cropper_add(sb->main, sb->mhbox, v->table, v->image); + ephoto_cropper_add(sb->ephoto, sb->main, sb->mhbox, v->table, v->image); } } @@ -1071,11 +1043,9 @@ _go_bcg(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) if (sb->viewer) { sb->editing = EINA_TRUE; - if (sb->botbox) - evas_object_hide(sb->botbox); Ephoto_Viewer *v = evas_object_data_get(sb->viewer, "viewer"); - ephoto_bcg_add(sb->main, sb->mhbox, v->image); + ephoto_bcg_add(sb->ephoto, sb->main, sb->mhbox, v->image); } } @@ -1087,11 +1057,9 @@ _go_hsv(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) if (sb->viewer) { sb->editing = EINA_TRUE; - if (sb->botbox) - evas_object_hide(sb->botbox); Ephoto_Viewer *v = evas_object_data_get(sb->viewer, "viewer"); - ephoto_hsv_add(sb->main, sb->mhbox, v->image); + ephoto_hsv_add(sb->ephoto, sb->main, sb->mhbox, v->image); } } @@ -1104,11 +1072,9 @@ _go_color(void *data, Evas_Object *obj EINA_UNUSED, if (sb->viewer) { sb->editing = EINA_TRUE; - if (sb->botbox) - evas_object_hide(sb->botbox); Ephoto_Viewer *v = evas_object_data_get(sb->viewer, "viewer"); - ephoto_color_add(sb->main, sb->mhbox, v->image); + ephoto_color_add(sb->ephoto, sb->main, sb->mhbox, v->image); } } @@ -1121,11 +1087,9 @@ _go_reye(void *data, Evas_Object *obj EINA_UNUSED, if (sb->viewer) { sb->editing = EINA_TRUE; - if (sb->botbox) - evas_object_hide(sb->botbox); Ephoto_Viewer *v = evas_object_data_get(sb->viewer, "viewer"); - ephoto_red_eye_add(sb->main, sb->mhbox, v->image); + ephoto_red_eye_add(sb->ephoto, sb->main, sb->mhbox, v->image); } } @@ -1138,8 +1102,6 @@ _go_auto_eq(void *data, Evas_Object *obj EINA_UNUSED, if (sb->viewer) { sb->editing = EINA_TRUE; - if (sb->botbox) - evas_object_hide(sb->botbox); Ephoto_Viewer *v = evas_object_data_get(sb->viewer, "viewer"); ephoto_filter_histogram_eq(sb->main, v->image); @@ -1155,8 +1117,6 @@ _go_blur(void *data, Evas_Object *obj EINA_UNUSED, if (sb->viewer) { sb->editing = EINA_TRUE; - if (sb->botbox) - evas_object_hide(sb->botbox); Ephoto_Viewer *v = evas_object_data_get(sb->viewer, "viewer"); ephoto_filter_blur(sb->main, v->image); @@ -1172,8 +1132,6 @@ _go_sharpen(void *data, Evas_Object *obj EINA_UNUSED, if (sb->viewer) { sb->editing = EINA_TRUE; - if (sb->botbox) - evas_object_hide(sb->botbox); Ephoto_Viewer *v = evas_object_data_get(sb->viewer, "viewer"); ephoto_filter_sharpen(sb->main, v->image); @@ -1189,8 +1147,6 @@ _go_black_and_white(void *data, Evas_Object *obj EINA_UNUSED, if (sb->viewer) { sb->editing = EINA_TRUE; - if (sb->botbox) - evas_object_hide(sb->botbox); Ephoto_Viewer *v = evas_object_data_get(sb->viewer, "viewer"); ephoto_filter_black_and_white(sb->main, v->image); @@ -1206,14 +1162,37 @@ _go_old_photo(void *data, Evas_Object *obj EINA_UNUSED, if (sb->viewer) { sb->editing = EINA_TRUE; - if (sb->botbox) - evas_object_hide(sb->botbox); Ephoto_Viewer *v = evas_object_data_get(sb->viewer, "viewer"); ephoto_filter_old_photo(sb->main, v->image); } } +static void +_image_changed(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, + void *event_info EINA_UNUSED) +{ + Ephoto_Single_Browser *sb = data; + Ephoto_Viewer *v = evas_object_data_get(sb->viewer, "viewer"); + Evas_Coord w, h, sw, sh; + Edje_Message_Int_Set *msg; + + if (sb->ephoto->state != EPHOTO_STATE_SINGLE) + return; + + elm_scroller_region_get(v->scroller, 0, 0, &w, &h); + evas_object_geometry_get(v->scroller, 0, 0, &sw, &sh); + + sw -= w; + sh -= h; + msg = alloca(sizeof(Edje_Message_Int_Set) + (2 * sizeof(int))); + msg->count = 2; + msg->val[0] = sw; + msg->val[1] = sh; + edje_object_message_send(elm_layout_edje_get(sb->ephoto->layout), + EDJE_MESSAGE_INT_SET, 1, msg); +} + /*Image Viewer Function*/ static Evas_Object * _viewer_add(Evas_Object *parent, const char *path, Ephoto_Single_Browser *sb) @@ -1222,7 +1201,6 @@ _viewer_add(Evas_Object *parent, const char *path, Ephoto_Single_Browser *sb) int err; v->zoom_first = EINA_TRUE; - Evas_Coord w, h; const char *group = _ephoto_get_edje_group(path); @@ -1246,6 +1224,7 @@ _viewer_add(Evas_Object *parent, const char *path, Ephoto_Single_Browser *sb) evas_object_show(v->table); v->image = elm_image_add(v->table); + elm_object_style_set(v->image, "ephoto"); elm_image_preload_disabled_set(v->image, EINA_TRUE); elm_image_file_set(v->image, path, group); err = evas_object_image_load_error_get(elm_image_object_get(v->image)); @@ -1260,6 +1239,7 @@ _viewer_add(Evas_Object *parent, const char *path, Ephoto_Single_Browser *sb) _image_mouse_down_cb, sb); evas_object_event_callback_add(v->image, EVAS_CALLBACK_MOUSE_UP, _image_mouse_up_cb, sb); + evas_object_event_callback_add(v->image, EVAS_CALLBACK_RESIZE, _image_changed, sb); elm_table_pack(v->table, v->image, 0, 0, 1, 1); evas_object_show(v->image); if (elm_image_animated_available_get(v->image)) @@ -1375,9 +1355,6 @@ _add_edit_menu_items(Ephoto_Single_Browser *sb, Evas_Object *menu) { Evas_Object *menu_it, *menu_itt; - elm_menu_item_add(menu, NULL, "go-previous", _("Back"), _ephoto_main_back, sb); - elm_menu_item_separator_add(menu, NULL); - menu_it = elm_menu_item_add(menu, NULL, "system-file-manager", _("File"), NULL, NULL); elm_menu_item_add(menu, menu_it, "edit-undo", _("Reset"), _reset_image, sb); @@ -1453,11 +1430,6 @@ _add_edit_menu_items(Ephoto_Single_Browser *sb, Evas_Object *menu) _zoom_fit_cb, sb); elm_menu_item_add(menu, menu_itt, "zoom-original", _("Zoom 1:1"), _zoom_1_cb, sb); - elm_menu_item_separator_add(menu, NULL); - elm_menu_item_add(menu, NULL, "media-playback-start", _("Slideshow"), - _ephoto_show_slideshow, sb); - elm_menu_item_add(menu, NULL, "preferences-system", _("Settings"), - _ephoto_show_settings, sb); } static void @@ -1500,6 +1472,11 @@ _ephoto_main_key_down(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNU else _zoom_set(sb, 1.0); } + else if (!strcmp(k, "f") && !sb->editing) + { + if (shift) + ephoto_show_folders(sb->ephoto, EINA_TRUE); + } else if (!strcmp(k, "l") && !sb->editing) { if (!shift) @@ -1539,7 +1516,6 @@ _ephoto_main_key_down(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNU evas_object_del(sb->event); sb->event = NULL; } - evas_object_hide(sb->botbox); evas_object_smart_callback_call(sb->main, "back", sb->entry); } else if (!strcmp(k, "Left") && !sb->editing) @@ -1567,8 +1543,7 @@ _ephoto_main_key_down(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNU evas_object_del(sb->event); sb->event = NULL; } - evas_object_hide(sb->botbox); - evas_object_smart_callback_call(sb->main, "slideshow", sb->entry); + evas_object_smart_callback_call(sb->main, "slideshow", sb->entry); } } else if (!strcmp(k, "F11")) @@ -1579,11 +1554,10 @@ _ephoto_main_key_down(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNU } } -static void -_ephoto_show_slideshow(void *data, Evas_Object *obj EINA_UNUSED, - void *event_info EINA_UNUSED) +void +ephoto_single_browser_slideshow(Evas_Object *obj) { - Ephoto_Single_Browser *sb = data; + Ephoto_Single_Browser *sb = evas_object_data_get(obj, "single_browser"); if (sb->entry) { @@ -1592,8 +1566,6 @@ _ephoto_show_slideshow(void *data, Evas_Object *obj EINA_UNUSED, evas_object_del(sb->event); sb->event = NULL; } - if (sb->botbox) - evas_object_hide(sb->botbox); evas_object_smart_callback_call(sb->main, "slideshow", sb->entry); } } @@ -1617,8 +1589,6 @@ _ephoto_main_back(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EIN evas_object_del(sb->event); sb->event = NULL; } - if (sb->botbox) - evas_object_hide(sb->botbox); evas_object_smart_callback_call(sb->main, "back", sb->entry); } @@ -1666,6 +1636,23 @@ _ephoto_main_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, } /*Ephoto Single Browser Public Functions*/ +void +ephoto_single_browser_adjust_offsets(Ephoto *ephoto) +{ + Ephoto_Single_Browser *sb = evas_object_data_get(ephoto->single_browser, + "single_browser"); + Edje_Message_Int_Set *msg; + + msg = alloca(sizeof(Edje_Message_Int_Set) + (2 * sizeof(int))); + msg->count = 2; + msg->val[0] = 0; + msg->val[1] = 0; + edje_object_message_send(elm_layout_edje_get(sb->ephoto->layout), + EDJE_MESSAGE_INT_SET, 1, msg); + + _image_changed(sb, NULL, NULL, NULL); +} + void ephoto_single_browser_entries_set(Evas_Object *obj, Eina_List *entries) { @@ -1825,6 +1812,109 @@ ephoto_single_browser_cancel_editing(Evas_Object *main) } } +void +ephoto_single_browser_show_controls(Ephoto *ephoto) +{ + Ephoto_Single_Browser *sb = evas_object_data_get(ephoto->single_browser, + "single_browser"); + Evas_Object *but, *ic; + int ret; + + ic = elm_icon_add(ephoto->controls_left); + evas_object_size_hint_min_set(ic, 20*elm_config_scale_get(), + 20*elm_config_scale_get()); + ret = elm_image_file_set(ic, PACKAGE_DATA_DIR "/images/grid.png", NULL); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_BOTH, 1, 1); + but = elm_button_add(ephoto->controls_left); + if (!ret) + elm_object_text_set(but, _("View Thumbnails")); + else + { + elm_object_part_content_set(but, "icon", ic); + elm_object_tooltip_text_set(but, _("View Thumbnails")); + elm_object_tooltip_orient_set(but, ELM_TOOLTIP_ORIENT_TOP); + } + evas_object_smart_callback_add(but, "clicked", _ephoto_main_back, sb); + elm_box_pack_end(ephoto->controls_left, but); + evas_object_show(but); + + ic = elm_icon_add(ephoto->controls_left); + evas_object_size_hint_min_set(ic, 20*elm_config_scale_get(), + 20*elm_config_scale_get()); + elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); + ret = elm_icon_standard_set(ic, "zoom-in"); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_BOTH, 1, 1); + but = elm_button_add(ephoto->controls_left); + if (!ret) + elm_object_text_set(but, _("Zoom In")); + else + { + elm_object_part_content_set(but, "icon", ic); + elm_object_tooltip_text_set(but, _("Zoom In")); + elm_object_tooltip_orient_set(but, ELM_TOOLTIP_ORIENT_TOP); + } + evas_object_smart_callback_add(but, "clicked", _zoom_in_cb, sb); + elm_box_pack_end(ephoto->controls_left, but); + evas_object_show(but); + + ic = elm_icon_add(ephoto->controls_left); + evas_object_size_hint_min_set(ic, 20*elm_config_scale_get(), + 20*elm_config_scale_get()); + elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); + elm_icon_standard_set(ic, "zoom-out"); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_BOTH, 1, 1); + but = elm_button_add(ephoto->controls_left); + if (!ret) + elm_object_text_set(but, _("Zoom Out")); + else + { + elm_object_part_content_set(but, "icon", ic); + elm_object_tooltip_text_set(but, _("Zoom Out")); + elm_object_tooltip_orient_set(but, ELM_TOOLTIP_ORIENT_TOP); + } + evas_object_smart_callback_add(but, "clicked", _zoom_out_cb, sb); + elm_box_pack_end(ephoto->controls_left, but); + evas_object_show(but); + + ic = elm_icon_add(ephoto->controls_right); + evas_object_size_hint_min_set(ic, 20*elm_config_scale_get(), + 20*elm_config_scale_get()); + elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); + ret = elm_icon_standard_set(ic, "go-previous"); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_BOTH, 1, 1); + but = elm_button_add(ephoto->controls_right); + if (!ret) + elm_object_text_set(but, _("Previous")); + else + { + elm_object_part_content_set(but, "icon", ic); + elm_object_tooltip_text_set(but, _("Previous")); + elm_object_tooltip_orient_set(but, ELM_TOOLTIP_ORIENT_TOP); + } + evas_object_smart_callback_add(but, "clicked", _go_prev, sb); + elm_box_pack_end(ephoto->controls_right, but); + evas_object_show(but); + + ic = elm_icon_add(ephoto->controls_right); + evas_object_size_hint_min_set(ic, 20*elm_config_scale_get(), + 20*elm_config_scale_get()); + elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); + elm_icon_standard_set(ic, "go-next"); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_BOTH, 1, 1); + but = elm_button_add(ephoto->controls_right); + if (!ret) + elm_object_text_set(but, _("Next")); + else + { + elm_object_part_content_set(but, "icon", ic); + elm_object_tooltip_text_set(but, _("Next")); + elm_object_tooltip_orient_set(but, ELM_TOOLTIP_ORIENT_TOP); + } + evas_object_smart_callback_add(but, "clicked", _go_next, sb); + elm_box_pack_end(ephoto->controls_right, but); + evas_object_show(but); +} + Evas_Object * ephoto_single_browser_add(Ephoto *ephoto, Evas_Object *parent) { @@ -1861,20 +1951,6 @@ ephoto_single_browser_add(Ephoto *ephoto, Evas_Object *parent) elm_box_pack_end(sb->main, sb->mhbox); evas_object_show(sb->mhbox); - sb->botbox = elm_notify_add(sb->ephoto->win); - elm_notify_align_set(sb->botbox, 0.5, 1.0); - elm_notify_timeout_set(sb->botbox, 5); - evas_object_size_hint_weight_set(sb->botbox, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_size_hint_fill_set(sb->botbox, EVAS_HINT_FILL, EVAS_HINT_FILL); - - sb->infolabel = elm_label_add(sb->botbox); - elm_label_line_wrap_set(sb->infolabel, ELM_WRAP_NONE); - evas_object_size_hint_weight_set(sb->infolabel, EVAS_HINT_EXPAND, - EVAS_HINT_FILL); - evas_object_size_hint_align_set(sb->infolabel, EVAS_HINT_FILL, - EVAS_HINT_FILL); - elm_object_content_set(sb->botbox, sb->infolabel); - evas_object_show(sb->infolabel); sb->handlers = eina_list_append(sb->handlers, diff --git a/src/bin/ephoto_slideshow.c b/src/bin/ephoto_slideshow.c index 9d195bc..facb379 100644 --- a/src/bin/ephoto_slideshow.c +++ b/src/bin/ephoto_slideshow.c @@ -6,18 +6,20 @@ struct _Ephoto_Slideshow { Ephoto *ephoto; Evas_Object *slideshow; - Evas_Object *notify; - Evas_Object *bar; Evas_Object *event; + Evas_Object *notify; Eina_List *entries; - Elm_Object_Item *pause; - Elm_Object_Item *pause_after; - Elm_Object_Item *fullscreen; - Elm_Object_Item *fullscreen_after; + Evas_Object *pause; + Evas_Object *pause_after; + Evas_Object *fullscreen; + Evas_Object *fullscreen_after; Ephoto_Entry *entry; Eina_Bool playing; }; +static Evas_Object *_add_icon(Evas_Object *parent, const char *icon, + const char *label, Evas_Object *before); + static void _mouse_down(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) @@ -26,6 +28,11 @@ _mouse_down(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, Elm_Object_Item *slideshow_item; Ephoto_Entry *entry; + elm_layout_content_unset(ss->ephoto->layout, "ephoto.swallow.controls"); + evas_object_del(ss->notify); + elm_layout_content_set(ss->ephoto->layout, "ephoto.swallow.controls", + ss->ephoto->statusbar); + slideshow_item = elm_slideshow_item_current_get(ss->slideshow); if (slideshow_item) entry = elm_object_item_data_get(slideshow_item); @@ -38,7 +45,6 @@ _mouse_down(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, } evas_object_smart_callback_call(ss->slideshow, "back", entry); elm_slideshow_clear(ss->slideshow); - evas_object_hide(ss->notify); ss->playing = 0; evas_object_freeze_events_set(ss->slideshow, EINA_TRUE); } @@ -62,13 +68,6 @@ _slideshow_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, free(ss); } -static void -_notify_show(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, - void *event_info EINA_UNUSED) -{ - evas_object_show(data); -} - static void _back(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { @@ -76,6 +75,11 @@ _back(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) Elm_Object_Item *slideshow_item; Ephoto_Entry *entry; + elm_layout_content_unset(ss->ephoto->layout, "ephoto.swallow.controls"); + evas_object_del(ss->notify); + elm_layout_content_set(ss->ephoto->layout, "ephoto.swallow.controls", + ss->ephoto->statusbar); + slideshow_item = elm_slideshow_item_current_get(ss->slideshow); if (slideshow_item) entry = elm_object_item_data_get(slideshow_item); @@ -88,7 +92,6 @@ _back(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) } evas_object_smart_callback_call(ss->slideshow, "back", entry); elm_slideshow_clear(ss->slideshow); - evas_object_hide(ss->notify); ss->playing = 0; evas_object_freeze_events_set(ss->slideshow, EINA_TRUE); } @@ -110,23 +113,25 @@ _pause(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { Ephoto_Slideshow *ss = data; - elm_object_item_del(ss->pause); + evas_object_del(ss->pause); if (ss->playing) { elm_slideshow_timeout_set(ss->slideshow, 0.0); ss->pause = - elm_toolbar_item_insert_before(ss->bar, ss->pause_after, - "media-playback-start", _("Play"), _pause, ss); + _add_icon(ss->notify, "media-playback-start", _("Play"), + ss->pause_after); + evas_object_smart_callback_add(ss->pause, "clicked", _pause, ss); ss->playing = 0; } else { elm_slideshow_timeout_set(ss->slideshow, ss->ephoto->config->slideshow_timeout); - ss->pause = - elm_toolbar_item_insert_before(ss->bar, ss->pause_after, - "media-playback-pause", _("Pause"), _pause, ss); + ss->pause = + _add_icon(ss->notify, "media-playback-pause", _("Pause"), + ss->pause_after); + evas_object_smart_callback_add(ss->pause, "clicked", _pause, ss); ss->playing = 1; } } @@ -152,20 +157,24 @@ _fullscreen(void *data, Evas_Object *obj EINA_UNUSED, { Ephoto_Slideshow *ss = data; - elm_object_item_del(ss->fullscreen); + evas_object_del(ss->fullscreen); if (elm_win_fullscreen_get(ss->ephoto->win)) { ss->fullscreen = - elm_toolbar_item_insert_before(ss->bar, ss->fullscreen_after, - "view-fullscreen", _("Fullscreen"), _fullscreen, ss); + _add_icon(ss->notify, "view-fullscreen", _("Fullscreen"), + ss->fullscreen_after); + evas_object_smart_callback_add(ss->fullscreen, "clicked", + _fullscreen, ss); elm_win_fullscreen_set(ss->ephoto->win, EINA_FALSE); } else { ss->fullscreen = - elm_toolbar_item_insert_before(ss->bar, ss->fullscreen_after, - "view-restore", _("Normal"), _fullscreen, ss); + _add_icon(ss->notify, "view-restore", _("Normal"), + ss->fullscreen_after); + evas_object_smart_callback_add(ss->fullscreen, "clicked", + _fullscreen, ss); elm_win_fullscreen_set(ss->ephoto->win, EINA_TRUE); } } @@ -179,21 +188,6 @@ _settings(void *data, Evas_Object *obj EINA_UNUSED, ephoto_config_main(ss->ephoto); } -static void -_mouse_in(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, - void *event_info EINA_UNUSED) -{ - elm_notify_timeout_set(data, 0.0); - evas_object_show(data); -} - -static void -_mouse_out(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, - void *event_info EINA_UNUSED) -{ - elm_notify_timeout_set(data, 3.0); -} - static void _key_down(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) @@ -251,6 +245,75 @@ _main_focused(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, } } +static Evas_Object * +_add_icon(Evas_Object *parent, const char *icon, const char *label, Evas_Object *before) +{ + Evas_Object *ic, *but; + int ret; + + ic = elm_icon_add(parent); + evas_object_size_hint_min_set(ic, 20*elm_config_scale_get(), + 20*elm_config_scale_get()); + elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); + ret = elm_icon_standard_set(ic, icon); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_BOTH, 1, 1); + but = elm_button_add(parent); + if (!ret) + elm_object_text_set(but, label); + else + { + elm_object_part_content_set(but, "icon", ic); + elm_object_tooltip_text_set(but, label); + elm_object_tooltip_orient_set(but, ELM_TOOLTIP_ORIENT_TOP); + } + if (before) + elm_box_pack_before(parent, but, before); + else + elm_box_pack_end(parent, but); + evas_object_show(but); + + return but; +} + +void +ephoto_slideshow_show_controls(Ephoto *ephoto) +{ + Ephoto_Slideshow *ss = evas_object_data_get(ephoto->slideshow, "slideshow"); + Evas_Object *but; + + elm_layout_content_unset(ephoto->layout, "ephoto.swallow.controls"); + evas_object_hide(ephoto->statusbar); + + ss->notify = elm_box_add(ephoto->win); + elm_box_horizontal_set(ss->notify, EINA_TRUE); + evas_object_size_hint_weight_set(ss->notify, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_fill_set(ss->notify, EVAS_HINT_FILL, EVAS_HINT_FILL); + + but = _add_icon(ss->notify, "window-close", _("Back"), NULL); + evas_object_smart_callback_add(but, "clicked", _back, ss); + but = _add_icon(ss->notify, "go-first", _("First"), NULL); + evas_object_smart_callback_add(but, "clicked", _first, ss->slideshow); + but = _add_icon(ss->notify, "go-previous", _("Previous"), NULL); + evas_object_smart_callback_add(but, "clicked", _previous, ss->slideshow); + ss->pause = + _add_icon(ss->notify, "media-playback-start", _("Play"), NULL); + evas_object_smart_callback_add(ss->pause, "clicked", _pause, ss); + ss->pause_after = + _add_icon(ss->notify, "go-next", _("Next"), NULL); + evas_object_smart_callback_add(ss->pause_after, "clicked", _next, + ss->slideshow); + but = _add_icon(ss->notify, "go-last", _("Last"), NULL); + evas_object_smart_callback_add(but, "clicked", _last, ss->slideshow); + ss->fullscreen = + _add_icon(ss->notify, "view-fullscreen", _("Fullscreen"), NULL); + evas_object_smart_callback_add(ss->fullscreen, "clicked", _fullscreen, ss); + ss->fullscreen_after = + _add_icon(ss->notify, "preferences-system", _("Settings"), NULL); + evas_object_smart_callback_add(ss->fullscreen_after, "clicked", _settings, ss); + + elm_layout_content_set(ephoto->layout, "ephoto.swallow.controls", ss->notify); +} + Evas_Object * ephoto_slideshow_add(Ephoto *ephoto, Evas_Object *parent) { @@ -280,52 +343,6 @@ ephoto_slideshow_add(Ephoto *ephoto, Evas_Object *parent) EVAS_HINT_EXPAND); evas_object_size_hint_align_set(slideshow, EVAS_HINT_FILL, EVAS_HINT_FILL); - ss->notify = elm_notify_add(ephoto->win); - elm_notify_align_set(ss->notify, 0.5, 1.0); - evas_object_size_hint_weight_set(ss->notify, EVAS_HINT_EXPAND, - EVAS_HINT_EXPAND); - elm_notify_timeout_set(ss->notify, 3.0); - evas_object_event_callback_add(slideshow, EVAS_CALLBACK_MOUSE_MOVE, - _notify_show, ss->notify); - elm_object_tree_focus_allow_set(ss->notify, EINA_FALSE); - - ss->bar = elm_toolbar_add(ss->notify); - elm_toolbar_horizontal_set(ss->bar, EINA_TRUE); - elm_toolbar_homogeneous_set(ss->bar, EINA_TRUE); - elm_toolbar_shrink_mode_set(ss->bar, ELM_TOOLBAR_SHRINK_NONE); - elm_toolbar_select_mode_set(ss->bar, ELM_OBJECT_SELECT_MODE_NONE); - elm_toolbar_icon_order_lookup_set(ss->bar, ELM_ICON_LOOKUP_FDO_THEME); - evas_object_size_hint_weight_set(ss->bar, EVAS_HINT_EXPAND, 0.0); - evas_object_size_hint_align_set(ss->bar, EVAS_HINT_FILL, EVAS_HINT_FILL); - elm_object_content_set(ss->notify, ss->bar); - elm_object_tree_focus_allow_set(ss->bar, EINA_FALSE); - evas_object_event_callback_add(ss->bar, EVAS_CALLBACK_MOUSE_IN, _mouse_in, - ss->notify); - evas_object_event_callback_add(ss->bar, EVAS_CALLBACK_MOUSE_OUT, _mouse_out, - ss->notify); - - elm_toolbar_item_append(ss->bar, "window-close", _("Back"), _back, ss); - elm_toolbar_item_append(ss->bar, "go-first", _("First"), _first, - ss->slideshow); - elm_toolbar_item_append(ss->bar, "go-previous", _("Previous"), _previous, - ss->slideshow); - ss->pause = - elm_toolbar_item_append(ss->bar, "media-playback-start", _("Play"), - _pause, ss); - ss->pause_after = - elm_toolbar_item_append(ss->bar, "go-next", _("Next"), _next, - ss->slideshow); - elm_toolbar_item_append(ss->bar, "go-last", _("Last"), - _last, ss->slideshow); - ss->fullscreen = - elm_toolbar_item_append(ss->bar, "view-fullscreen", _("Fullscreen"), - _fullscreen, ss); - ss->fullscreen_after = - elm_toolbar_item_append(ss->bar, "preferences-system", _("Settings"), - _settings, ss); - - evas_object_show(ss->bar); - evas_object_freeze_events_set(ss->slideshow, EINA_TRUE); return ss->slideshow; @@ -418,26 +435,31 @@ ephoto_slideshow_entry_set(Evas_Object *obj, Ephoto_Entry *entry) if (ss->pause) { - elm_object_item_del(ss->pause); + evas_object_del(ss->pause); ss->pause = - elm_toolbar_item_insert_before(ss->bar, ss->pause_after, - "media-playback-pause", _("Pause"), _pause, ss); + _add_icon(ss->notify, "media-playback-pause", _("Pause"), + ss->pause_after); + evas_object_smart_callback_add(ss->pause, "clicked", _pause, ss); ss->playing = 1; } if (ss->fullscreen) { - elm_object_item_del(ss->fullscreen); + evas_object_del(ss->fullscreen); if (elm_win_fullscreen_get(ss->ephoto->win)) { - ss->fullscreen = - elm_toolbar_item_insert_before(ss->bar, ss->fullscreen_after, - "view-restore", _("Normal"), _fullscreen, ss); + ss->fullscreen = + _add_icon(ss->notify, "view-restore", _("Normal"), + ss->fullscreen_after); + evas_object_smart_callback_add(ss->fullscreen, "clicked", + _fullscreen, ss); } else { - ss->fullscreen = - elm_toolbar_item_insert_before(ss->bar, ss->fullscreen_after, - "view-fullscreen", _("Fullscreen"), _fullscreen, ss); + ss->fullscreen = + _add_icon(ss->notify, "view-fullscreen", _("Fullscreen"), + ss->fullscreen_after); + evas_object_smart_callback_add(ss->fullscreen, "clicked", + _fullscreen, ss); } } diff --git a/src/bin/ephoto_thumb_browser.c b/src/bin/ephoto_thumb_browser.c index 1370ea1..bd62e1d 100644 --- a/src/bin/ephoto_thumb_browser.c +++ b/src/bin/ephoto_thumb_browser.c @@ -1,14 +1,15 @@ #include "ephoto.h" +#include #define ZOOM_MAX 512 #define ZOOM_MIN 128 #define ZOOM_STEP 32 -#define TODO_ITEM_MIN_BATCH 5 - #define FILESEP "file://" #define FILESEP_LEN sizeof(FILESEP) - 1 +#define TODO_ITEM_MIN_BATCH 5 + #define DRAG_TIMEOUT 0.3 #define ANIM_TIME 0.2 @@ -21,34 +22,24 @@ struct _Ephoto_Thumb_Browser { Ephoto *ephoto; Evas_Object *main; - Evas_Object *panes; Evas_Object *table; Evas_Object *gridbox; Evas_Object *grid; Evas_Object *original_grid; Evas_Object *nolabel; - Evas_Object *infolabel; - Evas_Object *fsel; - Evas_Object *leftbox; - Evas_Object *direntry; Evas_Object *search; - Evas_Object *hover; - Evas_Object *toggle; - Elm_Object_Item *dir_current; + Evas_Object *menu; Elm_Object_Item *last_sel; Ephoto_Sort sort; Eio_File *ls; - Ecore_File_Monitor *monitor; + Eina_Bool dirs_only; + Eina_Bool thumbs_only; Eina_List *cut_items; Eina_List *copy_items; Eina_List *handlers; Eina_List *todo_items; Eina_List *entries; Eina_List *searchentries; - Ecore_Job *change_dir_job; - Ecore_Timer *click_timer; - Eina_Bool thumbs_only; - Eina_Bool dirs_only; double totsize; double totsize_old; int totimages; @@ -67,30 +58,16 @@ struct _Ephoto_Thumb_Browser /*Item Classes*/ static Elm_Gengrid_Item_Class _ephoto_thumb_file_class; -static Elm_Genlist_Item_Class _ephoto_dir_class; /*Main Callbacks*/ -static void _ephoto_show_slideshow(void *data, Evas_Object *obj EINA_UNUSED, - void *event_info EINA_UNUSED); static void _ephoto_show_settings(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED); static void _ephoto_main_key_down(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED); -static void _ephoto_panes_unpress(void *data, Evas_Object *obj EINA_UNUSED, - void *event_info EINA_UNUSED); -static void _ephoto_panes_double_clicked(void *data, Evas_Object *obj EINA_UNUSED, - void *event_info EINA_UNUSED); static void _ephoto_main_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED); -/*File Pane Functions*/ -static void _ephoto_dir_hide_folders(void *data, Evas_Object *obj, - void *event_info); -static void _ephoto_dir_show_folders(void *data, Evas_Object *obj, - void *event_info); - /*Thumb Pane Functions*/ -static void _ephoto_thumb_update_info_label(Ephoto_Thumb_Browser *tb); static void _ephoto_thumb_activated(void *data, Evas_Object *obj EINA_UNUSED, void *event_info); static void _ephoto_thumb_zoom_set(Ephoto_Thumb_Browser *tb, int zoom); @@ -127,151 +104,11 @@ _menu_empty_cb(void *data, Evas_Object *obj EINA_UNUSED, paths = eina_list_append(paths, strdup(file->path)); item = elm_gengrid_item_next_get(item); } - item = elm_genlist_first_item_get(tb->fsel); - while (item) - { - file = elm_object_item_data_get(item); - paths = eina_list_append(paths, strdup(file->path)); - item = elm_genlist_item_next_get(item); - } if (eina_list_count(paths) <= 0) return; ephoto_file_empty_trash(tb->ephoto, paths); } -static char * -_drag_data_extract(char **drag_data) -{ - char *uri = NULL; - - if (!drag_data) - return uri; - - char *p = *drag_data; - - if (!p) - return uri; - char *s = strstr(p, FILESEP); - - if (s) - p += FILESEP_LEN; - s = strchr(p, '\n'); - uri = p; - if (s) - { - if (s - p > 0) - { - char *s1 = s - 1; - - if (s1[0] == '\r') - s1[0] = '\0'; - else - { - char *s2 = s + 1; - - if (s2[0] == '\r') - { - s[0] = '\0'; - s++; - } - else - s[0] = '\0'; - } - } - else - s[0] = '\0'; - s++; - } - else - p = NULL; - *drag_data = s; - - return uri; -} - -static Eina_Bool -_drop_dropcb(void *data EINA_UNUSED, Evas_Object *obj, Elm_Object_Item *it, - Elm_Selection_Data *ev, int xposret EINA_UNUSED, int yposret EINA_UNUSED) -{ - EINA_SAFETY_ON_NULL_RETURN_VAL(it, EINA_TRUE); - - Ephoto_Entry *entry = elm_object_item_data_get(it); - const char *path = entry->path; - Eina_List *files = NULL; - Ephoto_Thumb_Browser *tb = evas_object_data_get(obj, "thumb_browser"); - - if (!ev->data) - return EINA_FALSE; - if (ev->len <= 0) - return EINA_FALSE; - if (!path) - return EINA_FALSE; - - char *dd = strdup(ev->data); - - if (!dd) - return EINA_FALSE; - - char *s = _drag_data_extract(&dd); - - while (s) - { - files = eina_list_append(files, s); - s = _drag_data_extract(&dd); - } - free(dd); - - if (tb->ephoto->config->move_drop) - ephoto_file_move(tb->ephoto, files, path); - else - ephoto_file_copy(tb->ephoto, files, path); - if (tb->dir_current) - elm_genlist_item_selected_set(tb->dir_current, EINA_TRUE); - return EINA_TRUE; -} - -static Elm_Object_Item * -_drop_item_getcb(Evas_Object *obj, Evas_Coord x, Evas_Coord y, - int *xposret EINA_UNUSED, int *yposret) -{ - Elm_Object_Item *gli; - - gli = elm_genlist_at_xy_item_get(obj, x, y, yposret); - - return gli; -} - -static void -_drop_enter(void *data, Evas_Object *obj EINA_UNUSED) -{ - Ephoto_Thumb_Browser *tb = data; - - if (tb->dragging) - elm_object_cursor_set(tb->main, ELM_CURSOR_TARGET); -} - -static void -_drop_leave(void *data, Evas_Object *obj EINA_UNUSED) -{ - Ephoto_Thumb_Browser *tb = data; - - if (tb->dragging) - { - elm_object_cursor_set(tb->main, ELM_CURSOR_HAND2); - if (tb->dir_current) - elm_genlist_item_selected_set(tb->dir_current, EINA_TRUE); - } -} - -static void -_drop_pos(void *data EINA_UNUSED, Evas_Object *cont EINA_UNUSED, - Elm_Object_Item *it EINA_UNUSED, Evas_Coord x EINA_UNUSED, - Evas_Coord y EINA_UNUSED, int xposret EINA_UNUSED, - int yposret EINA_UNUSED, Elm_Xdnd_Action action EINA_UNUSED) -{ - elm_genlist_item_selected_set(it, EINA_TRUE); -} - static Eina_Bool _5s_timeout_gone(void *data) { @@ -289,6 +126,9 @@ _dnd_drag_start(void *data EINA_UNUSED, Evas_Object *obj) if (_5s_cancel) _5s_timeout = ecore_timer_add(5.0, _5s_timeout_gone, obj); elm_object_cursor_set(tb->main, ELM_CURSOR_HAND2); + + ephoto_show_folders(tb->ephoto, EINA_FALSE); + tb->dragging = 1; } @@ -422,603 +262,6 @@ _dnd_item_data_get(Evas_Object *obj, Elm_Object_Item *it, return EINA_FALSE; } -/*File Pane Callbacks*/ -static void -_on_list_expand_req(void *data, Evas_Object *obj EINA_UNUSED, - void *event_info) -{ - Ephoto_Thumb_Browser *tb = data; - Elm_Object_Item *it = event_info; - - ecore_job_del(tb->change_dir_job); - tb->change_dir_job = NULL; - ecore_timer_del(tb->click_timer); - tb->click_timer = NULL; - elm_genlist_item_expanded_set(it, EINA_TRUE); -} - -static void -_on_list_contract_req(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, - void *event_info) -{ - Ephoto_Thumb_Browser *tb = data; - Elm_Object_Item *it = event_info; - - ecore_job_del(tb->change_dir_job); - tb->change_dir_job = NULL; - ecore_timer_del(tb->click_timer); - tb->click_timer = NULL; - elm_genlist_item_expanded_set(it, EINA_FALSE); -} - -static void -_on_list_expanded(void *data, Evas_Object *obj EINA_UNUSED, void *event_info) -{ - Ephoto_Thumb_Browser *tb = data; - Elm_Object_Item *it = event_info; - Ephoto_Entry *entry; - const char *path; - - entry = elm_object_item_data_get(it); - path = entry->path; - tb->dirs_only = 0; - if (!strcmp(path, tb->ephoto->config->directory)) - tb->dirs_only = 1; - else - tb->dirs_only = 0; - tb->thumbs_only = 0; - ephoto_directory_set(tb->ephoto, path, it, tb->dirs_only, tb->thumbs_only); - ephoto_title_set(tb->ephoto, tb->ephoto->config->directory); -} - -static void -_on_list_contracted(void *data, Evas_Object *obj EINA_UNUSED, void *event_info) -{ - Ephoto_Thumb_Browser *tb = data; - Elm_Object_Item *it = event_info; - Ephoto_Entry *entry; - const char *path; - - entry = elm_object_item_data_get(it); - path = entry->path; - elm_genlist_item_subitems_clear(it); - if (!strcmp(path, tb->ephoto->config->directory)) - return; - tb->thumbs_only = 1; - tb->dirs_only = 0; - ephoto_directory_set(tb->ephoto, path, NULL, - tb->dirs_only, tb->thumbs_only); - ephoto_title_set(tb->ephoto, - tb->ephoto->config->directory); -} - -static void -_dir_job(void *data) -{ - Elm_Object_Item *it = data; - Ephoto_Thumb_Browser *tb = evas_object_data_get(it, "thumb_browser"); - Ephoto_Entry *entry; - const char *path; - - entry = elm_object_item_data_get(it); - path = entry->path; - tb->change_dir_job = NULL; - tb->thumbs_only = 1; - tb->dirs_only = 0; - ephoto_directory_set(tb->ephoto, path, NULL, - tb->dirs_only, tb->thumbs_only); - ephoto_title_set(tb->ephoto, tb->ephoto->config->directory); -} - -static void -_wait_job(void *data) -{ - Elm_Object_Item *it = data; - Ephoto_Thumb_Browser *tb = evas_object_data_get(it, "thumb_browser"); - - if (tb->change_dir_job) - ecore_job_del(tb->change_dir_job); - tb->change_dir_job = ecore_job_add(_dir_job, it); -} - -static void -_on_list_selected(void *data, Evas_Object *obj EINA_UNUSED, - void *event_info) -{ - Ephoto_Thumb_Browser *tb = data; - Elm_Object_Item *it = event_info; - - evas_object_data_set(it, "thumb_browser", tb); - if (!tb->dragging) - { - tb->dir_current = it; - - ecore_job_add(_wait_job, it); - } -} - -static char * -_dir_item_text_get(void *data, Evas_Object *obj EINA_UNUSED, - const char *part EINA_UNUSED) -{ - Ephoto_Entry *e = data; - - return strdup(e->label); -} - -static Evas_Object * -_dir_item_icon_get(void *data EINA_UNUSED, Evas_Object *obj, - const char *part) -{ - if (!strcmp(part, "elm.swallow.end")) - return NULL; - Evas_Object *ic = elm_icon_add(obj); - - elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); - elm_icon_standard_set(ic, "folder"); - return ic; -} - -static void -_dir_item_del(void *data, Evas_Object *obj EINA_UNUSED) -{ - Ephoto_Entry *e = data; - - if (!e->no_delete) - ephoto_entry_free(e->ephoto, e); -} - -static Eina_Bool -_check_for_subdirs(Ephoto_Entry *entry) -{ - Eina_Iterator *ls = eina_file_direct_ls(entry->path); - Eina_File_Direct_Info *info; - - if (!ls) - return EINA_FALSE; - EINA_ITERATOR_FOREACH(ls, info) - { - if (info->type == EINA_FILE_DIR) - { - eina_iterator_free(ls); - return EINA_TRUE; - } - } - eina_iterator_free(ls); - return EINA_FALSE; -} - -static void -_dir_go_home(void *data, Evas_Object *obj EINA_UNUSED, - void *event_info EINA_UNUSED) -{ - Ephoto_Thumb_Browser *tb = data; - - elm_genlist_clear(tb->fsel); - tb->thumbs_only = 0; - tb->dirs_only = 0; - ephoto_directory_set(tb->ephoto, getenv("HOME"), NULL, - tb->dirs_only, tb->thumbs_only); - ephoto_title_set(tb->ephoto, tb->ephoto->config->directory); - ephoto_thumb_browser_top_dir_set(tb->ephoto, tb->ephoto->config->directory); -} - -static void -_dir_go_up(void *data, Evas_Object *obj EINA_UNUSED, - void *event_info EINA_UNUSED) -{ - Ephoto_Thumb_Browser *tb = data; - - if (strcmp(tb->ephoto->config->directory, "/")) - { - char path[PATH_MAX]; - Elm_Object_Item *it, *next; - Ephoto_Entry *e; - - snprintf(path, PATH_MAX, "%s", tb->ephoto->config->directory); - it = elm_genlist_first_item_get(tb->fsel); - while (it) - { - e = elm_object_item_data_get(it); - if (!strcmp(e->path, path)) - { - if (e->parent) - { - elm_genlist_item_expanded_set(e->parent, EINA_FALSE); - return; - } - } - next = elm_genlist_item_next_get(it); - it = next; - } - elm_genlist_clear(tb->fsel); - tb->thumbs_only = 0; - tb->dirs_only = 0; - ephoto_directory_set(tb->ephoto, ecore_file_dir_get(path), NULL, - tb->dirs_only, tb->thumbs_only); - ephoto_title_set(tb->ephoto, tb->ephoto->config->directory); - ephoto_thumb_browser_top_dir_set(tb->ephoto, - tb->ephoto->config->directory); - } -} - -static void -_dir_go_trash(void *data, Evas_Object *obj EINA_UNUSED, - void *event_info EINA_UNUSED) -{ - Ephoto_Thumb_Browser *tb = data; - char path[PATH_MAX]; - - snprintf(path, PATH_MAX, "%s/.config/ephoto/trash", getenv("HOME")); - if (!ecore_file_exists(path)) - ecore_file_mkpath(path); - elm_genlist_clear(tb->fsel); - tb->thumbs_only = 0; - tb->dirs_only = 0; - ephoto_directory_set(tb->ephoto, path, NULL, - tb->dirs_only, tb->thumbs_only); - ephoto_title_set(tb->ephoto, _("Trash")); - ephoto_thumb_browser_top_dir_set(tb->ephoto, tb->ephoto->config->directory); -} - -static void -_dir_go_entry(void *data, Evas_Object *obj EINA_UNUSED, - void *event_info EINA_UNUSED) -{ - const char *dir; - Ephoto_Thumb_Browser *tb = data; - - dir = elm_object_text_get(tb->direntry); - if (ecore_file_is_dir(dir)) - { - elm_genlist_clear(tb->fsel); - tb->thumbs_only = 0; - tb->dirs_only = 0; - ephoto_directory_set(tb->ephoto, dir, NULL, - tb->dirs_only, tb->thumbs_only); - ephoto_title_set(tb->ephoto, tb->ephoto->config->directory); - ephoto_thumb_browser_top_dir_set(tb->ephoto, - tb->ephoto->config->directory); - } -} - -static Eina_Bool -_click_timer_cb(void *data) -{ - Elm_Object_Item *item = data; - Ephoto_Thumb_Browser *tb = evas_object_data_get(item, "thumb_browser"); - - _on_list_selected(tb, NULL, item); - tb->click_timer = NULL; - - return ECORE_CALLBACK_CANCEL; -} - -static void -_fsel_menu_new_dir_cb(void *data, Evas_Object *obj EINA_UNUSED, - void *event_info EINA_UNUSED) -{ - Ephoto_Thumb_Browser *tb = data; - Elm_Object_Item *item = elm_genlist_selected_item_get(tb->fsel); - Ephoto_Entry *entry; - const char *path; - - if (item) - { - entry = elm_object_item_data_get(item); - path = entry->path; - } - else - path = tb->ephoto->config->directory; - if (!path) - return; - ephoto_file_new_dir(tb->ephoto, path); -} - -static void -_fsel_menu_paste_cb(void *data, Evas_Object *obj EINA_UNUSED, - void *event_info EINA_UNUSED) -{ - Ephoto_Thumb_Browser *tb = data; - Elm_Object_Item *item = elm_genlist_selected_item_get(tb->fsel); - Ephoto_Entry *entry; - const char *path; - - if (item) - { - entry = elm_object_item_data_get(item); - path = entry->path; - } - else - path = tb->ephoto->config->directory; - - if (eina_list_count(tb->cut_items) > 0) - { - ephoto_file_paste(tb->ephoto, eina_list_clone(tb->cut_items), EINA_FALSE, path); - eina_list_free(tb->cut_items); - tb->cut_items = NULL; - } - else if (eina_list_count(tb->copy_items) > 0) - { - ephoto_file_paste(tb->ephoto, eina_list_clone(tb->copy_items), EINA_TRUE, path); - eina_list_free(tb->copy_items); - tb->copy_items = NULL; - } -} - -static void -_fsel_menu_rename_cb(void *data, Evas_Object *obj EINA_UNUSED, - void *event_info EINA_UNUSED) -{ - Ephoto_Thumb_Browser *tb = data; - Elm_Object_Item *item = elm_genlist_selected_item_get(tb->fsel); - Ephoto_Entry *entry; - const char *path; - - if (!item) - return; - entry = elm_object_item_data_get(item); - path = entry->path; - if (!path) - return; - ephoto_file_rename(tb->ephoto, path); -} - -static void -_fsel_menu_delete_cb(void *data, Evas_Object *obj EINA_UNUSED, - void *event_info EINA_UNUSED) -{ - Ephoto_Thumb_Browser *tb = data; - Elm_Object_Item *item = elm_genlist_selected_item_get(tb->fsel); - Ephoto_Entry *entry; - Eina_List *files = NULL; - const char *path; - - if (!item) - return; - entry = elm_object_item_data_get(item); - path = entry->path; - if (!path) - return; - files = eina_list_append(files, path); - ephoto_file_delete(tb->ephoto, files, EINA_FILE_DIR); -} - -static void -_fsel_mouse_up_cb(void *data, Evas *e EINA_UNUSED, - Evas_Object *obj EINA_UNUSED, void *event_info) -{ - Ephoto_Thumb_Browser *tb = data; - Evas_Object *menu; - Elm_Object_Item *item, *menu_it; - Evas_Event_Mouse_Up *info = event_info; - char trash[PATH_MAX]; - Evas_Coord x, y; - - evas_pointer_canvas_xy_get(evas_object_evas_get(tb->fsel), &x, &y); - item = elm_genlist_at_xy_item_get(tb->fsel, x, y, 0); - - if (info->button == 1 && item) - { - if (info->flags == EVAS_BUTTON_DOUBLE_CLICK) - { - if (elm_genlist_item_type_get(item) == ELM_GENLIST_ITEM_TREE) - { - if (tb->click_timer) - { - ecore_timer_del(tb->click_timer); - tb->click_timer = NULL; - elm_genlist_item_expanded_set(item, - !elm_genlist_item_expanded_get(item)); - } - } - } - else - { - evas_object_data_set(item, "thumb_browser", tb); - if (elm_genlist_item_type_get(item) == ELM_GENLIST_ITEM_TREE) - tb->click_timer = ecore_timer_add(.3, _click_timer_cb, item); - else - _on_list_selected(tb, NULL, item); - } - } - else if (!item) - { - Elm_Object_Item *it; - - it = elm_genlist_selected_item_get(tb->fsel); - if (it) - elm_genlist_item_selected_set(it, EINA_FALSE); - ephoto_directory_set(tb->ephoto, tb->ephoto->top_directory, NULL, 0, 1); - } - - if (info->button != 3) - return; - - snprintf(trash, PATH_MAX, "%s/.config/ephoto/trash", getenv("HOME")); - - if (item) - elm_genlist_item_selected_set(item, EINA_TRUE); - menu = elm_menu_add(tb->ephoto->win); - elm_menu_move(menu, x, y); - menu_it = elm_menu_item_add(menu, NULL, "document-properties", _("Edit"), - NULL, NULL); - elm_menu_item_separator_add(menu, NULL); - if (strcmp(tb->ephoto->config->directory, trash)) - { - elm_menu_item_add(menu, menu_it, "folder-new", _("New Folder"), - _fsel_menu_new_dir_cb, tb); - } - if (item) - { - evas_object_data_set(item, "thumb_browser", tb); - elm_menu_item_add(menu, menu_it, "edit", _("Rename"), - _fsel_menu_rename_cb, item); - } - if (tb->cut_items || tb->copy_items) - { - elm_menu_item_add(menu, menu_it, "edit-paste", _("Paste"), - _fsel_menu_paste_cb, tb); - } - if (!strcmp(tb->ephoto->config->directory, trash) && - elm_gengrid_first_item_get(tb->grid)) - { - elm_menu_item_add(menu, menu_it, "edit-delete", _("Empty Trash"), - _menu_empty_cb, tb); - } - else if (!strcmp(tb->ephoto->config->directory, trash) && - elm_genlist_first_item_get(tb->fsel)) - { - elm_menu_item_add(menu, menu_it, "edit-delete", _("Empty Trash"), - _menu_empty_cb, tb); - } - if (strcmp(tb->ephoto->config->directory, trash) && item) - { - elm_menu_item_add(menu, menu_it, "edit-delete", _("Delete"), - _fsel_menu_delete_cb, tb); - } - if (strcmp(tb->ephoto->config->directory, trash) && - elm_gengrid_first_item_get(tb->grid)) - { - elm_menu_item_add(menu, NULL, "media-playback-start", _("Slideshow"), - _ephoto_show_slideshow, tb); - } - elm_menu_item_add(menu, NULL, "preferences-system", _("Settings"), - _ephoto_show_settings, tb); - evas_object_smart_callback_add(menu, "dismissed", _menu_dismissed_cb, - tb); - evas_object_show(menu); -} - -/*File Pane Functions*/ -static void -_ephoto_dir_show_folders(void *data, Evas_Object *obj EINA_UNUSED, - void *event_info EINA_UNUSED) -{ - Ephoto_Thumb_Browser *tb = data; - - elm_check_state_set(tb->toggle, EINA_FALSE); - elm_panes_content_left_min_size_set(tb->panes, 100); - elm_panes_content_left_size_set(tb->panes, tb->ephoto->config->lpane_size); - tb->ephoto->config->fsel_hide = 0; - evas_object_smart_callback_del(tb->toggle, "changed", _ephoto_dir_show_folders); - evas_object_smart_callback_add(tb->toggle, "changed", _ephoto_dir_hide_folders, tb); -} - -static void -_ephoto_dir_hide_folders(void *data, Evas_Object *obj EINA_UNUSED, - void *event_info EINA_UNUSED) -{ - Ephoto_Thumb_Browser *tb = data; - - elm_check_state_set(tb->toggle, EINA_TRUE); - elm_panes_content_left_min_size_set(tb->panes, 0); - elm_panes_content_left_size_set(tb->panes, 0.0); - tb->ephoto->config->fsel_hide = 1; - evas_object_smart_callback_del(tb->toggle, "changed", _ephoto_dir_hide_folders); - evas_object_smart_callback_add(tb->toggle, "changed", _ephoto_dir_show_folders, tb); -} - -void -_ephoto_file_pane_add(Ephoto_Thumb_Browser *tb) -{ - Evas_Object *hbox, *but, *ic; - - tb->leftbox = elm_box_add(tb->panes); - elm_box_horizontal_set(tb->leftbox, EINA_FALSE); - elm_box_homogeneous_set(tb->leftbox, EINA_FALSE); - evas_object_size_hint_weight_set(tb->leftbox, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(tb->leftbox, - EVAS_HINT_FILL, EVAS_HINT_FILL); - - hbox = elm_box_add(tb->leftbox); - elm_box_horizontal_set(hbox, EINA_TRUE); - elm_box_homogeneous_set(hbox, EINA_TRUE); - evas_object_size_hint_weight_set(hbox, EVAS_HINT_EXPAND, 0.0); - evas_object_size_hint_align_set(hbox, EVAS_HINT_FILL, EVAS_HINT_FILL); - elm_box_pack_end(tb->leftbox, hbox); - evas_object_show(hbox); - - ic = elm_icon_add(hbox); - elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); - elm_icon_standard_set(ic, "go-up"); - evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); - but = elm_button_add(hbox); - elm_object_part_content_set(but, "icon", ic); - elm_object_text_set(but, _("Up")); - evas_object_size_hint_weight_set(but, EVAS_HINT_EXPAND, 0.0); - evas_object_size_hint_align_set(but, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_smart_callback_add(but, "clicked", _dir_go_up, tb); - elm_box_pack_end(hbox, but); - evas_object_show(but); - - ic = elm_icon_add(hbox); - elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); - elm_icon_standard_set(ic, "go-home"); - evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); - but = elm_button_add(hbox); - elm_object_part_content_set(but, "icon", ic); - elm_object_text_set(but, _("Home")); - evas_object_size_hint_weight_set(but, EVAS_HINT_EXPAND, 0.0); - evas_object_size_hint_align_set(but, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_smart_callback_add(but, "clicked", _dir_go_home, tb); - elm_box_pack_end(hbox, but); - evas_object_show(but); - - ic = elm_icon_add(hbox); - elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); - elm_icon_standard_set(ic, "user-trash"); - evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); - but = elm_button_add(hbox); - elm_object_part_content_set(but, "icon", ic); - elm_object_text_set(but, _("Trash")); - evas_object_size_hint_weight_set(but, EVAS_HINT_EXPAND, 0.0); - evas_object_size_hint_align_set(but, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_smart_callback_add(but, "clicked", _dir_go_trash, tb); - elm_box_pack_end(hbox, but); - evas_object_show(but); - - tb->direntry = elm_entry_add(tb->main); - elm_entry_single_line_set(tb->direntry, EINA_TRUE); - elm_entry_scrollable_set(tb->direntry, EINA_TRUE); - elm_scroller_policy_set(tb->direntry, ELM_SCROLLER_POLICY_OFF, - ELM_SCROLLER_POLICY_OFF); - evas_object_size_hint_weight_set(tb->direntry, EVAS_HINT_EXPAND, - EVAS_HINT_FILL); - evas_object_size_hint_align_set(tb->direntry, EVAS_HINT_FILL, - EVAS_HINT_FILL); - evas_object_smart_callback_add(tb->direntry, "activated", - _dir_go_entry, tb); - elm_box_pack_end(tb->leftbox, tb->direntry); - evas_object_show(tb->direntry); - - tb->fsel = elm_genlist_add(tb->leftbox); - elm_genlist_homogeneous_set(tb->fsel, EINA_TRUE); - elm_genlist_select_mode_set(tb->fsel, ELM_OBJECT_SELECT_MODE_ALWAYS); - evas_object_size_hint_weight_set(tb->fsel, EVAS_HINT_EXPAND, - EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(tb->fsel, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_smart_callback_add(tb->fsel, "expand,request", - _on_list_expand_req, tb); - evas_object_smart_callback_add(tb->fsel, "contract,request", - _on_list_contract_req, tb); - evas_object_smart_callback_add(tb->fsel, "expanded", _on_list_expanded, tb); - evas_object_smart_callback_add(tb->fsel, "contracted", _on_list_contracted, - tb); - evas_object_event_callback_add(tb->fsel, EVAS_CALLBACK_MOUSE_UP, - _fsel_mouse_up_cb, tb); - evas_object_data_set(tb->fsel, "thumb_browser", tb); - elm_box_pack_end(tb->leftbox, tb->fsel); - evas_object_show(tb->fsel); - - elm_drop_item_container_add(tb->fsel, ELM_SEL_FORMAT_TARGETS, - _drop_item_getcb, _drop_enter, tb, _drop_leave, tb, _drop_pos, tb, - _drop_dropcb, NULL); - - evas_object_raise(hbox); - evas_object_raise(tb->direntry); -} - /*Thumb Pane Callbacks*/ static char * _thumb_item_text_get(void *data, Evas_Object *obj EINA_UNUSED, @@ -1053,17 +296,6 @@ _thumb_item_del(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED) /* The entry is already freed when changing directories. */ } -static int -_entry_cmp(const void *pa, const void *pb) -{ - const Ephoto_Entry *a, *b; - - a = elm_object_item_data_get(pa); - b = elm_object_item_data_get(pb); - - return strcasecmp(a->basename, b->basename); -} - static int _entry_cmp_grid_alpha_asc(const void *pa, const void *pb) { @@ -1142,7 +374,7 @@ _entry_cmp_grid_mod_desc(const void *pa, const void *pb) } static void -_sort_alpha_asc(void *data, Evas_Object *obj EINA_UNUSED, +_sort_alpha_asc(void *data, Evas_Object *obj, void *event_data EINA_UNUSED) { Ephoto_Thumb_Browser *tb = data; @@ -1151,9 +383,9 @@ _sort_alpha_asc(void *data, Evas_Object *obj EINA_UNUSED, tb->sort = EPHOTO_SORT_ALPHABETICAL_ASCENDING; tb->thumbs_only = 1; tb->dirs_only = 0; - ic = elm_icon_add(tb->hover); + ic = elm_icon_add(obj); elm_icon_standard_set(ic, "view-sort-ascending"); - elm_object_part_content_set(tb->hover, "icon", ic); + elm_object_part_content_set(obj, "icon", ic); evas_object_show(ic); ephoto_directory_set(tb->ephoto, tb->ephoto->config->directory, NULL, tb->dirs_only, tb->thumbs_only); @@ -1169,9 +401,9 @@ _sort_alpha_desc(void *data, Evas_Object *obj EINA_UNUSED, tb->sort = EPHOTO_SORT_ALPHABETICAL_DESCENDING; tb->thumbs_only = 1; tb->dirs_only = 0; - ic = elm_icon_add(tb->hover); + ic = elm_icon_add(obj); elm_icon_standard_set(ic, "view-sort-descending"); - elm_object_part_content_set(tb->hover, "icon", ic); + elm_object_part_content_set(obj, "icon", ic); evas_object_show(ic); ephoto_directory_set(tb->ephoto, tb->ephoto->config->directory, NULL, tb->dirs_only, tb->thumbs_only); @@ -1187,9 +419,9 @@ _sort_mod_asc(void *data, Evas_Object *obj EINA_UNUSED, tb->sort = EPHOTO_SORT_MODTIME_ASCENDING; tb->thumbs_only = 1; tb->dirs_only = 0; - ic = elm_icon_add(tb->hover); + ic = elm_icon_add(obj); elm_icon_standard_set(ic, "view-sort-ascending"); - elm_object_part_content_set(tb->hover, "icon", ic); + elm_object_part_content_set(obj, "icon", ic); evas_object_show(ic); ephoto_directory_set(tb->ephoto, tb->ephoto->config->directory, NULL, tb->dirs_only, tb->thumbs_only); @@ -1205,9 +437,9 @@ _sort_mod_desc(void *data, Evas_Object *obj EINA_UNUSED, tb->sort = EPHOTO_SORT_MODTIME_DESCENDING; tb->thumbs_only = 1; tb->dirs_only = 0; - ic = elm_icon_add(tb->hover); + ic = elm_icon_add(obj); elm_icon_standard_set(ic, "view-sort-descending"); - elm_object_part_content_set(tb->hover, "icon", ic); + elm_object_part_content_set(obj, "icon", ic); evas_object_show(ic); ephoto_directory_set(tb->ephoto, tb->ephoto->config->directory, NULL, tb->dirs_only, tb->thumbs_only); @@ -1233,6 +465,54 @@ _zoom_out(void *data, Evas_Object *obj EINA_UNUSED, _ephoto_thumb_zoom_set(tb, zoom); } +static void +_view_single(void *data, Evas_Object *obj EINA_UNUSED, + void *event_info EINA_UNUSED) +{ + Ephoto_Thumb_Browser *tb = data; + Elm_Object_Item *it = elm_gengrid_selected_item_get(tb->grid); + Ephoto_Entry *entry; + Eina_List *selected, *s; + Elm_Object_Item *item; + + if (it) + entry = elm_object_item_data_get(it); + else + entry = eina_list_nth(tb->entries, 0); + selected = + eina_list_clone(elm_gengrid_selected_items_get(tb->grid)); + if (eina_list_count(selected) <= 1 && tb->searchentries) + { + if (tb->ephoto->selentries) + eina_list_free(tb->ephoto->selentries); + tb->ephoto->selentries = NULL; + tb->ephoto->searchentries = + eina_list_clone(tb->searchentries); + } + else if (eina_list_count(selected) > 1) + { + EINA_LIST_FOREACH(selected, s, item) + { + tb->ephoto->selentries = + eina_list_append(tb->ephoto->selentries, + elm_object_item_data_get(item)); + } + } + else + { + if (tb->ephoto->selentries) + eina_list_free(tb->ephoto->selentries); + if (tb->ephoto->searchentries) + eina_list_free(tb->ephoto->searchentries); + tb->ephoto->selentries = NULL; + tb->ephoto->searchentries = NULL; + } + if (entry) + { + evas_object_smart_callback_call(tb->main, "view", entry); + } +} + static void _grid_menu_select_all_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) @@ -1391,11 +671,12 @@ _grid_mouse_up_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) { Ephoto_Thumb_Browser *tb = data; - Evas_Object *menu, *menu_it; + Evas_Object *menu; Elm_Object_Item *item; Evas_Event_Mouse_Up *info = event_info; Eina_Bool ctrl = evas_key_modifier_is_set(info->modifiers, "Control"); Eina_Bool shift = evas_key_modifier_is_set(info->modifiers, "Shift"); + Eina_Bool clear_selection = EINA_FALSE; char trash[PATH_MAX]; const Eina_List *selected = elm_gengrid_selected_items_get(tb->grid); int x, y; @@ -1444,21 +725,19 @@ _grid_mouse_up_cb(void *data, Evas *e EINA_UNUSED, } else { - Eina_List *sel = eina_list_clone(selected); - Eina_List *node; - Elm_Object_Item *it; - if (eina_list_count(sel) > 0) - { - EINA_LIST_FOREACH(sel, node, it) - { - elm_gengrid_item_selected_set(it, EINA_FALSE); - } - eina_list_free(sel); - } + clear_selection = EINA_TRUE; tb->last_sel = item; } } if (info->button == 1 && !item) + clear_selection = EINA_TRUE; + + else if (info->button == 3 && item) + { + if (!elm_gengrid_item_selected_get(item)) + clear_selection = EINA_TRUE; + } + if (clear_selection) { Eina_List *sel = eina_list_clone(selected); Eina_List *node; @@ -1475,71 +754,70 @@ _grid_mouse_up_cb(void *data, Evas *e EINA_UNUSED, if (info->button != 3) return; + if (!elm_gengrid_first_item_get(tb->grid) && !tb->cut_items) + { + if (!tb->copy_items) + return; + } + snprintf(trash, PATH_MAX, "%s/.config/ephoto/trash", getenv("HOME")); if (item) - elm_gengrid_item_selected_set(item, EINA_TRUE); + { + elm_gengrid_item_selected_set(item, EINA_TRUE); + tb->last_sel = item; + } + + selected = elm_gengrid_selected_items_get(tb->grid); + menu = elm_menu_add(tb->ephoto->win); elm_menu_move(menu, x, y); + if (elm_gengrid_first_item_get(tb->grid)) { - menu_it = elm_menu_item_add(menu, NULL, "document-properties", _("Edit"), - NULL, NULL); - elm_menu_item_separator_add(menu, NULL); - elm_menu_item_add(menu, menu_it, "system-search", _("Search"), + elm_menu_item_add(menu, NULL, "system-search", _("Search"), _ephoto_thumb_search_start, tb); - elm_menu_item_separator_add(menu, menu_it); - elm_menu_item_add(menu, menu_it, "edit-select-all", _("Select All"), + elm_menu_item_add(menu, NULL, "edit-select-all", _("Select All"), _grid_menu_select_all_cb, tb); - } - else - { - menu_it = NULL; - } - if (eina_list_count(selected) > 0 || item) - { - elm_menu_item_add(menu, menu_it, "edit-clear", _("Select None"), - _grid_menu_clear_cb, tb); - elm_menu_item_separator_add(menu, menu_it); + if (eina_list_count(selected) || item) + elm_menu_item_add(menu, NULL, "edit-clear", _("Select None"), + _grid_menu_clear_cb, tb); if (item) { + elm_menu_item_add(menu, NULL, "edit", _("Rename"), + _grid_menu_rename_cb, item); evas_object_data_set(item, "thumb_browser", tb); - elm_menu_item_add(menu, menu_it, "edit", _("Rename"), - _grid_menu_rename_cb, item); } - elm_menu_item_add(menu, menu_it, "edit-cut", _("Cut"), _grid_menu_cut_cb, - tb); - elm_menu_item_add(menu, menu_it, "edit-copy", _("Copy"), - _grid_menu_copy_cb, tb); + if (eina_list_count(selected)) + { + elm_menu_item_add(menu, NULL, "edit-cut", _("Cut"), + _grid_menu_cut_cb, tb); + elm_menu_item_add(menu, NULL, "edit-copy", _("Copy"), + _grid_menu_copy_cb, tb); + } } if (tb->cut_items || tb->copy_items) { - elm_menu_item_add(menu, menu_it, "edit-paste", _("Paste"), - _grid_menu_paste_cb, tb); + elm_menu_item_add(menu, NULL, "edit-paste", _("Paste"), + _grid_menu_paste_cb, tb); } - if (!strcmp(tb->ephoto->config->directory, trash) && - elm_gengrid_first_item_get(tb->grid)) + if (elm_gengrid_first_item_get(tb->grid)) { - elm_menu_item_add(menu, menu_it, "edit-delete", _("Empty Trash"), - _menu_empty_cb, tb); - } - else - { - if (elm_gengrid_first_item_get(tb->grid)) + if (!strcmp(tb->ephoto->config->directory, trash)) { - elm_menu_item_add(menu, menu_it, "edit-delete", _("Delete"), + elm_menu_item_add(menu, NULL, "edit-delete", _("Empty Trash"), + _menu_empty_cb, tb); + } + else + { + elm_menu_item_add(menu, NULL, "edit-delete", _("Delete"), _grid_menu_delete_cb, tb); - elm_menu_item_add(menu, NULL, "media-playback-start", - _("Slideshow"), _ephoto_show_slideshow, tb); } } - elm_menu_item_add(menu, NULL, "preferences-system", _("Settings"), - _ephoto_show_settings, tb); evas_object_smart_callback_add(menu, "dismissed", _menu_dismissed_cb, tb); evas_object_show(menu); } - static void _grid_mouse_wheel(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) @@ -1557,6 +835,29 @@ _grid_mouse_wheel(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, } } +static void +_grid_changed(void *data, Evas_Object *obj EINA_UNUSED, + void *event_info EINA_UNUSED) +{ + Ephoto_Thumb_Browser *tb = data; + Evas_Coord w, h, gw, gh; + Edje_Message_Int_Set *msg; + + if (tb->ephoto->state != EPHOTO_STATE_THUMB) + return; + + elm_scroller_region_get(tb->grid, 0, 0, &w, &h); + evas_object_geometry_get(tb->grid, 0, 0, &gw, &gh); + gw -= w; + gh -= h; + msg = alloca(sizeof(Edje_Message_Int_Set) + (2 * sizeof(int))); + msg->count = 2; + msg->val[0] = gw; + msg->val[1] = gh; + edje_object_message_send(elm_layout_edje_get(tb->ephoto->layout), + EDJE_MESSAGE_INT_SET, 1, msg); +} + static void _ephoto_thumb_activated(void *data, Evas_Object *obj EINA_UNUSED, void *event_info) @@ -1601,14 +902,15 @@ _ephoto_thumb_activated(void *data, Evas_Object *obj EINA_UNUSED, } /*Thumb Pane Functions*/ -static void -_ephoto_thumb_update_info_label(Ephoto_Thumb_Browser *tb) +void +ephoto_thumb_browser_update_info_label(Ephoto *ephoto) { char buf[PATH_MAX]; char isize[PATH_MAX]; char image_info[PATH_MAX]; double totsize; - + Ephoto_Thumb_Browser *tb = evas_object_data_get(ephoto->thumb_browser, + "thumb_browser"); if (!tb->totimages) { @@ -1617,7 +919,7 @@ _ephoto_thumb_update_info_label(Ephoto_Thumb_Browser *tb) snprintf(buf, PATH_MAX, "%s: 0 %s %s: 0%s", _("Total"), ngettext("image", "images", 0), _("Size"), ngettext("B", "B", 0)); - elm_object_text_set(tb->infolabel, buf); + elm_object_text_set(tb->ephoto->infolabel, buf); } else { @@ -1656,7 +958,7 @@ _ephoto_thumb_update_info_label(Ephoto_Thumb_Browser *tb) snprintf(image_info, PATH_MAX, "%s: %d %s %s: %s", _("Total"), tb->totimages, ngettext("image", "images", tb->totimages), _("Size"), isize); - elm_object_text_set(tb->infolabel, image_info); + elm_object_text_set(tb->ephoto->infolabel, image_info); } } @@ -1720,7 +1022,9 @@ _ephoto_thumb_search_go(void *data, Evas_Object *obj EINA_UNUSED, elm_box_unpack(tb->gridbox, tb->original_grid); evas_object_hide(tb->original_grid); + elm_theme_extension_add(NULL, PACKAGE_DATA_DIR "/themes/ephoto.edj"); tb->grid = elm_gengrid_add(tb->gridbox); + elm_object_style_set(tb->grid, "noclip"); evas_object_size_hint_weight_set(tb->grid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(tb->grid, EVAS_HINT_FILL, EVAS_HINT_FILL); @@ -1789,14 +1093,14 @@ _ephoto_thumb_search_go(void *data, Evas_Object *obj EINA_UNUSED, } } tb->entries = tb->searchentries; - _ephoto_thumb_update_info_label(tb); + ephoto_thumb_browser_update_info_label(tb->ephoto); eina_list_free(results); } else { tb->totimages = 0; tb->totsize = 0; - _ephoto_thumb_update_info_label(tb); + ephoto_thumb_browser_update_info_label(tb->ephoto); tb->searchentries = NULL; tb->entries = NULL; } @@ -1842,7 +1146,7 @@ _ephoto_thumb_search_cancel(void *data, Evas_Object *obj EINA_UNUSED, elm_box_unpack(tb->gridbox, hbox); evas_object_del(hbox); tb->searching = 0; - _ephoto_thumb_update_info_label(tb); + ephoto_thumb_browser_update_info_label(tb->ephoto); tb->totimages_old = 0; tb->totsize_old = 0; } @@ -1894,15 +1198,14 @@ _ephoto_thumb_search_start(void *data, Evas_Object *obj EINA_UNUSED, elm_object_focus_set(search, EINA_TRUE); } -void _ephoto_thumb_pane_add(Ephoto_Thumb_Browser *tb) +static void +_ephoto_thumb_view_add(Ephoto_Thumb_Browser *tb) { - Evas_Object *hbox, *but, *ic; - int ret; - - tb->table = elm_table_add(tb->panes); + tb->table = elm_table_add(tb->main); evas_object_size_hint_weight_set(tb->table, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(tb->table, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(tb->main, tb->table); evas_object_show(tb->table); tb->nolabel = elm_label_add(tb->table); @@ -1926,7 +1229,9 @@ void _ephoto_thumb_pane_add(Ephoto_Thumb_Browser *tb) EVAS_HINT_FILL); evas_object_show(tb->gridbox); + elm_theme_extension_add(NULL, PACKAGE_DATA_DIR "/themes/ephoto.edj"); tb->grid = elm_gengrid_add(tb->gridbox); + elm_object_style_set(tb->grid, "noclip"); evas_object_size_hint_weight_set(tb->grid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(tb->grid, EVAS_HINT_FILL, EVAS_HINT_FILL); @@ -1945,101 +1250,11 @@ void _ephoto_thumb_pane_add(Ephoto_Thumb_Browser *tb) _dnd_item_get, _dnd_item_data_get); evas_object_data_set(tb->grid, "thumb_browser", tb); elm_box_pack_end(tb->gridbox, tb->grid); + evas_object_smart_callback_add(tb->grid, "changed", _grid_changed, tb); evas_object_show(tb->grid); elm_table_pack(tb->table, tb->gridbox, 0, 0, 5, 1); _ephoto_thumb_zoom_set(tb, tb->ephoto->config->thumb_size); - - hbox = elm_box_add(tb->main); - elm_box_horizontal_set(hbox, EINA_TRUE); - evas_object_size_hint_weight_set(hbox, EVAS_HINT_EXPAND, 0.0); - evas_object_size_hint_align_set(hbox, EVAS_HINT_FILL, EVAS_HINT_FILL); - elm_box_pack_end(tb->main, hbox); - evas_object_show(hbox); - - tb->toggle = elm_check_add(hbox); - elm_object_style_set(tb->toggle, "toggle"); - elm_object_part_text_set(tb->toggle, "on", _("Show Folders")); - elm_object_part_text_set(tb->toggle, "off", _("Hide Folders")); - if (!tb->ephoto->config->fsel_hide) - { - elm_check_state_set(tb->toggle, EINA_FALSE); - evas_object_smart_callback_add(tb->toggle, "changed", - _ephoto_dir_hide_folders, tb); - } - else - { - elm_check_state_set(tb->toggle, EINA_TRUE); - evas_object_smart_callback_add(tb->toggle, "changed", - _ephoto_dir_show_folders, tb); - } - elm_box_pack_end(hbox, tb->toggle); - evas_object_show(tb->toggle); - - tb->infolabel = elm_label_add(hbox); - elm_label_line_wrap_set(tb->infolabel, ELM_WRAP_WORD); - elm_object_text_set(tb->infolabel, "Info Label"); - evas_object_size_hint_weight_set(tb->infolabel, EVAS_HINT_EXPAND, 0.0); - evas_object_size_hint_align_set(tb->infolabel, EVAS_HINT_FILL, - EVAS_HINT_FILL); - evas_object_size_hint_aspect_set(tb->infolabel, EVAS_ASPECT_CONTROL_HORIZONTAL, 1, 1); - elm_box_pack_end(hbox, tb->infolabel); - evas_object_show(tb->infolabel); - - ic = elm_icon_add(hbox); - evas_object_size_hint_min_set(ic, 20, 20); - elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); - ret = elm_icon_standard_set(ic, "zoom-in"); - evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_BOTH, 1, 1); - but = elm_button_add(hbox); - if (!ret) - elm_object_text_set(but, _("Zoom In")); - else - { - elm_object_part_content_set(but, "icon", ic); - elm_object_tooltip_text_set(but, _("Zoom In")); - elm_object_tooltip_orient_set(but, ELM_TOOLTIP_ORIENT_TOP); - } - evas_object_smart_callback_add(but, "clicked", _zoom_in, tb); - elm_box_pack_end(hbox, but); - evas_object_show(but); - - ic = elm_icon_add(hbox); - evas_object_size_hint_min_set(ic, 20, 20); - elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); - elm_icon_standard_set(ic, "zoom-out"); - evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_BOTH, 1, 1); - but = elm_button_add(hbox); - if (!ret) - elm_object_text_set(but, _("Zoom Out")); - else - { - elm_object_part_content_set(but, "icon", ic); - elm_object_tooltip_text_set(but, _("Zoom Out")); - elm_object_tooltip_orient_set(but, ELM_TOOLTIP_ORIENT_TOP); - } - evas_object_smart_callback_add(but, "clicked", _zoom_out, tb); - elm_box_pack_end(hbox, but); - evas_object_show(but); - - tb->hover = elm_hoversel_add(hbox); - elm_hoversel_hover_parent_set(tb->hover, tb->ephoto->win); - elm_hoversel_item_add(tb->hover, _("Alphabetical Ascending"), - "view-sort-ascending", ELM_ICON_STANDARD, _sort_alpha_asc, tb); - elm_hoversel_item_add(tb->hover, _("Alphabetical Descending"), - "view-sort-descending", ELM_ICON_STANDARD, _sort_alpha_desc, tb); - elm_hoversel_item_add(tb->hover, _("Modification Time Ascending"), - "view-sort-ascending", ELM_ICON_STANDARD, _sort_mod_asc, tb); - elm_hoversel_item_add(tb->hover, _("Modification Time Descending"), - "view-sort-descending", ELM_ICON_STANDARD, _sort_mod_desc, tb); - elm_object_text_set(tb->hover, _("Sort")); - ic = elm_icon_add(tb->hover); - evas_object_size_hint_min_set(ic, 20, 20); - elm_icon_standard_set(ic, "view-sort-ascending"); - elm_object_part_content_set(tb->hover, "icon", ic); - evas_object_show(ic); - elm_box_pack_end(hbox, tb->hover); - evas_object_show(tb->hover); } /*Ephoto Populating Functions*/ @@ -2050,194 +1265,6 @@ _todo_items_free(Ephoto_Thumb_Browser *tb) tb->todo_items = NULL; } -static void -_monitor_cb(void *data, Ecore_File_Monitor *em EINA_UNUSED, - Ecore_File_Event event, const char *path) -{ - Elm_Object_Item *item; - Ephoto_Entry *entry = data; - Ephoto_Entry *e; - char file[PATH_MAX], dir[PATH_MAX]; - const Elm_Genlist_Item_Class *ic; - char buf[PATH_MAX]; - - if (!entry) - return; - - snprintf(file, PATH_MAX, "%s", path); - snprintf(dir, PATH_MAX, "%s", ecore_file_dir_get(file)); - - if (strcmp(entry->path, dir)) - return; - if (event == ECORE_FILE_EVENT_CREATED_DIRECTORY) - { - if (!ecore_file_is_dir(path)) - return; - if (ephoto_entry_exists(entry->ephoto, path)) - return; - - if (elm_genlist_item_type_get(entry->item) == ELM_GENLIST_ITEM_TREE && - elm_genlist_item_expanded_get(entry->item) == EINA_TRUE) - { - ic = &_ephoto_dir_class; - snprintf(buf, PATH_MAX, "%s", path); - e = ephoto_entry_new(entry->ephoto, path, basename(buf), - EINA_FILE_DIR); - e->genlist = entry->genlist; - e->parent = entry->item; - e->item = - elm_genlist_item_sorted_insert(entry->genlist, ic, e, - e->parent, ELM_GENLIST_ITEM_NONE, _entry_cmp, NULL, NULL); - if (e->item) - e->monitor = ecore_file_monitor_add(e->path, _monitor_cb, e); - } - if (elm_genlist_item_type_get(entry->item) == ELM_GENLIST_ITEM_NONE) - { - Elm_Object_Item *parent; - - ic = &_ephoto_dir_class; - parent = - elm_genlist_item_insert_before(entry->genlist, ic, entry, - entry->parent, entry->item, ELM_GENLIST_ITEM_TREE, NULL, NULL); - entry->no_delete = EINA_TRUE; - if (entry->monitor) - ecore_file_monitor_del(entry->monitor); - elm_object_item_del(entry->item); - entry->item = parent; - entry->no_delete = EINA_FALSE; - entry->monitor = ecore_file_monitor_add(entry->path, _monitor_cb, entry); - } - return; - } - else if (event == ECORE_FILE_EVENT_DELETED_DIRECTORY) - { - item = elm_genlist_first_item_get(entry->genlist); - while (item) - { - e = elm_object_item_data_get(item); - if (!strcmp(e->path, path)) - { - elm_object_item_del(e->item); - //if (!strcmp(e->path, e->ephoto->config->directory)) - break; - } - item = elm_genlist_item_next_get(item); - } - if (elm_genlist_item_type_get(entry->item) == ELM_GENLIST_ITEM_TREE && - _check_for_subdirs(entry) == EINA_FALSE) - { - Elm_Object_Item *parent; - - ic = &_ephoto_dir_class; - parent = - elm_genlist_item_insert_before(entry->genlist, ic, entry, - entry->parent, entry->item, ELM_GENLIST_ITEM_NONE, NULL, NULL); - entry->no_delete = EINA_TRUE; - elm_object_item_del(entry->item); - entry->item = parent; - entry->no_delete = EINA_FALSE; - } - if (!ecore_file_exists(entry->ephoto->config->directory)) - { - ephoto_directory_set(entry->ephoto, entry->path, entry->parent, 0, 1); - ephoto_title_set(entry->ephoto, entry->path); - } - return; - } - else if (event == ECORE_FILE_EVENT_MODIFIED) - { - if (!ecore_file_is_dir(path)) - return; - if ((elm_genlist_item_expanded_get(entry->item) == EINA_TRUE)) - { - item = elm_genlist_first_item_get(entry->genlist); - while (item) - { - e = elm_object_item_data_get(item); - if (!strcmp(e->path, path)) - { - elm_genlist_item_update(e->item); - break; - } - item = elm_genlist_item_next_get(item); - } - } - return; - } -} - -static void -_top_monitor_cb(void *data, Ecore_File_Monitor *em EINA_UNUSED, - Ecore_File_Event event, const char *path) -{ - Elm_Object_Item *item; - Ephoto_Thumb_Browser *tb = data; - Ephoto_Entry *e; - const Elm_Genlist_Item_Class *ic; - char buf[PATH_MAX], file[PATH_MAX], dir[PATH_MAX]; - - if (!tb) - return; - snprintf(file, PATH_MAX, "%s", path); - snprintf(dir, PATH_MAX, "%s", ecore_file_dir_get(file)); - - if (strcmp(tb->ephoto->top_directory, dir)) - return; - if (event == ECORE_FILE_EVENT_CREATED_DIRECTORY) - { - if (!ecore_file_is_dir(path)) - return; - if (ephoto_entry_exists(tb->ephoto, path)) - return; - snprintf(buf, PATH_MAX, "%s", path); - e = ephoto_entry_new(tb->ephoto, path, basename(buf), - EINA_FILE_DIR); - e->genlist = tb->fsel; - ic = &_ephoto_dir_class; - e->item = - elm_genlist_item_append(tb->fsel, ic, e, - NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL); - if (e->item) - e->monitor = ecore_file_monitor_add(e->path, _monitor_cb, e); - return; - } - else if (event == ECORE_FILE_EVENT_DELETED_DIRECTORY) - { - item = elm_genlist_first_item_get(tb->fsel); - while (item) - { - e = elm_object_item_data_get(item); - if (!strcmp(e->path, path)) - { - if (!strcmp(path, tb->ephoto->config->directory)) - _dir_go_up(tb, NULL, NULL); - else - elm_object_item_del(e->item); - break; - } - item = elm_genlist_item_next_get(item); - } - return; - } - else if (event == ECORE_FILE_EVENT_MODIFIED) - { - if (!ecore_file_is_dir(path)) - return; - item = elm_genlist_first_item_get(tb->fsel); - while (item) - { - e = elm_object_item_data_get(item); - if (!strcmp(e->path, path)) - { - elm_genlist_item_update(e->item); - break; - } - item = elm_genlist_item_next_get(item); - } - return; - } -} - static Eina_Bool _todo_items_process(void *data) { @@ -2263,29 +1290,6 @@ _todo_items_process(void *data) i++; if (i > TODO_ITEM_MIN_BATCH) return EINA_TRUE; - if (entry->is_dir && !entry->item) - { - const Elm_Genlist_Item_Class *ic; - - ic = &_ephoto_dir_class; - if (_check_for_subdirs(entry)) - entry->item = - elm_genlist_item_sorted_insert(tb->fsel, ic, entry, - entry->parent, ELM_GENLIST_ITEM_TREE, _entry_cmp, NULL, NULL); - else - entry->item = - elm_genlist_item_sorted_insert(tb->fsel, ic, entry, - entry->parent, ELM_GENLIST_ITEM_NONE, _entry_cmp, NULL, NULL); - if (!entry->item) - { - ephoto_entry_free(tb->ephoto, entry); - } - else - { - entry->monitor = ecore_file_monitor_add(entry->path, _monitor_cb, entry); - entry->genlist = tb->fsel; - } - } else if (!entry->is_dir && !entry->item) { const Elm_Gengrid_Item_Class *ic; @@ -2327,8 +1331,6 @@ _ephoto_thumb_populate_start(void *data, int type EINA_UNUSED, { Ephoto_Thumb_Browser *tb = data; - evas_object_smart_callback_call(tb->main, "changed,directory", NULL); - tb->animator.processed = 0; tb->animator.count = 0; if (tb->ephoto->selentries) @@ -2336,13 +1338,9 @@ _ephoto_thumb_populate_start(void *data, int type EINA_UNUSED, if (tb->searching) _ephoto_thumb_search_cancel(tb->search, NULL, NULL); _todo_items_free(tb); - if (!tb->dirs_only) - { - elm_gengrid_clear(tb->grid); - tb->totimages = 0; - tb->totsize = 0; - } - elm_object_text_set(tb->direntry, tb->ephoto->config->directory); + elm_gengrid_clear(tb->grid); + tb->totimages = 0; + tb->totsize = 0; return ECORE_CALLBACK_PASS_ON; } @@ -2364,10 +1362,30 @@ _ephoto_thumb_populate_end(void *data, int type EINA_UNUSED, tb->totimages = 0; tb->totsize = 0; } - _ephoto_thumb_update_info_label(tb); + if (tb->ephoto->state == EPHOTO_STATE_THUMB) + { + evas_object_smart_callback_call(tb->main, "changed,directory", NULL); + ephoto_thumb_browser_update_info_label(tb->ephoto); + } + else if (tb->ephoto->state == EPHOTO_STATE_SINGLE) + { + if (tb->ephoto->entries) + { + ephoto_single_browser_entry_set(tb->ephoto->single_browser, NULL); + ephoto_single_browser_entries_set(tb->ephoto->single_browser, + tb->ephoto->entries); + ephoto_single_browser_entry_set(tb->ephoto->single_browser, + eina_list_nth(tb->ephoto->entries, 0)); + } + else + { + ephoto_single_browser_entry_set(tb->ephoto->single_browser, NULL); + ephoto_title_set(tb->ephoto, tb->ephoto->config->directory); + } + } + tb->entries = tb->ephoto->entries; tb->dirs_only = 0; tb->thumbs_only = 0; - tb->entries = tb->ephoto->entries; return ECORE_CALLBACK_PASS_ON; } @@ -2378,8 +1396,8 @@ _ephoto_thumb_populate_error(void *data, int type EINA_UNUSED, { Ephoto_Thumb_Browser *tb = data; - tb->dirs_only = 0; tb->thumbs_only = 0; + tb->dirs_only = 0; return ECORE_CALLBACK_PASS_ON; } @@ -2404,11 +1422,6 @@ _ephoto_thumb_entry_create(void *data, int type EINA_UNUSED, void *event) tb->todo_items = eina_list_append(tb->todo_items, e); tb->animator.count++; } - else if (e->is_dir) - { - tb->todo_items = eina_list_append(tb->todo_items, e); - tb->animator.count++; - } if (!tb->animator.todo_items) tb->animator.todo_items = ecore_animator_add(_todo_items_process, tb); @@ -2416,11 +1429,10 @@ _ephoto_thumb_entry_create(void *data, int type EINA_UNUSED, void *event) } /*Ephoto Thumb Browser Main Callbacks*/ -static void -_ephoto_show_slideshow(void *data, Evas_Object *obj EINA_UNUSED, - void *event_info EINA_UNUSED) +void +ephoto_thumb_browser_slideshow(Evas_Object *obj) { - Ephoto_Thumb_Browser *tb = data; + Ephoto_Thumb_Browser *tb = evas_object_data_get(obj, "thumb_browser"); Eina_List *selected, *s; Elm_Object_Item *item; Elm_Object_Item *it = elm_gengrid_selected_item_get(tb->grid); @@ -2486,17 +1498,7 @@ _ephoto_main_key_down(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNU if (ctrl) { - if (shift) - { - if (!strcasecmp(k, "f")) - { - if (!elm_check_state_get(tb->toggle)) - _ephoto_dir_hide_folders(tb, NULL, NULL); - else - _ephoto_dir_show_folders(tb, NULL, NULL); - } - } - else if ((!strcasecmp(k, "plus")) || (!strcasecmp(k, "equal"))) + if ((!strcasecmp(k, "plus")) || (!strcasecmp(k, "equal"))) { int zoom = tb->ephoto->config->thumb_size + ZOOM_STEP; @@ -2510,45 +1512,7 @@ _ephoto_main_key_down(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNU } else if (!strcasecmp(k, "Tab")) { - Elm_Object_Item *it = elm_gengrid_selected_item_get(tb->grid); - Ephoto_Entry *entry; - Eina_List *s; - Elm_Object_Item *item; - - if (it) - entry = elm_object_item_data_get(it); - else - entry = eina_list_nth(tb->entries, 0); - if (eina_list_count(selected) <= 1 && tb->searchentries) - { - if (tb->ephoto->selentries) - eina_list_free(tb->ephoto->selentries); - tb->ephoto->selentries = NULL; - tb->ephoto->searchentries = - eina_list_clone(tb->searchentries); - } - else if (eina_list_count(selected) > 1) - { - EINA_LIST_FOREACH(selected, s, item) - { - tb->ephoto->selentries = - eina_list_append(tb->ephoto->selentries, - elm_object_item_data_get(item)); - } - } - else - { - if (tb->ephoto->selentries) - eina_list_free(tb->ephoto->selentries); - if (tb->ephoto->searchentries) - eina_list_free(tb->ephoto->searchentries); - tb->ephoto->selentries = NULL; - tb->ephoto->searchentries = NULL; - } - if (entry) - { - evas_object_smart_callback_call(tb->main, "view", entry); - } + _view_single(tb, NULL, NULL); } else if (!strcasecmp(k, "c")) { @@ -2568,10 +1532,15 @@ _ephoto_main_key_down(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNU } else if (!strcasecmp(k, "f") && !tb->processing) { - if (tb->searching) - _ephoto_thumb_search_cancel(tb->search, NULL, NULL); + if (shift) + ephoto_show_folders(tb->ephoto, EINA_TRUE); else - _ephoto_thumb_search_start(tb, NULL, NULL); + { + if (tb->searching) + _ephoto_thumb_search_cancel(tb->search, NULL, NULL); + else + _ephoto_thumb_search_start(tb, NULL, NULL); + } } else if (!strcasecmp(k, "Delete")) { @@ -2666,8 +1635,6 @@ _ephoto_main_key_down(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNU else if (ev->compose && (((ev->compose[0] != '\\') && (ev->compose[0] >= ' ')) || ev->compose[1])) { - if (elm_object_focus_get(tb->direntry)) - return; if (!tb->searching) { _ephoto_thumb_search_start(tb, NULL, NULL); @@ -2691,31 +1658,22 @@ _ephoto_main_key_down(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNU eina_list_free(selected); } -static void _ephoto_panes_unpress(void *data, Evas_Object *obj EINA_UNUSED, +static void +_hover_dismissed_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { Ephoto_Thumb_Browser *tb = data; - if (!tb->ephoto->config->fsel_hide) - tb->ephoto->config->lpane_size = elm_panes_content_left_size_get(tb->panes); + tb->ephoto->hover_blocking = EINA_FALSE; } -static void _ephoto_panes_double_clicked(void *data, Evas_Object *obj EINA_UNUSED, +static void +_hover_expand_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { Ephoto_Thumb_Browser *tb = data; - double tmp_size = 0.0; - tmp_size = elm_panes_content_left_size_get(tb->panes); - - if (tmp_size > 0) - { - _ephoto_dir_hide_folders(tb, NULL, NULL); - } - else - { - _ephoto_dir_show_folders(tb, NULL, NULL); - } + tb->ephoto->hover_blocking = EINA_TRUE; } static void @@ -2748,13 +1706,41 @@ _ephoto_main_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, eina_list_free(tb->ephoto->searchentries); if (tb->searchentries) eina_list_free(tb->searchentries); - if (tb->monitor) - ecore_file_monitor_del(tb->monitor); free(tb); } /*Ephoto Thumb Browser Public Functions*/ +void +ephoto_thumb_browser_paste(Ephoto *ephoto, Elm_Object_Item *item) +{ + Ephoto_Thumb_Browser *tb = + evas_object_data_get(ephoto->thumb_browser, "thumb_browser"); + Ephoto_Entry *entry; + const char *path; + + if (item) + { + entry = elm_object_item_data_get(item); + path = entry->path; + } + else + path = tb->ephoto->config->directory; + + if (eina_list_count(tb->cut_items) > 0) + { + ephoto_file_paste(tb->ephoto, eina_list_clone(tb->cut_items), EINA_FALSE, path); + eina_list_free(tb->cut_items); + tb->cut_items = NULL; + } + else if (eina_list_count(tb->copy_items) > 0) + { + ephoto_file_paste(tb->ephoto, eina_list_clone(tb->copy_items), EINA_TRUE, path); + eina_list_free(tb->copy_items); + tb->copy_items = NULL; + } +} + void ephoto_thumb_browser_insert(Ephoto *ephoto, Ephoto_Entry *entry) { @@ -2797,7 +1783,7 @@ ephoto_thumb_browser_insert(Ephoto *ephoto, Ephoto_Entry *entry) { ephoto_entry_free(tb->ephoto, entry); } - _ephoto_thumb_update_info_label(tb); + ephoto_thumb_browser_update_info_label(tb->ephoto); } } @@ -2817,7 +1803,7 @@ ephoto_thumb_browser_remove(Ephoto *ephoto, Ephoto_Entry *entry) tb->totimages = 0; tb->totsize = 0; } - _ephoto_thumb_update_info_label(tb); + ephoto_thumb_browser_update_info_label(tb->ephoto); elm_object_item_del(entry->item); } } @@ -2841,33 +1827,97 @@ ephoto_thumb_browser_update(Ephoto *ephoto, Ephoto_Entry *entry) elm_gengrid_item_update(entry->item); tb->totsize += entry->size; - _ephoto_thumb_update_info_label(tb); + ephoto_thumb_browser_update_info_label(tb->ephoto); } } void -ephoto_thumb_browser_top_dir_set(Ephoto *ephoto, const char *dir) +ephoto_thumb_browser_show_controls(Ephoto *ephoto) { - Ephoto_Thumb_Browser *tb = - evas_object_data_get(ephoto->thumb_browser, "thumb_browser"); + Ephoto_Thumb_Browser *tb = evas_object_data_get(ephoto->thumb_browser, + "thumb_browser"); + Evas_Object *but, *ic, *hover; + int ret; - if (tb->monitor) - ecore_file_monitor_del(tb->monitor); - if (ephoto->top_directory) - eina_stringshare_replace(&ephoto->top_directory, dir); + ic = elm_icon_add(ephoto->controls_left); + evas_object_size_hint_min_set(ic, 20*elm_config_scale_get(), + 20*elm_config_scale_get()); + ret = elm_image_file_set(ic, PACKAGE_DATA_DIR "/images/single.png", NULL); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_BOTH, 1, 1); + but = elm_button_add(ephoto->controls_left); + if (!ret) + elm_object_text_set(but, _("View Images")); else - ephoto->top_directory = eina_stringshare_add(dir); - tb->monitor = ecore_file_monitor_add(dir, _top_monitor_cb, tb); -} + { + elm_object_part_content_set(but, "icon", ic); + elm_object_tooltip_text_set(but, _("View Images")); + elm_object_tooltip_orient_set(but, ELM_TOOLTIP_ORIENT_TOP); + } + evas_object_smart_callback_add(but, "clicked", _view_single, tb); + elm_box_pack_end(ephoto->controls_left, but); + evas_object_show(but); -void -ephoto_thumb_browser_fsel_clear(Ephoto *ephoto) -{ - Ephoto_Thumb_Browser *tb = - evas_object_data_get(ephoto->thumb_browser, "thumb_browser"); + ic = elm_icon_add(ephoto->controls_left); + evas_object_size_hint_min_set(ic, 20*elm_config_scale_get(), + 20*elm_config_scale_get()); + elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); + ret = elm_icon_standard_set(ic, "zoom-in"); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_BOTH, 1, 1); + but = elm_button_add(ephoto->controls_left); + if (!ret) + elm_object_text_set(but, _("Zoom In")); + else + { + elm_object_part_content_set(but, "icon", ic); + elm_object_tooltip_text_set(but, _("Zoom In")); + elm_object_tooltip_orient_set(but, ELM_TOOLTIP_ORIENT_TOP); + } + evas_object_smart_callback_add(but, "clicked", _zoom_in, tb); + elm_box_pack_end(ephoto->controls_left, but); + evas_object_show(but); - if (tb) - elm_genlist_clear(tb->fsel); + ic = elm_icon_add(ephoto->controls_left); + evas_object_size_hint_min_set(ic, 20*elm_config_scale_get(), + 20*elm_config_scale_get()); + elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); + elm_icon_standard_set(ic, "zoom-out"); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_BOTH, 1, 1); + but = elm_button_add(ephoto->controls_left); + if (!ret) + elm_object_text_set(but, _("Zoom Out")); + else + { + elm_object_part_content_set(but, "icon", ic); + elm_object_tooltip_text_set(but, _("Zoom Out")); + elm_object_tooltip_orient_set(but, ELM_TOOLTIP_ORIENT_TOP); + } + evas_object_smart_callback_add(but, "clicked", _zoom_out, tb); + elm_box_pack_end(ephoto->controls_left, but); + evas_object_show(but); + + hover = elm_hoversel_add(ephoto->controls_right); + elm_hoversel_hover_parent_set(hover, ephoto->win); + elm_hoversel_item_add(hover, _("Alphabetical Ascending"), + "view-sort-ascending", ELM_ICON_STANDARD, _sort_alpha_asc, tb); + elm_hoversel_item_add(hover, _("Alphabetical Descending"), + "view-sort-descending", ELM_ICON_STANDARD, _sort_alpha_desc, tb); + elm_hoversel_item_add(hover, _("Modification Time Ascending"), + "view-sort-ascending", ELM_ICON_STANDARD, _sort_mod_asc, tb); + elm_hoversel_item_add(hover, _("Modification Time Descending"), + "view-sort-descending", ELM_ICON_STANDARD, _sort_mod_desc, tb); + elm_object_text_set(hover, _("Sort")); + ic = elm_icon_add(hover); + evas_object_size_hint_min_set(ic, 20*elm_config_scale_get(), + 20*elm_config_scale_get()); + elm_icon_standard_set(ic, "view-sort-ascending"); + elm_object_part_content_set(hover, "icon", ic); + evas_object_show(ic); + elm_object_tooltip_text_set(hover, _("Sort")); + elm_object_tooltip_orient_set(hover, ELM_TOOLTIP_ORIENT_TOP); + evas_object_smart_callback_add(hover, "expanded", _hover_expand_cb, tb); + evas_object_smart_callback_add(hover, "dismissed", _hover_dismissed_cb, tb); + elm_box_pack_end(ephoto->controls_right, hover); + evas_object_show(hover); } Evas_Object * @@ -2887,21 +1937,11 @@ ephoto_thumb_browser_add(Ephoto *ephoto, Evas_Object *parent) _ephoto_thumb_file_class.func.state_get = NULL; _ephoto_thumb_file_class.func.del = _thumb_item_del; - _ephoto_dir_class.item_style = "tree_effect"; - _ephoto_dir_class.func.text_get = _dir_item_text_get; - _ephoto_dir_class.func.content_get = _dir_item_icon_get; - _ephoto_dir_class.func.state_get = NULL; - _ephoto_dir_class.func.del = _dir_item_del; - tb->ephoto = ephoto; - tb->thumbs_only = 0; - tb->dirs_only = 0; tb->dragging = 0; tb->searching = 0; tb->cut_items = NULL; tb->copy_items = NULL; - tb->dir_current = NULL; - tb->change_dir_job = NULL; tb->last_sel = NULL; tb->sort = EPHOTO_SORT_ALPHABETICAL_ASCENDING; tb->main = box; @@ -2916,33 +1956,8 @@ ephoto_thumb_browser_add(Ephoto *ephoto, Evas_Object *parent) _ephoto_main_key_down, tb); evas_object_data_set(tb->main, "thumb_browser", tb); - tb->panes = elm_panes_add(tb->main); - evas_object_size_hint_weight_set(tb->panes, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(tb->panes, EVAS_HINT_FILL, EVAS_HINT_FILL); - elm_panes_content_left_min_size_set(tb->panes, 100); - elm_panes_content_left_size_set(tb->panes, tb->ephoto->config->lpane_size); - evas_object_smart_callback_add(tb->panes, "clicked,double", - _ephoto_panes_double_clicked, tb); - evas_object_smart_callback_add(tb->panes, "unpress", - _ephoto_panes_unpress, tb); - elm_box_pack_end(tb->main, tb->panes); - evas_object_show(tb->panes); - - _ephoto_file_pane_add(tb); - elm_object_part_content_set(tb->panes, "left", tb->leftbox); - if (!tb->ephoto->config->fsel_hide) - { - evas_object_show(tb->leftbox); - } - else - { - evas_object_hide(tb->leftbox); - elm_panes_content_left_min_size_set(tb->panes, 0); - elm_panes_content_left_size_set(tb->panes, 0.0); - } - - _ephoto_thumb_pane_add(tb); - elm_object_part_content_set(tb->panes, "right", tb->table); + _ephoto_thumb_view_add(tb); + elm_box_pack_end(tb->main, tb->table); tb->handlers = eina_list_append(tb->handlers,