1
0
Fork 0
mirror of synced 2024-06-02 02:24:44 +12:00

Simplify opening

This commit is contained in:
Rafał Mikrut 2023-11-12 09:09:15 +01:00
parent b67a98f8ca
commit ff7cfff900
9 changed files with 118 additions and 107 deletions

View file

@ -1132,6 +1132,7 @@ mod tests {
use std::collections::HashMap; use std::collections::HashMap;
use std::path::PathBuf; use std::path::PathBuf;
use crate::common_dir_traversal::ToolType;
use bk_tree::BKTree; use bk_tree::BKTree;
use crate::common_directory::Directories; use crate::common_directory::Directories;
@ -1152,6 +1153,10 @@ mod tests {
for _ in 0..100 { for _ in 0..100 {
let mut similar_images = SimilarImages { let mut similar_images = SimilarImages {
similarity: 0, similarity: 0,
common_data: CommonToolData {
tool_type: ToolType::SimilarImages,
..Default::default()
},
..Default::default() ..Default::default()
}; };
@ -1183,6 +1188,10 @@ mod tests {
for _ in 0..100 { for _ in 0..100 {
let mut similar_images = SimilarImages { let mut similar_images = SimilarImages {
similarity: 1, similarity: 1,
common_data: CommonToolData {
tool_type: ToolType::SimilarImages,
..Default::default()
},
..Default::default() ..Default::default()
}; };
@ -1203,6 +1212,7 @@ mod tests {
similarity: 2, similarity: 2,
common_data: CommonToolData { common_data: CommonToolData {
use_reference_folders: false, use_reference_folders: false,
tool_type: ToolType::SimilarImages,
..Default::default() ..Default::default()
}, },
..Default::default() ..Default::default()
@ -1227,6 +1237,10 @@ mod tests {
// for _ in 0..100 { // for _ in 0..100 {
// let mut similar_images = SimilarImages { // let mut similar_images = SimilarImages {
// similarity: 10, // similarity: 10,
// common_data: CommonToolData {
// tool_type: ToolType::SimilarImages,
// ..Default::default()
// },
// use_reference_folders: false, // use_reference_folders: false,
// ..Default::default() // ..Default::default()
// }; // };
@ -1250,6 +1264,7 @@ mod tests {
let mut similar_images = SimilarImages { let mut similar_images = SimilarImages {
similarity: 0, similarity: 0,
common_data: CommonToolData { common_data: CommonToolData {
tool_type: ToolType::SimilarImages,
directories: Directories { directories: Directories {
reference_directories: vec![PathBuf::from("/home/rr/")], reference_directories: vec![PathBuf::from("/home/rr/")],
..Default::default() ..Default::default()
@ -1276,6 +1291,7 @@ mod tests {
let mut similar_images = SimilarImages { let mut similar_images = SimilarImages {
similarity: 0, similarity: 0,
common_data: CommonToolData { common_data: CommonToolData {
tool_type: ToolType::SimilarImages,
directories: Directories { directories: Directories {
reference_directories: vec![PathBuf::from("/home/rr/")], reference_directories: vec![PathBuf::from("/home/rr/")],
..Default::default() ..Default::default()
@ -1303,6 +1319,7 @@ mod tests {
let mut similar_images = SimilarImages { let mut similar_images = SimilarImages {
similarity: 0, similarity: 0,
common_data: CommonToolData { common_data: CommonToolData {
tool_type: ToolType::SimilarImages,
directories: Directories { directories: Directories {
reference_directories: vec![PathBuf::from("/home/rr/")], reference_directories: vec![PathBuf::from("/home/rr/")],
..Default::default() ..Default::default()
@ -1334,6 +1351,7 @@ mod tests {
let mut similar_images = SimilarImages { let mut similar_images = SimilarImages {
similarity: 1, similarity: 1,
common_data: CommonToolData { common_data: CommonToolData {
tool_type: ToolType::SimilarImages,
use_reference_folders: false, use_reference_folders: false,
..Default::default() ..Default::default()
}, },
@ -1358,6 +1376,7 @@ mod tests {
let mut similar_images = SimilarImages { let mut similar_images = SimilarImages {
similarity: 4, similarity: 4,
common_data: CommonToolData { common_data: CommonToolData {
tool_type: ToolType::SimilarImages,
use_reference_folders: false, use_reference_folders: false,
..Default::default() ..Default::default()
}, },
@ -1391,6 +1410,7 @@ mod tests {
let mut similar_images = SimilarImages { let mut similar_images = SimilarImages {
similarity: 1, similarity: 1,
common_data: CommonToolData { common_data: CommonToolData {
tool_type: ToolType::SimilarImages,
directories: Directories { directories: Directories {
reference_directories: vec![PathBuf::from("/home/rr/")], reference_directories: vec![PathBuf::from("/home/rr/")],
..Default::default() ..Default::default()
@ -1421,6 +1441,7 @@ mod tests {
let mut similar_images = SimilarImages { let mut similar_images = SimilarImages {
similarity: 1, similarity: 1,
common_data: CommonToolData { common_data: CommonToolData {
tool_type: ToolType::SimilarImages,
directories: Directories { directories: Directories {
reference_directories: vec![PathBuf::from("/home/rr/")], reference_directories: vec![PathBuf::from("/home/rr/")],
..Default::default() ..Default::default()
@ -1448,6 +1469,7 @@ mod tests {
let mut similar_images = SimilarImages { let mut similar_images = SimilarImages {
similarity: 1, similarity: 1,
common_data: CommonToolData { common_data: CommonToolData {
tool_type: ToolType::SimilarImages,
directories: Directories { directories: Directories {
reference_directories: vec![PathBuf::from("/home/rr/")], reference_directories: vec![PathBuf::from("/home/rr/")],
..Default::default() ..Default::default()
@ -1486,6 +1508,7 @@ mod tests {
let mut similar_images = SimilarImages { let mut similar_images = SimilarImages {
similarity: 10, similarity: 10,
common_data: CommonToolData { common_data: CommonToolData {
tool_type: ToolType::SimilarImages,
directories: Directories { directories: Directories {
reference_directories: vec![PathBuf::from("/home/rr/")], reference_directories: vec![PathBuf::from("/home/rr/")],
..Default::default() ..Default::default()

View file

@ -2,12 +2,12 @@ use std::borrow::Borrow;
use slint::{ComponentHandle, Model, ModelRc, VecModel}; use slint::{ComponentHandle, Model, ModelRc, VecModel};
use crate::{CurrentTab, MainListModel, MainWindow}; use crate::{Callabler, CurrentTab, MainListModel, MainWindow};
use log::info; use log::info;
pub fn connect_delete_button(app: &MainWindow) { pub fn connect_delete_button(app: &MainWindow) {
let a = app.as_weak(); let a = app.as_weak();
app.on_deleted(move || { app.global::<Callabler>().on_delete_selected_items(move || {
let app = a.upgrade().unwrap(); let app = a.upgrade().unwrap();
let active_tab = app.get_active_tab(); let active_tab = app.get_active_tab();

View file

@ -1,7 +1,8 @@
use crate::MainWindow; use crate::{Callabler, MainWindow};
use slint::ComponentHandle;
pub fn connect_open_items(app: &MainWindow) { pub fn connect_open_items(app: &MainWindow) {
app.on_item_opened(move |path| { app.global::<Callabler>().on_item_opened(move |path| {
match open::that(&*path) { match open::that(&*path) {
Ok(()) => {} Ok(()) => {}
Err(e) => { Err(e) => {

View file

@ -3,6 +3,7 @@ import {LeftSidePanel} from "left_side_panel.slint";
import {MainList} from "main_lists.slint"; import {MainList} from "main_lists.slint";
import {CurrentTab} from "common.slint"; import {CurrentTab} from "common.slint";
import {BottomPanelVisibility} from "common.slint"; import {BottomPanelVisibility} from "common.slint";
import {Callabler} from "callabler.slint";
export component VisibilityButton inherits Button { export component VisibilityButton inherits Button {
in-out property <BottomPanelVisibility> button_visibility; in-out property <BottomPanelVisibility> button_visibility;
@ -16,7 +17,6 @@ export component VisibilityButton inherits Button {
} }
export component ActionButtons inherits HorizontalLayout { export component ActionButtons inherits HorizontalLayout {
callback deleted;
callback scan_stopping; callback scan_stopping;
callback scan_starting(CurrentTab); callback scan_starting(CurrentTab);
in-out property <BottomPanelVisibility> bottom_panel_visibility: BottomPanelVisibility.Directories; in-out property <BottomPanelVisibility> bottom_panel_visibility: BottomPanelVisibility.Directories;
@ -55,7 +55,7 @@ export component ActionButtons inherits HorizontalLayout {
enabled: !scanning; enabled: !scanning;
text: "Delete"; text: "Delete";
clicked => { clicked => {
root.deleted(); Callabler.delete_selected_items();
} }
} }

View file

@ -4,93 +4,93 @@ import {Settings} from "settings.slint";
import {BottomPanelVisibility} from "common.slint"; import {BottomPanelVisibility} from "common.slint";
import {Callabler} from "callabler.slint"; import {Callabler} from "callabler.slint";
component DirectoriesPanel { component DirectoriesPanel inherits HorizontalLayout {
callback folder-choose-requested(bool); callback folder_choose_requested(bool);
callback show_manual_add_dialog(bool); callback show_manual_add_dialog(bool);
// Included directories // Included directories
HorizontalLayout { VerticalLayout {
VerticalLayout { horizontal-stretch: 0.0;
horizontal-stretch: 0.0; spacing: 5px;
Button { Button {
text: "Add"; text: "Add";
clicked => { clicked => {
folder-choose-requested(true); 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 { Button {
horizontal-stretch: 1.0; text: "Remove";
Rectangle { clicked => {
Text { Callabler.remove_item_directories(true, included-list.current-item);
text: "Included Directories";
}
}
included_list := StandardListView {
model: Settings.included-directories;
} }
} }
// Excluded directories Button {
VerticalLayout { text: "Manual Add";
horizontal-stretch: 0.0; clicked => {
Button { show_manual_add_dialog(true);
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 { Rectangle {
horizontal-stretch: 1.0; vertical-stretch: 1.0;
Rectangle { }
Text { }
text: "Excluded Directories";
}
}
excluded_list := StandardListView { VerticalLayout {
model: Settings.excluded-directories; 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 { export component BottomPanel {
in-out property <BottomPanelVisibility> bottom_panel_visibility: BottomPanelVisibility.Directories; in-out property <BottomPanelVisibility> bottom_panel_visibility: BottomPanelVisibility.Directories;
callback folder-choose-requested(bool); callback folder_choose_requested(bool);
callback show_manual_add_dialog(bool); callback show_manual_add_dialog(bool);
min-height: bottom-panel-visibility == BottomPanelVisibility.NotVisible ? 0px : 150px; min-height: bottom-panel-visibility == BottomPanelVisibility.NotVisible ? 0px : 150px;
min-width: bottom-panel-visibility == BottomPanelVisibility.NotVisible ? 0px : 400px; min-width: bottom-panel-visibility == BottomPanelVisibility.NotVisible ? 0px : 400px;
if bottom-panel-visibility == BottomPanelVisibility.Directories: DirectoriesPanel { if bottom-panel-visibility == BottomPanelVisibility.Directories: DirectoriesPanel {
width: parent.width; width: parent.width;
height: parent.height; height: parent.height;
folder-choose-requested(included-directories) => { folder_choose_requested(included-directories) => {
root.folder-choose-requested(included-directories) root.folder_choose_requested(included-directories)
} }
show_manual_add_dialog(included-directories) => { show_manual_add_dialog(included-directories) => {
root.show_manual_add_dialog(included-directories) root.show_manual_add_dialog(included-directories)

View file

@ -1,4 +1,10 @@
export global Callabler { export global Callabler {
// Bottom panel operations
callback remove_item_directories(bool, int); callback remove_item_directories(bool, int);
callback added_manual_directories(bool, string); callback added_manual_directories(bool, string);
// Right click or middle click opener
callback item_opened(string);
callback delete_selected_items();
} }

View file

@ -5,7 +5,6 @@ import {CurrentTab, TypeOfOpenedItem} from "common.slint";
import {MainListModel} from "common.slint"; import {MainListModel} from "common.slint";
export component MainList { export component MainList {
callback item_opened(string);
in-out property <CurrentTab> active-tab; in-out property <CurrentTab> active-tab;
in-out property <[MainListModel]> empty_folder_model; in-out property <[MainListModel]> empty_folder_model;
in-out property <[MainListModel]> empty_files_model; in-out property <[MainListModel]> empty_files_model;
@ -19,9 +18,6 @@ export component MainList {
values <=> empty-folder-model; values <=> empty-folder-model;
parentPathIdx: 2; parentPathIdx: 2;
fileNameIdx: 1; fileNameIdx: 1;
item_opened(item) => {
item_opened(item)
}
} }
if root.active-tab == CurrentTab.EmptyFiles: SelectableTableView { if root.active-tab == CurrentTab.EmptyFiles: SelectableTableView {
@ -32,9 +28,6 @@ export component MainList {
values <=> empty-files-model; values <=> empty-files-model;
parentPathIdx: 2; parentPathIdx: 2;
fileNameIdx: 1; fileNameIdx: 1;
item_opened(item) => {
item_opened(item)
}
} }
if root.active-tab == CurrentTab.SimilarImages: SelectableTableView { if root.active-tab == CurrentTab.SimilarImages: SelectableTableView {
@ -45,8 +38,5 @@ export component MainList {
values <=> similar-images-model; values <=> similar-images-model;
parentPathIdx: 5; parentPathIdx: 5;
fileNameIdx: 4; fileNameIdx: 4;
item_opened(item) => {
item_opened(item)
}
} }
} }

View file

@ -14,11 +14,9 @@ import {ColorPalette} from "color_palette.slint";
export {Settings, Callabler} export {Settings, Callabler}
export component MainWindow inherits Window { export component MainWindow inherits Window {
callback deleted;
callback scan_stopping; callback scan_stopping;
callback scan_starting(CurrentTab); callback scan_starting(CurrentTab);
callback item_opened(string); callback folder_choose_requested(bool);
callback folder-choose-requested(bool);
callback scan_ended(string); callback scan_ended(string);
min-width: 300px; min-width: 300px;
preferred-width: 800px; preferred-width: 800px;
@ -58,10 +56,6 @@ export component MainWindow inherits Window {
empty_folder_model <=> root.empty_folder_model; empty_folder_model <=> root.empty_folder_model;
empty_files_model <=> root.empty_files_model; empty_files_model <=> root.empty_files_model;
similar_images_model <=> root.similar_images_model; similar_images_model <=> root.similar_images_model;
item_opened(item) => {
item_opened(item)
}
} }
if root.scanning: Progress { if root.scanning: Progress {
@ -76,9 +70,6 @@ export component MainWindow inherits Window {
scanning <=> root.scanning; scanning <=> root.scanning;
active-tab <=> root.active-tab; active-tab <=> root.active-tab;
stop_requested <=> root.stop-requested; stop_requested <=> root.stop-requested;
deleted => {
root.deleted();
}
scan_stopping => { scan_stopping => {
text_summary.text = "Stopping scan, please wait..."; text_summary.text = "Stopping scan, please wait...";
root.scan_stopping(); root.scan_stopping();
@ -99,8 +90,8 @@ export component MainWindow inherits Window {
bottom-panel-visibility <=> action_buttons.bottom-panel-visibility; bottom-panel-visibility <=> action_buttons.bottom-panel-visibility;
vertical-stretch: 0.0; vertical-stretch: 0.0;
folder-choose-requested(included-directories) => { folder_choose_requested(included-directories) => {
root.folder-choose-requested(included-directories) root.folder_choose_requested(included-directories)
} }
show_manual_add_dialog(included-directories) => { show_manual_add_dialog(included-directories) => {
self.included-directories = included-directories; self.included-directories = included-directories;

View file

@ -2,7 +2,7 @@ import { Button, VerticalBox , HorizontalBox, TabWidget, ListView, StandardListV
import {TypeOfOpenedItem} from "common.slint"; import {TypeOfOpenedItem} from "common.slint";
import {ColorPalette} from "color_palette.slint"; import {ColorPalette} from "color_palette.slint";
import {MainListModel} from "common.slint"; import {MainListModel} from "common.slint";
import {Callabler} from "callabler.slint";
export component SelectableTableView inherits Rectangle { export component SelectableTableView inherits Rectangle {
callback item_opened(string); callback item_opened(string);
@ -100,9 +100,9 @@ export component SelectableTableView inherits Rectangle {
pointer-event(event) => { pointer-event(event) => {
// TODO this should be clicked by double-click // TODO this should be clicked by double-click
if (event.button == PointerEventButton.right && event.kind == PointerEventKind.up) { 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) { } 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])
} }
} }
} }