use std::collections::HashMap;
use cpp::cpp;
use crate::*;
pub trait QAbstractItemModel: QObject {
fn get_object_description() -> &'static QObjectDescriptor
where
Self: Sized,
{
unsafe {
&*cpp!([]-> *const QObjectDescriptor as "RustQObjectDescriptor const*" {
return RustQObjectDescriptor::instance<Rust_QAbstractItemModel>();
})
}
}
fn index(&self, row: i32, column: i32, parent: QModelIndex) -> QModelIndex;
fn parent(&self, index: QModelIndex) -> QModelIndex;
fn row_count(&self, parent: QModelIndex) -> i32;
fn column_count(&self, parent: QModelIndex) -> i32;
fn data(&self, index: QModelIndex, role: i32) -> QVariant;
fn set_data(&mut self, _index: QModelIndex, _value: &QVariant, _role: i32) -> bool {
false
}
fn role_names(&self) -> HashMap<i32, QByteArray> {
HashMap::new()
}
fn begin_insert_rows(&self, parent: QModelIndex, first: i32, last: i32) {
let obj = self.get_cpp_object();
cpp!(unsafe [
obj as "Rust_QAbstractItemModel *",
parent as "QModelIndex",
first as "int",
last as "int"
] {
if(obj) obj->beginInsertRows(parent, first, last);
})
}
fn end_insert_rows(&self) {
let obj = self.get_cpp_object();
cpp!(unsafe [obj as "Rust_QAbstractItemModel *"]{
if(obj) obj->endInsertRows();
})
}
fn begin_remove_rows(&self, parent: QModelIndex, first: i32, last: i32) {
let obj = self.get_cpp_object();
cpp!(unsafe [
obj as "Rust_QAbstractItemModel *",
parent as "QModelIndex",
first as "int",
last as "int"
] {
if(obj) obj->beginRemoveRows(parent, first, last);
})
}
fn end_remove_rows(&self) {
let obj = self.get_cpp_object();
cpp!(unsafe [obj as "Rust_QAbstractItemModel *"] {
if(obj) obj->endRemoveRows();
})
}
fn begin_reset_model(&self) {
let obj = self.get_cpp_object();
cpp!(unsafe [obj as "Rust_QAbstractItemModel *"] {
if(obj) obj->beginResetModel();
})
}
fn end_reset_model(&self) {
let obj = self.get_cpp_object();
cpp!(unsafe [obj as "Rust_QAbstractItemModel *"] {
if(obj) obj->endResetModel();
})
}
fn layout_about_to_be_changed(&self) {
let obj = self.get_cpp_object();
cpp!(unsafe [obj as "Rust_QAbstractItemModel *"] {
if (obj) obj->layoutAboutToBeChanged();
})
}
fn update_model_indexes(&self, f: &mut dyn FnMut(QModelIndex) -> QModelIndex) {
let obj = self.get_cpp_object();
cpp!(unsafe [obj as "Rust_QAbstractItemModel *", f as "TraitObject"] {
if (!obj) return;
const auto list1 = obj->persistentIndexList();
auto list2 = list1;
for (QModelIndex &idx : list2) {
rust!(update_model_indexes [
f: &mut dyn FnMut(QModelIndex) -> QModelIndex as "TraitObject",
idx : &mut QModelIndex as "QModelIndex &"
] {
*idx = f(*idx);
});
}
obj->changePersistentIndexList(list1, list2);
})
}
fn layout_changed(&self) {
let obj = self.get_cpp_object();
cpp!(unsafe [obj as "Rust_QAbstractItemModel *"] {
if (obj) obj->layoutChanged();
})
}
fn data_changed(&self, top_left: QModelIndex, bottom_right: QModelIndex) {
let obj = self.get_cpp_object();
cpp!(unsafe [
obj as "Rust_QAbstractItemModel *",
top_left as "QModelIndex",
bottom_right as "QModelIndex"
] {
if(obj) obj->dataChanged(top_left, bottom_right);
})
}
fn create_index(&self, row: i32, column: i32, id: usize) -> QModelIndex {
let obj = self.get_cpp_object();
cpp!(unsafe [
obj as "Rust_QAbstractItemModel *",
row as "int",
column as "int",
id as "uintptr_t"
] -> QModelIndex as "QModelIndex" {
return obj ? obj->createIndex(row, column, id) : QModelIndex();
})
}
}
cpp! {{
#include <qmetaobject_rust.hpp>
#include <QtCore/QAbstractItemModel>
}}
cpp! {{
struct Rust_QAbstractItemModel : RustObject<QAbstractItemModel> {
using QAbstractItemModel::beginInsertRows;
using QAbstractItemModel::endInsertRows;
using QAbstractItemModel::beginRemoveRows;
using QAbstractItemModel::endRemoveRows;
using QAbstractItemModel::beginResetModel;
using QAbstractItemModel::endResetModel;
using QAbstractItemModel::createIndex;
using QAbstractItemModel::changePersistentIndexList;
using QAbstractItemModel::persistentIndexList;
QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override {
return rust!(Rust_QAbstractItemModel_index [
rust_object: QObjectPinned<dyn QAbstractItemModel> as "TraitObject",
row: i32 as "int",
column: i32 as "int",
parent: QModelIndex as "QModelIndex"
] -> QModelIndex as "QModelIndex" {
rust_object.borrow().index(row, column, parent)
});
}
QModelIndex parent(const QModelIndex &index) const override {
return rust!(Rust_QAbstractItemModel_parent [
rust_object: QObjectPinned<dyn QAbstractItemModel> as "TraitObject",
index : QModelIndex as "QModelIndex"
] -> QModelIndex as "QModelIndex" {
rust_object.borrow().parent(index)
});
}
int rowCount(const QModelIndex &parent = QModelIndex()) const override {
return rust!(Rust_QAbstractItemModel_rowCount [
rust_object: QObjectPinned<dyn QAbstractItemModel> as "TraitObject",
parent: QModelIndex as "QModelIndex"
] -> i32 as "int" {
rust_object.borrow().row_count(parent)
});
}
int columnCount(const QModelIndex &parent = QModelIndex()) const override {
return rust!(Rust_QAbstractItemModel_columnCount [
rust_object: QObjectPinned<dyn QAbstractItemModel> as "TraitObject",
parent : QModelIndex as "QModelIndex"
] -> i32 as "int" {
rust_object.borrow().column_count(parent)
});
}
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override {
return rust!(Rust_QAbstractItemModel_data [
rust_object: QObjectPinned<dyn QAbstractItemModel> as "TraitObject",
index: QModelIndex as "QModelIndex",
role: i32 as "int"
] -> QVariant as "QVariant" {
rust_object.borrow().data(index, role)
});
}
bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override {
return rust!(Rust_QAbstractItemModel_setData [
rust_object: QObjectPinned<dyn QAbstractItemModel> as "TraitObject",
index: QModelIndex as "QModelIndex",
value: QVariant as "QVariant",
role: i32 as "int"
] -> bool as "bool" {
rust_object.borrow_mut().set_data(index, &value, role)
});
}
QHash<int, QByteArray> roleNames() const override {
QHash<int, QByteArray> base = QAbstractItemModel::roleNames();
rust!(Rust_QAbstractItemModel_roleNames [
rust_object: QObjectPinned<dyn QAbstractItemModel> as "TraitObject",
base: *mut c_void as "QHash<int, QByteArray> &"
] {
for (key, val) in rust_object.borrow().role_names().iter() {
add_to_hash(base, *key, val.clone());
}
});
return base;
}
};
}}