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::{QHash_i32_QByteArray, 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 { &*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 { &*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 { &*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 { &*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 Some(proxy) = self.try_get_rust_proxy_ptr() else { return };
116 unsafe { &*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 Some(proxy) = self.try_get_rust_proxy_ptr() else { return };
125 unsafe { &*proxy }.base_begin_insert_columns(&mut *self, parent, first, last)
126 }
127 fn end_insert_columns(&mut self) {
128 let Some(proxy) = self.try_get_rust_proxy_ptr() else { return };
129 unsafe { &*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 Some(proxy) = self.try_get_rust_proxy_ptr() else { return };
138 unsafe { &*proxy }.base_begin_insert_rows(&mut *self, parent, first, last)
139 }
140 fn end_insert_rows(&mut self) {
141 let Some(proxy) = self.try_get_rust_proxy_ptr() else { return };
142 unsafe { &*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 Some(proxy) = self.try_get_rust_proxy_ptr() else { return };
153 unsafe { &*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 Some(proxy) = self.try_get_rust_proxy_ptr() else { return };
164 unsafe { &*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 Some(proxy) = self.try_get_rust_proxy_ptr() else { return };
175 unsafe { &*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 Some(proxy) = self.try_get_rust_proxy_ptr() else { return };
186 unsafe { &*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 Some(proxy) = self.try_get_rust_proxy_ptr() else { return };
195 unsafe { &*proxy }.base_begin_remove_columns(&mut *self, parent, first, last)
196 }
197 fn end_remove_columns(&mut self) {
198 let Some(proxy) = self.try_get_rust_proxy_ptr() else { return };
199 unsafe { &*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 Some(proxy) = self.try_get_rust_proxy_ptr() else { return };
208 unsafe { &*proxy }.base_begin_remove_rows(&mut *self, parent, first, last)
209 }
210 fn end_remove_rows(&mut self) {
211 let Some(proxy) = self.try_get_rust_proxy_ptr() else { return };
212 unsafe { &*proxy }.base_end_remove_rows(&mut *self)
213 }
214 fn begin_reset_model(&mut self) {
215 let Some(proxy) = self.try_get_rust_proxy_ptr() else { return };
216 unsafe { &*proxy }.base_begin_reset_model(&mut *self)
217 }
218 fn end_reset_model(&mut self) {
219 let Some(proxy) = self.try_get_rust_proxy_ptr() else { return };
220 unsafe { &*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
238unsafe impl<T: QAbstractItemModelAdapter + 'static> qtbridge_runtime::qproxies::AdapterUpcast<T> for QAbstractItemModelProxyRust {
240 fn upcast(rc: std::rc::Rc<std::cell::RefCell<T>>) -> std::rc::Rc<std::cell::RefCell<dyn QAbstractItemModelAdapter>> {
241 rc
242 }
243}
244
245impl QAbstractItemModelProxyRust {
246 pub fn index(&self, row: i32, column: i32, parent: &QModelIndex) -> QModelIndex {
247 call_rust_trait_impl!(self, index(row, column, parent))
248 }
249 pub fn parent(&self, child: &QModelIndex) -> QModelIndex {
250 call_rust_trait_impl!(self, parent(child))
251 }
252 pub fn row_count(&self, parent: &QModelIndex) -> i32 {
253 call_rust_trait_impl!(self, row_count(parent))
254 }
255 pub fn column_count(&self, parent: &QModelIndex) -> i32 {
256 call_rust_trait_impl!(self, column_count(parent))
257 }
258 pub fn data(&self, index: &QModelIndex, role: i32) -> QVariant {
259 call_rust_trait_impl!(self, data(index, role))
260 }
261 pub fn role_names(&self) -> QHash_i32_QByteArray {
262 call_rust_trait_impl!(self, role_names())
263 }
264 pub fn set_data(&mut self, index: &QModelIndex, value: &QVariant, role: i32) -> bool {
265 call_rust_trait_impl!(mut self, set_data(index, value, role))
266 }
267 pub fn remove_rows(&mut self, first: i32, count: i32, parent: &QModelIndex) -> bool {
268 call_rust_trait_impl!(mut self, remove_rows(first, count, parent))
269 }
270 pub fn sibling(&self, row: i32, column: i32, idx: &QModelIndex) -> QModelIndex {
271 call_rust_trait_impl!(self, sibling(row, column, idx))
272 }
273
274 pub fn base_role_names(&self, reference: &dyn QAbstractItemModelAdapter) -> QHash_i32_QByteArray {
275 call_cpp_impl!(self, reference, base_role_names())
276 }
277 pub fn base_set_data(&self, mut_ref: &mut dyn QAbstractItemModelAdapter, index: &QModelIndex, value: &QVariant, role: i32) -> bool {
278 call_cpp_impl!(mut self, mut_ref, base_set_data(index, value, role))
279 }
280 pub fn base_remove_rows(&self, mut_ref: &mut dyn QAbstractItemModelAdapter, first: i32, count: i32, parent: &QModelIndex) -> bool {
281 call_cpp_impl!(mut self, mut_ref, base_remove_rows(first, count, parent))
282 }
283 pub fn base_sibling(&self, reference: &dyn QAbstractItemModelAdapter, row: i32, column: i32, idx: &QModelIndex) -> QModelIndex {
284 call_cpp_impl!(self, reference, base_sibling(row, column, idx))
285 }
286 pub fn base_data_changed(&self, mut_ref: &mut dyn QAbstractItemModelAdapter, top_left: &QModelIndex, bottom_right: &QModelIndex) {
287 call_cpp_impl!(mut self, mut_ref, base_data_changed(top_left, bottom_right))
288 }
289 pub fn base_begin_insert_columns(&self, mut_ref: &mut dyn QAbstractItemModelAdapter, parent: &QModelIndex, first: i32, last: i32) {
290 call_cpp_impl!(mut self, mut_ref, base_begin_insert_columns(parent, first, last))
291 }
292 pub fn base_end_insert_columns(&self, mut_ref: &mut dyn QAbstractItemModelAdapter) {
293 call_cpp_impl!(mut self, mut_ref, base_end_insert_columns())
294 }
295 pub fn base_begin_insert_rows(&self, mut_ref: &mut dyn QAbstractItemModelAdapter, parent: &QModelIndex, first: i32, last: i32) {
296 call_cpp_impl!(mut self, mut_ref, base_begin_insert_rows(parent, first, last))
297 }
298 pub fn base_end_insert_rows(&self, mut_ref: &mut dyn QAbstractItemModelAdapter) {
299 call_cpp_impl!(mut self, mut_ref, base_end_insert_rows())
300 }
301 pub fn base_begin_move_columns(
302 &self,
303 mut_ref: &mut dyn QAbstractItemModelAdapter,
304 source_parent: &QModelIndex,
305 source_first: i32,
306 source_last: i32,
307 destination_parent: &QModelIndex,
308 destination_child: i32,
309 ) {
310 call_cpp_impl!(mut self, mut_ref, base_begin_move_columns(source_parent, source_first, source_last, destination_parent, destination_child))
311 }
312 pub fn base_end_move_columns(&self, mut_ref: &mut dyn QAbstractItemModelAdapter) {
313 call_cpp_impl!(mut self, mut_ref, base_end_move_columns())
314 }
315 pub fn base_begin_move_rows(
316 &self,
317 mut_ref: &mut dyn QAbstractItemModelAdapter,
318 source_parent: &QModelIndex,
319 source_first: i32,
320 source_last: i32,
321 destination_parent: &QModelIndex,
322 destination_child: i32,
323 ) {
324 call_cpp_impl!(mut self, mut_ref, base_begin_move_rows(source_parent, source_first, source_last, destination_parent, destination_child))
325 }
326 pub fn base_end_move_rows(&self, mut_ref: &mut dyn QAbstractItemModelAdapter) {
327 call_cpp_impl!(mut self, mut_ref, base_end_move_rows())
328 }
329 pub fn base_begin_remove_columns(&self, mut_ref: &mut dyn QAbstractItemModelAdapter, parent: &QModelIndex, first: i32, last: i32) {
330 call_cpp_impl!(mut self, mut_ref, base_begin_remove_columns(parent, first, last))
331 }
332 pub fn base_end_remove_columns(&self, mut_ref: &mut dyn QAbstractItemModelAdapter) {
333 call_cpp_impl!(mut self, mut_ref, base_end_remove_columns())
334 }
335 pub fn base_begin_remove_rows(&self, mut_ref: &mut dyn QAbstractItemModelAdapter, parent: &QModelIndex, first: i32, last: i32) {
336 call_cpp_impl!(mut self, mut_ref, base_begin_remove_rows(parent, first, last))
337 }
338 pub fn base_end_remove_rows(&self, mut_ref: &mut dyn QAbstractItemModelAdapter) {
339 call_cpp_impl!(mut self, mut_ref, base_end_remove_rows())
340 }
341 pub fn base_begin_reset_model(&self, mut_ref: &mut dyn QAbstractItemModelAdapter) {
342 call_cpp_impl!(mut self, mut_ref, base_begin_reset_model())
343 }
344 pub fn base_end_reset_model(&self, mut_ref: &mut dyn QAbstractItemModelAdapter) {
345 call_cpp_impl!(mut self, mut_ref, base_end_reset_model())
346 }
347 pub fn base_create_index(&self, reference: &dyn QAbstractItemModelAdapter, row: i32, column: i32, ptr: usize) -> QModelIndex {
348 call_cpp_impl!(self, reference, base_create_index(row, column, ptr))
349 }
350}