Skip to content

Commit c6c4230

Browse files
committed
Fixes problem with new file dialog
1 parent 27410bc commit c6c4230

File tree

3 files changed

+76
-76
lines changed

3 files changed

+76
-76
lines changed

czkawka_gui/src/connect_things/connect_button_move.rs

+33-50
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use std::path::{Path, PathBuf};
22

33
use gtk4::prelude::*;
4-
use gtk4::{FileChooserNative, ResponseType, TreePath};
4+
use gtk4::{ResponseType, TreePath};
55

66
use crate::flg;
77
use crate::gui_structs::gui_data::GuiData;
@@ -25,7 +25,7 @@ pub fn connect_button_move(gui_data: &GuiData) {
2525
let preview_path = gui_data.preview_path.clone();
2626
let file_dialog_move_to_folder = gui_data.file_dialog_move_to_folder.clone();
2727

28-
buttons_move.connect_clicked(move |_| {
28+
file_dialog_move_to_folder.connect_response(move |file_chooser, response_type| {
2929
let nb_number = notebook_main.current_page().unwrap();
3030
let tree_view = &main_tree_views[nb_number as usize];
3131
let nb_object = &NOTEBOOKS_INFO[nb_number as usize];
@@ -36,49 +36,10 @@ pub fn connect_button_move(gui_data: &GuiData) {
3636
if number_of_selected_items == 0 {
3737
return;
3838
}
39-
move_things(
40-
tree_view,
41-
nb_object.column_name,
42-
nb_object.column_path,
43-
nb_object.column_header,
44-
nb_object.column_selection,
45-
&entry_info,
46-
&text_view_errors,
47-
&file_dialog_move_to_folder,
48-
);
4939

50-
match &nb_object.notebook_type {
51-
NotebookMainEnum::SimilarImages | NotebookMainEnum::Duplicate => {
52-
if nb_object.notebook_type == NotebookMainEnum::SimilarImages {
53-
image_preview_similar_images.hide();
54-
} else {
55-
image_preview_duplicates.hide();
56-
}
57-
*preview_path.borrow_mut() = String::new();
58-
}
59-
_ => {}
60-
}
61-
});
62-
}
63-
64-
// TODO add progress bar
65-
fn move_things(
66-
tree_view: &gtk4::TreeView,
67-
column_file_name: i32,
68-
column_path: i32,
69-
column_header: Option<i32>,
70-
column_selection: i32,
71-
entry_info: &gtk4::Entry,
72-
text_view_errors: &gtk4::TextView,
73-
file_dialog_move_to_folder: &FileChooserNative,
74-
) {
75-
reset_text_view(text_view_errors);
40+
reset_text_view(&text_view_errors);
7641

77-
let entry_info = entry_info.clone();
78-
let text_view_errors = text_view_errors.clone();
79-
let tree_view = tree_view.clone();
80-
file_dialog_move_to_folder.connect_response(move |file_chooser, response_type| {
81-
if response_type == ResponseType::Ok {
42+
if response_type == ResponseType::Accept {
8243
let mut folders: Vec<PathBuf> = Vec::new();
8344
let g_files = file_chooser.files();
8445
for index in 0..g_files.n_items() {
@@ -102,23 +63,45 @@ fn move_things(
10263
);
10364
} else {
10465
let folder = folders[0].clone();
105-
if let Some(column_header) = column_header {
66+
if let Some(column_header) = nb_object.column_header {
10667
move_with_tree(
107-
&tree_view,
108-
column_file_name,
109-
column_path,
68+
tree_view,
69+
nb_object.column_name,
70+
nb_object.column_path,
11071
column_header,
111-
column_selection,
72+
nb_object.column_selection,
11273
&folder,
11374
&entry_info,
11475
&text_view_errors,
11576
);
11677
} else {
117-
move_with_list(&tree_view, column_file_name, column_path, column_selection, &folder, &entry_info, &text_view_errors);
78+
move_with_list(
79+
tree_view,
80+
nb_object.column_name,
81+
nb_object.column_path,
82+
nb_object.column_selection,
83+
&folder,
84+
&entry_info,
85+
&text_view_errors,
86+
);
11887
}
11988
}
12089
}
121-
// file_chooser.close();
90+
match &nb_object.notebook_type {
91+
NotebookMainEnum::SimilarImages | NotebookMainEnum::Duplicate => {
92+
if nb_object.notebook_type == NotebookMainEnum::SimilarImages {
93+
image_preview_similar_images.hide();
94+
} else {
95+
image_preview_duplicates.hide();
96+
}
97+
*preview_path.borrow_mut() = String::new();
98+
}
99+
_ => {}
100+
}
101+
});
102+
103+
buttons_move.connect_clicked(move |_| {
104+
file_dialog_move_to_folder.show();
122105
});
123106
}
124107

czkawka_gui/src/connect_things/connect_selection_of_directories.rs

+34-17
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
use std::path::PathBuf;
22

33
use gtk4::prelude::*;
4-
use gtk4::{FileChooserNative, Orientation, ResponseType, TreeView, Window};
4+
use gtk4::{FileChooserNative, Notebook, Orientation, ResponseType, TreeView, Window};
55

66
#[cfg(target_family = "windows")]
77
use czkawka_core::common::Common;
88

99
use crate::flg;
1010
use crate::gui_structs::gui_data::GuiData;
1111
use crate::help_functions::{check_if_value_is_in_list_store, get_list_store, ColumnsExcludedDirectory, ColumnsIncludedDirectory};
12+
use crate::notebook_enums::{to_notebook_upper_enum, NotebookUpperEnum};
1213

1314
pub fn connect_selection_of_directories(gui_data: &GuiData) {
1415
// Add manually directory
@@ -31,22 +32,35 @@ pub fn connect_selection_of_directories(gui_data: &GuiData) {
3132
}
3233
// Add included directory
3334
{
34-
let tree_view_included_directories = gui_data.upper_notebook.tree_view_included_directories.clone();
3535
let buttons_add_included_directory = gui_data.upper_notebook.buttons_add_included_directory.clone();
3636
let file_dialog_include_exclude_folder_selection = gui_data.file_dialog_include_exclude_folder_selection.clone();
3737
buttons_add_included_directory.connect_clicked(move |_| {
38-
add_chosen_directories(&file_dialog_include_exclude_folder_selection, &tree_view_included_directories, false);
38+
file_dialog_include_exclude_folder_selection.show();
39+
file_dialog_include_exclude_folder_selection.set_title(&flg!("include_folders_dialog_title"));
3940
});
4041
}
4142
// Add excluded directory
4243
{
43-
let tree_view_excluded_directories = gui_data.upper_notebook.tree_view_excluded_directories.clone();
4444
let buttons_add_excluded_directory = gui_data.upper_notebook.buttons_add_excluded_directory.clone();
4545
let file_dialog_include_exclude_folder_selection = gui_data.file_dialog_include_exclude_folder_selection.clone();
4646
buttons_add_excluded_directory.connect_clicked(move |_| {
47-
add_chosen_directories(&file_dialog_include_exclude_folder_selection, &tree_view_excluded_directories, true);
47+
file_dialog_include_exclude_folder_selection.show();
48+
file_dialog_include_exclude_folder_selection.set_title(&flg!("exclude_folders_dialog_title"));
4849
});
4950
}
51+
// Conect
52+
{
53+
let notebook_upper = gui_data.upper_notebook.notebook_upper.clone();
54+
let tree_view_included_directories = gui_data.upper_notebook.tree_view_included_directories.clone();
55+
let tree_view_excluded_directories = gui_data.upper_notebook.tree_view_excluded_directories.clone();
56+
let file_dialog_include_exclude_folder_selection = gui_data.file_dialog_include_exclude_folder_selection.clone();
57+
connect_file_dialog(
58+
&file_dialog_include_exclude_folder_selection,
59+
tree_view_included_directories,
60+
tree_view_excluded_directories,
61+
notebook_upper,
62+
);
63+
}
5064
// Remove Excluded Folder
5165
{
5266
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) {
7993
}
8094
}
8195

82-
fn add_chosen_directories(file_dialog_include_exclude_folder_selection: &FileChooserNative, tree_view: &TreeView, excluded_items: bool) {
83-
let folders_to = if excluded_items {
84-
flg!("exclude_folders_dialog_title")
85-
} else {
86-
flg!("include_folders_dialog_title")
87-
};
88-
89-
file_dialog_include_exclude_folder_selection.show();
90-
file_dialog_include_exclude_folder_selection.set_title(&folders_to);
91-
92-
let tree_view = tree_view.clone();
96+
fn connect_file_dialog(file_dialog_include_exclude_folder_selection: &FileChooserNative, include_tree_view: TreeView, exclude_tree_view: TreeView, notebook_upper: Notebook) {
9397
file_dialog_include_exclude_folder_selection.connect_response(move |file_chooser, response_type| {
9498
if response_type == ResponseType::Accept {
99+
let excluded_items;
100+
let tree_view = match to_notebook_upper_enum(notebook_upper.current_page().unwrap()) {
101+
NotebookUpperEnum::IncludedDirectories => {
102+
excluded_items = false;
103+
&include_tree_view
104+
}
105+
NotebookUpperEnum::ExcludedDirectories => {
106+
excluded_items = true;
107+
&exclude_tree_view
108+
}
109+
_ => panic!(),
110+
};
111+
95112
let mut folders: Vec<PathBuf> = Vec::new();
96113
let g_files = file_chooser.files();
97114
for index in 0..g_files.n_items() {
@@ -104,7 +121,7 @@ fn add_chosen_directories(file_dialog_include_exclude_folder_selection: &FileCho
104121
}
105122
}
106123

107-
let list_store = get_list_store(&tree_view);
124+
let list_store = get_list_store(tree_view);
108125

109126
if excluded_items {
110127
for file_entry in &folders {

czkawka_gui/src/notebook_enums.rs

+9-9
Original file line numberDiff line numberDiff line change
@@ -57,15 +57,15 @@ pub enum NotebookUpperEnum {
5757
ItemsConfiguration,
5858
}
5959

60-
// pub fn to_notebook_upper_enum(notebook_number: u32) -> NotebookUpperEnum {
61-
// match notebook_number {
62-
// 0 => NotebookUpperEnum::IncludedDirectories,
63-
// 1 => NotebookUpperEnum::ExcludedDirectories,
64-
// 2 => NotebookUpperEnum::ItemsConfiguration,
65-
// _ => panic!("Invalid Upper Notebook Tab"),
66-
// }
67-
// }
68-
//
60+
pub fn to_notebook_upper_enum(notebook_number: u32) -> NotebookUpperEnum {
61+
match notebook_number {
62+
0 => NotebookUpperEnum::IncludedDirectories,
63+
1 => NotebookUpperEnum::ExcludedDirectories,
64+
2 => NotebookUpperEnum::ItemsConfiguration,
65+
_ => panic!("Invalid Upper Notebook Tab"),
66+
}
67+
}
68+
6969
// pub fn get_all_upper_tabs() -> [NotebookUpperEnum; NUMBER_OF_NOTEBOOK_UPPER_TABS] {
7070
// [to_notebook_upper_enum(0), to_notebook_upper_enum(1), to_notebook_upper_enum(2)]
7171
// }

0 commit comments

Comments
 (0)