diff --git a/krokiet/src/connect_delete.rs b/krokiet/src/connect_delete.rs index ec95daf..94a06c2 100644 --- a/krokiet/src/connect_delete.rs +++ b/krokiet/src/connect_delete.rs @@ -14,38 +14,29 @@ pub fn connect_delete_button(app: &MainWindow) { let model = match active_tab { CurrentTab::EmptyFolders => app.get_empty_folder_model(), + CurrentTab::SimilarImages => app.get_similar_images_model(), + CurrentTab::EmptyFiles => app.get_empty_files_model(), _ => panic!(), }; - let new_model = handle_delete_items(&model); + let new_model = handle_delete_items(&model, active_tab == CurrentTab::EmptyFolders); if let Some(new_model) = new_model { match active_tab { CurrentTab::EmptyFolders => app.set_empty_folder_model(new_model), + CurrentTab::SimilarImages => app.set_similar_images_model(new_model), + CurrentTab::EmptyFiles => app.set_empty_files_model(new_model), _ => panic!(), } } }); } -fn handle_delete_empty_folders(app: &MainWindow) { - let r = app.get_empty_folder_model(); - let (entries_to_delete, mut entries_left) = filter_out_checked_items(r.borrow(), false); +fn handle_delete_items(items: &ModelRc, delete_empty_folders: bool) -> Option> { + let (entries_to_delete, mut entries_left) = filter_out_checked_items(items, false); if !entries_to_delete.is_empty() { - remove_selected_items(entries_to_delete); - deselect_all_items(&mut entries_left); - - let r = ModelRc::new(VecModel::from(entries_left)); - app.set_empty_folder_model(r); - } -} - -fn handle_delete_items(items: &ModelRc) -> Option> { - let (entries_to_delete, mut entries_left) = filter_out_checked_items(items.borrow(), false); - - if !entries_to_delete.is_empty() { - remove_selected_items(entries_to_delete); + remove_selected_items(entries_to_delete, delete_empty_folders); deselect_all_items(&mut entries_left); let r = ModelRc::new(VecModel::from(entries_left)); @@ -55,9 +46,12 @@ fn handle_delete_items(items: &ModelRc) -> Option) { +// For empty folders double check if folders are really empty - this function probably should be run in thread +// and at the end should be send signal to main thread to update model +fn remove_selected_items(items: Vec, delete_empty_folders: bool) { info!("Items to remove {}", items.len()); drop(items); + drop(delete_empty_folders); // items.into_iter().for_each(|_item| {}); } @@ -75,6 +69,7 @@ fn filter_out_checked_items(items: &ModelRc, have_header: bool) - let (entries_to_delete, mut entries_left): (Vec<_>, Vec<_>) = items.iter().partition(|item| item.checked); + // When have header, we must also throw out orphaned items - this needs to be if have_header && !entries_left.is_empty() { // First row must be header assert!(entries_left[0].header_row); diff --git a/krokiet/ui/selectable_tree_view.slint b/krokiet/ui/selectable_tree_view.slint index be8c4f4..f6b8de3 100644 --- a/krokiet/ui/selectable_tree_view.slint +++ b/krokiet/ui/selectable_tree_view.slint @@ -15,12 +15,12 @@ export component SelectableTableView inherits Rectangle { in-out property parentPathIdx; in-out property fileNameIdx; in-out property selected_item: -1; - out property list_view_width: column_sizes[0] + column_sizes[1] + column_sizes[2] + column_sizes[3] + column_sizes[4] + column_sizes[5] + column_sizes[6] + column_sizes[7] + column_sizes[8] + column_sizes[9] + column_sizes[10] + column_sizes[11]; + out property list_view_width: max(self.width - 20px, column_sizes[0] + column_sizes[1] + column_sizes[2] + column_sizes[3] + column_sizes[4] + column_sizes[5] + column_sizes[6] + column_sizes[7] + column_sizes[8] + column_sizes[9] + column_sizes[10] + column_sizes[11]); forward-focus: focus_item; // TODO not works focus_item := FocusScope { key-released(event) => { - // debug(event); + debug(event); accept } }