1
0
Fork 0
mirror of synced 2024-05-17 19:03:08 +12:00
This commit is contained in:
Rafał Mikrut 2023-11-17 08:20:24 +01:00
parent 447eb98b51
commit c27236e644
2 changed files with 15 additions and 20 deletions

View file

@ -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<MainListModel>, delete_empty_folders: bool) -> Option<ModelRc<MainListModel>> {
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<MainListModel>) -> Option<ModelRc<MainListModel>> {
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<MainListModel>) -> Option<ModelRc<MainLis
}
// TODO delete in parallel items, consider to add progress bar
fn remove_selected_items(items: Vec<MainListModel>) {
// 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<MainListModel>, 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<MainListModel>, 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);

View file

@ -15,12 +15,12 @@ export component SelectableTableView inherits Rectangle {
in-out property <int> parentPathIdx;
in-out property <int> fileNameIdx;
in-out property <int> selected_item: -1;
out property <length> 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 <length> 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
}
}