1
0
Fork 0
mirror of synced 2024-06-18 18:34:54 +12:00
This commit is contained in:
Rafał Mikrut 2023-10-19 21:39:48 +02:00
parent 98590adbd1
commit ac636dfdad
4 changed files with 48 additions and 15 deletions

View file

@ -11,9 +11,10 @@ repository = "https://github.com/qarmin/czkawka"
build = "build.rs" build = "build.rs"
[dependencies] [dependencies]
slint = "1.2.2" #slint = "1.2.2"
slint = { git = "https://github.com/slint-ui/slint.git", branch = "olivier/fix-3700"}
rand = "0.8.5" rand = "0.8.5"
#czkawka_core = { version = "6.1.0", path = "../czkawka_core" } #czkawka_core = { version = "6.1.0", path = "../czkawka_core" }
[build-dependencies] [build-dependencies]
slint-build = "1.2.2" slint-build = { git = "https://github.com/slint-ui/slint.git", branch = "olivier/fix-3700"}

View file

@ -1,21 +1,46 @@
use std::rc::Rc; use std::rc::Rc;
use slint::{Model, ModelRc, SharedString, StandardListViewItem, VecModel}; use slint::{Model, ModelRc, SharedString, VecModel};
slint::include_modules!(); slint::include_modules!();
use std::borrow::BorrowMut;
fn main() { fn main() {
let app = MainWindow::new().unwrap();//.run().unwrap(); let app = MainWindow::new().unwrap();//.run().unwrap();
let row_data: Rc<VecModel<ModelRc<SharedString>>> = Rc::new(VecModel::default()); let row_data: Rc<VecModel<(bool,bool,ModelRc<SharedString>)>> = Rc::new(VecModel::default());
for r in 0..10000000 { for r in 0..1000 {
let items = VecModel::default(); let items = VecModel::default();
for c in 0..3 { for c in 0..3 {
items.push(slint::format!("Item {r}.{c}").into()); items.push(slint::format!("Item {r}.{c}").into());
} }
row_data.push(ModelRc::new(items)); row_data.push((r % 2 == 0, r% 3 == 0, ModelRc::new(items)));
} }
app.set_empty_folder_model(row_data.into()); app.set_empty_folder_model(row_data.into());
let a = app.as_weak();
app.on_deleted(move || {
let app = a.upgrade().unwrap();
let mut r = app.get_empty_folder_model();
let m = r.borrow_mut();
let length_before = m.iter().count();
let mut s: Vec<_> = m.iter().filter(|(a,_b,_c)|{
!*a
}).collect();
let length_after = s.len();
if length_before != length_after {
dbg!(format!("Items to remove {}", length_before - length_after));
s.iter_mut().for_each(|(_a, selected_row, _)|{
*selected_row = false;
});
let r = ModelRc::new(VecModel::from(s));
app.set_empty_folder_model(r.into());
}
});
app.run().unwrap(); app.run().unwrap();
} }

View file

@ -7,11 +7,12 @@ enum CurrentTab {
} }
export component MainWindow { export component MainWindow {
callback deleted;
in-out property <CurrentTab> active-tab; in-out property <CurrentTab> active-tab;
in-out property <[[string]]> empty-folder-model: [ in-out property <[{checked: bool, selected_row: bool, val:[string]}]> empty-folder-model: [
["kropkarz", "/Xd1", "24.10.2023"] , {checked: false, selected_row: false, val: ["kropkarz", "/Xd1", "24.10.2023"]} ,
["witasphere", "/Xd1/Imagerren2", "25.11.1991"] , {checked: false, selected_row: true, val: ["witasphere", "/Xd1/Imagerren2", "25.11.1991"]} ,
["lokkaler", "/Xd1/Vide2", "01.23.1911"] , {checked: true, selected_row: false, val: ["lokkaler", "/Xd1/Vide2", "01.23.1911"]} ,
]; ];
min-width: 200px; min-width: 200px;
@ -47,6 +48,9 @@ export component MainWindow {
} }
delete_button:= Button { delete_button:= Button {
text: "Delete"; text: "Delete";
clicked => {
root.deleted();
}
} }
} }
} }

View file

@ -2,7 +2,7 @@ import { Button, VerticalBox , HorizontalBox, TabWidget, ListView, StandardListV
export component SelectableTableView inherits Rectangle { export component SelectableTableView inherits Rectangle {
in property <[string]> columns; in property <[string]> columns;
in property <[[string]]> values; in property <[{checked: bool, selected_row: bool, val:[string]}]> values;
private property <[length]> column_sizes: [30px, 100px, 100px, 100px]; private property <[length]> column_sizes: [30px, 100px, 100px, 100px];
private property <int> column_number: 4; private property <int> column_number: 4;
@ -45,13 +45,12 @@ export component SelectableTableView inherits Rectangle {
} }
list_view:= ListView { list_view:= ListView {
for r[idx] in root.values : Rectangle { for r[idx] in root.values : Rectangle {
private property <bool> selected: false; background: touch-area.has-hover ? (r.selected_row ? #cccccc : #dddddd) : (r.selected_row ? #cccccc: #dddddd);
background: touch-area.has-hover ? (selected ? #cccccc : #dddddd) : (selected ? #cccccc: #dddddd);
// background: touch-area.has-hover ? (selected ? #333333 : #222222) : (selected ? #333333: #222222); // background: touch-area.has-hover ? (selected ? #333333 : #222222) : (selected ? #333333: #222222);
touch_area:= TouchArea { touch_area:= TouchArea {
clicked => { clicked => {
parent.selected = !parent.selected r.selected_row = !r.selected_row
} }
} }
@ -62,14 +61,18 @@ export component SelectableTableView inherits Rectangle {
CheckBox { CheckBox {
//min-width: 200px; //min-width: 200px;
checked: r.checked;
width: root.column-sizes[0]; width: root.column-sizes[0];
toggled => {
r.checked = self.checked;
}
// preferred-width: root.column-sizes[0]; // preferred-width: root.column-sizes[0];
} }
HorizontalLayout { HorizontalLayout {
padding: 5px; padding: 5px;
spacing: 5px; spacing: 5px;
for f[idx] in r : Text { for f[idx] in r.val : Text {
width: root.column-sizes[idx + 1]; width: root.column-sizes[idx + 1];
text: f; text: f;
vertical-alignment: center; vertical-alignment: center;