1
1
use std:: path:: PathBuf ;
2
2
3
3
use gtk4:: prelude:: * ;
4
- use gtk4:: { FileChooserNative , Orientation , ResponseType , TreeView , Window } ;
4
+ use gtk4:: { FileChooserNative , Notebook , Orientation , ResponseType , TreeView , Window } ;
5
5
6
6
#[ cfg( target_family = "windows" ) ]
7
7
use czkawka_core:: common:: Common ;
8
8
9
9
use crate :: flg;
10
10
use crate :: gui_structs:: gui_data:: GuiData ;
11
11
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 } ;
12
13
13
14
pub fn connect_selection_of_directories ( gui_data : & GuiData ) {
14
15
// Add manually directory
@@ -31,22 +32,35 @@ pub fn connect_selection_of_directories(gui_data: &GuiData) {
31
32
}
32
33
// Add included directory
33
34
{
34
- let tree_view_included_directories = gui_data. upper_notebook . tree_view_included_directories . clone ( ) ;
35
35
let buttons_add_included_directory = gui_data. upper_notebook . buttons_add_included_directory . clone ( ) ;
36
36
let file_dialog_include_exclude_folder_selection = gui_data. file_dialog_include_exclude_folder_selection . clone ( ) ;
37
37
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" ) ) ;
39
40
} ) ;
40
41
}
41
42
// Add excluded directory
42
43
{
43
- let tree_view_excluded_directories = gui_data. upper_notebook . tree_view_excluded_directories . clone ( ) ;
44
44
let buttons_add_excluded_directory = gui_data. upper_notebook . buttons_add_excluded_directory . clone ( ) ;
45
45
let file_dialog_include_exclude_folder_selection = gui_data. file_dialog_include_exclude_folder_selection . clone ( ) ;
46
46
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" ) ) ;
48
49
} ) ;
49
50
}
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
+ }
50
64
// Remove Excluded Folder
51
65
{
52
66
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) {
79
93
}
80
94
}
81
95
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 ) {
93
97
file_dialog_include_exclude_folder_selection. connect_response ( move |file_chooser, response_type| {
94
98
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
+
95
112
let mut folders: Vec < PathBuf > = Vec :: new ( ) ;
96
113
let g_files = file_chooser. files ( ) ;
97
114
for index in 0 ..g_files. n_items ( ) {
@@ -104,7 +121,7 @@ fn add_chosen_directories(file_dialog_include_exclude_folder_selection: &FileCho
104
121
}
105
122
}
106
123
107
- let list_store = get_list_store ( & tree_view) ;
124
+ let list_store = get_list_store ( tree_view) ;
108
125
109
126
if excluded_items {
110
127
for file_entry in & folders {
0 commit comments