Skip to content

Commit 58c6d03

Browse files
committed
Add support for delete button
1 parent f622504 commit 58c6d03

File tree

4 files changed

+195
-40
lines changed

4 files changed

+195
-40
lines changed

czkawka_core/src/similar_images.rs

+11
Original file line numberDiff line numberDiff line change
@@ -748,6 +748,17 @@ fn load_hashes_from_file(text_messages: &mut Messages) -> Option<HashMap<String,
748748
hash[i] = uuu[4 + i].parse::<u8>().unwrap();
749749
}
750750

751+
#[cfg(debug_assertions)]
752+
{
753+
let mut have_at_least: u8 = 0;
754+
for i in hash.iter() {
755+
if *i == 0 {
756+
have_at_least += 1;
757+
}
758+
}
759+
assert!(have_at_least != hash.len() as u8);
760+
}
761+
751762
hashmap_loaded_entries.insert(
752763
uuu[0].to_string(),
753764
FileEntry {

czkawka_gui/src/connect_button_delete.rs

+12-12
Original file line numberDiff line numberDiff line change
@@ -54,44 +54,44 @@ pub fn connect_button_delete(gui_data: &GuiData) {
5454

5555
match notebook_main_children_names.get(notebook_main.get_current_page().unwrap() as usize).unwrap().as_str() {
5656
"notebook_main_duplicate_finder_label" => {
57-
tree_remove(scrolled_window_duplicate_finder.clone(), ColumnsDuplicates::Name as i32, ColumnsDuplicates::Path as i32, ColumnsDuplicates::Color as i32, &gui_data);
57+
tree_remove(&scrolled_window_duplicate_finder.clone(), ColumnsDuplicates::Name as i32, ColumnsDuplicates::Path as i32, ColumnsDuplicates::Color as i32, &gui_data);
5858
}
5959
"scrolled_window_main_empty_folder_finder" => {
60-
empty_folder_remover(scrolled_window_main_empty_folder_finder.clone(), ColumnsEmptyFolders::Name as i32, ColumnsEmptyFolders::Path as i32, &gui_data);
60+
empty_folder_remover(&scrolled_window_main_empty_folder_finder.clone(), ColumnsEmptyFolders::Name as i32, ColumnsEmptyFolders::Path as i32, &gui_data);
6161
}
6262
"scrolled_window_main_empty_files_finder" => {
63-
basic_remove(scrolled_window_main_empty_files_finder.clone(), ColumnsEmptyFiles::Name as i32, ColumnsEmptyFiles::Path as i32, &gui_data);
63+
basic_remove(&scrolled_window_main_empty_files_finder.clone(), ColumnsEmptyFiles::Name as i32, ColumnsEmptyFiles::Path as i32, &gui_data);
6464
}
6565
"scrolled_window_main_temporary_files_finder" => {
66-
basic_remove(scrolled_window_main_temporary_files_finder.clone(), ColumnsTemporaryFiles::Name as i32, ColumnsTemporaryFiles::Path as i32, &gui_data);
66+
basic_remove(&scrolled_window_main_temporary_files_finder.clone(), ColumnsTemporaryFiles::Name as i32, ColumnsTemporaryFiles::Path as i32, &gui_data);
6767
}
6868
"notebook_big_main_file_finder" => {
69-
basic_remove(scrolled_window_big_files_finder.clone(), ColumnsBigFiles::Name as i32, ColumnsBigFiles::Path as i32, &gui_data);
69+
basic_remove(&scrolled_window_big_files_finder.clone(), ColumnsBigFiles::Name as i32, ColumnsBigFiles::Path as i32, &gui_data);
7070
}
7171
"notebook_main_similar_images_finder_label" => {
7272
tree_remove(
73-
scrolled_window_similar_images_finder.clone(),
73+
&scrolled_window_similar_images_finder.clone(),
7474
ColumnsSimilarImages::Name as i32,
7575
ColumnsSimilarImages::Path as i32,
7676
ColumnsSimilarImages::Color as i32,
7777
&gui_data,
7878
);
7979
}
8080
"notebook_main_zeroed_files_finder" => {
81-
basic_remove(scrolled_window_zeroed_files_finder.clone(), ColumnsZeroedFiles::Name as i32, ColumnsZeroedFiles::Path as i32, &gui_data);
81+
basic_remove(&scrolled_window_zeroed_files_finder.clone(), ColumnsZeroedFiles::Name as i32, ColumnsZeroedFiles::Path as i32, &gui_data);
8282
}
8383
"notebook_main_same_music_finder" => {
84-
tree_remove(scrolled_window_same_music_finder.clone(), ColumnsSameMusic::Name as i32, ColumnsSameMusic::Path as i32, ColumnsSameMusic::Color as i32, &gui_data);
84+
tree_remove(&scrolled_window_same_music_finder.clone(), ColumnsSameMusic::Name as i32, ColumnsSameMusic::Path as i32, ColumnsSameMusic::Color as i32, &gui_data);
8585
}
8686
"scrolled_window_invalid_symlinks" => {
87-
basic_remove(scrolled_window_invalid_symlinks.clone(), ColumnsInvalidSymlinks::Name as i32, ColumnsInvalidSymlinks::Path as i32, &gui_data);
87+
basic_remove(&scrolled_window_invalid_symlinks.clone(), ColumnsInvalidSymlinks::Name as i32, ColumnsInvalidSymlinks::Path as i32, &gui_data);
8888
}
8989
e => panic!("Not existent {}", e),
9090
}
9191
});
9292
}
9393

