From a8c0a80bcf62f122d071e14002bd17519da5c988 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Mikrut?= <41945903+qarmin@users.noreply.github.com> Date: Thu, 31 Dec 2020 10:26:07 +0100 Subject: [PATCH] Add manual excluding directories (#168) --- czkawka_gui/czkawka.glade | 58 ++++++++++++++++++- .../src/connect_selection_of_directories.rs | 44 ++++++++++++++ czkawka_gui/src/gui_data.rs | 3 + 3 files changed, 102 insertions(+), 3 deletions(-) diff --git a/czkawka_gui/czkawka.glade b/czkawka_gui/czkawka.glade index d1cc347..5ca6192 100644 --- a/czkawka_gui/czkawka.glade +++ b/czkawka_gui/czkawka.glade @@ -444,6 +444,7 @@ Author: Rafał Mikrut True False + 5 vertical 1 @@ -662,9 +663,9 @@ Author: Rafał Mikrut True False + 5 vertical 1 - True True @@ -697,7 +698,7 @@ Author: Rafał Mikrut True False - Add + Add False @@ -748,7 +749,7 @@ Author: Rafał Mikrut True False - Remove + Remove False @@ -767,6 +768,57 @@ Author: Rafał Mikrut 1 + + + True + True + True + + + True + False + 0 + 0 + + + True + False + 4 + + + True + False + insert-link + + + False + True + 0 + + + + + True + False + Manual Add + + + False + True + 1 + + + + + + + + + False + False + 2 + + False diff --git a/czkawka_gui/src/connect_selection_of_directories.rs b/czkawka_gui/src/connect_selection_of_directories.rs index 16b89dc..f5031f6 100644 --- a/czkawka_gui/src/connect_selection_of_directories.rs +++ b/czkawka_gui/src/connect_selection_of_directories.rs @@ -46,6 +46,50 @@ pub fn connect_selection_of_directories(gui_data: &GuiData) { dialog_manual_add_directory.close(); }); } + // Add manually excluded directory + { + let scrolled_window_excluded_directories = gui_data.scrolled_window_excluded_directories.clone(); + let window_main = gui_data.window_main.clone(); + let buttons_manual_add_excluded_directory = gui_data.buttons_manual_add_excluded_directory.clone(); + buttons_manual_add_excluded_directory.connect_clicked(move |_| { + let dialog_manual_add_directory = gtk::Dialog::with_buttons( + Some("Add excluded directory manually"), + Some(&window_main), + gtk::DialogFlags::MODAL, + &[("Ok", gtk::ResponseType::Ok), ("Close", gtk::ResponseType::Cancel)], + ); + let entry: gtk::Entry = gtk::Entry::new(); + + for widgets in dialog_manual_add_directory.get_children() { + // By default GtkBox is child of dialog, so we can easily add other things to it + widgets.clone().downcast::().unwrap().add(&entry); + } + + dialog_manual_add_directory.show_all(); + + let response_type = dialog_manual_add_directory.run(); + if response_type == gtk::ResponseType::Ok { + let text = entry.get_text().to_string().trim().to_string(); + + #[cfg(target_family = "windows")] + let text = Common::normalize_windows_path(text).to_string_lossy().to_string(); + + if !text.is_empty() { + let tree_view = scrolled_window_excluded_directories.get_children().get(0).unwrap().clone().downcast::().unwrap(); + let list_store = tree_view.get_model().unwrap().downcast::().unwrap(); + + let col_indices = [0]; + + let values: [&dyn ToValue; 1] = [&text]; + list_store.set(&list_store.append(), &col_indices, &values); + } + } else { + dialog_manual_add_directory.close(); + return; + } + dialog_manual_add_directory.close(); + }); + } // Add included directory { let scrolled_window_included_directories = gui_data.scrolled_window_included_directories.clone(); diff --git a/czkawka_gui/src/gui_data.rs b/czkawka_gui/src/gui_data.rs index f297dd3..fbe0a5e 100644 --- a/czkawka_gui/src/gui_data.rs +++ b/czkawka_gui/src/gui_data.rs @@ -67,6 +67,7 @@ pub struct GuiData { pub buttons_manual_add_directory: gtk::Button, pub buttons_add_included_directory: gtk::Button, pub buttons_remove_included_directory: gtk::Button, + pub buttons_manual_add_excluded_directory: gtk::Button, pub buttons_add_excluded_directory: gtk::Button, pub buttons_remove_excluded_directory: gtk::Button, @@ -281,6 +282,7 @@ impl GuiData { let buttons_manual_add_directory: gtk::Button = builder.get_object("buttons_manual_add_directory").unwrap(); let buttons_add_included_directory: gtk::Button = builder.get_object("buttons_add_included_directory").unwrap(); let buttons_remove_included_directory: gtk::Button = builder.get_object("buttons_remove_included_directory").unwrap(); + let buttons_manual_add_excluded_directory: gtk::Button = builder.get_object("buttons_manual_add_excluded_directory").unwrap(); let buttons_add_excluded_directory: gtk::Button = builder.get_object("buttons_add_excluded_directory").unwrap(); let buttons_remove_excluded_directory: gtk::Button = builder.get_object("buttons_remove_excluded_directory").unwrap(); @@ -434,6 +436,7 @@ impl GuiData { buttons_manual_add_directory, buttons_add_included_directory, buttons_remove_included_directory, + buttons_manual_add_excluded_directory, buttons_add_excluded_directory, buttons_remove_excluded_directory, buttons_popover_select_all,