diff --git a/czkawka_core/src/duplicate.rs b/czkawka_core/src/duplicate.rs index 71a772b..fae2705 100644 --- a/czkawka_core/src/duplicate.rs +++ b/czkawka_core/src/duplicate.rs @@ -213,7 +213,6 @@ impl DuplicateFinder { } fn check_files_name(&mut self, stop_receiver: Option<&Receiver<()>>) -> bool { - // TODO maybe add multithreading checking files let start_time: SystemTime = SystemTime::now(); let mut folders_to_check: Vec = Vec::with_capacity(1024 * 2); // This should be small enough too not see to big difference and big enough to store most of paths without needing to resize vector @@ -351,7 +350,6 @@ impl DuplicateFinder { /// Read file length and puts it to different boxes(each for different lengths) /// If in box is only 1 result, then it is removed fn check_files_size(&mut self, stop_receiver: Option<&Receiver<()>>) -> bool { - // TODO maybe add multithreading checking files let start_time: SystemTime = SystemTime::now(); let mut folders_to_check: Vec = Vec::with_capacity(1024 * 2); // This should be small enough too not see to big difference and big enough to store most of paths without needing to resize vector diff --git a/czkawka_gui/czkawka.glade b/czkawka_gui/czkawka.glade index e3d1beb..9c6b9db 100644 --- a/czkawka_gui/czkawka.glade +++ b/czkawka_gui/czkawka.glade @@ -32,7 +32,7 @@ Author: Rafał Mikrut - + False @@ -40,7 +40,7 @@ Author: Rafał Mikrut False vertical - + Select All True True @@ -53,7 +53,7 @@ Author: Rafał Mikrut - + Unselect All True True @@ -66,7 +66,7 @@ Author: Rafał Mikrut - + Reverse Selection True True @@ -79,7 +79,7 @@ Author: Rafał Mikrut - + Select all except oldest True True @@ -92,7 +92,7 @@ Author: Rafał Mikrut - + Select all except newest True True @@ -105,7 +105,7 @@ Author: Rafał Mikrut - + Select one oldest True True @@ -118,7 +118,7 @@ Author: Rafał Mikrut - + Select one newest True True @@ -133,6 +133,55 @@ Author: Rafał Mikrut + + False + + + True + False + vertical + + + Select All + True + True + True + + + False + True + 1 + + + + + Unselect All + True + True + True + + + False + True + 2 + + + + + Reverse Selection + True + True + True + + + False + True + 3 + + + + + False 1100 diff --git a/czkawka_gui/src/connect_button_delete.rs b/czkawka_gui/src/connect_button_delete.rs index 19c9ce5..ae108c8 100644 --- a/czkawka_gui/src/connect_button_delete.rs +++ b/czkawka_gui/src/connect_button_delete.rs @@ -225,11 +225,11 @@ fn basic_remove(scrolled_window: gtk::ScrolledWindow, column_file_name: i32, col text_view_errors.get_buffer().unwrap().set_text(messages.as_str()); selection.unselect_all(); -} // TODO, will replace simple remove of things +} -// Remove all ocurences - remove every element which have same path and name as even non selected ones +// Remove all occurrences - remove every element which have same path and name as even non selected ones // -fn tree_remove(scrolled_window: gtk::ScrolledWindow, column_file_name: i32, column_path: i32, column_color: i32, gui_data: &GuiData, remove_all_occurences: bool, header_can_have_one_child: bool) { +fn tree_remove(scrolled_window: gtk::ScrolledWindow, column_file_name: i32, column_path: i32, column_color: i32, gui_data: &GuiData, remove_all_occurrences: bool, header_can_have_one_child: bool) { let text_view_errors = gui_data.text_view_errors.clone(); let tree_view = scrolled_window.get_children().get(0).unwrap().clone().downcast::().unwrap(); @@ -248,12 +248,12 @@ fn tree_remove(scrolled_window: gtk::ScrolledWindow, column_file_name: i32, colu let mut vec_path_to_delete: Vec<(String, String)> = Vec::new(); let mut map_with_path_to_delete: BTreeMap> = Default::default(); // BTreeMap> - // Save to variable paths of files, and remove it when not removing all ocureences. + // Save to variable paths of files, and remove it when not removing all occurrences. for tree_path in selection_rows.iter().rev() { let file_name = tree_model.get_value(&tree_model.get_iter(tree_path).unwrap(), column_file_name).get::().unwrap().unwrap(); let path = tree_model.get_value(&tree_model.get_iter(tree_path).unwrap(), column_path).get::().unwrap().unwrap(); - if !remove_all_occurences { + if !remove_all_occurrences { list_store.remove(&list_store.get_iter(tree_path).unwrap()); } map_with_path_to_delete.entry(path.clone()).or_insert_with(Vec::new); @@ -277,7 +277,7 @@ fn tree_remove(scrolled_window: gtk::ScrolledWindow, column_file_name: i32, colu } } - if remove_all_occurences { + if remove_all_occurrences { // Must be deleted from end to start, because when deleting entries, TreePath(and also TreeIter) will points to invalid data for path_to_delete in vec_path_to_delete { let mut vec_tree_path_to_delete: Vec = Vec::new(); @@ -286,7 +286,7 @@ fn tree_remove(scrolled_window: gtk::ScrolledWindow, column_file_name: i32, colu Some(t) => t, None => break, }; - let mut take_child_mode = false; // When original image is searched one, we must remove all occurences of its children + let mut take_child_mode = false; // When original image is searched one, we must remove all occurrences of its children let mut prepared_for_delete; loop { prepared_for_delete = false; diff --git a/czkawka_gui/src/connect_button_select.rs b/czkawka_gui/src/connect_button_select.rs index c4b68e5..8727e57 100644 --- a/czkawka_gui/src/connect_button_select.rs +++ b/czkawka_gui/src/connect_button_select.rs @@ -6,15 +6,18 @@ pub fn connect_button_select(gui_data: &GuiData) { let notebook_main_children_names = gui_data.notebook_main_children_names.clone(); let notebook_main = gui_data.notebook_main.clone(); let buttons_select_clone = gui_data.buttons_select.clone(); - let popover_select = gui_data.popover_select.clone(); + let popover_select_duplicate = gui_data.popover_select_duplicate.clone(); + let popover_select_simple_list = gui_data.popover_select_simple_list.clone(); let buttons_select = gui_data.buttons_select.clone(); buttons_select_clone.connect_clicked(move |_| match notebook_main_children_names.get(notebook_main.get_current_page().unwrap() as usize).unwrap().as_str() { - "notebook_main_duplicate_finder_label" => { - // Only popup popup - popover_select.set_relative_to(Some(&buttons_select)); - popover_select.popup(); + "notebook_main_duplicate_finder_label" | "notebook_main_same_music_finder" | "notebook_main_similar_images_finder_label" => { + popover_select_duplicate.set_relative_to(Some(&buttons_select)); + popover_select_duplicate.popup(); + } + "scrolled_window_main_empty_folder_finder" | "scrolled_window_main_empty_files_finder" | "scrolled_window_main_temporary_files_finder" | "notebook_big_main_file_finder" | "notebook_main_zeroed_files_finder" => { + popover_select_simple_list.set_relative_to(Some(&buttons_select)); + popover_select_simple_list.popup(); } - // TODO add for all basic selection popup e => panic!("Not existent {}", e), }); } diff --git a/czkawka_gui/src/connect_compute_results.rs b/czkawka_gui/src/connect_compute_results.rs index 185102d..654fd35 100644 --- a/czkawka_gui/src/connect_compute_results.rs +++ b/czkawka_gui/src/connect_compute_results.rs @@ -229,9 +229,11 @@ pub fn connect_compute_results(gui_data: &GuiData, receiver: Receiver) if empty_folder_number > 0 { *shared_buttons.borrow_mut().get_mut("empty_folder").unwrap().get_mut("save").unwrap() = true; *shared_buttons.borrow_mut().get_mut("empty_folder").unwrap().get_mut("delete").unwrap() = true; + *shared_buttons.borrow_mut().get_mut("empty_folder").unwrap().get_mut("select").unwrap() = true; } else { *shared_buttons.borrow_mut().get_mut("empty_folder").unwrap().get_mut("save").unwrap() = false; *shared_buttons.borrow_mut().get_mut("empty_folder").unwrap().get_mut("delete").unwrap() = false; + *shared_buttons.borrow_mut().get_mut("empty_folder").unwrap().get_mut("select").unwrap() = false; } set_buttons(&mut *shared_buttons.borrow_mut().get_mut("empty_folder").unwrap(), &buttons_array, &buttons_names); } @@ -271,9 +273,11 @@ pub fn connect_compute_results(gui_data: &GuiData, receiver: Receiver) if empty_files_number > 0 { *shared_buttons.borrow_mut().get_mut("empty_file").unwrap().get_mut("save").unwrap() = true; *shared_buttons.borrow_mut().get_mut("empty_file").unwrap().get_mut("delete").unwrap() = true; + *shared_buttons.borrow_mut().get_mut("empty_file").unwrap().get_mut("select").unwrap() = true; } else { *shared_buttons.borrow_mut().get_mut("empty_file").unwrap().get_mut("save").unwrap() = false; *shared_buttons.borrow_mut().get_mut("empty_file").unwrap().get_mut("delete").unwrap() = false; + *shared_buttons.borrow_mut().get_mut("empty_file").unwrap().get_mut("select").unwrap() = false; } set_buttons(&mut *shared_buttons.borrow_mut().get_mut("empty_file").unwrap(), &buttons_array, &buttons_names); } @@ -320,9 +324,11 @@ pub fn connect_compute_results(gui_data: &GuiData, receiver: Receiver) if biggest_files_number > 0 { *shared_buttons.borrow_mut().get_mut("big_file").unwrap().get_mut("save").unwrap() = true; *shared_buttons.borrow_mut().get_mut("big_file").unwrap().get_mut("delete").unwrap() = true; + *shared_buttons.borrow_mut().get_mut("big_file").unwrap().get_mut("select").unwrap() = true; } else { *shared_buttons.borrow_mut().get_mut("big_file").unwrap().get_mut("save").unwrap() = false; *shared_buttons.borrow_mut().get_mut("big_file").unwrap().get_mut("delete").unwrap() = false; + *shared_buttons.borrow_mut().get_mut("big_file").unwrap().get_mut("select").unwrap() = false; } set_buttons(&mut *shared_buttons.borrow_mut().get_mut("big_file").unwrap(), &buttons_array, &buttons_names); } @@ -362,9 +368,11 @@ pub fn connect_compute_results(gui_data: &GuiData, receiver: Receiver) if temporary_files_number > 0 { *shared_buttons.borrow_mut().get_mut("temporary_file").unwrap().get_mut("save").unwrap() = true; *shared_buttons.borrow_mut().get_mut("temporary_file").unwrap().get_mut("delete").unwrap() = true; + *shared_buttons.borrow_mut().get_mut("temporary_file").unwrap().get_mut("select").unwrap() = true; } else { *shared_buttons.borrow_mut().get_mut("temporary_file").unwrap().get_mut("save").unwrap() = false; *shared_buttons.borrow_mut().get_mut("temporary_file").unwrap().get_mut("delete").unwrap() = false; + *shared_buttons.borrow_mut().get_mut("temporary_file").unwrap().get_mut("select").unwrap() = false; } set_buttons(&mut *shared_buttons.borrow_mut().get_mut("temporary_file").unwrap(), &buttons_array, &buttons_names); } @@ -385,19 +393,20 @@ pub fn connect_compute_results(gui_data: &GuiData, receiver: Receiver) { let list_store = get_list_store(&scrolled_window_similar_images_finder); - let col_indices = [0, 1, 2, 3, 4, 5, 6, 7]; + let col_indices = [0, 1, 2, 3, 4, 5, 6, 7, 8]; let vec_struct_similar = sf.get_similar_images(); for vec_file_entry in vec_struct_similar.iter() { // Header - let values: [&dyn ToValue; 8] = [ + let values: [&dyn ToValue; 9] = [ &"".to_string(), &"".to_string(), &"".to_string(), &"".to_string(), &"".to_string(), &"".to_string(), + &(0), &(HEADER_ROW_COLOR.to_string()), &(TEXT_COLOR.to_string()), ]; @@ -406,13 +415,14 @@ pub fn connect_compute_results(gui_data: &GuiData, receiver: Receiver) // Meat for file_entry in vec_file_entry.iter() { let (directory, file) = split_path(&file_entry.path); - let values: [&dyn ToValue; 8] = [ + let values: [&dyn ToValue; 9] = [ &(get_text_from_similarity(&file_entry.similarity).to_string()), &file_entry.size.file_size(options::BINARY).unwrap(), &file_entry.dimensions, &file, &directory, &(NaiveDateTime::from_timestamp(file_entry.modified_date as i64, 0).to_string()), + &(file_entry.modified_date), &(MAIN_ROW_COLOR.to_string()), &(TEXT_COLOR.to_string()), ]; @@ -430,9 +440,11 @@ pub fn connect_compute_results(gui_data: &GuiData, receiver: Receiver) if base_images_size > 0 { *shared_buttons.borrow_mut().get_mut("similar_images").unwrap().get_mut("save").unwrap() = true; *shared_buttons.borrow_mut().get_mut("similar_images").unwrap().get_mut("delete").unwrap() = true; + *shared_buttons.borrow_mut().get_mut("similar_images").unwrap().get_mut("select").unwrap() = true; } else { *shared_buttons.borrow_mut().get_mut("similar_images").unwrap().get_mut("save").unwrap() = false; *shared_buttons.borrow_mut().get_mut("similar_images").unwrap().get_mut("delete").unwrap() = false; + *shared_buttons.borrow_mut().get_mut("similar_images").unwrap().get_mut("select").unwrap() = false; } set_buttons(&mut *shared_buttons.borrow_mut().get_mut("similar_images").unwrap(), &buttons_array, &buttons_names); } @@ -477,9 +489,11 @@ pub fn connect_compute_results(gui_data: &GuiData, receiver: Receiver) if zeroed_files_number > 0 { *shared_buttons.borrow_mut().get_mut("zeroed_files").unwrap().get_mut("save").unwrap() = true; *shared_buttons.borrow_mut().get_mut("zeroed_files").unwrap().get_mut("delete").unwrap() = true; + *shared_buttons.borrow_mut().get_mut("zeroed_files").unwrap().get_mut("select").unwrap() = true; } else { *shared_buttons.borrow_mut().get_mut("zeroed_files").unwrap().get_mut("save").unwrap() = false; *shared_buttons.borrow_mut().get_mut("zeroed_files").unwrap().get_mut("delete").unwrap() = false; + *shared_buttons.borrow_mut().get_mut("zeroed_files").unwrap().get_mut("select").unwrap() = false; } set_buttons(&mut *shared_buttons.borrow_mut().get_mut("zeroed_files").unwrap(), &buttons_array, &buttons_names); } @@ -540,7 +554,7 @@ pub fn connect_compute_results(gui_data: &GuiData, receiver: Receiver) false => "".to_string(), }), &"".to_string(), - &"".to_string(), + &(0), &(HEADER_ROW_COLOR.to_string()), &(TEXT_COLOR.to_string()), ]; @@ -574,9 +588,11 @@ pub fn connect_compute_results(gui_data: &GuiData, receiver: Receiver) if same_music_number > 0 { *shared_buttons.borrow_mut().get_mut("same_music").unwrap().get_mut("save").unwrap() = true; *shared_buttons.borrow_mut().get_mut("same_music").unwrap().get_mut("delete").unwrap() = true; + *shared_buttons.borrow_mut().get_mut("same_music").unwrap().get_mut("select").unwrap() = true; } else { *shared_buttons.borrow_mut().get_mut("same_music").unwrap().get_mut("save").unwrap() = false; *shared_buttons.borrow_mut().get_mut("same_music").unwrap().get_mut("delete").unwrap() = false; + *shared_buttons.borrow_mut().get_mut("same_music").unwrap().get_mut("select").unwrap() = false; } set_buttons(&mut *shared_buttons.borrow_mut().get_mut("same_music").unwrap(), &buttons_array, &buttons_names); } diff --git a/czkawka_gui/src/connect_popover_duplicate.rs b/czkawka_gui/src/connect_popover_duplicate.rs deleted file mode 100644 index 7adae2c..0000000 --- a/czkawka_gui/src/connect_popover_duplicate.rs +++ /dev/null @@ -1,322 +0,0 @@ -extern crate gtk; -use crate::gui_data::GuiData; -use crate::help_functions::*; -use gtk::prelude::*; -use gtk::TreeIter; - -pub fn connect_popover_duplicate(gui_data: &GuiData) { - // Select all button - { - let buttons_popover_select_all = gui_data.buttons_popover_select_all.clone(); - let scrolled_window_duplicate_finder = gui_data.scrolled_window_duplicate_finder.clone(); - let popover_select = gui_data.popover_select.clone(); - buttons_popover_select_all.connect_clicked(move |_| { - let tree_view = get_tree_view(&scrolled_window_duplicate_finder); - let selection = tree_view.get_selection(); - - selection.select_all(); - popover_select.popdown(); - }); - } - - // Unselect all button - { - let scrolled_window_duplicate_finder = gui_data.scrolled_window_duplicate_finder.clone(); - let buttons_popover_unselect_all = gui_data.buttons_popover_unselect_all.clone(); - let popover_select = gui_data.popover_select.clone(); - buttons_popover_unselect_all.connect_clicked(move |_| { - let tree_view = get_tree_view(&scrolled_window_duplicate_finder); - let selection = tree_view.get_selection(); - - selection.unselect_all(); - popover_select.popdown(); - }); - } - - // Reverse selection - { - let scrolled_window_duplicate_finder = gui_data.scrolled_window_duplicate_finder.clone(); - let popover_select = gui_data.popover_select.clone(); - let buttons_popover_reverse = gui_data.buttons_popover_reverse.clone(); - buttons_popover_reverse.connect_clicked(move |_| { - let tree_view = get_tree_view(&scrolled_window_duplicate_finder); - let selection = tree_view.get_selection(); - - let (vector_tree_path, tree_model) = selection.get_selected_rows(); - - if vector_tree_path.is_empty() { - selection.select_all(); - } else { - let tree_iter_all = tree_model.get_iter_first().unwrap(); // Never should be available button where there is no available records - - let mut current_path_index = 0; - let mut tree_iter_selected: TreeIter; - loop { - if current_path_index >= vector_tree_path.len() { - selection.select_iter(&tree_iter_all); - } else { - tree_iter_selected = tree_model.get_iter(vector_tree_path.get(current_path_index).unwrap()).unwrap(); - if tree_model.get_path(&tree_iter_all).unwrap() == tree_model.get_path(&tree_iter_selected).unwrap() { - selection.unselect_iter(&tree_iter_selected); - current_path_index += 1; - } else { - selection.select_iter(&tree_iter_all); - } - } - if !tree_model.iter_next(&tree_iter_all) { - break; - } - } - } - - popover_select.popdown(); - }); - } - - // All except oldest - { - let scrolled_window_duplicate_finder = gui_data.scrolled_window_duplicate_finder.clone(); - let popover_select = gui_data.popover_select.clone(); - let buttons_popover_select_all_except_oldest = gui_data.buttons_popover_select_all_except_oldest.clone(); - buttons_popover_select_all_except_oldest.connect_clicked(move |_| { - let tree_view = get_tree_view(&scrolled_window_duplicate_finder); - let selection = tree_view.get_selection(); - let tree_model = tree_view.get_model().unwrap(); - - let tree_iter_all = tree_model.get_iter_first().unwrap(); // Never should be available button where there is no available records - - let mut end: bool = false; - - loop { - let mut tree_iter_array: Vec = Vec::new(); - let mut oldest_index: Option = None; - let mut current_index: usize = 0; - let mut oldest_modification_time: u64 = u64::max_value(); - - loop { - let color = tree_model.get_value(&tree_iter_all, ColumnsDuplicates::Color as i32).get::().unwrap().unwrap(); - if color == HEADER_ROW_COLOR { - if !tree_model.iter_next(&tree_iter_all) { - end = true; - } - break; - } - tree_iter_array.push(tree_iter_all.clone()); - let modification = tree_model.get_value(&tree_iter_all, ColumnsDuplicates::ModificationAsSecs as i32).get::().unwrap().unwrap(); - if modification < oldest_modification_time { - oldest_modification_time = modification; - oldest_index = Some(current_index); - } - - current_index += 1; - - if !tree_model.iter_next(&tree_iter_all) { - end = true; - break; - } - } - if oldest_index == None { - continue; - } - for (index, tree_iter) in tree_iter_array.iter().enumerate() { - if index != oldest_index.unwrap() { - selection.select_iter(tree_iter); - } else { - selection.unselect_iter(tree_iter); - } - } - - if end { - break; - } - } - - popover_select.popdown(); - }); - } - - // All except newest - { - let scrolled_window_duplicate_finder = gui_data.scrolled_window_duplicate_finder.clone(); - let popover_select = gui_data.popover_select.clone(); - let buttons_popover_select_all_except_newest = gui_data.buttons_popover_select_all_except_newest.clone(); - buttons_popover_select_all_except_newest.connect_clicked(move |_| { - let tree_view = get_tree_view(&scrolled_window_duplicate_finder); - let selection = tree_view.get_selection(); - let tree_model = tree_view.get_model().unwrap(); - - let tree_iter_all = tree_model.get_iter_first().unwrap(); // Never should be available button where there is no available records - - let mut end: bool = false; - - loop { - let mut tree_iter_array: Vec = Vec::new(); - let mut newest_index: Option = None; - let mut current_index: usize = 0; - let mut newest_modification_time: u64 = 0; - - loop { - let color = tree_model.get_value(&tree_iter_all, ColumnsDuplicates::Color as i32).get::().unwrap().unwrap(); - if color == HEADER_ROW_COLOR { - if !tree_model.iter_next(&tree_iter_all) { - end = true; - } - break; - } - tree_iter_array.push(tree_iter_all.clone()); - let modification = tree_model.get_value(&tree_iter_all, ColumnsDuplicates::ModificationAsSecs as i32).get::().unwrap().unwrap(); - if modification > newest_modification_time { - newest_modification_time = modification; - newest_index = Some(current_index); - } - - current_index += 1; - - if !tree_model.iter_next(&tree_iter_all) { - end = true; - break; - } - } - if newest_index == None { - continue; - } - for (index, tree_iter) in tree_iter_array.iter().enumerate() { - if index != newest_index.unwrap() { - selection.select_iter(tree_iter); - } else { - selection.unselect_iter(tree_iter); - } - } - - if end { - break; - } - } - - popover_select.popdown(); - }); - } - - // All one oldest - { - let scrolled_window_duplicate_finder = gui_data.scrolled_window_duplicate_finder.clone(); - let popover_select = gui_data.popover_select.clone(); - let buttons_popover_select_one_oldest = gui_data.buttons_popover_select_one_oldest.clone(); - buttons_popover_select_one_oldest.connect_clicked(move |_| { - let tree_view = get_tree_view(&scrolled_window_duplicate_finder); - let selection = tree_view.get_selection(); - let tree_model = tree_view.get_model().unwrap(); - - let tree_iter_all = tree_model.get_iter_first().unwrap(); // Never should be available button where there is no available records - - let mut end: bool = false; - - loop { - let mut tree_iter_array: Vec = Vec::new(); - let mut oldest_index: Option = None; - let mut current_index: usize = 0; - let mut oldest_modification_time: u64 = u64::max_value(); - - loop { - let color = tree_model.get_value(&tree_iter_all, ColumnsDuplicates::Color as i32).get::().unwrap().unwrap(); - if color == HEADER_ROW_COLOR { - if !tree_model.iter_next(&tree_iter_all) { - end = true; - } - break; - } - tree_iter_array.push(tree_iter_all.clone()); - let modification = tree_model.get_value(&tree_iter_all, ColumnsDuplicates::ModificationAsSecs as i32).get::().unwrap().unwrap(); - if modification < oldest_modification_time { - oldest_modification_time = modification; - oldest_index = Some(current_index); - } - - current_index += 1; - - if !tree_model.iter_next(&tree_iter_all) { - end = true; - break; - } - } - if oldest_index == None { - continue; - } - for (index, tree_iter) in tree_iter_array.iter().enumerate() { - if index == oldest_index.unwrap() { - selection.select_iter(tree_iter); - } else { - selection.unselect_iter(tree_iter); - } - } - - if end { - break; - } - } - - popover_select.popdown(); - }); - } - // All one newest - { - let scrolled_window_duplicate_finder = gui_data.scrolled_window_duplicate_finder.clone(); - let buttons_popover_select_one_newest = gui_data.buttons_popover_select_one_newest.clone(); - let popover_select = gui_data.popover_select.clone(); - buttons_popover_select_one_newest.connect_clicked(move |_| { - let tree_view = get_tree_view(&scrolled_window_duplicate_finder); - let selection = tree_view.get_selection(); - let tree_model = tree_view.get_model().unwrap(); - - let tree_iter_all = tree_model.get_iter_first().unwrap(); // Never should be available button where there is no available records - - let mut end: bool = false; - - loop { - let mut tree_iter_array: Vec = Vec::new(); - let mut newest_index: Option = None; - let mut current_index: usize = 0; - let mut newest_modification_time: u64 = 0; - - loop { - let color = tree_model.get_value(&tree_iter_all, ColumnsDuplicates::Color as i32).get::().unwrap().unwrap(); - if color == HEADER_ROW_COLOR { - if !tree_model.iter_next(&tree_iter_all) { - end = true; - } - break; - } - tree_iter_array.push(tree_iter_all.clone()); - let modification = tree_model.get_value(&tree_iter_all, ColumnsDuplicates::ModificationAsSecs as i32).get::().unwrap().unwrap(); - if modification > newest_modification_time { - newest_modification_time = modification; - newest_index = Some(current_index); - } - - current_index += 1; - - if !tree_model.iter_next(&tree_iter_all) { - end = true; - break; - } - } - if newest_index == None { - continue; - } - for (index, tree_iter) in tree_iter_array.iter().enumerate() { - if index == newest_index.unwrap() { - selection.select_iter(tree_iter); - } else { - selection.unselect_iter(tree_iter); - } - } - - if end { - break; - } - } - - popover_select.popdown(); - }); - } -} diff --git a/czkawka_gui/src/connect_popovers.rs b/czkawka_gui/src/connect_popovers.rs new file mode 100644 index 0000000..4d2226d --- /dev/null +++ b/czkawka_gui/src/connect_popovers.rs @@ -0,0 +1,524 @@ +extern crate gtk; +use crate::gui_data::GuiData; +use crate::help_functions::*; +use gtk::prelude::*; +use gtk::TreeIter; + +fn popover_select_all(popover: >k::Popover, scrolled_window: >k::ScrolledWindow) { + let tree_view = get_tree_view(&scrolled_window); + let selection = tree_view.get_selection(); + + selection.select_all(); + popover.popdown(); +} +fn popover_unselect_all(popover: >k::Popover, scrolled_window: >k::ScrolledWindow) { + let tree_view = get_tree_view(&scrolled_window); + let selection = tree_view.get_selection(); + + selection.unselect_all(); + popover.popdown(); +} +fn popover_reverse(popover: >k::Popover, scrolled_window: >k::ScrolledWindow) { + let tree_view = get_tree_view(&scrolled_window); + let selection = tree_view.get_selection(); + + let (vector_tree_path, tree_model) = selection.get_selected_rows(); + + if vector_tree_path.is_empty() { + selection.select_all(); + } else { + let tree_iter_all = tree_model.get_iter_first().unwrap(); // Never should be available button where there is no available records + + let mut current_path_index = 0; + let mut tree_iter_selected: TreeIter; + loop { + if current_path_index >= vector_tree_path.len() { + selection.select_iter(&tree_iter_all); + } else { + tree_iter_selected = tree_model.get_iter(vector_tree_path.get(current_path_index).unwrap()).unwrap(); + if tree_model.get_path(&tree_iter_all).unwrap() == tree_model.get_path(&tree_iter_selected).unwrap() { + selection.unselect_iter(&tree_iter_selected); + current_path_index += 1; + } else { + selection.select_iter(&tree_iter_all); + } + } + if !tree_model.iter_next(&tree_iter_all) { + break; + } + } + } + + popover.popdown(); +} + +fn popover_all_except_oldest(popover: >k::Popover, scrolled_window: >k::ScrolledWindow, column_color: i32, column_modification_as_secs: i32) { + let tree_view = get_tree_view(&scrolled_window); + let selection = tree_view.get_selection(); + let tree_model = tree_view.get_model().unwrap(); + + let tree_iter_all = tree_model.get_iter_first().unwrap(); // Never should be available button where there is no available records + + let mut end: bool = false; + + loop { + let mut tree_iter_array: Vec = Vec::new(); + let mut oldest_index: Option = None; + let mut current_index: usize = 0; + let mut oldest_modification_time: u64 = u64::max_value(); + + loop { + let color = tree_model.get_value(&tree_iter_all, column_color).get::().unwrap().unwrap(); + if color == HEADER_ROW_COLOR { + if !tree_model.iter_next(&tree_iter_all) { + end = true; + } + break; + } + tree_iter_array.push(tree_iter_all.clone()); + let modification = tree_model.get_value(&tree_iter_all, column_modification_as_secs).get::().unwrap().unwrap(); + if modification < oldest_modification_time { + oldest_modification_time = modification; + oldest_index = Some(current_index); + } + + current_index += 1; + + if !tree_model.iter_next(&tree_iter_all) { + end = true; + break; + } + } + if oldest_index == None { + continue; + } + for (index, tree_iter) in tree_iter_array.iter().enumerate() { + if index != oldest_index.unwrap() { + selection.select_iter(tree_iter); + } else { + selection.unselect_iter(tree_iter); + } + } + + if end { + break; + } + } + + popover.popdown(); +} +fn popover_all_except_newest(popover: >k::Popover, scrolled_window: >k::ScrolledWindow, column_color: i32, column_modification_as_secs: i32) { + let tree_view = get_tree_view(&scrolled_window); + let selection = tree_view.get_selection(); + let tree_model = tree_view.get_model().unwrap(); + + let tree_iter_all = tree_model.get_iter_first().unwrap(); // Never should be available button where there is no available records + + let mut end: bool = false; + + loop { + let mut tree_iter_array: Vec = Vec::new(); + let mut newest_index: Option = None; + let mut current_index: usize = 0; + let mut newest_modification_time: u64 = 0; + + loop { + let color = tree_model.get_value(&tree_iter_all, column_color).get::().unwrap().unwrap(); + if color == HEADER_ROW_COLOR { + if !tree_model.iter_next(&tree_iter_all) { + end = true; + } + break; + } + tree_iter_array.push(tree_iter_all.clone()); + let modification = tree_model.get_value(&tree_iter_all, column_modification_as_secs).get::().unwrap().unwrap(); + if modification > newest_modification_time { + newest_modification_time = modification; + newest_index = Some(current_index); + } + + current_index += 1; + + if !tree_model.iter_next(&tree_iter_all) { + end = true; + break; + } + } + if newest_index == None { + continue; + } + for (index, tree_iter) in tree_iter_array.iter().enumerate() { + if index != newest_index.unwrap() { + selection.select_iter(tree_iter); + } else { + selection.unselect_iter(tree_iter); + } + } + + if end { + break; + } + } + + popover.popdown(); +} +fn popover_one_oldest(popover: >k::Popover, scrolled_window: >k::ScrolledWindow, column_color: i32, column_modification_as_secs: i32) { + let tree_view = get_tree_view(&scrolled_window); + let selection = tree_view.get_selection(); + let tree_model = tree_view.get_model().unwrap(); + + let tree_iter_all = tree_model.get_iter_first().unwrap(); // Never should be available button where there is no available records + + let mut end: bool = false; + + loop { + let mut tree_iter_array: Vec = Vec::new(); + let mut oldest_index: Option = None; + let mut current_index: usize = 0; + let mut oldest_modification_time: u64 = u64::max_value(); + + loop { + let color = tree_model.get_value(&tree_iter_all, column_color).get::().unwrap().unwrap(); + if color == HEADER_ROW_COLOR { + if !tree_model.iter_next(&tree_iter_all) { + end = true; + } + break; + } + tree_iter_array.push(tree_iter_all.clone()); + let modification = tree_model.get_value(&tree_iter_all, column_modification_as_secs).get::().unwrap().unwrap(); + if modification < oldest_modification_time { + oldest_modification_time = modification; + oldest_index = Some(current_index); + } + + current_index += 1; + + if !tree_model.iter_next(&tree_iter_all) { + end = true; + break; + } + } + if oldest_index == None { + continue; + } + for (index, tree_iter) in tree_iter_array.iter().enumerate() { + if index == oldest_index.unwrap() { + selection.select_iter(tree_iter); + } else { + selection.unselect_iter(tree_iter); + } + } + + if end { + break; + } + } + + popover.popdown(); +} +fn popover_one_newest(popover: >k::Popover, scrolled_window: >k::ScrolledWindow, column_color: i32, column_modification_as_secs: i32) { + let tree_view = get_tree_view(&scrolled_window); + let selection = tree_view.get_selection(); + let tree_model = tree_view.get_model().unwrap(); + + let tree_iter_all = tree_model.get_iter_first().unwrap(); // Never should be available button where there is no available records + + let mut end: bool = false; + + loop { + let mut tree_iter_array: Vec = Vec::new(); + let mut newest_index: Option = None; + let mut current_index: usize = 0; + let mut newest_modification_time: u64 = 0; + + loop { + let color = tree_model.get_value(&tree_iter_all, column_color).get::().unwrap().unwrap(); + if color == HEADER_ROW_COLOR { + if !tree_model.iter_next(&tree_iter_all) { + end = true; + } + break; + } + tree_iter_array.push(tree_iter_all.clone()); + let modification = tree_model.get_value(&tree_iter_all, column_modification_as_secs).get::().unwrap().unwrap(); + if modification > newest_modification_time { + newest_modification_time = modification; + newest_index = Some(current_index); + } + + current_index += 1; + + if !tree_model.iter_next(&tree_iter_all) { + end = true; + break; + } + } + if newest_index == None { + continue; + } + for (index, tree_iter) in tree_iter_array.iter().enumerate() { + if index == newest_index.unwrap() { + selection.select_iter(tree_iter); + } else { + selection.unselect_iter(tree_iter); + } + } + + if end { + break; + } + } + + popover.popdown(); +} + +pub fn connect_popovers(gui_data: &GuiData) { + connect_select_all(&gui_data); + connect_unselect_all(&gui_data); + connect_reverse(&gui_data); + + connect_all_except_oldest(&gui_data); + connect_all_except_newest(&gui_data); + connect_one_oldest(&gui_data); + connect_one_newest(&gui_data); +} +pub fn connect_select_all(gui_data: &GuiData) { + let notebook_main_children_names = gui_data.notebook_main_children_names.clone(); + let notebook_main = gui_data.notebook_main.clone(); + + let scrolled_window_main_empty_folder_finder = gui_data.scrolled_window_main_empty_folder_finder.clone(); + let scrolled_window_big_files_finder = gui_data.scrolled_window_big_files_finder.clone(); + let scrolled_window_main_empty_files_finder = gui_data.scrolled_window_main_empty_files_finder.clone(); + let scrolled_window_main_temporary_files_finder = gui_data.scrolled_window_main_temporary_files_finder.clone(); + let scrolled_window_similar_images_finder = gui_data.scrolled_window_similar_images_finder.clone(); + let scrolled_window_zeroed_files_finder = gui_data.scrolled_window_zeroed_files_finder.clone(); + let scrolled_window_same_music_finder = gui_data.scrolled_window_same_music_finder.clone(); + let scrolled_window_duplicate_finder = gui_data.scrolled_window_duplicate_finder.clone(); + let popover_select_duplicate = gui_data.popover_select_duplicate.clone(); + let popover_select_simple_list = gui_data.popover_select_simple_list.clone(); + let buttons_popover_simple_list_select_all = gui_data.buttons_popover_simple_list_select_all.clone(); + let buttons_popover_duplicate_select_all = gui_data.buttons_popover_duplicate_select_all.clone(); + buttons_popover_duplicate_select_all.connect_clicked(move |_| match notebook_main_children_names.get(notebook_main.get_current_page().unwrap() as usize).unwrap().as_str() { + "notebook_main_duplicate_finder_label" => { + popover_select_all(&popover_select_duplicate, &scrolled_window_duplicate_finder); + } + "notebook_main_same_music_finder" => { + popover_select_all(&popover_select_duplicate, &scrolled_window_same_music_finder); + } + "notebook_main_similar_images_finder_label" => { + popover_select_all(&popover_select_duplicate, &scrolled_window_similar_images_finder); + } + e => panic!("Not existent {}", e), + }); + + let notebook_main_children_names = gui_data.notebook_main_children_names.clone(); + let notebook_main = gui_data.notebook_main.clone(); + buttons_popover_simple_list_select_all.connect_clicked(move |_| match notebook_main_children_names.get(notebook_main.get_current_page().unwrap() as usize).unwrap().as_str() { + "scrolled_window_main_empty_folder_finder" => { + popover_select_all(&popover_select_simple_list, &scrolled_window_main_empty_folder_finder); + } + "scrolled_window_main_empty_files_finder" => { + popover_select_all(&popover_select_simple_list, &scrolled_window_main_empty_files_finder); + } + "scrolled_window_main_temporary_files_finder" => { + popover_select_all(&popover_select_simple_list, &scrolled_window_main_temporary_files_finder); + } + "notebook_main_zeroed_files_finder" => { + popover_select_all(&popover_select_simple_list, &scrolled_window_zeroed_files_finder); + } + "notebook_big_main_file_finder" => { + popover_select_all(&popover_select_simple_list, &scrolled_window_big_files_finder); + } + e => panic!("Not existent {}", e), + }); +} +pub fn connect_unselect_all(gui_data: &GuiData) { + let notebook_main_children_names = gui_data.notebook_main_children_names.clone(); + let notebook_main = gui_data.notebook_main.clone(); + + let scrolled_window_main_empty_folder_finder = gui_data.scrolled_window_main_empty_folder_finder.clone(); + let scrolled_window_big_files_finder = gui_data.scrolled_window_big_files_finder.clone(); + let scrolled_window_main_empty_files_finder = gui_data.scrolled_window_main_empty_files_finder.clone(); + let scrolled_window_main_temporary_files_finder = gui_data.scrolled_window_main_temporary_files_finder.clone(); + let scrolled_window_similar_images_finder = gui_data.scrolled_window_similar_images_finder.clone(); + let scrolled_window_zeroed_files_finder = gui_data.scrolled_window_zeroed_files_finder.clone(); + let scrolled_window_same_music_finder = gui_data.scrolled_window_same_music_finder.clone(); + let scrolled_window_duplicate_finder = gui_data.scrolled_window_duplicate_finder.clone(); + let popover_select_duplicate = gui_data.popover_select_duplicate.clone(); + let popover_select_simple_list = gui_data.popover_select_simple_list.clone(); + let buttons_popover_simple_list_unselect_all = gui_data.buttons_popover_simple_list_unselect_all.clone(); + let buttons_popover_duplicate_unselect_all = gui_data.buttons_popover_duplicate_unselect_all.clone(); + buttons_popover_duplicate_unselect_all.connect_clicked(move |_| match notebook_main_children_names.get(notebook_main.get_current_page().unwrap() as usize).unwrap().as_str() { + "notebook_main_duplicate_finder_label" => { + popover_unselect_all(&popover_select_duplicate, &scrolled_window_duplicate_finder); + } + "notebook_main_same_music_finder" => { + popover_unselect_all(&popover_select_duplicate, &scrolled_window_same_music_finder); + } + "notebook_main_similar_images_finder_label" => { + popover_unselect_all(&popover_select_duplicate, &scrolled_window_similar_images_finder); + } + e => panic!("Not existent {}", e), + }); + + let notebook_main_children_names = gui_data.notebook_main_children_names.clone(); + let notebook_main = gui_data.notebook_main.clone(); + buttons_popover_simple_list_unselect_all.connect_clicked(move |_| match notebook_main_children_names.get(notebook_main.get_current_page().unwrap() as usize).unwrap().as_str() { + "scrolled_window_main_empty_folder_finder" => { + popover_unselect_all(&popover_select_simple_list, &scrolled_window_main_empty_folder_finder); + } + "scrolled_window_main_empty_files_finder" => { + popover_unselect_all(&popover_select_simple_list, &scrolled_window_main_empty_files_finder); + } + "scrolled_window_main_temporary_files_finder" => { + popover_unselect_all(&popover_select_simple_list, &scrolled_window_main_temporary_files_finder); + } + "notebook_main_zeroed_files_finder" => { + popover_unselect_all(&popover_select_simple_list, &scrolled_window_zeroed_files_finder); + } + "notebook_big_main_file_finder" => { + popover_unselect_all(&popover_select_simple_list, &scrolled_window_big_files_finder); + } + e => panic!("Not existent {}", e), + }); +} +pub fn connect_reverse(gui_data: &GuiData) { + let notebook_main_children_names = gui_data.notebook_main_children_names.clone(); + let notebook_main = gui_data.notebook_main.clone(); + + let scrolled_window_main_empty_folder_finder = gui_data.scrolled_window_main_empty_folder_finder.clone(); + let scrolled_window_big_files_finder = gui_data.scrolled_window_big_files_finder.clone(); + let scrolled_window_main_empty_files_finder = gui_data.scrolled_window_main_empty_files_finder.clone(); + let scrolled_window_main_temporary_files_finder = gui_data.scrolled_window_main_temporary_files_finder.clone(); + let scrolled_window_similar_images_finder = gui_data.scrolled_window_similar_images_finder.clone(); + let scrolled_window_zeroed_files_finder = gui_data.scrolled_window_zeroed_files_finder.clone(); + let scrolled_window_same_music_finder = gui_data.scrolled_window_same_music_finder.clone(); + let scrolled_window_duplicate_finder = gui_data.scrolled_window_duplicate_finder.clone(); + let popover_select_duplicate = gui_data.popover_select_duplicate.clone(); + let popover_select_simple_list = gui_data.popover_select_simple_list.clone(); + let buttons_popover_simple_list_reverse = gui_data.buttons_popover_simple_list_reverse.clone(); + let buttons_popover_duplicate_reverse = gui_data.buttons_popover_duplicate_reverse.clone(); + buttons_popover_duplicate_reverse.connect_clicked(move |_| match notebook_main_children_names.get(notebook_main.get_current_page().unwrap() as usize).unwrap().as_str() { + "notebook_main_duplicate_finder_label" => { + popover_reverse(&popover_select_duplicate, &scrolled_window_duplicate_finder); + } + "notebook_main_same_music_finder" => { + popover_reverse(&popover_select_duplicate, &scrolled_window_same_music_finder); + } + "notebook_main_similar_images_finder_label" => { + popover_reverse(&popover_select_duplicate, &scrolled_window_similar_images_finder); + } + e => panic!("Not existent {}", e), + }); + + let notebook_main_children_names = gui_data.notebook_main_children_names.clone(); + let notebook_main = gui_data.notebook_main.clone(); + buttons_popover_simple_list_reverse.connect_clicked(move |_| match notebook_main_children_names.get(notebook_main.get_current_page().unwrap() as usize).unwrap().as_str() { + "scrolled_window_main_empty_folder_finder" => { + popover_reverse(&popover_select_simple_list, &scrolled_window_main_empty_folder_finder); + } + "scrolled_window_main_empty_files_finder" => { + popover_reverse(&popover_select_simple_list, &scrolled_window_main_empty_files_finder); + } + "scrolled_window_main_temporary_files_finder" => { + popover_reverse(&popover_select_simple_list, &scrolled_window_main_temporary_files_finder); + } + "notebook_main_zeroed_files_finder" => { + popover_reverse(&popover_select_simple_list, &scrolled_window_zeroed_files_finder); + } + "notebook_big_main_file_finder" => { + popover_reverse(&popover_select_simple_list, &scrolled_window_big_files_finder); + } + e => panic!("Not existent {}", e), + }); +} + +pub fn connect_all_except_oldest(gui_data: &GuiData) { + let notebook_main_children_names = gui_data.notebook_main_children_names.clone(); + let notebook_main = gui_data.notebook_main.clone(); + + let scrolled_window_similar_images_finder = gui_data.scrolled_window_similar_images_finder.clone(); + let scrolled_window_same_music_finder = gui_data.scrolled_window_same_music_finder.clone(); + let scrolled_window_duplicate_finder = gui_data.scrolled_window_duplicate_finder.clone(); + let popover_select_duplicate = gui_data.popover_select_duplicate.clone(); + let buttons_popover_duplicate_select_all_except_oldest = gui_data.buttons_popover_duplicate_select_all_except_oldest.clone(); + buttons_popover_duplicate_select_all_except_oldest.connect_clicked(move |_| match notebook_main_children_names.get(notebook_main.get_current_page().unwrap() as usize).unwrap().as_str() { + "notebook_main_duplicate_finder_label" => { + popover_all_except_oldest(&popover_select_duplicate, &scrolled_window_duplicate_finder, ColumnsDuplicates::Color as i32, ColumnsDuplicates::ModificationAsSecs as i32); + } + "notebook_main_same_music_finder" => { + popover_all_except_oldest(&popover_select_duplicate, &scrolled_window_same_music_finder, ColumnsSameMusic::Color as i32, ColumnsSameMusic::ModificationAsSecs as i32); + } + "notebook_main_similar_images_finder_label" => { + popover_all_except_oldest(&popover_select_duplicate, &scrolled_window_similar_images_finder, ColumnsSimilarImages::Color as i32, ColumnsSimilarImages::ModificationAsSecs as i32); + } + e => panic!("Not existent {}", e), + }); +} +pub fn connect_all_except_newest(gui_data: &GuiData) { + let notebook_main_children_names = gui_data.notebook_main_children_names.clone(); + let notebook_main = gui_data.notebook_main.clone(); + + let scrolled_window_similar_images_finder = gui_data.scrolled_window_similar_images_finder.clone(); + let scrolled_window_same_music_finder = gui_data.scrolled_window_same_music_finder.clone(); + let scrolled_window_duplicate_finder = gui_data.scrolled_window_duplicate_finder.clone(); + let popover_select_duplicate = gui_data.popover_select_duplicate.clone(); + let buttons_popover_duplicate_select_all_except_newest = gui_data.buttons_popover_duplicate_select_all_except_newest.clone(); + buttons_popover_duplicate_select_all_except_newest.connect_clicked(move |_| match notebook_main_children_names.get(notebook_main.get_current_page().unwrap() as usize).unwrap().as_str() { + "notebook_main_duplicate_finder_label" => { + popover_all_except_newest(&popover_select_duplicate, &scrolled_window_duplicate_finder, ColumnsDuplicates::Color as i32, ColumnsDuplicates::ModificationAsSecs as i32); + } + "notebook_main_same_music_finder" => { + popover_all_except_newest(&popover_select_duplicate, &scrolled_window_same_music_finder, ColumnsSameMusic::Color as i32, ColumnsSameMusic::ModificationAsSecs as i32); + } + "notebook_main_similar_images_finder_label" => { + popover_all_except_newest(&popover_select_duplicate, &scrolled_window_similar_images_finder, ColumnsSimilarImages::Color as i32, ColumnsSimilarImages::ModificationAsSecs as i32); + } + e => panic!("Not existent {}", e), + }); +} +pub fn connect_one_newest(gui_data: &GuiData) { + let notebook_main_children_names = gui_data.notebook_main_children_names.clone(); + let notebook_main = gui_data.notebook_main.clone(); + + let scrolled_window_similar_images_finder = gui_data.scrolled_window_similar_images_finder.clone(); + let scrolled_window_same_music_finder = gui_data.scrolled_window_same_music_finder.clone(); + let scrolled_window_duplicate_finder = gui_data.scrolled_window_duplicate_finder.clone(); + let popover_select_duplicate = gui_data.popover_select_duplicate.clone(); + let buttons_popover_duplicate_select_one_newest = gui_data.buttons_popover_duplicate_select_one_newest.clone(); + buttons_popover_duplicate_select_one_newest.connect_clicked(move |_| match notebook_main_children_names.get(notebook_main.get_current_page().unwrap() as usize).unwrap().as_str() { + "notebook_main_duplicate_finder_label" => { + popover_one_newest(&popover_select_duplicate, &scrolled_window_duplicate_finder, ColumnsDuplicates::Color as i32, ColumnsDuplicates::ModificationAsSecs as i32); + } + "notebook_main_same_music_finder" => { + popover_one_newest(&popover_select_duplicate, &scrolled_window_same_music_finder, ColumnsSameMusic::Color as i32, ColumnsSameMusic::ModificationAsSecs as i32); + } + "notebook_main_similar_images_finder_label" => { + popover_one_newest(&popover_select_duplicate, &scrolled_window_similar_images_finder, ColumnsSimilarImages::Color as i32, ColumnsSimilarImages::ModificationAsSecs as i32); + } + e => panic!("Not existent {}", e), + }); +} +pub fn connect_one_oldest(gui_data: &GuiData) { + let notebook_main_children_names = gui_data.notebook_main_children_names.clone(); + let notebook_main = gui_data.notebook_main.clone(); + + let scrolled_window_similar_images_finder = gui_data.scrolled_window_similar_images_finder.clone(); + let scrolled_window_same_music_finder = gui_data.scrolled_window_same_music_finder.clone(); + let scrolled_window_duplicate_finder = gui_data.scrolled_window_duplicate_finder.clone(); + let popover_select_duplicate = gui_data.popover_select_duplicate.clone(); + let buttons_popover_duplicate_select_one_oldest = gui_data.buttons_popover_duplicate_select_one_oldest.clone(); + buttons_popover_duplicate_select_one_oldest.connect_clicked(move |_| match notebook_main_children_names.get(notebook_main.get_current_page().unwrap() as usize).unwrap().as_str() { + "notebook_main_duplicate_finder_label" => { + popover_one_oldest(&popover_select_duplicate, &scrolled_window_duplicate_finder, ColumnsDuplicates::Color as i32, ColumnsDuplicates::ModificationAsSecs as i32); + } + "notebook_main_same_music_finder" => { + popover_one_oldest(&popover_select_duplicate, &scrolled_window_same_music_finder, ColumnsSameMusic::Color as i32, ColumnsSameMusic::ModificationAsSecs as i32); + } + "notebook_main_similar_images_finder_label" => { + popover_one_oldest(&popover_select_duplicate, &scrolled_window_similar_images_finder, ColumnsSimilarImages::Color as i32, ColumnsSimilarImages::ModificationAsSecs as i32); + } + e => panic!("Not existent {}", e), + }); +} diff --git a/czkawka_gui/src/gui_data.rs b/czkawka_gui/src/gui_data.rs index 1de1df8..0fbe15e 100644 --- a/czkawka_gui/src/gui_data.rs +++ b/czkawka_gui/src/gui_data.rs @@ -71,16 +71,21 @@ pub struct GuiData { pub buttons_remove_excluded_directory: gtk::Button, // Buttons search popover buttons - pub buttons_popover_select_all: gtk::Button, - pub buttons_popover_unselect_all: gtk::Button, - pub buttons_popover_reverse: gtk::Button, - pub buttons_popover_select_all_except_oldest: gtk::Button, - pub buttons_popover_select_all_except_newest: gtk::Button, - pub buttons_popover_select_one_oldest: gtk::Button, - pub buttons_popover_select_one_newest: gtk::Button, + pub buttons_popover_duplicate_select_all: gtk::Button, + pub buttons_popover_duplicate_unselect_all: gtk::Button, + pub buttons_popover_duplicate_reverse: gtk::Button, + pub buttons_popover_duplicate_select_all_except_oldest: gtk::Button, + pub buttons_popover_duplicate_select_all_except_newest: gtk::Button, + pub buttons_popover_duplicate_select_one_oldest: gtk::Button, + pub buttons_popover_duplicate_select_one_newest: gtk::Button, + + pub buttons_popover_simple_list_select_all: gtk::Button, + pub buttons_popover_simple_list_unselect_all: gtk::Button, + pub buttons_popover_simple_list_reverse: gtk::Button, //// Popovers - pub popover_select: gtk::Popover, + pub popover_select_duplicate: gtk::Popover, + pub popover_select_simple_list: gtk::Popover, //// Check Buttons pub check_button_recursive: gtk::CheckButton, @@ -251,16 +256,21 @@ impl GuiData { let buttons_remove_excluded_directory: gtk::Button = builder.get_object("buttons_remove_excluded_directory").unwrap(); // Buttons search popover buttons - let buttons_popover_select_all: gtk::Button = builder.get_object("buttons_popover_select_all").unwrap(); - let buttons_popover_unselect_all: gtk::Button = builder.get_object("buttons_popover_unselect_all").unwrap(); - let buttons_popover_reverse: gtk::Button = builder.get_object("buttons_popover_reverse").unwrap(); - let buttons_popover_select_all_except_oldest: gtk::Button = builder.get_object("buttons_popover_select_all_except_oldest").unwrap(); - let buttons_popover_select_all_except_newest: gtk::Button = builder.get_object("buttons_popover_select_all_except_newest").unwrap(); - let buttons_popover_select_one_oldest: gtk::Button = builder.get_object("buttons_popover_select_one_oldest").unwrap(); - let buttons_popover_select_one_newest: gtk::Button = builder.get_object("buttons_popover_select_one_newest").unwrap(); + let buttons_popover_duplicate_select_all: gtk::Button = builder.get_object("buttons_popover_duplicate_select_all").unwrap(); + let buttons_popover_duplicate_unselect_all: gtk::Button = builder.get_object("buttons_popover_duplicate_unselect_all").unwrap(); + let buttons_popover_duplicate_reverse: gtk::Button = builder.get_object("buttons_popover_duplicate_reverse").unwrap(); + let buttons_popover_duplicate_select_all_except_oldest: gtk::Button = builder.get_object("buttons_popover_duplicate_select_all_except_oldest").unwrap(); + let buttons_popover_duplicate_select_all_except_newest: gtk::Button = builder.get_object("buttons_popover_duplicate_select_all_except_newest").unwrap(); + let buttons_popover_duplicate_select_one_oldest: gtk::Button = builder.get_object("buttons_popover_duplicate_select_one_oldest").unwrap(); + let buttons_popover_duplicate_select_one_newest: gtk::Button = builder.get_object("buttons_popover_duplicate_select_one_newest").unwrap(); + + let buttons_popover_simple_list_select_all: gtk::Button = builder.get_object("buttons_popover_simple_list_select_all").unwrap(); + let buttons_popover_simple_list_unselect_all: gtk::Button = builder.get_object("buttons_popover_simple_list_unselect_all").unwrap(); + let buttons_popover_simple_list_reverse: gtk::Button = builder.get_object("buttons_popover_simple_list_reverse").unwrap(); //// Popovers - let popover_select: gtk::Popover = builder.get_object("popover_select").unwrap(); + let popover_select_duplicate: gtk::Popover = builder.get_object("popover_select_duplicate").unwrap(); + let popover_select_simple_list: gtk::Popover = builder.get_object("popover_select_simple_list").unwrap(); //// Check Buttons let check_button_recursive: gtk::CheckButton = builder.get_object("check_button_recursive").unwrap(); @@ -359,14 +369,18 @@ impl GuiData { buttons_remove_included_directory, buttons_add_excluded_directory, buttons_remove_excluded_directory, - buttons_popover_select_all, - buttons_popover_unselect_all, - buttons_popover_reverse, - buttons_popover_select_all_except_oldest, - buttons_popover_select_all_except_newest, - buttons_popover_select_one_oldest, - buttons_popover_select_one_newest, - popover_select, + buttons_popover_duplicate_select_all, + buttons_popover_duplicate_unselect_all, + buttons_popover_duplicate_reverse, + buttons_popover_duplicate_select_all_except_oldest, + buttons_popover_duplicate_select_all_except_newest, + buttons_popover_duplicate_select_one_oldest, + buttons_popover_duplicate_select_one_newest, + buttons_popover_simple_list_select_all, + buttons_popover_simple_list_unselect_all, + buttons_popover_simple_list_reverse, + popover_select_duplicate, + popover_select_simple_list, check_button_recursive, check_button_music_title, check_button_music_artist, diff --git a/czkawka_gui/src/help_functions.rs b/czkawka_gui/src/help_functions.rs index 8f8ad02..9cdbb30 100644 --- a/czkawka_gui/src/help_functions.rs +++ b/czkawka_gui/src/help_functions.rs @@ -66,6 +66,7 @@ pub enum ColumnsSimilarImages { Name, Path, Modification, + ModificationAsSecs, Color, TextColor, } @@ -85,7 +86,7 @@ pub enum ColumnsSameMusic { AlbumArtist, Year, Modification, - _ModificationAsSecs, + ModificationAsSecs, Color, TextColor, } diff --git a/czkawka_gui/src/main.rs b/czkawka_gui/src/main.rs index 1ab0013..2ecd075 100644 --- a/czkawka_gui/src/main.rs +++ b/czkawka_gui/src/main.rs @@ -5,7 +5,7 @@ mod connect_button_select; mod connect_button_stop; mod connect_compute_results; mod connect_notebook_tabs; -mod connect_popover_duplicate; +mod connect_popovers; mod connect_upper_notebook; mod create_tree_view; mod double_click_opening; @@ -23,7 +23,7 @@ use crate::connect_button_select::*; use crate::connect_button_stop::*; use crate::connect_compute_results::*; use crate::connect_notebook_tabs::*; -use crate::connect_popover_duplicate::*; +use crate::connect_popovers::*; use crate::connect_upper_notebook::*; use crate::gui_data::*; use crate::startup_configuration::*; @@ -62,7 +62,7 @@ fn main() { connect_button_stop(&gui_data); connect_notebook_tabs(&gui_data); connect_upper_notebook(&gui_data); - connect_popover_duplicate(&gui_data); + connect_popovers(&gui_data); connect_compute_results(&gui_data, receiver); // Quit the program when X in main window was clicked diff --git a/czkawka_gui/src/startup_configuration.rs b/czkawka_gui/src/startup_configuration.rs index 58a4169..088834e 100644 --- a/czkawka_gui/src/startup_configuration.rs +++ b/czkawka_gui/src/startup_configuration.rs @@ -132,14 +132,14 @@ pub fn startup_configuration(gui_data: &GuiData) { } // Similar Images { - // TODO create maybe open button to support opening multiple files at once - let col_types: [glib::types::Type; 8] = [ + let col_types: [glib::types::Type; 9] = [ glib::types::Type::String, glib::types::Type::String, glib::types::Type::String, glib::types::Type::String, glib::types::Type::String, glib::types::Type::String, + glib::types::Type::U64, glib::types::Type::String, glib::types::Type::String, ]; @@ -185,7 +185,7 @@ pub fn startup_configuration(gui_data: &GuiData) { glib::types::Type::String, glib::types::Type::String, glib::types::Type::String, - glib::types::Type::String, + glib::types::Type::U64, glib::types::Type::String, glib::types::Type::String, ];