Fixes problem with new file dialog
This commit is contained in:
parent
27410bcd45
commit
c6c4230699
|
@ -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<i32>,
|
||||
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<PathBuf> = 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();
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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)]
|
||||
// }
|
||||
|
|
Loading…
Reference in a new issue