|
|
|
@ -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<PathBuf> = 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 {
|
|
|
|
|