Updated
This commit is contained in:
parent
98590adbd1
commit
ac636dfdad
4 changed files with 48 additions and 15 deletions
|
@ -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"}
|
|
@ -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();
|
||||||
}
|
}
|
|
@ -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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in a new issue