diff --git a/Cargo.lock b/Cargo.lock index 82a9094..91bb884 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -38,18 +38,18 @@ dependencies = [ [[package]] name = "ansi_term" -version = "0.11.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" +checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" dependencies = [ "winapi", ] [[package]] name = "anyhow" -version = "1.0.49" +version = "1.0.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a03e93e97a28fbc9f42fbc5ba0886a3c67eb637b476dbee711f80a6ffe8223d" +checksum = "8b26702f315f53b6071259e15dd9d64528213b44d61de1ec926eca7715d62203" [[package]] name = "arrayref" @@ -312,9 +312,9 @@ dependencies = [ [[package]] name = "clap" -version = "2.33.3" +version = "2.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002" +checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" dependencies = [ "ansi_term", "atty", @@ -1889,9 +1889,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" +checksum = "3c9613b5a66ab9ba26415184cfc41156594925a9cf3a2057e57f31ff145f6568" [[package]] name = "same-file" diff --git a/czkawka_gui/src/connect_button_delete.rs b/czkawka_gui/src/connect_button_delete.rs index 480b920..9eb4be3 100644 --- a/czkawka_gui/src/connect_button_delete.rs +++ b/czkawka_gui/src/connect_button_delete.rs @@ -3,7 +3,7 @@ use std::fs; use std::fs::Metadata; use gtk::prelude::*; -use gtk::{Align, CheckButton, Dialog, TextView}; +use gtk::{Align, CheckButton, Dialog, ResponseType, TextView}; use crate::gui_data::GuiData; use crate::help_functions::*; @@ -96,24 +96,16 @@ pub async fn check_if_can_delete_files(check_button_settings_confirm_deletion: & true } -fn create_dialog_ask_for_deletion(window_main: >k::Window) -> (Dialog, CheckButton) { - let confirmation_dialog_delete = gtk::Dialog::with_buttons( - Some("Delete confirmation"), - Some(window_main), - gtk::DialogFlags::DESTROY_WITH_PARENT, - &[("Ok", gtk::ResponseType::Ok), ("Close", gtk::ResponseType::Cancel)], - ); +fn create_dialog_ask_for_deletion(_window_main: >k::Window) -> (Dialog, CheckButton) { + let confirmation_dialog_delete = gtk::Dialog::builder().title("Delete confirmation").build(); + let button_ok = confirmation_dialog_delete.add_button("Ok", ResponseType::Ok); + confirmation_dialog_delete.add_button("Close", ResponseType::Cancel); + let label: gtk::Label = gtk::Label::new(Some("Are you sure that you want to delete files?")); let check_button: gtk::CheckButton = gtk::CheckButton::with_label("Ask next time"); check_button.set_active(true); check_button.set_halign(Align::Center); - let button_box = get_dialog_box_child(&confirmation_dialog_delete).children()[0].clone().downcast::().unwrap().children()[0] - .clone() - .downcast::() - .unwrap(); - - let button_ok = button_box.children()[0].clone(); button_ok.grab_focus(); let internal_box = get_dialog_box_child(&confirmation_dialog_delete); @@ -124,25 +116,17 @@ fn create_dialog_ask_for_deletion(window_main: >k::Window) -> (Dialog, CheckBu (confirmation_dialog_delete, check_button) } -fn create_dialog_group_deletion(window_main: >k::Window) -> (Dialog, CheckButton) { - let confirmation_dialog_group_delete = gtk::Dialog::with_buttons( - Some("Confirmation of deleting all files in group"), - Some(window_main), - gtk::DialogFlags::MODAL, - &[("Ok", gtk::ResponseType::Ok), ("Close", gtk::ResponseType::Cancel)], - ); +fn create_dialog_group_deletion(_window_main: >k::Window) -> (Dialog, CheckButton) { + let confirmation_dialog_group_delete = gtk::Dialog::builder().title("Confirmation of deleting all files in group").build(); + let button_ok = confirmation_dialog_group_delete.add_button("Ok", ResponseType::Ok); + confirmation_dialog_group_delete.add_button("Close", ResponseType::Cancel); + let label: gtk::Label = gtk::Label::new(Some("In some groups there are selected all records.")); let label2: gtk::Label = gtk::Label::new(Some("Are you sure that you want to delete them?")); let check_button: gtk::CheckButton = gtk::CheckButton::with_label("Ask next time"); check_button.set_active(true); check_button.set_halign(Align::Center); - let button_box = get_dialog_box_child(&confirmation_dialog_group_delete).children()[0].clone().downcast::().unwrap().children()[0] - .clone() - .downcast::() - .unwrap(); - - let button_ok = button_box.children()[0].clone(); button_ok.grab_focus(); let internal_box = get_dialog_box_child(&confirmation_dialog_group_delete); diff --git a/czkawka_gui/src/connect_button_move.rs b/czkawka_gui/src/connect_button_move.rs index 38296eb..bfcea3b 100644 --- a/czkawka_gui/src/connect_button_move.rs +++ b/czkawka_gui/src/connect_button_move.rs @@ -1,7 +1,7 @@ use std::path::{Path, PathBuf}; use gtk::prelude::*; -use gtk::TreePath; +use gtk::{ResponseType, TreePath}; use crate::gui_data::GuiData; use crate::help_functions::*; @@ -53,18 +53,22 @@ pub fn connect_button_move(gui_data: &GuiData) { fn move_things(tree_view: >k::TreeView, column_file_name: i32, column_path: i32, column_color: Option, column_selection: i32, entry_info: >k::Entry, text_view_errors: >k::TextView, window_main: >k::Window) { reset_text_view(text_view_errors); - let chooser = gtk::FileChooserDialog::with_buttons( - Some("Choose folder to which you want to move duplicated files"), - Some(window_main), - gtk::FileChooserAction::SelectFolder, - &[("Ok", gtk::ResponseType::Ok), ("Close", gtk::ResponseType::Cancel)], - ); + let chooser = gtk::FileChooserDialog::builder() + .title("Choose folder to which you want to move duplicated files") + .action(gtk::FileChooserAction::SelectFolder) + .build(); + chooser.add_button("Ok", ResponseType::Ok); + chooser.add_button("Close", ResponseType::Cancel); + chooser.set_select_multiple(false); chooser.show_all(); + window_main.set_sensitive(false); + let entry_info = entry_info.clone(); let text_view_errors = text_view_errors.clone(); let tree_view = tree_view.clone(); + let window_main = window_main.clone(); chooser.connect_response(move |file_chooser, response_type| { if response_type == gtk::ResponseType::Ok { let folders = file_chooser.filenames(); @@ -80,6 +84,7 @@ fn move_things(tree_view: >k::TreeView, column_file_name: i32, column_path: i3 } } file_chooser.close(); + window_main.set_sensitive(true); }); } diff --git a/czkawka_gui/src/connect_notebook_tabs.rs b/czkawka_gui/src/connect_notebook_tabs.rs index f976c84..773b450 100644 --- a/czkawka_gui/src/connect_notebook_tabs.rs +++ b/czkawka_gui/src/connect_notebook_tabs.rs @@ -22,7 +22,7 @@ pub fn connect_notebook_tabs(gui_data: &GuiData) { { for (index, upper_tab) in get_all_upper_tabs().iter().enumerate() { if *shared_upper_notebooks.borrow_mut().get_mut(¤t_tab_in_main_notebook).unwrap().get_mut(upper_tab).unwrap() { - notebook_upper.children().get(index).unwrap().show(); + notebook_upper.children().get(index).unwrap().show(); // TODO find alternative for children } else { notebook_upper.children().get(index).unwrap().hide(); } diff --git a/czkawka_gui/src/connect_popovers.rs b/czkawka_gui/src/connect_popovers.rs index 7ac1147..124bac8 100644 --- a/czkawka_gui/src/connect_popovers.rs +++ b/czkawka_gui/src/connect_popovers.rs @@ -1,5 +1,5 @@ use gtk::prelude::*; -use gtk::{TreeIter, Window}; +use gtk::{ResponseType, TreeIter, Window}; use czkawka_core::common::Common; @@ -213,7 +213,7 @@ fn popover_one_oldest_newest(popover: >k::Popover, tree_view: >k::TreeView, popover.popdown(); } -fn popover_custom_select_unselect(popover: >k::Popover, window_main: &Window, tree_view: >k::TreeView, column_color: Option, column_file_name: i32, column_path: i32, column_button_selection: u32, select_things: bool) { +fn popover_custom_select_unselect(popover: >k::Popover, _window_main: &Window, tree_view: >k::TreeView, column_color: Option, column_file_name: i32, column_path: i32, column_button_selection: u32, select_things: bool) { popover.popdown(); enum WildcardType { @@ -229,7 +229,10 @@ fn popover_custom_select_unselect(popover: >k::Popover, window_main: &Window, // Accept Dialog { - let confirmation_dialog_delete = gtk::Dialog::with_buttons(Some(window_title), Some(window_main), gtk::DialogFlags::MODAL, &[("Ok", gtk::ResponseType::Ok), ("Close", gtk::ResponseType::Cancel)]); + let confirmation_dialog_select_unselect = gtk::Dialog::builder().title(window_title).build(); + confirmation_dialog_select_unselect.add_button("Ok", ResponseType::Ok); + confirmation_dialog_select_unselect.add_button("Close", ResponseType::Cancel); + let label: gtk::Label = gtk::Label::new(Some("Usage: */folder-nr*/* or name-version-*.txt")); let radio_path = gtk::RadioButton::builder().label("Path").build(); @@ -261,13 +264,13 @@ fn popover_custom_select_unselect(popover: >k::Popover, window_main: &Window, grid.attach(&entry_name, 1, 2, 1, 1); grid.attach(&entry_name_path, 1, 3, 1, 1); - let box_widget = get_dialog_box_child(&confirmation_dialog_delete); + let box_widget = get_dialog_box_child(&confirmation_dialog_select_unselect); box_widget.add(&grid); - confirmation_dialog_delete.show_all(); + confirmation_dialog_select_unselect.show_all(); let tree_view = tree_view.clone(); - confirmation_dialog_delete.connect_response(move |confirmation_dialog_delete, response_type| { + confirmation_dialog_select_unselect.connect_response(move |confirmation_dialog_select_unselect, response_type| { let wildcard_type: WildcardType; let wildcard: String; @@ -334,10 +337,10 @@ fn popover_custom_select_unselect(popover: >k::Popover, window_main: &Window, } } } else { - confirmation_dialog_delete.close(); + confirmation_dialog_select_unselect.close(); return; } - confirmation_dialog_delete.close(); + confirmation_dialog_select_unselect.close(); }); } } diff --git a/czkawka_gui/src/connect_selection_of_directories.rs b/czkawka_gui/src/connect_selection_of_directories.rs index c20958b..98feb19 100644 --- a/czkawka_gui/src/connect_selection_of_directories.rs +++ b/czkawka_gui/src/connect_selection_of_directories.rs @@ -1,11 +1,11 @@ use gtk::prelude::*; -use gtk::{TreeView, Window}; +use gtk::{ResponseType, TreeView, Window}; #[cfg(target_family = "windows")] use czkawka_core::common::Common; use crate::gui_data::GuiData; -use crate::help_functions::{get_list_store, ColumnsDirectory}; +use crate::help_functions::{get_dialog_box_child, get_list_store, ColumnsDirectory}; pub fn connect_selection_of_directories(gui_data: &GuiData) { // Add manually directory @@ -78,11 +78,18 @@ pub fn connect_selection_of_directories(gui_data: &GuiData) { fn add_chosen_directories(window_main: &Window, tree_view: &TreeView, excluded_items: bool) { let folders_to = if excluded_items { "Folders to exclude" } else { "Folders to include" }; - let chooser = gtk::FileChooserDialog::with_buttons(Some(folders_to), Some(window_main), gtk::FileChooserAction::SelectFolder, &[("Ok", gtk::ResponseType::Ok), ("Close", gtk::ResponseType::Cancel)]); + + let chooser = gtk::FileChooserDialog::builder().title(folders_to).action(gtk::FileChooserAction::SelectFolder).build(); + chooser.add_button("Ok", ResponseType::Ok); + chooser.add_button("Close", ResponseType::Cancel); + chooser.set_select_multiple(true); chooser.show_all(); + window_main.set_sensitive(false); + let tree_view = tree_view.clone(); + let window_main = window_main.clone(); chooser.connect_response(move |chooser, response_type| { if response_type == gtk::ResponseType::Ok { let folder = chooser.filenames(); @@ -95,21 +102,25 @@ fn add_chosen_directories(window_main: &Window, tree_view: &TreeView, excluded_i } } chooser.close(); + window_main.set_sensitive(true); }); } fn add_manually_directories(window_main: &Window, tree_view: &TreeView) { - let dialog_manual_add_directory = gtk::Dialog::with_buttons(Some("Add directory manually"), Some(window_main), gtk::DialogFlags::MODAL, &[("Ok", gtk::ResponseType::Ok), ("Close", gtk::ResponseType::Cancel)]); + let dialog_manual_add_directory = gtk::Dialog::builder().title("Add directory manually").build(); + dialog_manual_add_directory.add_button("Ok", ResponseType::Ok); + dialog_manual_add_directory.add_button("Close", ResponseType::Cancel); + + window_main.set_sensitive(false); + let entry: gtk::Entry = gtk::Entry::new(); - for widgets in dialog_manual_add_directory.children() { - // By default GtkBox is child of dialog, so we can easily add other things to it - widgets.clone().downcast::().unwrap().add(&entry); - } + get_dialog_box_child(&dialog_manual_add_directory).add(&entry); dialog_manual_add_directory.show_all(); let tree_view = tree_view.clone(); + let window_main = window_main.clone(); dialog_manual_add_directory.connect_response(move |dialog_manual_add_directory, response_type| { if response_type == gtk::ResponseType::Ok { let text = entry.text().to_string().trim().to_string(); @@ -123,10 +134,8 @@ fn add_manually_directories(window_main: &Window, tree_view: &TreeView) { let values: [(u32, &dyn ToValue); 1] = [(ColumnsDirectory::Path as u32, &text)]; list_store.set(&list_store.append(), &values); } - } else { - dialog_manual_add_directory.close(); - return; } dialog_manual_add_directory.close(); + window_main.set_sensitive(true); }); } diff --git a/czkawka_gui/src/help_functions.rs b/czkawka_gui/src/help_functions.rs index 7e013e2..505ebe3 100644 --- a/czkawka_gui/src/help_functions.rs +++ b/czkawka_gui/src/help_functions.rs @@ -427,10 +427,6 @@ pub fn get_dialog_box_child(dialog: >k::Dialog) -> gtk::Box { dialog.child().unwrap().downcast::().unwrap() } -// pub fn get_box_child_from_box(box_main: >k::Box) -> gtk::Box { -// box_main.first_child().unwrap().downcast::().unwrap() // TODO Probably fist_child will be proper replacement for childrens() -// } - pub fn change_dimension_to_krotka(dimensions: String) -> (u64, u64) { #[allow(clippy::single_char_pattern)] let vec = dimensions.split::<&str>("x").collect::>();