Skip to main content

qtbridge_interfaces/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;
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}