diff --git a/czkawka_gui/czkawka.glade b/czkawka_gui/czkawka.glade index a3c4c79..c978bb7 100644 --- a/czkawka_gui/czkawka.glade +++ b/czkawka_gui/czkawka.glade @@ -181,6 +181,43 @@ Author: RafaƂ Mikrut + + False + left + + + True + False + vertical + + + Open File + True + True + True + + + False + True + 0 + + + + + Open Folder + True + True + True + + + False + True + 1 + + + + + False diff --git a/czkawka_gui/src/connect_button_search.rs b/czkawka_gui/src/connect_button_search.rs index d5f6d87..1cf608c 100644 --- a/czkawka_gui/src/connect_button_search.rs +++ b/czkawka_gui/src/connect_button_search.rs @@ -81,8 +81,6 @@ pub fn connect_button_search( let progress_bar_all_stages = gui_data.progress_bar_all_stages.clone(); let image_preview_similar_images = gui_data.image_preview_similar_images.clone(); - let show_dialog = Arc::new(AtomicBool::new(true)); - buttons_search_clone.connect_clicked(move |_| { let included_directories = get_string_from_list_store(&scrolled_window_included_directories); let excluded_directories = get_string_from_list_store(&scrolled_window_excluded_directories); @@ -90,6 +88,8 @@ pub fn connect_button_search( let excluded_items = entry_excluded_items.get_text().as_str().to_string(); let allowed_extensions = entry_allowed_extensions.get_text().as_str().to_string(); + let show_dialog = Arc::new(AtomicBool::new(true)); + hide_all_buttons(&buttons_array); // Disable main notebook from any iteration until search will end diff --git a/czkawka_gui/src/double_click_opening.rs b/czkawka_gui/src/double_click_opening.rs index 5b250b5..77d51e9 100644 --- a/czkawka_gui/src/double_click_opening.rs +++ b/czkawka_gui/src/double_click_opening.rs @@ -1,77 +1,113 @@ use crate::help_functions::*; use gtk::prelude::*; +// TODO add option to open files and folders from context menu activated by pressing ONCE with right mouse button + pub fn opening_double_click_function_duplicates(tree_view: >k::TreeView, event: &gdk::EventButton) -> gtk::Inhibit { - if event.get_event_type() == gdk::EventType::DoubleButtonPress { - common_open_function(tree_view, ColumnsDuplicates::Name as i32, ColumnsDuplicates::Path as i32); + if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 1 { + common_open_function(tree_view, ColumnsDuplicates::Name as i32, ColumnsDuplicates::Path as i32, OpenMode::PathAndName); + } else if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 3 { + common_open_function(tree_view, ColumnsDuplicates::Name as i32, ColumnsDuplicates::Path as i32, OpenMode::OnlyPath); } gtk::Inhibit(false) } + pub fn opening_double_click_function_empty_folders(tree_view: >k::TreeView, event: &gdk::EventButton) -> gtk::Inhibit { - if event.get_event_type() == gdk::EventType::DoubleButtonPress { - common_open_function(tree_view, ColumnsEmptyFolders::Name as i32, ColumnsEmptyFolders::Path as i32); + if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 1 { + common_open_function(tree_view, ColumnsEmptyFolders::Name as i32, ColumnsEmptyFolders::Path as i32, OpenMode::PathAndName); + } else if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 3 { + common_open_function(tree_view, ColumnsEmptyFolders::Name as i32, ColumnsEmptyFolders::Path as i32, OpenMode::OnlyPath); } gtk::Inhibit(false) } pub fn opening_double_click_function_empty_files(tree_view: >k::TreeView, event: &gdk::EventButton) -> gtk::Inhibit { - if event.get_event_type() == gdk::EventType::DoubleButtonPress { - common_open_function(tree_view, ColumnsEmptyFiles::Name as i32, ColumnsEmptyFiles::Path as i32); + if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 1 { + common_open_function(tree_view, ColumnsEmptyFiles::Name as i32, ColumnsEmptyFiles::Path as i32, OpenMode::PathAndName); + } else if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 3 { + common_open_function(tree_view, ColumnsEmptyFiles::Name as i32, ColumnsEmptyFiles::Path as i32, OpenMode::OnlyPath); } gtk::Inhibit(false) } pub fn opening_double_click_function_temporary_files(tree_view: >k::TreeView, event: &gdk::EventButton) -> gtk::Inhibit { - if event.get_event_type() == gdk::EventType::DoubleButtonPress { - common_open_function(tree_view, ColumnsTemporaryFiles::Name as i32, ColumnsTemporaryFiles::Path as i32); + if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 1 { + common_open_function(tree_view, ColumnsTemporaryFiles::Name as i32, ColumnsTemporaryFiles::Path as i32, OpenMode::PathAndName); + } else if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 3 { + common_open_function(tree_view, ColumnsTemporaryFiles::Name as i32, ColumnsTemporaryFiles::Path as i32, OpenMode::OnlyPath); } gtk::Inhibit(false) } pub fn opening_double_click_function_big_files(tree_view: >k::TreeView, event: &gdk::EventButton) -> gtk::Inhibit { - if event.get_event_type() == gdk::EventType::DoubleButtonPress { - common_open_function(tree_view, ColumnsBigFiles::Name as i32, ColumnsBigFiles::Path as i32); + if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 1 { + common_open_function(tree_view, ColumnsBigFiles::Name as i32, ColumnsBigFiles::Path as i32, OpenMode::PathAndName); + } else if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 3 { + common_open_function(tree_view, ColumnsBigFiles::Name as i32, ColumnsBigFiles::Path as i32, OpenMode::OnlyPath); } gtk::Inhibit(false) } pub fn opening_double_click_function_zeroed_files(tree_view: >k::TreeView, event: &gdk::EventButton) -> gtk::Inhibit { - if event.get_event_type() == gdk::EventType::DoubleButtonPress { - common_open_function(tree_view, ColumnsZeroedFiles::Name as i32, ColumnsZeroedFiles::Path as i32); + if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 1 { + common_open_function(tree_view, ColumnsZeroedFiles::Name as i32, ColumnsZeroedFiles::Path as i32, OpenMode::PathAndName); + } else if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 3 { + common_open_function(tree_view, ColumnsZeroedFiles::Name as i32, ColumnsZeroedFiles::Path as i32, OpenMode::OnlyPath); } gtk::Inhibit(false) } pub fn opening_double_click_function_same_music(tree_view: >k::TreeView, event: &gdk::EventButton) -> gtk::Inhibit { - if event.get_event_type() == gdk::EventType::DoubleButtonPress { - common_open_function(tree_view, ColumnsSameMusic::Name as i32, ColumnsSameMusic::Path as i32); + if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 1 { + common_open_function(tree_view, ColumnsSameMusic::Name as i32, ColumnsSameMusic::Path as i32, OpenMode::PathAndName); + } else if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 3 { + common_open_function(tree_view, ColumnsSameMusic::Name as i32, ColumnsSameMusic::Path as i32, OpenMode::OnlyPath); } gtk::Inhibit(false) } pub fn opening_double_click_function_similar_images(tree_view: >k::TreeView, event: &gdk::EventButton) -> gtk::Inhibit { - if event.get_event_type() == gdk::EventType::DoubleButtonPress { - common_open_function(tree_view, ColumnsSimilarImages::Name as i32, ColumnsSimilarImages::Path as i32); + if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 1 { + common_open_function(tree_view, ColumnsSimilarImages::Name as i32, ColumnsSimilarImages::Path as i32, OpenMode::PathAndName); + } else if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 3 { + common_open_function(tree_view, ColumnsSimilarImages::Name as i32, ColumnsSimilarImages::Path as i32, OpenMode::OnlyPath); } gtk::Inhibit(false) } pub fn opening_double_click_function_invalid_symlinks(tree_view: >k::TreeView, event: &gdk::EventButton) -> gtk::Inhibit { - if event.get_event_type() == gdk::EventType::DoubleButtonPress { - common_open_function(tree_view, ColumnsInvalidSymlinks::Name as i32, ColumnsInvalidSymlinks::Path as i32); + if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 1 { + common_open_function(tree_view, ColumnsInvalidSymlinks::Name as i32, ColumnsInvalidSymlinks::Path as i32, OpenMode::PathAndName); + } else if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 3 { + common_open_function(tree_view, ColumnsInvalidSymlinks::Name as i32, ColumnsInvalidSymlinks::Path as i32, OpenMode::OnlyPath); } gtk::Inhibit(false) } -pub fn common_open_function(tree_view: >k::TreeView, column_name: i32, column_path: i32) { +pub enum OpenMode { + OnlyPath, + PathAndName, +} + +pub fn common_open_function(tree_view: >k::TreeView, column_name: i32, column_path: i32, opening_mode: OpenMode) { let selection = tree_view.get_selection(); let (selection_rows, tree_model) = selection.get_selected_rows(); for tree_path in selection_rows.iter().rev() { + let end_path; let name = tree_model.get_value(&tree_model.get_iter(tree_path).unwrap(), column_name).get::().unwrap().unwrap(); let path = tree_model.get_value(&tree_model.get_iter(tree_path).unwrap(), column_path).get::().unwrap().unwrap(); - if open::that(format!("{}/{}", path, name)).is_err() { - println!("Failed to open {}/{}", path, name); + match opening_mode { + OpenMode::OnlyPath => { + end_path = path; + } + OpenMode::PathAndName => { + end_path = format!("{}/{}", path, name); + } + } + + if open::that(&end_path).is_err() { + println!("Failed to open {}", end_path); } } } diff --git a/czkawka_gui/src/gui_data.rs b/czkawka_gui/src/gui_data.rs index bdb05cd..8595e7f 100644 --- a/czkawka_gui/src/gui_data.rs +++ b/czkawka_gui/src/gui_data.rs @@ -89,10 +89,14 @@ pub struct GuiData { pub buttons_popover_very_simple_list_unselect_all: gtk::Button, pub buttons_popover_very_simple_list_reverse: gtk::Button, + pub buttons_popover_right_click_open_file: gtk::Button, + pub buttons_popover_right_click_open_folder: gtk::Button, + //// Popovers pub popover_select_duplicate: gtk::Popover, pub popover_select_simple_list: gtk::Popover, pub popover_select_very_simple_list: gtk::Popover, + pub popover_right_click: gtk::Popover, //// Check Buttons pub check_button_recursive: gtk::CheckButton, @@ -302,10 +306,14 @@ impl GuiData { let buttons_popover_very_simple_list_unselect_all: gtk::Button = builder.get_object("buttons_popover_very_simple_list_unselect_all").unwrap(); let buttons_popover_very_simple_list_reverse: gtk::Button = builder.get_object("buttons_popover_very_simple_list_reverse").unwrap(); + let buttons_popover_right_click_open_file: gtk::Button = builder.get_object("buttons_popover_right_click_open_file").unwrap(); + let buttons_popover_right_click_open_folder: gtk::Button = builder.get_object("buttons_popover_right_click_open_folder").unwrap(); + //// Popovers let popover_select_duplicate: gtk::Popover = builder.get_object("popover_select_duplicate").unwrap(); let popover_select_simple_list: gtk::Popover = builder.get_object("popover_select_simple_list").unwrap(); let popover_select_very_simple_list: gtk::Popover = builder.get_object("popover_select_very_simple_list").unwrap(); + let popover_right_click: gtk::Popover = builder.get_object("popover_right_click").unwrap(); //// Check Buttons let check_button_recursive: gtk::CheckButton = builder.get_object("check_button_recursive").unwrap(); @@ -449,9 +457,12 @@ impl GuiData { buttons_popover_very_simple_list_select_all, buttons_popover_very_simple_list_unselect_all, buttons_popover_very_simple_list_reverse, + buttons_popover_right_click_open_file, + buttons_popover_right_click_open_folder, popover_select_duplicate, popover_select_simple_list, popover_select_very_simple_list, + popover_right_click, check_button_recursive, check_button_music_title, check_button_music_artist, diff --git a/czkawka_gui/src/initialize_gui.rs b/czkawka_gui/src/initialize_gui.rs index 2fb1ee9..c25e7fe 100644 --- a/czkawka_gui/src/initialize_gui.rs +++ b/czkawka_gui/src/initialize_gui.rs @@ -155,11 +155,7 @@ pub fn initialize_gui(gui_data: &GuiData) { create_tree_view_similar_images(&mut tree_view); tree_view.connect_button_press_event(opening_double_click_function_similar_images); - tree_view.connect_button_release_event(move |tree_view, event| { - if event.get_event_type() == gdk::EventType::DoubleButtonPress { - common_open_function(tree_view, ColumnsSimilarImages::Name as i32, ColumnsSimilarImages::Path as i32); - } - + tree_view.connect_button_release_event(move |tree_view, _event| { let (selected_rows, tree_model) = tree_view.get_selection().get_selected_rows(); let mut created_image = false;