qtbridge_interfaces/generated/qabstract_list_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::{QAbstractListModelProxyCpp, 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 QAbstractListModel : QObjectHolder<ProxyRust = QAbstractListModelProxyRust> {
13    fn index(&self, row: i32, column: i32, parent: &QModelIndex) -> QModelIndex {
14        let proxy = self.get_rust_proxy();
15        proxy.base_index(row, column, parent)
16    }
17    fn row_count(&self, parent: &QModelIndex) -> i32;
18    fn data(&self, index: &QModelIndex, role: i32) -> QVariant;
19    fn role_names(&self) -> QHash<i32, QByteArray> {
20        let proxy = self.get_rust_proxy();
21        proxy.base_role_names()
22    }
23    fn set_data(&mut self, index: &QModelIndex, value: &QVariant, role: i32) -> bool {
24        let proxy = self.get_rust_proxy_mut();
25        proxy.base_set_data(index, value, role)
26    }
27    fn remove_rows(&mut self, first: i32, count: i32, parent: &QModelIndex) -> bool {
28        let proxy = self.get_rust_proxy_mut();
29        proxy.base_remove_rows(first, count, parent)
30    }
31    fn sibling(&self, row: i32, column: i32, idx: &QModelIndex) -> QModelIndex {
32        let proxy = self.get_rust_proxy();
33        proxy.base_sibling(row, column, idx)
34    }
35}
36
37pub trait QAbstractListModelAdapter: DispatchMetaCall {
38    fn index(&self, row: i32, column: i32, parent: &QModelIndex) -> QModelIndex;
39    fn row_count(&self, parent: &QModelIndex) -> i32;
40    fn data(&self, index: &QModelIndex, role: i32) -> QVariant;
41    fn role_names(&self) -> QHash<i32, QByteArray>;
42    fn set_data(&mut self, index: &QModelIndex, value: &QVariant, role: i32) -> bool;
43    fn remove_rows(&mut self, first: i32, count: i32, parent: &QModelIndex) -> bool;
44    fn sibling(&self, row: i32, column: i32, idx: &QModelIndex) -> QModelIndex;
45}
46
47impl<T> QAbstractListModelAdapter for T
48where
49    T : QAbstractListModel +
50        QObjectHolder<ProxyRust = QAbstractListModelProxyRust>
51{
52    fn index(&self, row: i32, column: i32, parent: &QModelIndex) -> QModelIndex {
53         <Self as QAbstractListModel>::index(self, row, column, parent)
54    }
55    fn row_count(&self, parent: &QModelIndex) -> i32 {
56         <Self as QAbstractListModel>::row_count(self, parent)
57    }
58    fn data(&self, index: &QModelIndex, role: i32) -> QVariant {
59         <Self as QAbstractListModel>::data(self, index, role)
60    }
61    fn role_names(&self) -> QHash<i32, QByteArray> {
62         <Self as QAbstractListModel>::role_names(self)
63    }
64    fn set_data(&mut self, index: &QModelIndex, value: &QVariant, role: i32) -> bool {
65         <Self as QAbstractListModel>::set_data(self, index, value, role)
66    }
67    fn remove_rows(&mut self, first: i32, count: i32, parent: &QModelIndex) -> bool {
68         <Self as QAbstractListModel>::remove_rows(self, first, count, parent)
69    }
70    fn sibling(&self, row: i32, column: i32, idx: &QModelIndex) -> QModelIndex {
71         <Self as QAbstractListModel>::sibling(self, row, column, idx)
72    }
73}
74
75pub trait QAbstractListModelBase : QObjectHolder<ProxyRust = QAbstractListModelProxyRust> {
76    fn index(&self, row: i32, column: i32, parent: &QModelIndex) -> QModelIndex {
77        let proxy = self.get_rust_proxy();
78        proxy.base_index(row, column, parent)
79    }
80    fn role_names(&self) -> QHash<i32, QByteArray> {
81        let proxy = self.get_rust_proxy();
82        proxy.base_role_names()
83    }
84    fn set_data(&mut self, index: &QModelIndex, value: &QVariant, role: i32) -> bool {
85        let proxy = self.get_rust_proxy_mut();
86        proxy.base_set_data(index, value, role)
87    }
88    fn remove_rows(&mut self, first: i32, count: i32, parent: &QModelIndex) -> bool {
89        let proxy = self.get_rust_proxy_mut();
90        proxy.base_remove_rows(first, count, parent)
91    }
92    fn sibling(&self, row: i32, column: i32, idx: &QModelIndex) -> QModelIndex {
93        let proxy = self.get_rust_proxy();
94        proxy.base_sibling(row, column, idx)
95    }
96    fn data_changed(&mut self, top_left: &QModelIndex, bottom_right: &QModelIndex) {
97        let proxy = self.get_rust_proxy_mut();
98        proxy.base_data_changed(top_left, bottom_right);
99    }
100    fn begin_insert_rows(&mut self, parent: &QModelIndex, first: i32, last: i32) {
101        let proxy = self.get_rust_proxy_mut();
102        proxy.base_begin_insert_rows(parent, first, last);
103    }
104    fn end_insert_rows(&mut self) {
105        let proxy = self.get_rust_proxy_mut();
106        proxy.base_end_insert_rows();
107    }
108    fn begin_move_rows(&mut self, source_parent: &QModelIndex, source_first: i32, source_last: i32,
109        destination_parent: &QModelIndex, destination_child: i32) {
110        let proxy = self.get_rust_proxy_mut();
111        proxy.base_begin_move_rows(source_parent, source_first,
112            source_last, destination_parent, destination_child);
113    }
114    fn end_move_rows(&mut self) {
115        let proxy = self.get_rust_proxy_mut();
116        proxy.base_end_move_rows();
117    }
118    fn begin_remove_rows(&mut self, parent: &QModelIndex, first: i32, last: i32) {
119        let proxy = self.get_rust_proxy_mut();
120        proxy.base_begin_remove_rows(parent, first, last);
121    }
122    fn end_remove_rows(&mut self) {
123        let proxy = self.get_rust_proxy_mut();
124        proxy.base_end_remove_rows();
125    }
126    fn begin_reset_model(&mut self) {
127        let proxy = self.get_rust_proxy_mut();
128        proxy.base_begin_reset_model();
129    }
130    fn end_reset_model(&mut self) {
131        let proxy = self.get_rust_proxy_mut();
132        proxy.base_end_reset_model();
133    }
134}
135
136impl<T> QAbstractListModelBase for T
137where
138    T : QObjectHolder<ProxyRust = QAbstractListModelProxyRust> {}
139
140pub struct QAbstractListModelProxyRust {
141    cpp_proxy: *mut QAbstractListModelProxyCpp,
142    #[allow(dead_code)]
143    rust_obj: RustObjAccess<dyn QAbstractListModelAdapter>,
144    on_drop: Box<dyn FnOnce()>,
145}
146
147impl QRustProxy for QAbstractListModelProxyRust {
148    type ProxyCppType = QAbstractListModelProxyCpp;
149    type AdapterType = dyn QAbstractListModelAdapter;
150
151    fn new<OnDropFn: FnOnce() + 'static>(rust_obj: &Rc<RefCell<dyn QAbstractListModelAdapter>>, construct: ConstructionMode, on_drop: OnDropFn) -> *mut Self {
152        let boxed_self = Box::new(Self {
153            cpp_proxy: std::ptr::null_mut(),
154            rust_obj: match construct {
155                ConstructionMode::Strong | ConstructionMode::AtAddress(_) => RustObjAccess::new_strong(rust_obj.clone()),
156                ConstructionMode::Weak => RustObjAccess::new_weak(Rc::downgrade(rust_obj)),
157            },
158            on_drop: Box::new(on_drop),
159        });
160        let raw_self = Box::into_raw(boxed_self);
161
162
163        unsafe{ (*raw_self).cpp_proxy = match construct {
164            ConstructionMode::AtAddress(addr) => {
165                ffi::create_qabstract_list_model_proxy_cpp_at( addr, raw_self)
166            }
167            ConstructionMode::Strong | ConstructionMode::Weak => {
168                ffi::create_qabstract_list_model_proxy_cpp(raw_self)
169            }
170        }};
171        raw_self
172    }
173    fn get_static_meta_object() -> &'static QMetaObject {
174        ffi::static_qmeta_object_of_qabstract_list_model_proxy_cpp()
175    }
176    fn get_size_of_cpp_proxy() -> usize {
177        ffi::size_of_qabstract_list_model_proxy_cpp()
178    }
179    fn get_align_of_cpp_proxy() -> usize {
180        ffi::align_of_qabstract_list_model_proxy_cpp()
181    }
182    fn get_qmetatype_list_of_cpp_proxy() -> QMetaType {
183        ffi::qmetatype_list_of_qabstract_list_model_proxy_cpp()
184    }
185    fn get_cpp_proxy(&self) -> *const QAbstractListModelProxyCpp {
186        self.cpp_proxy as *const _
187    }
188    fn get_cpp_proxy_mut(&self) -> *mut QAbstractListModelProxyCpp {
189        self.cpp_proxy
190    }
191}
192
193impl QAbstractListModelProxyRust {
194    pub fn drop_self(self_ptr: *mut Self) {
195        let boxed_self = unsafe { Box::from_raw(self_ptr) };
196        (boxed_self.on_drop)();
197    }
198    pub fn index(&self, row: i32, column: i32, parent: &QModelIndex) -> QModelIndex {
199        call_rust_trait_impl!(self, index(row, column, parent))
200    }
201    pub fn row_count(&self, parent: &QModelIndex) -> i32 {
202        call_rust_trait_impl!(self, row_count(parent))
203    }
204    pub fn data(&self, index: &QModelIndex, role: i32) -> QVariant {
205        call_rust_trait_impl!(self, data(index, role))
206    }
207    pub fn role_names(&self) -> QHash<i32, QByteArray> {
208        call_rust_trait_impl!(self, role_names())
209    }
210    pub fn set_data(&mut self, index: &QModelIndex, value: &QVariant, role: i32) -> bool {
211        call_rust_trait_impl!(mut self, set_data(index, value, role))
212    }
213    pub fn remove_rows(&mut self, first: i32, count: i32, parent: &QModelIndex) -> bool {
214        call_rust_trait_impl!(mut self, remove_rows(first, count, parent))
215    }
216    pub fn sibling(&self, row: i32, column: i32, idx: &QModelIndex) -> QModelIndex {
217        call_rust_trait_impl!(self, sibling(row, column, idx))
218    }
219
220    pub fn invoke_slot(&self, slot_id: u32, inputs: &[*const u8], outputs: &[*mut u8]) {
221        call_rust_trait_impl!(self, invoke_slot(slot_id, inputs, outputs))
222    }
223    pub fn invoke_slot_mut(&mut self, slot_id: u32, inputs: &[*const u8], outputs: &[*mut u8]) {
224        call_rust_trait_impl!(mut self, invoke_slot_mut(slot_id, inputs, outputs))
225    }
226    pub fn read_property(&self, prop_id: u32) -> QVariant {
227        call_rust_trait_impl!(self, read_property(prop_id))
228    }
229    pub fn write_property(&mut self, prop_id: u32, value: &QVariant) {
230        call_rust_trait_impl!(mut self, write_property(prop_id, value))
231    }
232
233    pub fn base_index(&self, row: i32, column: i32, parent: &QModelIndex) -> QModelIndex {
234        call_cpp_impl!(self, base_index(row, column, parent))
235    }
236    pub fn base_role_names(&self) -> QHash<i32, QByteArray> {
237        call_cpp_impl!(self, base_role_names())
238    }
239    pub fn base_set_data(&mut self, index: &QModelIndex, value: &QVariant, role: i32) -> bool {
240        call_cpp_impl!(mut self, base_set_data(index, value, role))
241    }
242    pub fn base_remove_rows(&mut self, first: i32, count: i32, parent: &QModelIndex) -> bool {
243        call_cpp_impl!(mut self, base_remove_rows(first, count, parent))
244    }
245    pub fn base_sibling(&self, row: i32, column: i32, idx: &QModelIndex) -> QModelIndex {
246        call_cpp_impl!(self, base_sibling(row, column, idx))
247    }
248    pub fn base_data_changed(&mut self, top_left: &QModelIndex, bottom_right: &QModelIndex) {
249        call_cpp_impl!(mut self, base_data_changed(top_left, bottom_right))
250    }
251    pub fn base_begin_insert_rows(&mut self, parent: &QModelIndex, first: i32, last: i32) {
252        call_cpp_impl!(mut self, base_begin_insert_rows(parent, first, last))
253    }
254    pub fn base_end_insert_rows(&mut self) {
255        call_cpp_impl!(mut self, base_end_insert_rows())
256    }
257    pub fn base_begin_move_rows(&mut self, source_parent: &QModelIndex, source_first: i32, source_last: i32, destination_parent: &QModelIndex, destination_child: i32) {
258        call_cpp_impl!(mut self, base_begin_move_rows(source_parent, source_first, source_last, destination_parent, destination_child))
259    }
260    pub fn base_end_move_rows(&mut self) {
261        call_cpp_impl!(mut self, base_end_move_rows())
262    }
263    pub fn base_begin_remove_rows(&mut self, parent: &QModelIndex, first: i32, last: i32) {
264        call_cpp_impl!(mut self, base_begin_remove_rows(parent, first, last))
265    }
266    pub fn base_end_remove_rows(&mut self) {
267        call_cpp_impl!(mut self, base_end_remove_rows())
268    }
269    pub fn base_begin_reset_model(&mut self) {
270        call_cpp_impl!(mut self, base_begin_reset_model())
271    }
272    pub fn base_end_reset_model(&mut self) {
273        call_cpp_impl!(mut self, base_end_reset_model())
274    }
275}