Updated
This commit is contained in:
parent
98590adbd1
commit
ac636dfdad
|
@ -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"}
|
|
@ -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();
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue