Skip to content

Commit c19427a

Browse files
iovxwogoffart
authored andcommitted
Update kefia example to current version of qmetaobject-rs
1 parent 2f192ca commit c19427a

File tree

1 file changed

+49
-54
lines changed

1 file changed

+49
-54
lines changed

examples/kefia/0002-Port-to-qmetaobject-rs.patch

Lines changed: 49 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
1-
From 57c46195bbfdabd2aef759b73d914f7ec1d0e45a Mon Sep 17 00:00:00 2001
1+
From 5c2c980b83a571523206e494313b8c6d6b306aaf Mon Sep 17 00:00:00 2001
22
From: Olivier Goffart <[email protected]>
33
Date: Mon, 4 Jun 2018 18:00:30 +0200
44
Subject: [PATCH 2/2] Port to qmetaobject-rs
55

66
---
7-
Cargo.toml | 2 +-
8-
src/main.rs | 3 +-
9-
src/view.rs | 180 +++++++++++++++++++++++++++-------------------------
10-
3 files changed, 95 insertions(+), 90 deletions(-)
7+
Cargo.toml | 2 +-
8+
src/main.rs | 2 +-
9+
src/view.qml | 2 +-
10+
src/view.rs | 163 +++++++++++++++++++++++----------------------------
11+
4 files changed, 77 insertions(+), 92 deletions(-)
1112

1213
diff --git a/Cargo.toml b/Cargo.toml
1314
index 63740d2..7a03132 100644
@@ -20,21 +21,33 @@ index 63740d2..7a03132 100644
2021
-qml = "0.0.9"
2122
+qmetaobject = { path = "../qmetaobject-rs/qmetaobject/"}
2223
diff --git a/src/main.rs b/src/main.rs
23-
index d540594..c58c7e1 100644
24+
index d540594..e32654f 100644
2425
--- a/src/main.rs
2526
+++ b/src/main.rs
26-
@@ -1,7 +1,8 @@
27+
@@ -1,7 +1,7 @@
2728
extern crate regex;
2829
#[macro_use]
2930
-extern crate qml;
3031
extern crate lazysort;
31-
+#[macro_use]
3232
+extern crate qmetaobject;
3333

3434
use lazysort::*;
3535

