qtbridge_interfaces/generated/qabstract_item_model/
proxy_rust.rs

1// Copyright (C) 2025 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only
3
4use super::proxy_cpp_bridge::{QAbstractItemModelProxyCpp, ffi};
5use crate::{RustObjAccess, call_rust_trait_impl, call_cpp_impl};
6use qtbridge_runtime::qrustproxy::{QRustProxy, ConstructionMode};
7use qtbridge_runtime::{DispatchMetaCall, QObjectHolder};
8use qtbridge_type_lib::{QByteArray, QHash, QMetaObject, QMetaType, QModelIndex, QVariant};
9use std::cell::RefCell;
10use std::rc::Rc;
11
12pub trait QAbstractItemModelAdapter: DispatchMetaCall {
13    fn index(&self, row: i32, column: i32, parent: &QModelIndex) -> QModelIndex;
14    fn parent(&self, child: &QModelIndex) -> QModelIndex;
15    fn row_count(&self, parent: &QModelIndex) -> i32;
16    fn column_count(&self, parent: &QModelIndex) -> i32;
17    fn data(&self, index: &QModelIndex, role: i32) -> QVariant;
18    fn role_names(&self) -> QHash<i32, QByteArray>;
19    fn set_data(&mut self, index: &QModelIndex, value: &QVariant, role: i32) -> bool;
20    fn remove_rows(&mut self, first: i32, count: i32, parent: &QModelIndex) -> bool;
21    fn sibling(&self, row: i32, column: i32, idx: &QModelIndex) -> QModelIndex;
22}
23
24impl<T> QAbstractItemModelAdapter for T
25where
26    T: QAbstractItemModel {
27    fn index(&self, row: i32, column: i32, parent: &QModelIndex) -> QModelIndex {
28        <Self as QAbstractItemModel>::index(self, row, column, parent)
29    }
30    fn parent(&self, child: &QModelIndex) -> QModelIndex {
31        <Self as QAbstractItemModel>::parent(self, child)
32    }
33    fn row_count(&self, parent: &QModelIndex) -> i32 {
34        <Self as QAbstractItemModel>::row_count(self, parent)
35    }
36    fn column_count(&self, parent: &QModelIndex) -> i32 {
37        <Self as QAbstractItemModel>::column_count(self, parent)
38    }
39    fn data(&self, index: &QModelIndex, role: i32) -> QVariant {
40        <Self as QAbstractItemModel>::data(self, index, role)
41    }
42    fn role_names(&self) -> QHash<i32, QByteArray> {
43        <Self as QAbstractItemModel>::role_names(self)
44    }
45    fn set_data(&mut self, index: &QModelIndex, value: &QVariant, role: i32) -> bool {
46        <Self as QAbstractItemModel>::set_data(self, index, value, role)
47    }
48    fn remove_rows(&mut self, first: i32, count: i32, parent: &QModelIndex) -> bool {
49        <Self as QAbstractItemModel>::remove_rows(self, first, count, parent)
50    }
51    fn sibling(&self, row: i32, column: i32, idx: &QModelIndex) -> QModelIndex {
52        <Self as QAbstractItemModel>::sibling(self, row, column, idx)
53    }
54}
55
56pub trait QAbstractItemModel : QObjectHolder<ProxyRust = QAbstractItemModelProxyRust> {
57    fn index(&self, row: i32, column: i32, parent: &QModelIndex) -> QModelIndex;
58    fn parent(&self, child: &QModelIndex) -> QModelIndex;
59    fn row_count(&self, parent: &QModelIndex) -> i32;
60    fn column_count(&self, parent: &QModelIndex) -> i32;
61    fn data(&self, index: &QModelIndex, role: i32) -> QVariant;
62    fn role_names(&self) -> QHash<i32, QByteArray> {
63        let proxy = self.get_rust_proxy();
64        proxy.base_role_names()
65    }
66    fn set_data(&mut self, index: &QModelIndex, value: &QVariant, role: i32) -> bool {
67        let proxy = self.get_rust_proxy_mut();
68        proxy.base_set_data(index, value, role)
69    }
70    fn remove_rows(&mut self, first: i32, count: i32, parent: &QModelIndex) -> bool {
71        let proxy = self.get_rust_proxy_mut();
72        proxy.base_remove_rows(first, count, parent)
73    }
74    fn sibling(&self, row: i32, column: i32, idx: &QModelIndex) -> QModelIndex {
75        let proxy = self.get_rust_proxy();
76        proxy.base_sibling(row, column, idx)
77    }
78}
79
80pub trait QAbstractItemModelBase : QObjectHolder<ProxyRust = QAbstractItemModelProxyRust> {
81fn role_names(&self) -> qtbridge_type_lib::QHash<i32, qtbridge_type_lib::QByteArray> {
82        let proxy = self.get_rust_proxy();
83        proxy.base_role_names()
84    }
85    fn set_data(
86        &mut self,
87        index: &qtbridge_type_lib::QModelIndex,
88        value: &qtbridge_type_lib::QVariant,
89        role: i32,
90    ) -> bool {
91        let proxy = self.get_rust_proxy_mut();
92        proxy.base_set_data(index, value, role)
93    }
94    fn remove_rows(
95        &mut self,
96        first: i32,
97        count: i32,
98        parent: &qtbridge_type_lib::QModelIndex,
99    ) -> bool {
100        let proxy = self.get_rust_proxy_mut();
101        proxy.base_remove_rows(first, count, parent)
102    }
103    fn sibling(
104        &self,
105        row: i32,
106        column: i32,
107        idx: &qtbridge_type_lib::QModelIndex,
108    ) -> qtbridge_type_lib::QModelIndex {
109        let proxy = self.get_rust_proxy();
110        proxy.base_sibling(row, column, idx)
111    }
112    fn data_changed(
113        &mut self,
114        top_left: &qtbridge_type_lib::QModelIndex,
115        bottom_right: &qtbridge_type_lib::QModelIndex,
116    ) {
117        let proxy = self.get_rust_proxy_mut();
118        proxy.base_data_changed(top_left, bottom_right)
119    }
120    fn begin_insert_columns(
121        &mut self,
122        parent: &qtbridge_type_lib::QModelIndex,
123        first: i32,
124        last: i32,
125    ) {
126        let proxy = self.get_rust_proxy_mut();
127        proxy.base_begin_insert_columns(parent, first, last)
128    }
129    fn end_insert_columns(&mut self) {
130        let proxy = self.get_rust_proxy_mut();
131        proxy.base_end_insert_columns()
132    }
133    fn begin_insert_rows(
134        &mut self,
135        parent: &qtbridge_type_lib::QModelIndex,
136        first: i32,
137        last: i32,
138    ) {
139        let proxy = self.get_rust_proxy_mut();
140        proxy.base_begin_insert_rows(parent, first, last)
141    }
142    fn end_insert_rows(&mut self) {
143        let proxy = self.get_rust_proxy_mut();
144        proxy.base_end_insert_rows()
145    }
146    fn begin_move_columns(
147        &mut self,
148        source_parent: &qtbridge_type_lib::QModelIndex,
149        source_first: i32,
150        source_last: i32,
151        destination_parent: &qtbridge_type_lib::QModelIndex,
152        destination_child: i32,
153    ) {
154        let proxy = self.get_rust_proxy_mut();
155        proxy
156            .base_begin_move_columns(
157                source_parent,
158                source_first,
159                source_last,
160                destination_parent,
161                destination_child,
162            )
163    }
164    fn end_move_columns(&mut self) {
165        let proxy = self.get_rust_proxy_mut();
166        proxy.base_end_move_columns()
167    }
168    fn begin_move_rows(
169        &mut self,
170        source_parent: &qtbridge_type_lib::QModelIndex,
171        source_first: i32,
172        source_last: i32,
173        destination_parent: &qtbridge_type_lib::QModelIndex,
174        destination_child: i32,
175    ) {
176        let proxy = self.get_rust_proxy_mut();
177        proxy
178            .base_begin_move_rows(
179                source_parent,
180                source_first,
181                source_last,
182                destination_parent,
183                destination_child,
184            )
185    }
186    fn end_move_rows(&mut self) {
187        let proxy = self.get_rust_proxy_mut();
188        proxy.base_end_move_rows()
189    }
190    fn begin_remove_columns(
191        &mut self,
192        parent: &qtbridge_type_lib::QModelIndex,
193        first: i32,
194        last: i32,
195    ) {
196        let proxy = self.get_rust_proxy_mut();
197        proxy.base_begin_remove_columns(parent, first, last)
198    }
199    fn end_remove_columns(&mut self) {
200        let proxy = self.get_rust_proxy_mut();
201        proxy.base_end_remove_columns()
202    }
203    fn begin_remove_rows(
204        &mut self,
205        parent: &qtbridge_type_lib::QModelIndex,
206        first: i32,
207        last: i32,
208    ) {
209        let proxy = self.get_rust_proxy_mut();
210        proxy.base_begin_remove_rows(parent, first, last)
211    }
212    fn end_remove_rows(&mut self) {
213        let proxy = self.get_rust_proxy_mut();
214        proxy.base_end_remove_rows()
215    }
216    fn begin_reset_model(&mut self) {
217        let proxy = self.get_rust_proxy_mut();
218        proxy.base_begin_reset_model()
219    }
220    fn end_reset_model(&mut self) {
221        let proxy = self.get_rust_proxy_mut();
222        proxy.base_end_reset_model()
223    }
224    fn create_index(
225        &self,
226        row: i32,
227        column: i32,
228        ptr: usize,
229    ) -> qtbridge_type_lib::QModelIndex {
230        let proxy = self.get_rust_proxy_mut();
231        unsafe { proxy.base_create_index(row, column, ptr) }
232    }
233}
234
235impl<T> QAbstractItemModelBase for T
236where T: QObjectHolder<ProxyRust = QAbstractItemModelProxyRust> {}
237
238pub struct QAbstractItemModelProxyRust {
239    cpp_proxy: *mut QAbstractItemModelProxyCpp,
240    #[allow(dead_code)]
241    rust_obj: RustObjAccess<dyn QAbstractItemModelAdapter>,
242    on_drop: Box<dyn FnOnce()>,
243}
244
245impl QRustProxy for QAbstractItemModelProxyRust {
246    type ProxyCppType = QAbstractItemModelProxyCpp;
247    type AdapterType = dyn QAbstractItemModelAdapter;
248
249    fn new<OnDropFn: FnOnce() + 'static>(rust_obj: &Rc<RefCell<dyn QAbstractItemModelAdapter>>, construct: ConstructionMode, on_drop: OnDropFn) -> *mut Self {
250        let boxed_self = Box::new(Self {
251            cpp_proxy: std::ptr::null_mut(),
252            rust_obj: match construct {
253                ConstructionMode::Strong | ConstructionMode::AtAddress(_) => RustObjAccess::new_strong(rust_obj.clone()),
254                ConstructionMode::Weak => RustObjAccess::new_weak(Rc::downgrade(rust_obj)),
255            },
256            on_drop: Box::new(on_drop),
257        });
258        let raw_self = Box::into_raw(boxed_self);
259
260        unsafe{ (*raw_self).cpp_proxy = match construct {
261            ConstructionMode::AtAddress(addr) => {
262                ffi::create_qabstract_item_model_proxy_cpp_at(addr, raw_self)
263            }
264            ConstructionMode::Strong | ConstructionMode::Weak => {
265                ffi::create_qabstract_item_model_proxy_cpp(raw_self)
266            }
267        }};
268        raw_self
269    }
270    fn get_static_meta_object() -> &'static QMetaObject {
271        ffi::static_qmeta_object_of_qabstract_item_model_proxy_cpp()
272    }
273    fn get_size_of_cpp_proxy() -> usize {
274        ffi::size_of_qabstract_item_model_proxy_cpp()
275    }
276    fn get_align_of_cpp_proxy() -> usize {
277        ffi::align_of_qabstract_item_model_proxy_cpp()
278    }
279    fn get_qmetatype_list_of_cpp_proxy() -> QMetaType {
280        ffi::qmetatype_list_of_qabstract_item_model_proxy_cpp()
281    }
282    fn get_cpp_proxy(&self) -> *const QAbstractItemModelProxyCpp {
283        self.cpp_proxy as *const _
284    }
285    fn get_cpp_proxy_mut(&self) -> *mut QAbstractItemModelProxyCpp {
286        self.cpp_proxy
287    }
288}
289
290impl QAbstractItemModelProxyRust {
291    pub fn drop_self(self_ptr: *mut Self) {
292        let boxed_self = unsafe { Box::from_raw(self_ptr) };
293        (boxed_self.on_drop)();
294    }
295    pub fn index(&self, row: i32, column: i32, parent: &QModelIndex) -> QModelIndex {
296        call_rust_trait_impl!(self, index(row, column, parent))
297    }
298    pub fn parent(&self, child: &QModelIndex) -> QModelIndex {
299        call_rust_trait_impl!(self, parent(child))
300    }
301    pub fn row_count(&self, parent: &QModelIndex) -> i32 {
302        call_rust_trait_impl!(self, row_count(parent))
303    }
304    pub fn column_count(&self, parent: &QModelIndex) -> i32 {
305        call_rust_trait_impl!(self, column_count(parent))
306    }
307    pub fn data(&self, index: &QModelIndex, role: i32) -> QVariant {
308        call_rust_trait_impl!(self, data(index, role))
309    }
310    pub fn role_names(&self) -> QHash<i32, QByteArray> {
311        call_rust_trait_impl!(self, role_names())
312    }
313    pub fn set_data(&mut self, index: &QModelIndex, value: &QVariant, role: i32) -> bool {
314        call_rust_trait_impl!(mut self, set_data(index, value, role))
315    }
316    pub fn remove_rows(&mut self, first: i32, count: i32, parent: &QModelIndex) -> bool {
317        call_rust_trait_impl!(mut self, remove_rows(first, count, parent))
318    }
319    pub fn sibling(&self, row: i32, column: i32, idx: &QModelIndex) -> QModelIndex {
320        call_rust_trait_impl!(self, sibling(row, column, idx))
321    }
322
323    pub fn invoke_slot(&self, slot_id: u32, inputs: &[*const u8], outputs: &[*mut u8]) {
324        call_rust_trait_impl!(self, invoke_slot(slot_id, inputs, outputs))
325    }
326    pub fn invoke_slot_mut(&mut self, slot_id: u32, inputs: &[*const u8], outputs: &[*mut u8]) {
327        call_rust_trait_impl!(mut self, invoke_slot_mut(slot_id, inputs, outputs))
328    }
329    pub fn read_property(&self, prop_id: u32) -> QVariant {
330        call_rust_trait_impl!(self, read_property(prop_id))
331    }
332    pub fn write_property(&mut self, prop_id: u32, value: &QVariant) {
333        call_rust_trait_impl!(mut self, write_property(prop_id, value))
334    }
335
336    pub fn base_role_names(&self) -> QHash<i32, QByteArray> {
337        call_cpp_impl!(self, base_role_names())
338    }
339    pub fn base_set_data(&mut self, index: &QModelIndex, value: &QVariant, role: i32) -> bool {
340        call_cpp_impl!(mut self, base_set_data(index, value, role))
341    }
342    pub fn base_remove_rows(&mut self, first: i32, count: i32, parent: &QModelIndex) -> bool {
343        call_cpp_impl!(mut self, base_remove_rows(first, count, parent))
344    }
345    pub fn base_sibling(&self, row: i32, column: i32, idx: &QModelIndex) -> QModelIndex {
346        call_cpp_impl!(self, base_sibling(row, column, idx))
347    }
348    pub fn base_data_changed(&mut self, top_left: &QModelIndex, bottom_right: &QModelIndex) {
349        call_cpp_impl!(mut self, base_data_changed(top_left, bottom_right))
350    }
351    pub fn base_begin_insert_columns(&mut self, parent: &QModelIndex, first: i32, last: i32) {
352        call_cpp_impl!(mut self, base_begin_insert_columns(parent, first, last))
353    }
354    pub fn base_end_insert_columns(&mut self) {
355        call_cpp_impl!(mut self, base_end_insert_columns())
356    }
357    pub fn base_begin_insert_rows(&mut self, parent: &QModelIndex, first: i32, last: i32) {
358        call_cpp_impl!(mut self, base_begin_insert_rows(parent, first, last))
359    }
360    pub fn base_end_insert_rows(&mut self) {
361        call_cpp_impl!(mut self, base_end_insert_rows())
362    }
363    pub fn base_begin_move_columns(
364        &mut self,
365        source_parent: &QModelIndex,
366        source_first: i32,
367        source_last: i32,
368        destination_parent: &QModelIndex,
369        destination_child: i32,
370    ) {
371        call_cpp_impl!(mut self, base_begin_move_columns(source_parent, source_first, source_last, destination_parent, destination_child))
372    }
373    pub fn base_end_move_columns(&mut self) {
374        call_cpp_impl!(mut self, base_end_move_columns())
375    }
376    pub fn base_begin_move_rows(&mut self, source_parent: &QModelIndex, source_first: i32, source_last: i32, destination_parent: &QModelIndex, destination_child: i32) {
377        call_cpp_impl!(mut self, base_begin_move_rows(source_parent, source_first, source_last, destination_parent, destination_child))
378    }
379    pub fn base_end_move_rows(&mut self) {
380        call_cpp_impl!(mut self, base_end_move_rows())
381    }
382    pub fn base_begin_remove_columns(&mut self, parent: &QModelIndex, first: i32, last: i32) {
383        call_cpp_impl!(mut self, base_begin_remove_columns(parent, first, last))
384    }
385    pub fn base_end_remove_columns(&mut self) {
386        call_cpp_impl!(mut self, base_end_remove_columns())
387    }
388    pub fn base_begin_remove_rows(&mut self, parent: &QModelIndex, first: i32, last: i32) {
389        call_cpp_impl!(mut self, base_begin_remove_rows(parent, first, last))
390    }
391    pub fn base_end_remove_rows(&mut self) {
392        call_cpp_impl!(mut self, base_end_remove_rows())
393    }
394    pub fn base_begin_reset_model(&mut self) {
395        call_cpp_impl!(mut self, base_begin_reset_model())
396    }
397    pub fn base_end_reset_model(&mut self) {
398        call_cpp_impl!(mut self, base_end_reset_model())
399    }
400    pub unsafe fn base_create_index(&self, row: i32, column: i32, ptr: usize) -> QModelIndex {
401        call_cpp_impl!(self, base_create_index(row, column, ptr))
402    }
403}