94-
fn empty_folder_remover(scrolled_window: gtk::ScrolledWindow, column_file_name: i32, column_path: i32, gui_data: &GuiData) {
94+
pub fn empty_folder_remover(scrolled_window: &gtk::ScrolledWindow, column_file_name: i32, column_path: i32, gui_data: &GuiData) {
9595
let text_view_errors = gui_data.text_view_errors.clone();
9696

9797
let tree_view = scrolled_window.get_children().get(0).unwrap().clone().downcast::<gtk::TreeView>().unwrap();
@@ -177,7 +177,7 @@ fn empty_folder_remover(scrolled_window: gtk::ScrolledWindow, column_file_name:
177177
selection.unselect_all();
178178
}
179179

180-
fn basic_remove(scrolled_window: gtk::ScrolledWindow, column_file_name: i32, column_path: i32, gui_data: &GuiData) {
180+
pub fn basic_remove(scrolled_window: &gtk::ScrolledWindow, column_file_name: i32, column_path: i32, gui_data: &GuiData) {
181181
let text_view_errors = gui_data.text_view_errors.clone();
182182

183183
let tree_view = scrolled_window.get_children().get(0).unwrap().clone().downcast::<gtk::TreeView>().unwrap();
@@ -212,7 +212,7 @@ fn basic_remove(scrolled_window: gtk::ScrolledWindow, column_file_name: i32, col
212212

213213
// Remove all occurrences - remove every element which have same path and name as even non selected ones
214214
//
215-
fn tree_remove(scrolled_window: gtk::ScrolledWindow, column_file_name: i32, column_path: i32, column_color: i32, gui_data: &GuiData) {
215+
pub fn tree_remove(scrolled_window: &gtk::ScrolledWindow, column_file_name: i32, column_path: i32, column_color: i32, gui_data: &GuiData) {
216216
let text_view_errors = gui_data.text_view_errors.clone();
217217

218218
let tree_view = scrolled_window.get_children().get(0).unwrap().clone().downcast::<gtk::TreeView>().unwrap();

czkawka_gui/src/connect_selection_of_directories.rs

+15-18
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
extern crate gtk;
22
use crate::gui_data::GuiData;
3+
use crate::help_functions::{get_list_store, get_tree_view};
34
use gtk::prelude::*;
45

56
pub fn connect_selection_of_directories(gui_data: &GuiData) {
@@ -69,35 +70,31 @@ pub fn connect_selection_of_directories(gui_data: &GuiData) {
6970
let buttons_remove_excluded_directory = gui_data.buttons_remove_excluded_directory.clone();
7071
let scrolled_window_excluded_directories = gui_data.scrolled_window_excluded_directories.clone();
7172
buttons_remove_excluded_directory.connect_clicked(move |_| {
72-
let tree_view = scrolled_window_excluded_directories.get_children().get(0).unwrap().clone().downcast::<gtk::TreeView>().unwrap();
73-
let list_store = tree_view.get_model().unwrap().downcast::<gtk::ListStore>().unwrap();
73+
let tree_view = get_tree_view(&scrolled_window_excluded_directories);
74+
let list_store = get_list_store(&scrolled_window_excluded_directories);
7475
let selection = tree_view.get_selection();
7576

76-
let (_, tree_iter) = match selection.get_selected() {
77-
Some(t) => t,
78-
None => {
79-
return;
80-
}
81-
};
82-
list_store.remove(&tree_iter);
77+
let (vec_tree_path, _tree_model) = selection.get_selected_rows();
78+
79+
for tree_path in vec_tree_path.iter().rev() {
80+
list_store.remove(&list_store.get_iter(tree_path).unwrap());
81+
}
8382
});
8483
}
8584
// Remove Included Folder
8685
{
8786
let buttons_remove_included_directory = gui_data.buttons_remove_included_directory.clone();
8887
let scrolled_window_included_directories = gui_data.scrolled_window_included_directories.clone();
8988
buttons_remove_included_directory.connect_clicked(move |_| {
90-
let tree_view = scrolled_window_included_directories.get_children().get(0).unwrap().clone().downcast::<gtk::TreeView>().unwrap();
91-
let list_store = tree_view.get_model().unwrap().downcast::<gtk::ListStore>().unwrap();
89+
let tree_view = get_tree_view(&scrolled_window_included_directories);
90+
let list_store = get_list_store(&scrolled_window_included_directories);
9291
let selection = tree_view.get_selection();
9392

94-
let (_, tree_iter) = match selection.get_selected() {
95-
Some(t) => t,
96-
None => {
97-
return;
98-
}
99-
};
100-
list_store.remove(&tree_iter);
93+
let (vec_tree_path, _tree_model) = selection.get_selected_rows();
94+
95+
for tree_path in vec_tree_path.iter().rev() {
96+
list_store.remove(&list_store.get_iter(tree_path).unwrap());
97+
}
10198
});
10299
}
103100
}

0 commit comments

Comments
 (0)