1
- From 57c46195bbfdabd2aef759b73d914f7ec1d0e45a Mon Sep 17 00:00:00 2001
1
+ From 5c2c980b83a571523206e494313b8c6d6b306aaf Mon Sep 17 00:00:00 2001
2
2
From: Olivier Goffart <
[email protected] >
3
3
Date: Mon, 4 Jun 2018 18:00:30 +0200
4
4
Subject: [PATCH 2/2] Port to qmetaobject-rs
5
5
6
6
---
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(-)
11
12
12
13
diff --git a/Cargo.toml b/Cargo.toml
13
14
index 63740d2..7a03132 100644
@@ -20,21 +21,33 @@ index 63740d2..7a03132 100644
20
21
- qml = "0.0.9"
21
22
+ qmetaobject = { path = "../qmetaobject-rs/qmetaobject/"}
22
23
diff --git a/src/main.rs b/src/main.rs
23
- index d540594..c58c7e1 100644
24
+ index d540594..e32654f 100644
24
25
--- a/src/main.rs
25
26
+++ b/src/main.rs
26
- @@ -1,7 +1,8 @@
27
+ @@ -1,7 +1,7 @@
27
28
extern crate regex;
28
29
#[macro_use]
29
30
- extern crate qml;
30
31
extern crate lazysort;
31
- + #[macro_use]
32
32
+ extern crate qmetaobject;
33
33
34
34
use lazysort::*;
35
35
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
36
49
diff --git a/src/view.rs b/src/view.rs
37
- index 162d6ab..5a53c18 100644
50
+ index 162d6ab..c0ad025 100644
38
51
--- a/src/view.rs
39
52
+++ b/src/view.rs
40
53
@@ -1,14 +1,15 @@
@@ -48,8 +61,9 @@ index 162d6ab..5a53c18 100644
48
61
49
62
pub fn show(gathered: Vec<Package>) {
50
63
let mut engine = QmlEngine::new();
51
- let list = form_list(&gathered);
64
+ - let list = form_list(&gathered);
52
65
- let qvar: QVariant = list.get_qvar();
66
+ + let list = std::cell::RefCell::new(form_list(&gathered));
53
67
54
68
- let mut repos = gathered.iter().map(|p| p.group.clone()).collect::<Vec<_>>();
55
69
+ let mut repos = gathered.iter().map(|p| p.group.clone().into()).collect::<Vec<String>>();
@@ -76,26 +90,22 @@ index 162d6ab..5a53c18 100644
76
90
+ .collect::<QVariantList>();
77
91
78
92
- let qpckgs = QPackages::new(Packages {
79
- + let mut qpckgs = Packages {
93
+ + let qpckgs = QObjectBox::new( Packages {
80
94
vec: gathered,
81
95
list: list,
82
96
repos: repos,
83
- @@ -35,42 +36,50 @@ pub fn show(gathered: Vec<Package>) {
97
+ @@ -35,42 +36,31 @@ pub fn show(gathered: Vec<Package>) {
84
98
chosen_repo: -1,
85
99
chosen_group: -1,
86
100
selected: SelectedPackages::new(),
87
- - });
101
+ + ..Default::default()
102
+ });
88
103
- engine.set_property("packages", &qvar);
89
104
- engine.set_and_store_property("qpkgs", qpckgs.get_qobj());
90
105
- engine.set_and_store_property("repos", qrepos);
91
106
- engine.set_and_store_property("groups", qgroups);
92
107
- 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());
99
109
+ engine.set_property("repos".into(), qrepos.into());
100
110
+ engine.set_property("groups".into(), qgroups.into());
101
111
+ engine.load_data(include_str!("view.qml").into());
@@ -111,33 +121,21 @@ index 162d6ab..5a53c18 100644
111
121
- group: String,
112
122
- selected: bool
113
123
- }
114
- + #[derive(Default, Clone)]
124
+ + #[derive(Default, Clone, SimpleListItem )]
115
125
+ 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
121
131
}
122
132
123
133
- fn form_list(gathered: &[Package]) -> QPackageList {
124
134
- let mut qalm = QPackageList::new();
125
135
- qalm.set_data(filter_for_qml(gathered, &|_| true, None));
126
136
- 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()
141
139
}
142
140
143
141
- pub struct Packages {
@@ -148,16 +146,13 @@ index 162d6ab..5a53c18 100644
148
146
- chosen_repo: i32,
149
147
- chosen_group: i32,
150
148
- selected: SelectedPackages,
151
- + fn form_list(gathered: &[Package]) -> qmetaobject::listmodel::SimpleListModel<QPackage> {
152
- + filter_for_qml(gathered, &|_| true, None).iter().collect()
153
- }
149
+ - }
154
150
155
- +
156
151
+ #[derive(Default)]
157
152
pub struct SelectedPackages {
158
153
vec: Vec<Package>,
159
154
}
160
- @@ -78,7 +87 ,7 @@ pub struct SelectedPackages {
155
+ @@ -78,7 +68 ,7 @@ pub struct SelectedPackages {
161
156
fn filter_for_qml(vec: &[Package],
162
157
filter: &Fn(&&Package) -> bool,
163
158
selecteds: Option<&SelectedPackages>)
@@ -166,7 +161,7 @@ index 162d6ab..5a53c18 100644
166
161
vec.into_iter()
167
162
.filter(filter)
168
163
.map(|pkg| {
169
- @@ -91,36 +100 ,60 @@ fn filter_for_qml(vec: &[Package],
164
+ @@ -91,36 +81 ,60 @@ fn filter_for_qml(vec: &[Package],
170
165
} else {
171
166
false
172
167
};
@@ -197,7 +192,6 @@ index 162d6ab..5a53c18 100644
197
192
+ #[derive(Default, QObject)]
198
193
+ pub struct Packages {
199
194
+ vec: Vec<Package>,
200
- + list: qmetaobject::listmodel::SimpleListModel<QPackage>,
201
195
+ repos: Vec<String>,
202
196
+ groups: Vec<String>,
203
197
+ chosen_repo: i32,
@@ -208,6 +202,7 @@ index 162d6ab..5a53c18 100644
208
202
- fn request_update_repo(&mut self, r: i32) -> Option<&QVariant> {
209
203
+
210
204
+ base: qt_base_class!(trait QObject),
205
+ + list: qt_property!(std::cell::RefCell<qmetaobject::listmodel::SimpleListModel<QPackage>>; CONST),
211
206
+ notify_packages_changed: qt_signal!(text: QString),
212
207
+ request_update_repo: qt_method!( fn request_update_repo(&mut self, r: i32) {
213
208
self.chosen_repo = r;
@@ -224,20 +219,20 @@ index 162d6ab..5a53c18 100644
224
219
- }
225
220
+ }),
226
221
+ 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();
228
223
+ let pkg = self.vec.iter().find(|pkg| pkg_in_list.name.to_string() == pkg.name).unwrap().clone();
229
224
+ self.selected.add_package(pkg);
230
225
+ 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);
232
227
+ let c = self.selected.get_text();
233
228
+ self.notify_packages_changed(c);
234
229
+ }),
235
230
+ 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();
237
232
+ let pkg = self.vec.iter().find(|pkg| pkg_in_list.name.to_string() == pkg.name).unwrap().clone();
238
233
+ self.selected.remove_package(pkg);
239
234
+ 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);
241
236
+ let c = self.selected.get_text();
242
237
+ self.notify_packages_changed(c);
243
238
+ }),
@@ -248,7 +243,7 @@ index 162d6ab..5a53c18 100644
248
243
249
244
fn decide_and_update(&mut self) {
250
245
let data = {
251
- @@ -139,38 +172 ,9 @@ impl QPackages {
246
+ @@ -139,38 +153 ,9 @@ impl QPackages {
252
247
let selected = Some(&self.selected);
253
248
filter_for_qml(&self.vec, closure.as_ref(), selected)
254
249
};
@@ -268,7 +263,7 @@ index 162d6ab..5a53c18 100644
268
263
- self.selected.add_package(pkg);
269
264
- self.notify_packages_changed(self.selected.get_text());
270
265
- None
271
- + self.list.reset_data(data);
266
+ + self.list.borrow_mut(). reset_data(data);
272
267
}
273
268
274
269
- fn remove_package(&mut self, index: i32) -> Option<&QVariant> {
@@ -288,7 +283,7 @@ index 162d6ab..5a53c18 100644
288
283
}
289
284
290
285
impl SelectedPackages {
291
- @@ -186,7 +190 ,7 @@ impl SelectedPackages {
286
+ @@ -186,7 +171 ,7 @@ impl SelectedPackages {
292
287
self.vec.retain(|p| p.name != package.name);
293
288
}
294
289
@@ -299,5 +294,5 @@ index 162d6ab..5a53c18 100644
299
294
}
300
295
}
301
296
- -
302
- 2.17.1
297
+ 2.21.0
303
298
0 commit comments