1
0
Fork 0
mirror of synced 2024-05-17 19:03:08 +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"
[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"
#czkawka_core = { version = "6.1.0", path = "../czkawka_core" }
[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 slint::{Model, ModelRc, SharedString, StandardListViewItem, VecModel};
use slint::{Model, ModelRc, SharedString, VecModel};
slint::include_modules!();
use std::borrow::BorrowMut;
fn main() {
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();
for c in 0..3 {
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());
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();
}

View file

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

View file

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