diff --git a/czkawka_core/src/similar_images.rs b/czkawka_core/src/similar_images.rs index 2bf403d..c3d63ed 100644 --- a/czkawka_core/src/similar_images.rs +++ b/czkawka_core/src/similar_images.rs @@ -1132,6 +1132,7 @@ mod tests { use std::collections::HashMap; use std::path::PathBuf; + use crate::common_dir_traversal::ToolType; use bk_tree::BKTree; use crate::common_directory::Directories; @@ -1152,6 +1153,10 @@ mod tests { for _ in 0..100 { let mut similar_images = SimilarImages { similarity: 0, + common_data: CommonToolData { + tool_type: ToolType::SimilarImages, + ..Default::default() + }, ..Default::default() }; @@ -1183,6 +1188,10 @@ mod tests { for _ in 0..100 { let mut similar_images = SimilarImages { similarity: 1, + common_data: CommonToolData { + tool_type: ToolType::SimilarImages, + ..Default::default() + }, ..Default::default() }; @@ -1203,6 +1212,7 @@ mod tests { similarity: 2, common_data: CommonToolData { use_reference_folders: false, + tool_type: ToolType::SimilarImages, ..Default::default() }, ..Default::default() @@ -1227,6 +1237,10 @@ mod tests { // for _ in 0..100 { // let mut similar_images = SimilarImages { // similarity: 10, + // common_data: CommonToolData { + // tool_type: ToolType::SimilarImages, + // ..Default::default() + // }, // use_reference_folders: false, // ..Default::default() // }; @@ -1250,6 +1264,7 @@ mod tests { let mut similar_images = SimilarImages { similarity: 0, common_data: CommonToolData { + tool_type: ToolType::SimilarImages, directories: Directories { reference_directories: vec![PathBuf::from("/home/rr/")], ..Default::default() @@ -1276,6 +1291,7 @@ mod tests { let mut similar_images = SimilarImages { similarity: 0, common_data: CommonToolData { + tool_type: ToolType::SimilarImages, directories: Directories { reference_directories: vec![PathBuf::from("/home/rr/")], ..Default::default() @@ -1303,6 +1319,7 @@ mod tests { let mut similar_images = SimilarImages { similarity: 0, common_data: CommonToolData { + tool_type: ToolType::SimilarImages, directories: Directories { reference_directories: vec![PathBuf::from("/home/rr/")], ..Default::default() @@ -1334,6 +1351,7 @@ mod tests { let mut similar_images = SimilarImages { similarity: 1, common_data: CommonToolData { + tool_type: ToolType::SimilarImages, use_reference_folders: false, ..Default::default() }, @@ -1358,6 +1376,7 @@ mod tests { let mut similar_images = SimilarImages { similarity: 4, common_data: CommonToolData { + tool_type: ToolType::SimilarImages, use_reference_folders: false, ..Default::default() }, @@ -1391,6 +1410,7 @@ mod tests { let mut similar_images = SimilarImages { similarity: 1, common_data: CommonToolData { + tool_type: ToolType::SimilarImages, directories: Directories { reference_directories: vec![PathBuf::from("/home/rr/")], ..Default::default() @@ -1421,6 +1441,7 @@ mod tests { let mut similar_images = SimilarImages { similarity: 1, common_data: CommonToolData { + tool_type: ToolType::SimilarImages, directories: Directories { reference_directories: vec![PathBuf::from("/home/rr/")], ..Default::default() @@ -1448,6 +1469,7 @@ mod tests { let mut similar_images = SimilarImages { similarity: 1, common_data: CommonToolData { + tool_type: ToolType::SimilarImages, directories: Directories { reference_directories: vec![PathBuf::from("/home/rr/")], ..Default::default() @@ -1486,6 +1508,7 @@ mod tests { let mut similar_images = SimilarImages { similarity: 10, common_data: CommonToolData { + tool_type: ToolType::SimilarImages, directories: Directories { reference_directories: vec![PathBuf::from("/home/rr/")], ..Default::default() diff --git a/krokiet/src/connect_delete.rs b/krokiet/src/connect_delete.rs index 4f337a4..a385d59 100644 --- a/krokiet/src/connect_delete.rs +++ b/krokiet/src/connect_delete.rs @@ -2,12 +2,12 @@ use std::borrow::Borrow; use slint::{ComponentHandle, Model, ModelRc, VecModel}; -use crate::{CurrentTab, MainListModel, MainWindow}; +use crate::{Callabler, CurrentTab, MainListModel, MainWindow}; use log::info; pub fn connect_delete_button(app: &MainWindow) { let a = app.as_weak(); - app.on_deleted(move || { + app.global::().on_delete_selected_items(move || { let app = a.upgrade().unwrap(); let active_tab = app.get_active_tab(); diff --git a/krokiet/src/connect_open.rs b/krokiet/src/connect_open.rs index e53b70d..1b98363 100644 --- a/krokiet/src/connect_open.rs +++ b/krokiet/src/connect_open.rs @@ -1,7 +1,8 @@ -use crate::MainWindow; +use crate::{Callabler, MainWindow}; +use slint::ComponentHandle; pub fn connect_open_items(app: &MainWindow) { - app.on_item_opened(move |path| { + app.global::().on_item_opened(move |path| { match open::that(&*path) { Ok(()) => {} Err(e) => { diff --git a/krokiet/ui/action_buttons.slint b/krokiet/ui/action_buttons.slint index 5da027b..48c4536 100644 --- a/krokiet/ui/action_buttons.slint +++ b/krokiet/ui/action_buttons.slint @@ -3,6 +3,7 @@ import {LeftSidePanel} from "left_side_panel.slint"; import {MainList} from "main_lists.slint"; import {CurrentTab} from "common.slint"; import {BottomPanelVisibility} from "common.slint"; +import {Callabler} from "callabler.slint"; export component VisibilityButton inherits Button { in-out property button_visibility; @@ -16,7 +17,6 @@ export component VisibilityButton inherits Button { } export component ActionButtons inherits HorizontalLayout { - callback deleted; callback scan_stopping; callback scan_starting(CurrentTab); in-out property bottom_panel_visibility: BottomPanelVisibility.Directories; @@ -55,7 +55,7 @@ export component ActionButtons inherits HorizontalLayout { enabled: !scanning; text: "Delete"; clicked => { - root.deleted(); + Callabler.delete_selected_items(); } } diff --git a/krokiet/ui/bottom_panel.slint b/krokiet/ui/bottom_panel.slint index 96b7d65..a8c8b51 100644 --- a/krokiet/ui/bottom_panel.slint +++ b/krokiet/ui/bottom_panel.slint @@ -4,93 +4,93 @@ import {Settings} from "settings.slint"; import {BottomPanelVisibility} from "common.slint"; import {Callabler} from "callabler.slint"; -component DirectoriesPanel { - callback folder-choose-requested(bool); +component DirectoriesPanel inherits HorizontalLayout { + callback folder_choose_requested(bool); callback show_manual_add_dialog(bool); // Included directories - HorizontalLayout { - VerticalLayout { - horizontal-stretch: 0.0; - Button { - text: "Add"; - clicked => { - folder-choose-requested(true); - } - } - - Button { - text: "Remove"; - clicked => { - Callabler.remove_item_directories(true, included-list.current-item); - } - } - - Button { - text: "Manual Add"; - clicked => { - show_manual_add_dialog(true); - } - } - - Rectangle { - vertical-stretch: 1.0; + VerticalLayout { + horizontal-stretch: 0.0; + spacing: 5px; + Button { + text: "Add"; + clicked => { + folder_choose_requested(true); } } - VerticalLayout { - horizontal-stretch: 1.0; - Rectangle { - Text { - text: "Included Directories"; - } - } - - included_list := StandardListView { - model: Settings.included-directories; + Button { + text: "Remove"; + clicked => { + Callabler.remove_item_directories(true, included-list.current-item); } } - // Excluded directories - VerticalLayout { - horizontal-stretch: 0.0; - Button { - text: "Add"; - clicked => { - folder-choose-requested(false); - } - } - - Button { - text: "Remove"; - clicked => { - Callabler.remove_item_directories(false, excluded-list.current-item); - } - } - - Button { - text: "Manual Add"; - clicked => { - show_manual_add_dialog(false); - } - } - - Rectangle { - vertical-stretch: 1.0; + Button { + text: "Manual Add"; + clicked => { + show_manual_add_dialog(true); } } - VerticalLayout { - horizontal-stretch: 1.0; - Rectangle { - Text { - text: "Excluded Directories"; - } - } + Rectangle { + vertical-stretch: 1.0; + } + } - excluded_list := StandardListView { - model: Settings.excluded-directories; + VerticalLayout { + horizontal-stretch: 1.0; + Rectangle { + Text { + text: "Included Directories"; } } + + included_list := StandardListView { + model: Settings.included-directories; + } + } + + // Excluded directories + VerticalLayout { + horizontal-stretch: 0.0; + spacing: 5px; + Button { + text: "Add"; + clicked => { + folder_choose_requested(false); + } + } + + Button { + text: "Remove"; + clicked => { + Callabler.remove_item_directories(false, excluded-list.current-item); + } + } + + Button { + text: "Manual Add"; + clicked => { + show_manual_add_dialog(false); + } + } + + Rectangle { + vertical-stretch: 1.0; + } + } + + VerticalLayout { + horizontal-stretch: 1.0; + Rectangle { + Text { + text: "Excluded Directories"; + } + } + + excluded_list := StandardListView { + model: Settings.excluded-directories; + } } } @@ -103,15 +103,15 @@ component TextErrorsPanel inherits TextEdit { export component BottomPanel { in-out property bottom_panel_visibility: BottomPanelVisibility.Directories; - callback folder-choose-requested(bool); + callback folder_choose_requested(bool); callback show_manual_add_dialog(bool); min-height: bottom-panel-visibility == BottomPanelVisibility.NotVisible ? 0px : 150px; min-width: bottom-panel-visibility == BottomPanelVisibility.NotVisible ? 0px : 400px; if bottom-panel-visibility == BottomPanelVisibility.Directories: DirectoriesPanel { width: parent.width; height: parent.height; - folder-choose-requested(included-directories) => { - root.folder-choose-requested(included-directories) + folder_choose_requested(included-directories) => { + root.folder_choose_requested(included-directories) } show_manual_add_dialog(included-directories) => { root.show_manual_add_dialog(included-directories) diff --git a/krokiet/ui/callabler.slint b/krokiet/ui/callabler.slint index b4f21da..8029aa2 100644 --- a/krokiet/ui/callabler.slint +++ b/krokiet/ui/callabler.slint @@ -1,4 +1,10 @@ export global Callabler { + // Bottom panel operations callback remove_item_directories(bool, int); callback added_manual_directories(bool, string); + + // Right click or middle click opener + callback item_opened(string); + + callback delete_selected_items(); } diff --git a/krokiet/ui/main_lists.slint b/krokiet/ui/main_lists.slint index 15867f4..ae802c4 100644 --- a/krokiet/ui/main_lists.slint +++ b/krokiet/ui/main_lists.slint @@ -5,7 +5,6 @@ import {CurrentTab, TypeOfOpenedItem} from "common.slint"; import {MainListModel} from "common.slint"; export component MainList { - callback item_opened(string); in-out property active-tab; in-out property <[MainListModel]> empty_folder_model; in-out property <[MainListModel]> empty_files_model; @@ -19,9 +18,6 @@ export component MainList { values <=> empty-folder-model; parentPathIdx: 2; fileNameIdx: 1; - item_opened(item) => { - item_opened(item) - } } if root.active-tab == CurrentTab.EmptyFiles: SelectableTableView { @@ -32,9 +28,6 @@ export component MainList { values <=> empty-files-model; parentPathIdx: 2; fileNameIdx: 1; - item_opened(item) => { - item_opened(item) - } } if root.active-tab == CurrentTab.SimilarImages: SelectableTableView { @@ -45,8 +38,5 @@ export component MainList { values <=> similar-images-model; parentPathIdx: 5; fileNameIdx: 4; - item_opened(item) => { - item_opened(item) - } } } diff --git a/krokiet/ui/main_window.slint b/krokiet/ui/main_window.slint index 2ff9c4d..513ef72 100644 --- a/krokiet/ui/main_window.slint +++ b/krokiet/ui/main_window.slint @@ -14,11 +14,9 @@ import {ColorPalette} from "color_palette.slint"; export {Settings, Callabler} export component MainWindow inherits Window { - callback deleted; callback scan_stopping; callback scan_starting(CurrentTab); - callback item_opened(string); - callback folder-choose-requested(bool); + callback folder_choose_requested(bool); callback scan_ended(string); min-width: 300px; preferred-width: 800px; @@ -58,10 +56,6 @@ export component MainWindow inherits Window { empty_folder_model <=> root.empty_folder_model; empty_files_model <=> root.empty_files_model; similar_images_model <=> root.similar_images_model; - - item_opened(item) => { - item_opened(item) - } } if root.scanning: Progress { @@ -76,9 +70,6 @@ export component MainWindow inherits Window { scanning <=> root.scanning; active-tab <=> root.active-tab; stop_requested <=> root.stop-requested; - deleted => { - root.deleted(); - } scan_stopping => { text_summary.text = "Stopping scan, please wait..."; root.scan_stopping(); @@ -99,8 +90,8 @@ export component MainWindow inherits Window { bottom-panel-visibility <=> action_buttons.bottom-panel-visibility; vertical-stretch: 0.0; - folder-choose-requested(included-directories) => { - root.folder-choose-requested(included-directories) + folder_choose_requested(included-directories) => { + root.folder_choose_requested(included-directories) } show_manual_add_dialog(included-directories) => { self.included-directories = included-directories; diff --git a/krokiet/ui/selectable_tree_view.slint b/krokiet/ui/selectable_tree_view.slint index 652e166..ca9c09e 100644 --- a/krokiet/ui/selectable_tree_view.slint +++ b/krokiet/ui/selectable_tree_view.slint @@ -2,7 +2,7 @@ import { Button, VerticalBox , HorizontalBox, TabWidget, ListView, StandardListV import {TypeOfOpenedItem} from "common.slint"; import {ColorPalette} from "color_palette.slint"; import {MainListModel} from "common.slint"; - +import {Callabler} from "callabler.slint"; export component SelectableTableView inherits Rectangle { callback item_opened(string); @@ -100,9 +100,9 @@ export component SelectableTableView inherits Rectangle { pointer-event(event) => { // TODO this should be clicked by double-click if (event.button == PointerEventButton.right && event.kind == PointerEventKind.up) { - root.item_opened(r.val[root.parentPathIdx - 1]) + Callabler.item_opened(r.val[root.parentPathIdx - 1]) } else if (event.button == PointerEventButton.middle && event.kind == PointerEventKind.up) { - root.item_opened(r.val[root.parentPathIdx - 1] + "/" + r.val[root.fileNameIdx - 1]) + Callabler.item_opened(r.val[root.parentPathIdx - 1] + "/" + r.val[root.fileNameIdx - 1]) } } }