From c6c4230699715ee6a91fdf153cc5b6255bbf5ad0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Mikrut?= Date: Sun, 19 Feb 2023 12:18:51 +0100 Subject: [PATCH] Fixes problem with new file dialog --- .../src/connect_things/connect_button_move.rs | 83 ++++++++----------- .../connect_selection_of_directories.rs | 51 ++++++++---- czkawka_gui/src/notebook_enums.rs | 18 ++-- 3 files changed, 76 insertions(+), 76 deletions(-) diff --git a/czkawka_gui/src/connect_things/connect_button_move.rs b/czkawka_gui/src/connect_things/connect_button_move.rs index 2012a07..734f8b5 100644 --- a/czkawka_gui/src/connect_things/connect_button_move.rs +++ b/czkawka_gui/src/connect_things/connect_button_move.rs @@ -1,7 +1,7 @@ use std::path::{Path, PathBuf}; use gtk4::prelude::*; -use gtk4::{FileChooserNative, ResponseType, TreePath}; +use gtk4::{ResponseType, TreePath}; use crate::flg; use crate::gui_structs::gui_data::GuiData; @@ -25,7 +25,7 @@ pub fn connect_button_move(gui_data: &GuiData) { let preview_path = gui_data.preview_path.clone(); let file_dialog_move_to_folder = gui_data.file_dialog_move_to_folder.clone(); - buttons_move.connect_clicked(move |_| { + file_dialog_move_to_folder.connect_response(move |file_chooser, response_type| { let nb_number = notebook_main.current_page().unwrap(); let tree_view = &main_tree_views[nb_number as usize]; let nb_object = &NOTEBOOKS_INFO[nb_number as usize]; @@ -36,49 +36,10 @@ pub fn connect_button_move(gui_data: &GuiData) { if number_of_selected_items == 0 { return; } - move_things( - tree_view, - nb_object.column_name, - nb_object.column_path, - nb_object.column_header, - nb_object.column_selection, - &entry_info, - &text_view_errors, - &file_dialog_move_to_folder, - ); - match &nb_object.notebook_type { - NotebookMainEnum::SimilarImages | NotebookMainEnum::Duplicate => { - if nb_object.notebook_type == NotebookMainEnum::SimilarImages { - image_preview_similar_images.hide(); - } else { - image_preview_duplicates.hide(); - } - *preview_path.borrow_mut() = String::new(); - } - _ => {} - } - }); -} + reset_text_view(&text_view_errors); -// TODO add progress bar -fn move_things( - tree_view: >k4::TreeView, - column_file_name: i32, - column_path: i32, - column_header: Option, - column_selection: i32, - entry_info: >k4::Entry, - text_view_errors: >k4::TextView, - file_dialog_move_to_folder: &FileChooserNative, -) { - reset_text_view(text_view_errors); - - let entry_info = entry_info.clone(); - let text_view_errors = text_view_errors.clone(); - let tree_view = tree_view.clone(); - file_dialog_move_to_folder.connect_response(move |file_chooser, response_type| { - if response_type == ResponseType::Ok { + if response_type == ResponseType::Accept { let mut folders: Vec = Vec::new(); let g_files = file_chooser.files(); for index in 0..g_files.n_items() { @@ -102,23 +63,45 @@ fn move_things( ); } else { let folder = folders[0].clone(); - if let Some(column_header) = column_header { + if let Some(column_header) = nb_object.column_header { move_with_tree( - &tree_view, - column_file_name, - column_path, + tree_view, + nb_object.column_name, + nb_object.column_path, column_header, - column_selection, + nb_object.column_selection, &folder, &entry_info, &text_view_errors, ); } else { - move_with_list(&tree_view, column_file_name, column_path, column_selection, &folder, &entry_info, &text_view_errors); + move_with_list( + tree_view, + nb_object.column_name, + nb_object.column_path, + nb_object.column_selection, + &folder, + &entry_info, + &text_view_errors, + ); } } } - // file_chooser.close(); + match &nb_object.notebook_type { + NotebookMainEnum::SimilarImages | NotebookMainEnum::Duplicate => { + if nb_object.notebook_type == NotebookMainEnum::SimilarImages { + image_preview_similar_images.hide(); + } else { + image_preview_duplicates.hide(); + } + *preview_path.borrow_mut() = String::new(); + } + _ => {} + } + }); + + buttons_move.connect_clicked(move |_| { + file_dialog_move_to_folder.show(); }); } diff --git a/czkawka_gui/src/connect_things/connect_selection_of_directories.rs b/czkawka_gui/src/connect_things/connect_selection_of_directories.rs index bec08f3..68f6402 100644 --- a/czkawka_gui/src/connect_things/connect_selection_of_directories.rs +++ b/czkawka_gui/src/connect_things/connect_selection_of_directories.rs @@ -1,7 +1,7 @@ use std::path::PathBuf; use gtk4::prelude::*; -use gtk4::{FileChooserNative, Orientation, ResponseType, TreeView, Window}; +use gtk4::{FileChooserNative, Notebook, Orientation, ResponseType, TreeView, Window}; #[cfg(target_family = "windows")] use czkawka_core::common::Common; @@ -9,6 +9,7 @@ use czkawka_core::common::Common; use crate::flg; use crate::gui_structs::gui_data::GuiData; use crate::help_functions::{check_if_value_is_in_list_store, get_list_store, ColumnsExcludedDirectory, ColumnsIncludedDirectory}; +use crate::notebook_enums::{to_notebook_upper_enum, NotebookUpperEnum}; pub fn connect_selection_of_directories(gui_data: &GuiData) { // Add manually directory @@ -31,22 +32,35 @@ pub fn connect_selection_of_directories(gui_data: &GuiData) { } // Add included directory { - let tree_view_included_directories = gui_data.upper_notebook.tree_view_included_directories.clone(); let buttons_add_included_directory = gui_data.upper_notebook.buttons_add_included_directory.clone(); let file_dialog_include_exclude_folder_selection = gui_data.file_dialog_include_exclude_folder_selection.clone(); buttons_add_included_directory.connect_clicked(move |_| { - add_chosen_directories(&file_dialog_include_exclude_folder_selection, &tree_view_included_directories, false); + file_dialog_include_exclude_folder_selection.show(); + file_dialog_include_exclude_folder_selection.set_title(&flg!("include_folders_dialog_title")); }); } // Add excluded directory { - let tree_view_excluded_directories = gui_data.upper_notebook.tree_view_excluded_directories.clone(); let buttons_add_excluded_directory = gui_data.upper_notebook.buttons_add_excluded_directory.clone(); let file_dialog_include_exclude_folder_selection = gui_data.file_dialog_include_exclude_folder_selection.clone(); buttons_add_excluded_directory.connect_clicked(move |_| { - add_chosen_directories(&file_dialog_include_exclude_folder_selection, &tree_view_excluded_directories, true); + file_dialog_include_exclude_folder_selection.show(); + file_dialog_include_exclude_folder_selection.set_title(&flg!("exclude_folders_dialog_title")); }); } + // Conect + { + let notebook_upper = gui_data.upper_notebook.notebook_upper.clone(); + let tree_view_included_directories = gui_data.upper_notebook.tree_view_included_directories.clone(); + let tree_view_excluded_directories = gui_data.upper_notebook.tree_view_excluded_directories.clone(); + let file_dialog_include_exclude_folder_selection = gui_data.file_dialog_include_exclude_folder_selection.clone(); + connect_file_dialog( + &file_dialog_include_exclude_folder_selection, + tree_view_included_directories, + tree_view_excluded_directories, + notebook_upper, + ); + } // Remove Excluded Folder { let buttons_remove_excluded_directory = gui_data.upper_notebook.buttons_remove_excluded_directory.clone(); @@ -79,19 +93,22 @@ pub fn connect_selection_of_directories(gui_data: &GuiData) { } } -fn add_chosen_directories(file_dialog_include_exclude_folder_selection: &FileChooserNative, tree_view: &TreeView, excluded_items: bool) { - let folders_to = if excluded_items { - flg!("exclude_folders_dialog_title") - } else { - flg!("include_folders_dialog_title") - }; - - file_dialog_include_exclude_folder_selection.show(); - file_dialog_include_exclude_folder_selection.set_title(&folders_to); - - let tree_view = tree_view.clone(); +fn connect_file_dialog(file_dialog_include_exclude_folder_selection: &FileChooserNative, include_tree_view: TreeView, exclude_tree_view: TreeView, notebook_upper: Notebook) { file_dialog_include_exclude_folder_selection.connect_response(move |file_chooser, response_type| { if response_type == ResponseType::Accept { + let excluded_items; + let tree_view = match to_notebook_upper_enum(notebook_upper.current_page().unwrap()) { + NotebookUpperEnum::IncludedDirectories => { + excluded_items = false; + &include_tree_view + } + NotebookUpperEnum::ExcludedDirectories => { + excluded_items = true; + &exclude_tree_view + } + _ => panic!(), + }; + let mut folders: Vec = Vec::new(); let g_files = file_chooser.files(); for index in 0..g_files.n_items() { @@ -104,7 +121,7 @@ fn add_chosen_directories(file_dialog_include_exclude_folder_selection: &FileCho } } - let list_store = get_list_store(&tree_view); + let list_store = get_list_store(tree_view); if excluded_items { for file_entry in &folders { diff --git a/czkawka_gui/src/notebook_enums.rs b/czkawka_gui/src/notebook_enums.rs index f653433..d02c8a8 100644 --- a/czkawka_gui/src/notebook_enums.rs +++ b/czkawka_gui/src/notebook_enums.rs @@ -57,15 +57,15 @@ pub enum NotebookUpperEnum { ItemsConfiguration, } -// pub fn to_notebook_upper_enum(notebook_number: u32) -> NotebookUpperEnum { -// match notebook_number { -// 0 => NotebookUpperEnum::IncludedDirectories, -// 1 => NotebookUpperEnum::ExcludedDirectories, -// 2 => NotebookUpperEnum::ItemsConfiguration, -// _ => panic!("Invalid Upper Notebook Tab"), -// } -// } -// +pub fn to_notebook_upper_enum(notebook_number: u32) -> NotebookUpperEnum { + match notebook_number { + 0 => NotebookUpperEnum::IncludedDirectories, + 1 => NotebookUpperEnum::ExcludedDirectories, + 2 => NotebookUpperEnum::ItemsConfiguration, + _ => panic!("Invalid Upper Notebook Tab"), + } +} + // pub fn get_all_upper_tabs() -> [NotebookUpperEnum; NUMBER_OF_NOTEBOOK_UPPER_TABS] { // [to_notebook_upper_enum(0), to_notebook_upper_enum(1), to_notebook_upper_enum(2)] // }