36+
diff --git a/src/view.qml b/src/view.qml
37+
index 94202a4..74be2e6 100644
38+
--- a/src/view.qml
39+
+++ b/src/view.qml
40+
@@ -121,7 +121,7 @@ ApplicationWindow {
41+
Layout.row: 2
42+
ListView {
43+
id: mainList
44+
- model: packages
45+
+ model: qpkgs.list
46+
delegate:
47+
Rectangle {
48+
width: mainList.width
3649
diff --git a/src/view.rs b/src/view.rs
37-
index 162d6ab..5a53c18 100644
50+
index 162d6ab..c0ad025 100644
3851
--- a/src/view.rs
3952
+++ b/src/view.rs
4053
@@ -1,14 +1,15 @@
@@ -48,8 +61,9 @@ index 162d6ab..5a53c18 100644
4861

4962
pub fn show(gathered: Vec<Package>) {
5063
let mut engine = QmlEngine::new();
51-
let list = form_list(&gathered);
64+
- let list = form_list(&gathered);
5265
- let qvar: QVariant = list.get_qvar();
66+
+ let list = std::cell::RefCell::new(form_list(&gathered));
5367

5468
- let mut repos = gathered.iter().map(|p| p.group.clone()).collect::<Vec<_>>();
5569
+ let mut repos = gathered.iter().map(|p| p.group.clone().into()).collect::<Vec<String>>();
@@ -76,26 +90,22 @@ index 162d6ab..5a53c18 100644
7690
+ .collect::<QVariantList>();
7791

7892
- let qpckgs = QPackages::new(Packages {
79-
+ let mut qpckgs = Packages {
93+
+ let qpckgs = QObjectBox::new(Packages {
8094
vec: gathered,
8195
list: list,
8296
repos: repos,
83-
@@ -35,42 +36,50 @@ pub fn show(gathered: Vec<Package>) {
97+
@@ -35,42 +36,31 @@ pub fn show(gathered: Vec<Package>) {
8498
chosen_repo: -1,
8599
chosen_group: -1,
86100
selected: SelectedPackages::new(),
87-
- });
101+
+ ..Default::default()
102+
});
88103
- engine.set_property("packages", &qvar);
89104
- engine.set_and_store_property("qpkgs", qpckgs.get_qobj());
90105
- engine.set_and_store_property("repos", qrepos);
91106
- engine.set_and_store_property("groups", qgroups);
92107
- engine.load_data(include_str!("view.qml"));
93-
+ ..Default::default()
94-
+ };
95-
+ unsafe {
96-
+ engine.set_object_property("packages".into(), &mut qpckgs.list);
97-
+ engine.set_object_property("qpkgs".into(), &mut qpckgs);
98-
+ }
108+
+ engine.set_object_property("qpkgs".into(), qpckgs.pinned());
99109
+ engine.set_property("repos".into(), qrepos.into());
100110
+ engine.set_property("groups".into(), qgroups.into());
101111
+ engine.load_data(include_str!("view.qml").into());
@@ -111,33 +121,21 @@ index 162d6ab..5a53c18 100644
111121
- group: String,
112122
- selected: bool
113123
- }
114-
+#[derive(Default, Clone)]
124+
+#[derive(Default, Clone, SimpleListItem)]
115125
+pub struct QPackage {
116-
+ name: QString,
117-
+ version: QString,
118-
+ repo: QString,
119-
+ group: QString,
120-
+ selected: bool
126+
+ pub name: QString,
127+
+ pub version: QString,
128+
+ pub repo: QString,
129+
+ pub group: QString,
130+
+ pub selected: bool
121131
}
122132

123133
-fn form_list(gathered: &[Package]) -> QPackageList {
124134
- let mut qalm = QPackageList::new();
125135
- qalm.set_data(filter_for_qml(gathered, &|_| true, None));
126136
- qalm
127-
+impl qmetaobject::listmodel::SimpleListItem for QPackage {
128-
+ fn get(&self, idx : i32) -> QVariant {
129-
+ match idx {
130-
+ 0 => self.name.clone().into(),
131-
+ 1 => self.version.clone().into(),
132-
+ 2 => self.repo.clone().into(),
133-
+ 3 => self.group.clone().into(),
134-
+ 4 => self.selected.into(),
135-
+ _ => QVariant::default()
136-
+ }
137-
+ }
138-
+ fn names() -> Vec<QByteArray> {
139-
+ vec![ "name".into(), "version".into(), "repo".into(), "group".into(), "selected".into() ]
140-
+ }
137+
+fn form_list(gathered: &[Package]) -> qmetaobject::listmodel::SimpleListModel<QPackage> {
138+
+ filter_for_qml(gathered, &|_| true, None).iter().collect()
141139
}
142140

143141
-pub struct Packages {
@@ -148,16 +146,13 @@ index 162d6ab..5a53c18 100644
148146
- chosen_repo: i32,
149147
- chosen_group: i32,
150148
- selected: SelectedPackages,
151-
+fn form_list(gathered: &[Package]) -> qmetaobject::listmodel::SimpleListModel<QPackage> {
152-
+ filter_for_qml(gathered, &|_| true, None).iter().collect()
153-
}
149+
-}
154150

155-
+
156151
+#[derive(Default)]
157152
pub struct SelectedPackages {
158153
vec: Vec<Package>,
159154
}
160-
@@ -78,7 +87,7 @@ pub struct SelectedPackages {
155+
@@ -78,7 +68,7 @@ pub struct SelectedPackages {
161156
fn filter_for_qml(vec: &[Package],
162157
filter: &Fn(&&Package) -> bool,
163158
selecteds: Option<&SelectedPackages>)
@@ -166,7 +161,7 @@ index 162d6ab..5a53c18 100644
166161
vec.into_iter()
167162
.filter(filter)
168163
.map(|pkg| {
169-
@@ -91,36 +100,60 @@ fn filter_for_qml(vec: &[Package],
164+
@@ -91,36 +81,60 @@ fn filter_for_qml(vec: &[Package],
170165
} else {
171166
false
172167
};
@@ -197,7 +192,6 @@ index 162d6ab..5a53c18 100644
197192
+#[derive(Default, QObject)]
198193
+pub struct Packages {
199194
+ vec: Vec<Package>,
200-
+ list: qmetaobject::listmodel::SimpleListModel<QPackage>,
201195
+ repos: Vec<String>,
202196
+ groups: Vec<String>,
203197
+ chosen_repo: i32,
@@ -208,6 +202,7 @@ index 162d6ab..5a53c18 100644
208202
- fn request_update_repo(&mut self, r: i32) -> Option<&QVariant> {
209203
+
210204
+ base: qt_base_class!(trait QObject),
205+
+ list: qt_property!(std::cell::RefCell<qmetaobject::listmodel::SimpleListModel<QPackage>>; CONST),
211206
+ notify_packages_changed: qt_signal!(text: QString),
212207
+ request_update_repo: qt_method!( fn request_update_repo(&mut self, r: i32) {
213208
self.chosen_repo = r;
@@ -224,20 +219,20 @@ index 162d6ab..5a53c18 100644
224219
- }
225220
+ }),
226221
+ add_package: qt_method!(fn add_package(&mut self, index: i32) {
227-
+ let mut pkg_in_list = self.list[index as usize].clone();
222+
+ let mut pkg_in_list = self.list.borrow()[index as usize].clone();
228223
+ let pkg = self.vec.iter().find(|pkg| pkg_in_list.name.to_string() == pkg.name).unwrap().clone();
229224
+ self.selected.add_package(pkg);
230225
+ pkg_in_list.selected = true;
231-
+ self.list.change_line(index as usize, pkg_in_list);
226+
+ self.list.borrow_mut().change_line(index as usize, pkg_in_list);
232227
+ let c = self.selected.get_text();
233228
+ self.notify_packages_changed(c);
234229
+ }),
235230
+ remove_package: qt_method!(fn remove_package(&mut self, index: i32) {
236-
+ let mut pkg_in_list = self.list[index as usize].clone();
231+
+ let mut pkg_in_list = self.list.borrow()[index as usize].clone();
237232
+ let pkg = self.vec.iter().find(|pkg| pkg_in_list.name.to_string() == pkg.name).unwrap().clone();
238233
+ self.selected.remove_package(pkg);
239234
+ pkg_in_list.selected = false;
240-
+ self.list.change_line(index as usize, pkg_in_list);
235+
+ self.list.borrow_mut().change_line(index as usize, pkg_in_list);
241236
+ let c = self.selected.get_text();
242237
+ self.notify_packages_changed(c);
243238
+ }),
@@ -248,7 +243,7 @@ index 162d6ab..5a53c18 100644
248243

249244
fn decide_and_update(&mut self) {
250245
let data = {
251-
@@ -139,38 +172,9 @@ impl QPackages {
246+
@@ -139,38 +153,9 @@ impl QPackages {
252247
let selected = Some(&self.selected);
253248
filter_for_qml(&self.vec, closure.as_ref(), selected)
254249
};
@@ -268,7 +263,7 @@ index 162d6ab..5a53c18 100644
268263
- self.selected.add_package(pkg);
269264
- self.notify_packages_changed(self.selected.get_text());
270265
- None
271-
+ self.list.reset_data(data);
266+
+ self.list.borrow_mut().reset_data(data);
272267
}
273268

274269
- fn remove_package(&mut self, index: i32) -> Option<&QVariant> {
@@ -288,7 +283,7 @@ index 162d6ab..5a53c18 100644
288283
}
289284

290285
impl SelectedPackages {
291-
@@ -186,7 +190,7 @@ impl SelectedPackages {
286+
@@ -186,7 +171,7 @@ impl SelectedPackages {
292287
self.vec.retain(|p| p.name != package.name);
293288
}
294289

@@ -299,5 +294,5 @@ index 162d6ab..5a53c18 100644
299294
}
300295
}
301296
--
302-
2.17.1
297+
2.21.0
303298

0 commit comments

Comments
 (0)