/* Copyright (C) 2019 Filippo Cucchetto. Contact: https://github.com/filcuc/dotherside This file is part of the DOtherSide library. The DOtherSide library is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the license, or (at your opinion) any later version. The DOtherSide library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the DOtherSide library. If not, see . */ #include "DOtherSide/DOtherSide.h" #include #include #include #include #include #include #include #include #include #include #include #include #ifdef QT_QUICKCONTROLS2_LIB #include #endif #include #include "DOtherSide/DOtherSideTypesCpp.h" #include "DOtherSide/DosQMetaObject.h" #include "DOtherSide/DosQObject.h" #include "DOtherSide/DosQObjectImpl.h" #include "DOtherSide/DosQAbstractItemModel.h" #include "DOtherSide/DosQDeclarative.h" #include "DOtherSide/DosQQuickImageProvider.h" namespace { void register_meta_types() { qRegisterMetaType>(); } } char *convert_to_cstring(const QByteArray &array) { return qstrdup(array.data()); } char *convert_to_cstring(const QString &source) { return convert_to_cstring(source.toUtf8()); } char *dos_qcoreapplication_application_dir_path() { return convert_to_cstring(QCoreApplication::applicationDirPath()); } void dos_qguiapplication_create() { static int argc = 1; static char empty[1] = {0}; static char *argv[] = {empty}; register_meta_types(); new QGuiApplication(argc, argv); } void dos_qguiapplication_delete() { delete qGuiApp; } void dos_qguiapplication_exec() { qGuiApp->exec(); } void dos_qguiapplication_quit() { qGuiApp->quit(); } void dos_qapplication_create() { static int argc = 1; static char empty[1] = {0}; static char *argv[] = {empty}; register_meta_types(); new QApplication(argc, argv); } void dos_qapplication_delete() { delete qApp; } void dos_qapplication_exec() { qApp->exec(); } void dos_qapplication_quit() { qApp->quit(); } ::DosQQmlApplicationEngine *dos_qqmlapplicationengine_create() { return new QQmlApplicationEngine(); } void dos_qqmlapplicationengine_load(::DosQQmlApplicationEngine *vptr, const char *filename) { auto engine = static_cast(vptr); engine->load(QUrl::fromLocalFile(QCoreApplication::applicationDirPath() + QDir::separator() + QString(filename))); } void dos_qqmlapplicationengine_load_url(::DosQQmlApplicationEngine *vptr, ::DosQUrl *url) { auto engine = static_cast(vptr); auto qurl = static_cast(url); engine->load(*qurl); } void dos_qqmlapplicationengine_load_data(::DosQQmlApplicationEngine *vptr, const char *data) { auto engine = static_cast(vptr); engine->loadData(data); } void dos_qqmlapplicationengine_add_import_path(::DosQQmlApplicationEngine *vptr, const char *path) { auto engine = static_cast(vptr); engine->addImportPath(QString(path)); } ::DosQQmlContext *dos_qqmlapplicationengine_context(::DosQQmlApplicationEngine *vptr) { auto engine = static_cast(vptr); engine->rootContext(); return engine->rootContext(); } void dos_qqmlapplicationengine_addImageProvider(DosQQmlApplicationEngine *vptr, const char* name, DosQQuickImageProvider *vptr_i) { auto engine = static_cast(vptr); auto provider = static_cast(vptr_i); engine->addImageProvider(QString(name), provider); } void dos_qqmlapplicationengine_delete(::DosQQmlApplicationEngine *vptr) { auto engine = static_cast(vptr); delete engine; } ::DosQQuickImageProvider *dos_qquickimageprovider_create(RequestPixmapCallback callback) { return new DosImageProvider(callback); } void dos_qquickimageprovider_delete(::DosQQuickImageProvider *vptr) { auto provider = static_cast(vptr); delete provider; } ::DosPixmap *dos_qpixmap_create() { return new QPixmap(); } ::DosPixmap *dos_qpixmap_create_qpixmap(const DosPixmap *other) { auto pixmap = static_cast(other); return new QPixmap(pixmap ? *pixmap : QPixmap()); } ::DosPixmap *dos_qpixmap_create_width_and_height(int width, int height) { return new QPixmap(width, height); } void dos_qpixmap_delete(DosPixmap *vptr) { auto pixmap = static_cast(vptr); delete pixmap; } void dos_qpixmap_load(DosPixmap *vptr, const char* filepath, const char* format) { auto pixmap = static_cast(vptr); pixmap->load(QString(filepath), format); } void dos_qpixmap_loadFromData(DosPixmap *vptr, const unsigned char* data, unsigned int len) { auto pixmap = static_cast(vptr); pixmap->loadFromData(data, len); } void dos_qpixmap_fill(DosPixmap *vptr, unsigned char r, unsigned char g, unsigned char b, unsigned char a) { auto pixmap = static_cast(vptr); pixmap->fill(QColor(r, g, b, a)); } void dos_qpixmap_assign(DosPixmap *vptr, const DosPixmap *other) { if (vptr) { auto lhs = static_cast(vptr); auto rhs = static_cast(other); *lhs = rhs ? *rhs : QPixmap(); } } bool dos_qpixmap_isNull(DosPixmap *vptr) { auto pixmap = static_cast(vptr); return pixmap->isNull(); } ::DosQQuickView *dos_qquickview_create() { return new QQuickView(); } void dos_qquickview_show(::DosQQuickView *vptr) { auto view = static_cast(vptr); view->show(); } void dos_qquickview_delete(::DosQQuickView *vptr) { auto view = static_cast(vptr); delete view; } char *dos_qquickview_source(const ::DosQQuickView *vptr) { auto view = static_cast(vptr); QUrl url = view->source(); return convert_to_cstring(url.toString()); } void dos_qquickview_set_source(::DosQQuickView *vptr, const char *filename) { auto view = static_cast(vptr); view->setSource(QUrl::fromLocalFile(QCoreApplication::applicationDirPath() + QDir::separator() + QString(filename))); } void dos_qquickview_set_source_url(::DosQQuickView *vptr, ::DosQUrl *url) { auto view = static_cast(vptr); auto _url = static_cast(url); view->setSource(*_url); } void dos_qquickview_set_resize_mode(::DosQQuickView *vptr, int resizeMode) { auto view = static_cast(vptr); view->setResizeMode(static_cast(resizeMode)); } ::DosQQmlContext *dos_qquickview_rootContext(::DosQQuickView *vptr) { auto view = static_cast(vptr); return view->rootContext(); } void dos_chararray_delete(char *ptr) { if (ptr) delete[] ptr; } void dos_qvariantarray_delete(DosQVariantArray *ptr) { if (!ptr || !ptr->data) return; // Delete each variant for (int i = 0; i < ptr->size; ++i) dos_qvariant_delete(ptr->data[i]); // Delete the array delete[] ptr->data; ptr->data = nullptr; ptr->size = 0; // Delete the wrapped struct delete ptr; } char *dos_qqmlcontext_baseUrl(const ::DosQQmlContext *vptr) { auto context = static_cast(vptr); QUrl url = context->baseUrl(); return convert_to_cstring(url.toString()); } void dos_qqmlcontext_setcontextproperty(::DosQQmlContext *vptr, const char *name, ::DosQVariant *value) { auto context = static_cast(vptr); auto variant = static_cast(value); context->setContextProperty(QString::fromUtf8(name), *variant); } ::DosQVariant *dos_qvariant_create() { return new QVariant(); } ::DosQVariant *dos_qvariant_create_int(int value) { return new QVariant(value); } ::DosQVariant *dos_qvariant_create_bool(bool value) { return new QVariant(value); } ::DosQVariant *dos_qvariant_create_string(const char *value) { return new QVariant(value); } ::DosQVariant *dos_qvariant_create_qvariant(const ::DosQVariant *other) { auto otherQVariant = static_cast(other); auto result = new QVariant(); *result = *otherQVariant; return result; } ::DosQVariant *dos_qvariant_create_qobject(::DosQObject *value) { auto qobject = static_cast(value); auto result = new QVariant(); result->setValue(qobject); return result; } ::DosQVariant *dos_qvariant_create_float(float value) { return new QVariant(value); } ::DosQVariant *dos_qvariant_create_double(double value) { return new QVariant(value); } ::DosQVariant *dos_qvariant_create_array(int size, ::DosQVariant **array) { QList data; data.reserve(size); for (int i = 0; i < size; ++i) data << *(static_cast(array[i])); return new QVariant(data); } bool dos_qvariant_isnull(const DosQVariant *vptr) { auto variant = static_cast(vptr); return variant->isNull(); } void dos_qvariant_delete(::DosQVariant *vptr) { auto variant = static_cast(vptr); delete variant; } void dos_qvariant_assign(::DosQVariant *vptr, const DosQVariant *other) { auto leftQVariant = static_cast(vptr); auto rightQVariant = static_cast(other); *leftQVariant = *rightQVariant; } int dos_qvariant_toInt(const ::DosQVariant *vptr) { auto variant = static_cast(vptr); return variant->toInt(); } bool dos_qvariant_toBool(const ::DosQVariant *vptr) { auto variant = static_cast(vptr); return variant->toBool(); } float dos_qvariant_toFloat(const DosQVariant *vptr) { auto variant = static_cast(vptr); return variant->toFloat(); } double dos_qvariant_toDouble(const DosQVariant *vptr) { auto variant = static_cast(vptr); return variant->toDouble(); } char *dos_qvariant_toString(const DosQVariant *vptr) { auto variant = static_cast(vptr); return convert_to_cstring(variant->toString()); } DosQVariantArray *dos_qvariant_toArray(const DosQVariant *vptr) { auto variant = static_cast(vptr); QVariantList data = variant->toList(); auto result = new DosQVariantArray(); result->size = data.size(); result->data = new DosQVariant*[result->size]; for (int i = 0; i < result->size; ++i) result->data[i] = new QVariant(data[i]); return result; } ::DosQObject *dos_qvariant_toQObject(const DosQVariant *vptr) { auto variant = static_cast(vptr); return variant->value(); } void dos_qvariant_setInt(::DosQVariant *vptr, int value) { auto variant = static_cast(vptr); *variant = value; } void dos_qvariant_setBool(::DosQVariant *vptr, bool value) { auto variant = static_cast(vptr); *variant = value; } void dos_qvariant_setFloat(::DosQVariant *vptr, float value) { auto variant = static_cast(vptr); *variant = value; } void dos_qvariant_setDouble(::DosQVariant *vptr, double value) { auto variant = static_cast(vptr); *variant = value; } void dos_qvariant_setString(::DosQVariant *vptr, const char *value) { auto variant = static_cast(vptr); *variant = value; } void dos_qvariant_setQObject(::DosQVariant *vptr, ::DosQObject *value) { auto variant = static_cast(vptr); auto qobject = static_cast(value); variant->setValue(qobject); } void dos_qvariant_setArray(::DosQVariant *vptr, int size, ::DosQVariant **array) { auto variant = static_cast(vptr); QVariantList data; data.reserve(size); for (int i = 0; i < size; ++i) data << *(static_cast(array[i])); variant->setValue(data); } ::DosQMetaObject *dos_qobject_qmetaobject() { return new DOS::DosIQMetaObjectHolder(std::make_shared()); } ::DosQObject *dos_qobject_create(void *dObjectPointer, ::DosQMetaObject *metaObject, ::DObjectCallback dObjectCallback) { auto metaObjectHolder = static_cast(metaObject); auto dosQObject = new DOS::DosQObject(dObjectPointer, metaObjectHolder->data(), dObjectCallback); QQmlEngine::setObjectOwnership(dosQObject, QQmlEngine::CppOwnership); return static_cast(dosQObject); } void dos_qobject_delete(::DosQObject *vptr) { auto qobject = static_cast(vptr); qobject->disconnect(); delete qobject; } void dos_qobject_deleteLater(::DosQObject *vptr) { auto qobject = static_cast(vptr); qobject->deleteLater(); } void dos_qobject_signal_emit(::DosQObject *vptr, const char *name, int parametersCount, void **parameters) { auto qobject = static_cast(vptr); auto dynamicQObject = dynamic_cast(qobject); auto transformation = [](void *vptr)->QVariant{return *(static_cast(vptr));}; const std::vector variants = DOS::toVector(parameters, parametersCount, transformation); dynamicQObject->emitSignal(qobject, QString::fromStdString(name), variants); } bool dos_qobject_signal_connect(::DosQObject *senderVPtr, const char *signal, ::DosQObject *receiverVPtr, const char *method, int type) { auto sender = static_cast(senderVPtr); auto receiver = static_cast(receiverVPtr); return QObject::connect(sender, signal, receiver, method, static_cast(type)); } bool dos_qobject_signal_disconnect(::DosQObject *senderVPtr, const char *signal, ::DosQObject *receiverVPtr, const char *method) { auto sender = static_cast(senderVPtr); auto receiver = static_cast(receiverVPtr); return QObject::disconnect(sender, signal, receiver, method); } char *dos_qobject_objectName(const ::DosQObject *vptr) { auto object = static_cast(vptr); return convert_to_cstring(object->objectName()); } void dos_qobject_setObjectName(::DosQObject *vptr, const char *name) { auto object = static_cast(vptr); object->setObjectName(QString::fromUtf8(name)); } ::DosQVariant *dos_qobject_property(DosQObject *vptr, const char *propertyName) { auto object = static_cast(vptr); auto result = new QVariant(object->property(propertyName)); return static_cast(result); } bool dos_qobject_setProperty(::DosQObject *vptr, const char *propertyName, ::DosQVariant *dosValue){ auto object = static_cast(vptr); auto value = static_cast(dosValue); return object->setProperty(propertyName, *value); } ::DosQModelIndex *dos_qmodelindex_create() { return new QModelIndex(); } ::DosQModelIndex *dos_qmodelindex_create_qmodelindex(::DosQModelIndex *other_vptr) { auto other = static_cast(other_vptr); return new QModelIndex(*other); } void dos_qmodelindex_delete(::DosQModelIndex *vptr) { auto index = static_cast(vptr); delete index; } int dos_qmodelindex_row(const ::DosQModelIndex *vptr) { auto index = static_cast(vptr); return index->row(); } int dos_qmodelindex_column(const ::DosQModelIndex *vptr) { auto index = static_cast(vptr); return index->column(); } bool dos_qmodelindex_isValid(const ::DosQModelIndex *vptr) { auto index = static_cast(vptr); return index->isValid(); } ::DosQVariant *dos_qmodelindex_data(const ::DosQModelIndex *vptr, int role) { auto index = static_cast(vptr); auto result = new QVariant(index->data(role)); return static_cast(result); } ::DosQModelIndex *dos_qmodelindex_parent(const ::DosQModelIndex *vptr) { auto index = static_cast(vptr); auto result = new QModelIndex(index->parent()); return static_cast(result); } ::DosQModelIndex *dos_qmodelindex_child(const ::DosQModelIndex *vptr, int row, int column) { auto index = static_cast(vptr); auto result = new QModelIndex(index->child(row, column)); return static_cast(result); } ::DosQModelIndex *dos_qmodelindex_sibling(const ::DosQModelIndex *vptr, int row, int column) { auto index = static_cast(vptr); auto result = new QModelIndex(index->sibling(row, column)); return static_cast(result); } void dos_qmodelindex_assign(::DosQModelIndex *l, const ::DosQModelIndex *r) { auto li = static_cast(l); auto ri = static_cast(r); *li = *ri; } void *dos_qmodelindex_internalPointer(DosQModelIndex *vptr) { auto index = static_cast(vptr); return index->internalPointer(); } ::DosQHashIntQByteArray *dos_qhash_int_qbytearray_create() { return new QHash(); } void dos_qhash_int_qbytearray_delete(::DosQHashIntQByteArray *vptr) { auto qHash = static_cast*>(vptr); delete qHash; } void dos_qhash_int_qbytearray_insert(::DosQHashIntQByteArray *vptr, int key, const char *value) { auto qHash = static_cast*>(vptr); qHash->insert(key, QByteArray(value)); } char *dos_qhash_int_qbytearray_value(const ::DosQHashIntQByteArray *vptr, int key) { auto qHash = static_cast*>(vptr); return convert_to_cstring(qHash->value(key)); } void dos_qresource_register(const char *filename) { QResource::registerResource(QString::fromUtf8(filename)); } ::DosQUrl *dos_qurl_create(const char *url, int parsingMode) { return new QUrl(QString::fromUtf8(url), static_cast(parsingMode)); } void dos_qurl_delete(::DosQUrl *vptr) { auto url = static_cast(vptr); delete url; } char *dos_qurl_to_string(const ::DosQUrl *vptr) { auto url = static_cast(vptr); return convert_to_cstring(url->toString()); } bool dos_qurl_isValid(const ::DosQUrl *vptr) { auto url = static_cast(vptr); return url->isValid(); } ::DosQMetaObject *dos_qmetaobject_create(::DosQMetaObject *superClassVPtr, const char *className, const ::SignalDefinitions *signalDefinitions, const ::SlotDefinitions *slotDefinitions, const ::PropertyDefinitions *propertyDefinitions) { Q_ASSERT(superClassVPtr); auto superClassHolder = static_cast(superClassVPtr); Q_ASSERT(superClassHolder); auto data = superClassHolder->data(); Q_ASSERT(data); auto metaObject = std::make_shared(data, QString::fromUtf8(className), DOS::toVector(*signalDefinitions), DOS::toVector(*slotDefinitions), DOS::toVector(*propertyDefinitions)); return new DOS::DosIQMetaObjectHolder(std::move(metaObject)); } void dos_signal(::DosQObject *vptr, const char *signal, const char *slot) // { auto qobject = static_cast(vptr); QMetaObject::invokeMethod(qobject, slot, Qt::QueuedConnection, Q_ARG(QString, signal)); } void dos_qmetaobject_delete(::DosQMetaObject *vptr) { auto factory = static_cast(vptr); delete factory; } ::DosQMetaObject *dos_qabstracttablemodel_qmetaobject() { return new DOS::DosIQMetaObjectHolder(std::make_shared()); } ::DosQAbstractListModel *dos_qabstracttablemodel_create(void *dObjectPointer, ::DosQMetaObject *metaObjectPointer, ::DObjectCallback dObjectCallback, ::DosQAbstractItemModelCallbacks *callbacks) { auto metaObjectHolder = static_cast(metaObjectPointer); auto model = new DOS::DosQAbstractTableModel(dObjectPointer, metaObjectHolder->data(), dObjectCallback, *callbacks); QQmlEngine::setObjectOwnership(model, QQmlEngine::CppOwnership); return static_cast(model); } DosQModelIndex *dos_qabstracttablemodel_index(DosQAbstractTableModel *vptr, int row, int column, DosQModelIndex *dosParent) { auto object = static_cast(vptr); auto model = dynamic_cast(object); auto parent = static_cast(dosParent); auto result = new QModelIndex(model->defaultIndex(row, column, *parent)); return static_cast(result); } DosQModelIndex *dos_qabstracttablemodel_parent(DosQAbstractTableModel *vptr, DosQModelIndex *dosChild) { auto object = static_cast(vptr); auto model = dynamic_cast(object); auto child = static_cast(dosChild); auto result = new QModelIndex(model->defaultParent(*child)); return static_cast(result); } ::DosQMetaObject *dos_qabstractlistmodel_qmetaobject() { return new DOS::DosIQMetaObjectHolder(std::make_shared()); } ::DosQAbstractListModel *dos_qabstractlistmodel_create(void *dObjectPointer, ::DosQMetaObject *metaObjectPointer, ::DObjectCallback dObjectCallback, ::DosQAbstractItemModelCallbacks *callbacks) { auto metaObjectHolder = static_cast(metaObjectPointer); auto model = new DOS::DosQAbstractListModel(dObjectPointer, metaObjectHolder->data(), dObjectCallback, *callbacks); QQmlEngine::setObjectOwnership(model, QQmlEngine::CppOwnership); return static_cast(model); } DosQModelIndex *dos_qabstractlistmodel_index(DosQAbstractListModel *vptr, int row, int column, DosQModelIndex *dosParent) { auto object = static_cast(vptr); auto model = dynamic_cast(object); auto parent = static_cast(dosParent); auto result = new QModelIndex(model->defaultIndex(row, column, *parent)); return static_cast(result); } DosQModelIndex *dos_qabstractlistmodel_parent(DosQAbstractListModel *vptr, DosQModelIndex *dosChild) { auto object = static_cast(vptr); auto model = dynamic_cast(object); auto child = static_cast(dosChild); auto result = new QModelIndex(model->defaultParent(*child)); return static_cast(result); } int dos_qabstractlistmodel_columnCount(DosQAbstractListModel *vptr, DosQModelIndex *dosParent) { auto object = static_cast(vptr); auto model = dynamic_cast(object); auto parent = static_cast(dosParent); return model->defaultColumnCount(*parent); } ::DosQMetaObject *dos_qabstractitemmodel_qmetaobject() { return new DOS::DosIQMetaObjectHolder(std::make_shared()); } ::DosQAbstractItemModel *dos_qabstractitemmodel_create(void *dObjectPointer, ::DosQMetaObject *metaObjectPointer, ::DObjectCallback dObjectCallback, ::DosQAbstractItemModelCallbacks *callbacks) { auto metaObjectHolder = static_cast(metaObjectPointer); auto model = new DOS::DosQAbstractItemModel(dObjectPointer, metaObjectHolder->data(), dObjectCallback, *callbacks); QQmlEngine::setObjectOwnership(model, QQmlEngine::CppOwnership); return static_cast(model); } void dos_qabstractitemmodel_beginInsertRows(::DosQAbstractItemModel *vptr, ::DosQModelIndex *parentIndex, int first, int last) { auto object = static_cast(vptr); auto model = dynamic_cast(object); auto index = static_cast(parentIndex); model->publicBeginInsertRows(*index, first, last); } void dos_qabstractitemmodel_endInsertRows(::DosQAbstractItemModel *vptr) { auto object = static_cast(vptr); auto model = dynamic_cast(object); model->publicEndInsertRows(); } void dos_qabstractitemmodel_beginRemoveRows(::DosQAbstractItemModel *vptr, ::DosQModelIndex *parentIndex, int first, int last) { auto object = static_cast(vptr); auto model = dynamic_cast(object); auto index = static_cast(parentIndex); model->publicBeginRemoveRows(*index, first, last); } void dos_qabstractitemmodel_endRemoveRows(::DosQAbstractItemModel *vptr) { auto object = static_cast(vptr); auto model = dynamic_cast(object); model->publicEndRemoveRows(); } void dos_qabstractitemmodel_beginInsertColumns(::DosQAbstractItemModel *vptr, ::DosQModelIndex *parentIndex, int first, int last) { auto object = static_cast(vptr); auto model = dynamic_cast(object); auto index = static_cast(parentIndex); model->publicBeginInsertColumns(*index, first, last); } void dos_qabstractitemmodel_endInsertColumns(::DosQAbstractItemModel *vptr) { auto object = static_cast(vptr); auto model = dynamic_cast(object); model->publicEndInsertColumns(); } void dos_qabstractitemmodel_beginRemoveColumns(::DosQAbstractItemModel *vptr, ::DosQModelIndex *parentIndex, int first, int last) { auto object = static_cast(vptr); auto model = dynamic_cast(object); auto index = static_cast(parentIndex); model->publicBeginRemoveColumns(*index, first, last); } void dos_qabstractitemmodel_endRemoveColumns(::DosQAbstractItemModel *vptr) { auto object = static_cast(vptr); auto model = dynamic_cast(object); model->publicEndRemoveColumns(); } void dos_qabstractitemmodel_beginResetModel(::DosQAbstractItemModel *vptr) { auto object = static_cast(vptr); auto model = dynamic_cast(object); model->publicBeginResetModel(); } void dos_qabstractitemmodel_endResetModel(::DosQAbstractItemModel *vptr) { auto object = static_cast(vptr); auto model = dynamic_cast(object); model->publicEndResetModel(); } void dos_qabstractitemmodel_dataChanged(::DosQAbstractItemModel *vptr, const ::DosQModelIndex *topLeftIndex, const ::DosQModelIndex *bottomRightIndex, int *rolesArrayPtr, int rolesArrayLength) { auto object = static_cast(vptr); auto model = dynamic_cast(object); auto topLeft = static_cast(topLeftIndex); auto bottomRight = static_cast(bottomRightIndex); auto roles = QVector::fromStdVector(std::vector(rolesArrayPtr, rolesArrayPtr + rolesArrayLength)); model->publicDataChanged(*topLeft, *bottomRight, roles); } DosQModelIndex *dos_qabstractitemmodel_createIndex(::DosQAbstractItemModel *vptr, int row, int column, void *data) { auto object = static_cast(vptr); auto model = dynamic_cast(object); return new QModelIndex(model->publicCreateIndex(row, column, data)); } bool dos_qabstractitemmodel_setData(DosQAbstractItemModel *vptr, DosQModelIndex *dosIndex, DosQVariant *dosValue, int role) { auto object = static_cast(vptr); auto model = dynamic_cast(object); auto index = static_cast(dosIndex); auto value = static_cast(dosValue); return model->defaultSetData(*index, *value, role); } DosQHashIntQByteArray *dos_qabstractitemmodel_roleNames(DosQAbstractItemModel *vptr) { auto object = static_cast(vptr); auto model = dynamic_cast(object); auto result = new QHash(model->defaultRoleNames()); return static_cast(result); } int dos_qabstractitemmodel_flags(DosQAbstractItemModel *vptr, DosQModelIndex *dosIndex) { auto object = static_cast(vptr); auto model = dynamic_cast(object); auto index = static_cast(dosIndex); return static_cast(model->defaultFlags(*index)); } DosQVariant *dos_qabstractitemmodel_headerData(DosQAbstractItemModel *vptr, int section, int orientation, int role) { auto object = static_cast(vptr); auto model = dynamic_cast(object); auto result = new QVariant(model->defaultHeaderData(section, static_cast(orientation), role)); return static_cast(result); } bool dos_qabstractitemmodel_hasChildren(DosQAbstractItemModel *vptr, DosQModelIndex *dosParentIndex) { auto object = static_cast(vptr); auto model = dynamic_cast(object); auto parentIndex = static_cast(dosParentIndex); return model->defaultHasChildren(*parentIndex); } bool dos_qabstractitemmodel_hasIndex(DosQAbstractItemModel *vptr, int row, int column, DosQModelIndex *dosParentIndex) { auto object = static_cast(vptr); auto model = dynamic_cast(object); auto index = static_cast(dosParentIndex); return model->hasIndex(row, column, *index); } bool dos_qabstractitemmodel_canFetchMore(DosQAbstractItemModel *vptr, DosQModelIndex *dosParentIndex) { auto object = static_cast(vptr); auto model = dynamic_cast(object); auto parentIndex = static_cast(dosParentIndex); return model->defaultCanFetchMore(*parentIndex); } void dos_qabstractitemmodel_fetchMore(DosQAbstractItemModel *vptr, DosQModelIndex *dosParentIndex) { auto object = static_cast(vptr); auto model = dynamic_cast(object); auto parentIndex = static_cast(dosParentIndex); model->defaultFetchMore(*parentIndex); } int dos_qdeclarative_qmlregistertype(const ::QmlRegisterType *cArgs) { auto holder = static_cast(cArgs->staticMetaObject); DOS::QmlRegisterType args; args.major = cArgs->major; args.minor = cArgs->minor; args.uri = cArgs->uri; args.qml = cArgs->qml; args.staticMetaObject = holder->data(); args.createDObject = cArgs->createDObject; args.deleteDObject = cArgs->deleteDObject; return DOS::dosQmlRegisterType(std::move(args)); } int dos_qdeclarative_qmlregistersingletontype(const ::QmlRegisterType *cArgs) { auto holder = static_cast(cArgs->staticMetaObject); DOS::QmlRegisterType args; args.major = cArgs->major; args.minor = cArgs->minor; args.uri = cArgs->uri; args.qml = cArgs->qml; args.staticMetaObject = holder->data(); args.createDObject = cArgs->createDObject; args.deleteDObject = cArgs->deleteDObject; return DOS::dosQmlRegisterSingletonType(std::move(args)); } void dos_qquickstyle_set_style(const char *style) { #ifdef QT_QUICKCONTROLS2_LIB QQuickStyle::setStyle(QString::fromUtf8(style)); #else std::cerr << "Library has not QtQuickControls2 support" << std::endl; #endif } void dos_qquickstyle_set_fallback_style(const char *style) { #ifdef QT_QUICKCONTROLS2_LIB QQuickStyle::setFallbackStyle(QString::fromUtf8(style)); #else std::cerr << "Library has no QtQuickControls2 support" << std::endl; #endif } void dos_qcoreapplication_process_events(DosQEventLoopProcessEventFlag flags) { qApp->processEvents(static_cast(flags)); } void dos_qcoreapplication_process_events_timed(DosQEventLoopProcessEventFlag flags, int ms) { qApp->processEvents(static_cast(flags), ms); }