1use super::proxy_cpp_bridge::QAbstractItemModelProxyCpp;
5use crate::{call_rust_trait_impl, call_cpp_impl};
6use qtbridge_runtime::{DispatchMetaCall, QObjectHolder};
7use crate::genericrustproxy::GenericRustProxy;
8use qtbridge_type_lib::{QByteArray, QHash, QModelIndex, QVariant};
9
10pub trait QAbstractItemModelAdapter: DispatchMetaCall + 'static {
11 fn index(&self, row: i32, column: i32, parent: &QModelIndex) -> QModelIndex;
12 fn parent(&self, child: &QModelIndex) -> QModelIndex;
13 fn row_count(&self, parent: &QModelIndex) -> i32;
14 fn column_count(&self, parent: &QModelIndex) -> i32;
15 fn data(&self, index: &QModelIndex, role: i32) -> QVariant;
16 fn role_names(&self) -> QHash<i32, QByteArray>;
17 fn set_data(&mut self, index: &QModelIndex, value: &QVariant, role: i32) -> bool;
18 fn remove_rows(&mut self, first: i32, count: i32, parent: &QModelIndex) -> bool;
19 fn sibling(&self, row: i32, column: i32, idx: &QModelIndex) -> QModelIndex;
20}
21
22impl<T> QAbstractItemModelAdapter for T
23where
24 T: QAbstractItemModel {
25 fn index(&self, row: i32, column: i32, parent: &QModelIndex) -> QModelIndex {
26 <Self as QAbstractItemModel>::index(self, row, column, parent)
27 }
28 fn parent(&self, child: &QModelIndex) -> QModelIndex {
29 <Self as QAbstractItemModel>::parent(self, child)
30 }
31 fn row_count(&self, parent: &QModelIndex) -> i32 {
32 <Self as QAbstractItemModel>::row_count(self, parent)
33 }
34 fn column_count(&self, parent: &QModelIndex) -> i32 {
35 <Self as QAbstractItemModel>::column_count(self, parent)
36 }
37 fn data(&self, index: &QModelIndex, role: i32) -> QVariant {
38 <Self as QAbstractItemModel>::data(self, index, role)
39 }
40 fn role_names(&self) -> QHash<i32, QByteArray> {
41 <Self as QAbstractItemModel>::role_names(self)
42 }
43 fn set_data(&mut self, index: &QModelIndex, value: &QVariant, role: i32) -> bool {
44 <Self as QAbstractItemModel>::set_data(self, index, value, role)
45 }
46 fn remove_rows(&mut self, first: i32, count: i32, parent: &QModelIndex) -> bool {
47 <Self as QAbstractItemModel>::remove_rows(self, first, count, parent)
48 }
49 fn sibling(&self, row: i32, column: i32, idx: &QModelIndex) -> QModelIndex {
50 <Self as QAbstractItemModel>::sibling(self, row, column, idx)
51 }
52}
53
54pub trait QAbstractItemModel : QObjectHolder<ProxyRust = QAbstractItemModelProxyRust> {
55 fn index(&self, row: i32, column: i32, parent: &QModelIndex) -> QModelIndex;
56 fn parent(&self, child: &QModelIndex) -> QModelIndex;
57 fn row_count(&self, parent: &QModelIndex) -> i32;
58 fn column_count(&self, parent: &QModelIndex) -> i32;
59 fn data(&self, index: &QModelIndex, role: i32) -> QVariant;
60 fn role_names(&self) -> QHash<i32, QByteArray> {
61 let proxy = self.try_get_rust_proxy_ptr().expect("No proxy");
62 unsafe { &*proxy }.base_role_names(self)
63 }
64 fn set_data(&mut self, index: &QModelIndex, value: &QVariant, role: i32) -> bool {
65 let proxy = self.try_get_rust_proxy_ptr().expect("No proxy");
66 unsafe { &mut *proxy }.base_set_data(&mut *self, index, value, role)
67 }
68 fn remove_rows(&mut self, first: i32, count: i32, parent: &QModelIndex) -> bool {
69 let proxy = self.try_get_rust_proxy_ptr().expect("No proxy");
70 unsafe { &mut *proxy }.base_remove_rows(&mut *self, first, count, parent)
71 }
72 fn sibling(&self, row: i32, column: i32, idx: &QModelIndex) -> QModelIndex {
73 let proxy = self.try_get_rust_proxy_ptr().expect("No proxy");
74 unsafe { &*proxy }.base_sibling(self, row, column, idx)
75 }
76}
77
78pub trait QAbstractItemModelBase : QAbstractItemModel {
79 fn role_names(&self) -> QHash<i32, QByteArray> {
80 let proxy = self.try_get_rust_proxy_ptr().expect("No proxy");
81 unsafe { &*proxy }.base_role_names(self)
82 }
83 fn set_data(
84 &mut self,
85 index: &QModelIndex,
86 value: &QVariant,
87 role: i32,
88 ) -> bool {
89 let proxy = self.try_get_rust_proxy_ptr().expect("No proxy");
90 unsafe { &mut *proxy }.base_set_data(&mut *self, index, value, role)
91 }
92 fn remove_rows(
93 &mut self,
94 first: i32,
95 count: i32,
96 parent: &QModelIndex,
97 ) -> bool {
98 let proxy = self.try_get_rust_proxy_ptr().expect("No proxy");
99 unsafe { &mut *proxy }.base_remove_rows(&mut *self, first, count, parent)
100 }
101 fn sibling(
102 &self,
103 row: i32,
104 column: i32,
105 idx: &QModelIndex,
106 ) -> QModelIndex {
107 let proxy = self.try_get_rust_proxy_ptr().expect("No proxy");
108 unsafe { &*proxy }.base_sibling(self, row, column, idx)
109 }
110 fn data_changed(
111 &mut self,
112 top_left: &QModelIndex,
113 bottom_right: &QModelIndex,
114 ) {
115 let proxy = self.try_get_rust_proxy_ptr().expect("No proxy");
116 unsafe { &mut *proxy }.base_data_changed(&mut *self, top_left, bottom_right)
117 }
118 fn begin_insert_columns(
119 &mut self,
120 parent: &QModelIndex,
121 first: i32,
122 last: i32,
123 ) {
124 let proxy = self.try_get_rust_proxy_ptr().expect("No proxy");
125 unsafe { &mut *proxy }.base_begin_insert_columns(&mut *self, parent, first, last)
126 }
127 fn end_insert_columns(&mut self) {
128 let proxy = self.try_get_rust_proxy_ptr().expect("No proxy");
129 unsafe { &mut *proxy }.base_end_insert_columns(&mut *self)
130 }
131 fn begin_insert_rows(
132 &mut self,
133 parent: &QModelIndex,
134 first: i32,
135 last: i32,
136 ) {
137 let proxy = self.try_get_rust_proxy_ptr().expect("No proxy");
138 unsafe { &mut *proxy }.base_begin_insert_rows(&mut *self, parent, first, last)
139 }
140 fn end_insert_rows(&mut self) {
141 let proxy = self.try_get_rust_proxy_ptr().expect("No proxy");
142 unsafe { &mut *proxy }.base_end_insert_rows(&mut *self)
143 }
144 fn begin_move_columns(
145 &mut self,
146 source_parent: &QModelIndex,
147 source_first: i32,
148 source_last: i32,
149 destination_parent: &QModelIndex,
150 destination_child: i32,
151 ) {
152 let proxy = self.try_get_rust_proxy_ptr().expect("No proxy");
153 unsafe { &mut *proxy }.base_begin_move_columns(
154 &mut *self,
155 source_parent,
156 source_first,
157 source_last,
158 destination_parent,
159 destination_child,
160 )
161 }
162 fn end_move_columns(&mut self) {
163 let proxy = self.try_get_rust_proxy_ptr().expect("No proxy");
164 unsafe { &mut *proxy }.base_end_move_columns(&mut *self)
165 }
166 fn begin_move_rows(
167 &mut self,
168 source_parent: &QModelIndex,
169 source_first: i32,
170 source_last: i32,
171 destination_parent: &QModelIndex,
172 destination_child: i32,
173 ) {
174 let proxy = self.try_get_rust_proxy_ptr().expect("No proxy");
175 unsafe { &mut *proxy }.base_begin_move_rows(
176 &mut *self,
177 source_parent,
178 source_first,
179 source_last,
180 destination_parent,
181 destination_child,
182 )
183 }
184 fn end_move_rows(&mut self) {
185 let proxy = self.try_get_rust_proxy_ptr().expect("No proxy");
186 unsafe { &mut *proxy }.base_end_move_rows(&mut *self)
187 }
188 fn begin_remove_columns(
189 &mut self,
190 parent: &QModelIndex,
191 first: i32,
192 last: i32,
193 ) {
194 let proxy = self.try_get_rust_proxy_ptr().expect("No proxy");
195 unsafe { &mut *proxy }.base_begin_remove_columns(&mut *self, parent, first, last)
196 }
197 fn end_remove_columns(&mut self) {
198 let proxy = self.try_get_rust_proxy_ptr().expect("No proxy");
199 unsafe { &mut *proxy }.base_end_remove_columns(&mut *self)
200 }
201 fn begin_remove_rows(
202 &mut self,
203 parent: &QModelIndex,
204 first: i32,
205 last: i32,
206 ) {
207 let proxy = self.try_get_rust_proxy_ptr().expect("No proxy");
208 unsafe { &mut *proxy }.base_begin_remove_rows(&mut *self, parent, first, last)
209 }
210 fn end_remove_rows(&mut self) {
211 let proxy = self.try_get_rust_proxy_ptr().expect("No proxy");
212 unsafe { &mut *proxy }.base_end_remove_rows(&mut *self)
213 }
214 fn begin_reset_model(&mut self) {
215 let proxy = self.try_get_rust_proxy_ptr().expect("No proxy");
216 unsafe { &mut *proxy }.base_begin_reset_model(&mut *self)
217 }
218 fn end_reset_model(&mut self) {
219 let proxy = self.try_get_rust_proxy_ptr().expect("No proxy");
220 unsafe { &mut *proxy }.base_end_reset_model(&mut *self)
221 }
222 fn create_index(
223 &self,
224 row: i32,
225 column: i32,
226 ptr: usize,
227 ) -> QModelIndex {
228 let proxy = self.try_get_rust_proxy_ptr().expect("No proxy");
229 unsafe { &*proxy }.base_create_index(self, row, column, ptr)
230 }
231}
232
233impl<T> QAbstractItemModelBase for T
234where T: QAbstractItemModel {}
235
236pub type QAbstractItemModelProxyRust = GenericRustProxy<QAbstractItemModelProxyCpp, dyn QAbstractItemModelAdapter>;
237
238impl QAbstractItemModelProxyRust {
239 pub fn index(&self, row: i32, column: i32, parent: &QModelIndex) -> QModelIndex {
240 call_rust_trait_impl!(self, index(row, column, parent))
241 }
242 pub fn parent(&self, child: &QModelIndex) -> QModelIndex {
243 call_rust_trait_impl!(self, parent(child))
244 }
245 pub fn row_count(&self, parent: &QModelIndex) -> i32 {
246 call_rust_trait_impl!(self, row_count(parent))
247 }
248 pub fn column_count(&self, parent: &QModelIndex) -> i32 {
249 call_rust_trait_impl!(self, column_count(parent))
250 }
251 pub fn data(&self, index: &QModelIndex, role: i32) -> QVariant {
252 call_rust_trait_impl!(self, data(index, role))
253 }
254 pub fn role_names(&self) -> QHash<i32, QByteArray> {
255 call_rust_trait_impl!(self, role_names())
256 }
257 pub fn set_data(&mut self, index: &QModelIndex, value: &QVariant, role: i32) -> bool {
258 call_rust_trait_impl!(mut self, set_data(index, value, role))
259 }
260 pub fn remove_rows(&mut self, first: i32, count: i32, parent: &QModelIndex) -> bool {
261 call_rust_trait_impl!(mut self, remove_rows(first, count, parent))
262 }
263 pub fn sibling(&self, row: i32, column: i32, idx: &QModelIndex) -> QModelIndex {
264 call_rust_trait_impl!(self, sibling(row, column, idx))
265 }
266
267 pub fn base_role_names(&self, reference: &dyn QAbstractItemModelAdapter) -> QHash<i32, QByteArray> {
268 call_cpp_impl!(self, reference, base_role_names())
269 }
270 pub fn base_set_data(&mut self, mut_ref: &mut dyn QAbstractItemModelAdapter, index: &QModelIndex, value: &QVariant, role: i32) -> bool {
271 call_cpp_impl!(mut self, mut_ref, base_set_data(index, value, role))
272 }
273 pub fn base_remove_rows(&mut self, mut_ref: &mut dyn QAbstractItemModelAdapter, first: i32, count: i32, parent: &QModelIndex) -> bool {
274 call_cpp_impl!(mut self, mut_ref, base_remove_rows(first, count, parent))
275 }
276 pub fn base_sibling(&self, reference: &dyn QAbstractItemModelAdapter, row: i32, column: i32, idx: &QModelIndex) -> QModelIndex {
277 call_cpp_impl!(self, reference, base_sibling(row, column, idx))
278 }
279 pub fn base_data_changed(&mut self, mut_ref: &mut dyn QAbstractItemModelAdapter, top_left: &QModelIndex, bottom_right: &QModelIndex) {
280 call_cpp_impl!(mut self, mut_ref, base_data_changed(top_left, bottom_right))
281 }
282 pub fn base_begin_insert_columns(&mut self, mut_ref: &mut dyn QAbstractItemModelAdapter, parent: &QModelIndex, first: i32, last: i32) {
283 call_cpp_impl!(mut self, mut_ref, base_begin_insert_columns(parent, first, last))
284 }
285 pub fn base_end_insert_columns(&mut self, mut_ref: &mut dyn QAbstractItemModelAdapter) {
286 call_cpp_impl!(mut self, mut_ref, base_end_insert_columns())
287 }
288 pub fn base_begin_insert_rows(&mut self, mut_ref: &mut dyn QAbstractItemModelAdapter, parent: &QModelIndex, first: i32, last: i32) {
289 call_cpp_impl!(mut self, mut_ref, base_begin_insert_rows(parent, first, last))
290 }
291 pub fn base_end_insert_rows(&mut self, mut_ref: &mut dyn QAbstractItemModelAdapter) {
292 call_cpp_impl!(mut self, mut_ref, base_end_insert_rows())
293 }
294 pub fn base_begin_move_columns(
295 &mut self,
296 mut_ref: &mut dyn QAbstractItemModelAdapter,
297 source_parent: &QModelIndex,
298 source_first: i32,
299 source_last: i32,
300 destination_parent: &QModelIndex,
301 destination_child: i32,
302 ) {
303 call_cpp_impl!(mut self, mut_ref, base_begin_move_columns(source_parent, source_first, source_last, destination_parent, destination_child))
304 }
305 pub fn base_end_move_columns(&mut self, mut_ref: &mut dyn QAbstractItemModelAdapter) {
306 call_cpp_impl!(mut self, mut_ref, base_end_move_columns())
307 }
308 pub fn base_begin_move_rows(
309 &mut self,
310 mut_ref: &mut dyn QAbstractItemModelAdapter,
311 source_parent: &QModelIndex,
312 source_first: i32,
313 source_last: i32,
314 destination_parent: &QModelIndex,
315 destination_child: i32,
316 ) {
317 call_cpp_impl!(mut self, mut_ref, base_begin_move_rows(source_parent, source_first, source_last, destination_parent, destination_child))
318 }
319 pub fn base_end_move_rows(&mut self, mut_ref: &mut dyn QAbstractItemModelAdapter) {
320 call_cpp_impl!(mut self, mut_ref, base_end_move_rows())
321 }
322 pub fn base_begin_remove_columns(&mut self, mut_ref: &mut dyn QAbstractItemModelAdapter, parent: &QModelIndex, first: i32, last: i32) {
323 call_cpp_impl!(mut self, mut_ref, base_begin_remove_columns(parent, first, last))
324 }
325 pub fn base_end_remove_columns(&mut self, mut_ref: &mut dyn QAbstractItemModelAdapter) {
326 call_cpp_impl!(mut self, mut_ref, base_end_remove_columns())
327 }
328 pub fn base_begin_remove_rows(&mut self, mut_ref: &mut dyn QAbstractItemModelAdapter, parent: &QModelIndex, first: i32, last: i32) {
329 call_cpp_impl!(mut self, mut_ref, base_begin_remove_rows(parent, first, last))
330 }
331 pub fn base_end_remove_rows(&mut self, mut_ref: &mut dyn QAbstractItemModelAdapter) {
332 call_cpp_impl!(mut self, mut_ref, base_end_remove_rows())
333 }
334 pub fn base_begin_reset_model(&mut self, mut_ref: &mut dyn QAbstractItemModelAdapter) {
335 call_cpp_impl!(mut self, mut_ref, base_begin_reset_model())
336 }
337 pub fn base_end_reset_model(&mut self, mut_ref: &mut dyn QAbstractItemModelAdapter) {
338 call_cpp_impl!(mut self, mut_ref, base_end_reset_model())
339 }
340 pub fn base_create_index(&self, reference: &dyn QAbstractItemModelAdapter, row: i32, column: i32, ptr: usize) -> QModelIndex {
341 call_cpp_impl!(self, reference, base_create_index(row, column, ptr))
342 }
343}