mirror of
https://github.com/status-im/dotherside.git
synced 2025-02-11 20:16:47 +00:00
Merge remote-tracking branch 'origin/Refactor'
This commit is contained in:
commit
d1a15a133a
@ -24,7 +24,6 @@ set(HEADERS_LIST
|
|||||||
include/DOtherSide/DosQObject.h
|
include/DOtherSide/DosQObject.h
|
||||||
include/DOtherSide/DosQObjectImpl.h
|
include/DOtherSide/DosQObjectImpl.h
|
||||||
include/DOtherSide/DosIQObjectImpl.h
|
include/DOtherSide/DosIQObjectImpl.h
|
||||||
include/DOtherSide/OnSlotExecutedHandler.h
|
|
||||||
include/DOtherSide/DosQMetaObject.h
|
include/DOtherSide/DosQMetaObject.h
|
||||||
include/DOtherSide/DosIQAbstractItemModelImpl.h
|
include/DOtherSide/DosIQAbstractItemModelImpl.h
|
||||||
include/DOtherSide/DosQAbstractItemModel.h
|
include/DOtherSide/DosQAbstractItemModel.h
|
||||||
@ -33,7 +32,6 @@ set(HEADERS_LIST
|
|||||||
|
|
||||||
set(SRC_LIST
|
set(SRC_LIST
|
||||||
src/DOtherSide.cpp
|
src/DOtherSide.cpp
|
||||||
src/OnSlotExecutedHandler.cpp
|
|
||||||
src/DosQMetaObject.cpp
|
src/DosQMetaObject.cpp
|
||||||
src/DosQDeclarative.cpp
|
src/DosQDeclarative.cpp
|
||||||
src/DosQObject.cpp
|
src/DosQObject.cpp
|
||||||
|
@ -7,8 +7,8 @@
|
|||||||
|
|
||||||
// DOtherSide
|
// DOtherSide
|
||||||
#include "DOtherSide/DOtherSideTypes.h"
|
#include "DOtherSide/DOtherSideTypes.h"
|
||||||
|
#include "DOtherSide/DosQMetaObject.h"
|
||||||
#include "DOtherSide/DosIQAbstractItemModelImpl.h"
|
#include "DOtherSide/DosIQAbstractItemModelImpl.h"
|
||||||
#include "DOtherSide/OnSlotExecutedHandler.h"
|
|
||||||
|
|
||||||
namespace DOS {
|
namespace DOS {
|
||||||
|
|
||||||
@ -19,7 +19,7 @@ public:
|
|||||||
/// Constructor
|
/// Constructor
|
||||||
DosQAbstractGenericModel(void *modelObject,
|
DosQAbstractGenericModel(void *modelObject,
|
||||||
DosIQMetaObjectPtr metaObject,
|
DosIQMetaObjectPtr metaObject,
|
||||||
OnSlotExecuted onSlotExecuted,
|
DObjectCallback dObjectCallback,
|
||||||
DosQAbstractItemModelCallbacks callbacks);
|
DosQAbstractItemModelCallbacks callbacks);
|
||||||
|
|
||||||
/// @see IDynamicQObject::emitSignal
|
/// @see IDynamicQObject::emitSignal
|
||||||
|
@ -14,8 +14,7 @@ class DosQObject : public QObject, public DosIQObjectImpl
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
/// Constructor
|
/// Constructor
|
||||||
DosQObject(DosIQMetaObjectPtr metaObject,
|
DosQObject(void *dObjectPointer, DosIQMetaObjectPtr metaObject, DObjectCallback dObjectCallback);
|
||||||
OnSlotExecuted onSlotExecuted);
|
|
||||||
|
|
||||||
/// Emit a signal
|
/// Emit a signal
|
||||||
bool emitSignal(QObject *emitter, const QString &name, const std::vector<QVariant> &arguments) override;
|
bool emitSignal(QObject *emitter, const QString &name, const std::vector<QVariant> &arguments) override;
|
||||||
|
@ -20,10 +20,10 @@ public:
|
|||||||
using ParentMetaCall = std::function<int(QMetaObject::Call, int, void **)>;
|
using ParentMetaCall = std::function<int(QMetaObject::Call, int, void **)>;
|
||||||
|
|
||||||
/// Constructor
|
/// Constructor
|
||||||
DosQObjectImpl(QObject *parent,
|
DosQObjectImpl(ParentMetaCall parentMetaCall,
|
||||||
ParentMetaCall parentMetaCall,
|
|
||||||
std::shared_ptr<const DosIQMetaObject> metaObject,
|
std::shared_ptr<const DosIQMetaObject> metaObject,
|
||||||
OnSlotExecuted onSlotExecuted);
|
void *dObjectPointer,
|
||||||
|
DObjectCallback dObjectCallback);
|
||||||
|
|
||||||
|
|
||||||
/// @see IDosQObject::emitSignal
|
/// @see IDosQObject::emitSignal
|
||||||
@ -38,13 +38,15 @@ public:
|
|||||||
private:
|
private:
|
||||||
bool executeSlot(const QMetaMethod &method, void **args, int argumentsOffset = 1);
|
bool executeSlot(const QMetaMethod &method, void **args, int argumentsOffset = 1);
|
||||||
bool executeSlot(int index, void **args);
|
bool executeSlot(int index, void **args);
|
||||||
|
QVariant executeSlot(const QString &name, const std::vector<QVariant> &args);
|
||||||
|
|
||||||
bool readProperty(int index, void **args);
|
bool readProperty(int index, void **args);
|
||||||
bool writeProperty(int index, void **args);
|
bool writeProperty(int index, void **args);
|
||||||
|
|
||||||
QObject *m_parent;
|
|
||||||
const ParentMetaCall m_parentMetaCall;
|
const ParentMetaCall m_parentMetaCall;
|
||||||
const OnSlotExecuted m_onSlotExecuted;
|
const std::shared_ptr<const DosIQMetaObject> m_metaObject;
|
||||||
mutable std::shared_ptr<const DosIQMetaObject> m_metaObject;
|
void* const m_dObjectPointer = nullptr;
|
||||||
|
const DObjectCallback m_dObjectCallback;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace DOS
|
} // namespace DOS
|
||||||
|
@ -1,24 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
// std
|
|
||||||
#include <vector>
|
|
||||||
// Qt
|
|
||||||
#include <QtCore/QVariant>
|
|
||||||
// DOtherSide
|
|
||||||
#include "DOtherSide/DOtherSideTypesCpp.h"
|
|
||||||
|
|
||||||
namespace DOS {
|
|
||||||
|
|
||||||
class OnSlotExecutedHandler
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
OnSlotExecutedHandler(void *dObjectPointer, DObjectCallback dObjectCallback);
|
|
||||||
|
|
||||||
QVariant operator()(const QString &name, const std::vector<QVariant> &args);
|
|
||||||
|
|
||||||
private:
|
|
||||||
void *m_dObjectPointer;
|
|
||||||
DObjectCallback m_dObjectCallback;
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace DOS
|
|
@ -18,7 +18,6 @@
|
|||||||
#include <QtWidgets/QApplication>
|
#include <QtWidgets/QApplication>
|
||||||
|
|
||||||
#include "DOtherSide/DOtherSideTypesCpp.h"
|
#include "DOtherSide/DOtherSideTypesCpp.h"
|
||||||
#include "DOtherSide/OnSlotExecutedHandler.h"
|
|
||||||
#include "DOtherSide/DosQMetaObject.h"
|
#include "DOtherSide/DosQMetaObject.h"
|
||||||
#include "DOtherSide/DosQObject.h"
|
#include "DOtherSide/DosQObject.h"
|
||||||
#include "DOtherSide/DosQObjectImpl.h"
|
#include "DOtherSide/DosQObjectImpl.h"
|
||||||
@ -27,10 +26,12 @@
|
|||||||
#include "DOtherSide/DosQQuickImageProvider.h"
|
#include "DOtherSide/DosQQuickImageProvider.h"
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
void register_meta_types()
|
void register_meta_types()
|
||||||
{
|
{
|
||||||
qRegisterMetaType<QVector<int>>();
|
qRegisterMetaType<QVector<int>>();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
char *convert_to_cstring(const QByteArray &array)
|
char *convert_to_cstring(const QByteArray &array)
|
||||||
@ -477,8 +478,7 @@ void dos_qvariant_setArray(::DosQVariant *vptr, int size, ::DosQVariant **array)
|
|||||||
::DosQObject *dos_qobject_create(void *dObjectPointer, ::DosQMetaObject *metaObject, ::DObjectCallback dObjectCallback)
|
::DosQObject *dos_qobject_create(void *dObjectPointer, ::DosQMetaObject *metaObject, ::DObjectCallback dObjectCallback)
|
||||||
{
|
{
|
||||||
auto metaObjectHolder = static_cast<DOS::DosIQMetaObjectHolder *>(metaObject);
|
auto metaObjectHolder = static_cast<DOS::DosIQMetaObjectHolder *>(metaObject);
|
||||||
auto dosQObject = new DOS::DosQObject(metaObjectHolder->data(),
|
auto dosQObject = new DOS::DosQObject(dObjectPointer, metaObjectHolder->data(), dObjectCallback);
|
||||||
DOS::OnSlotExecutedHandler(dObjectPointer, dObjectCallback));
|
|
||||||
QQmlEngine::setObjectOwnership(dosQObject, QQmlEngine::CppOwnership);
|
QQmlEngine::setObjectOwnership(dosQObject, QQmlEngine::CppOwnership);
|
||||||
return static_cast<QObject *>(dosQObject);
|
return static_cast<QObject *>(dosQObject);
|
||||||
}
|
}
|
||||||
@ -718,7 +718,7 @@ void dos_qmetaobject_delete(::DosQMetaObject *vptr)
|
|||||||
auto metaObjectHolder = static_cast<DOS::DosIQMetaObjectHolder *>(metaObjectPointer);
|
auto metaObjectHolder = static_cast<DOS::DosIQMetaObjectHolder *>(metaObjectPointer);
|
||||||
auto model = new DOS::DosQAbstractTableModel(dObjectPointer,
|
auto model = new DOS::DosQAbstractTableModel(dObjectPointer,
|
||||||
metaObjectHolder->data(),
|
metaObjectHolder->data(),
|
||||||
DOS::OnSlotExecutedHandler(dObjectPointer, dObjectCallback),
|
dObjectCallback,
|
||||||
*callbacks);
|
*callbacks);
|
||||||
QQmlEngine::setObjectOwnership(model, QQmlEngine::CppOwnership);
|
QQmlEngine::setObjectOwnership(model, QQmlEngine::CppOwnership);
|
||||||
return static_cast<QObject *>(model);
|
return static_cast<QObject *>(model);
|
||||||
@ -755,7 +755,7 @@ DosQModelIndex *dos_qabstracttablemodel_parent(DosQAbstractTableModel *vptr, Dos
|
|||||||
auto metaObjectHolder = static_cast<DOS::DosIQMetaObjectHolder *>(metaObjectPointer);
|
auto metaObjectHolder = static_cast<DOS::DosIQMetaObjectHolder *>(metaObjectPointer);
|
||||||
auto model = new DOS::DosQAbstractListModel(dObjectPointer,
|
auto model = new DOS::DosQAbstractListModel(dObjectPointer,
|
||||||
metaObjectHolder->data(),
|
metaObjectHolder->data(),
|
||||||
DOS::OnSlotExecutedHandler(dObjectPointer, dObjectCallback),
|
dObjectCallback,
|
||||||
*callbacks);
|
*callbacks);
|
||||||
QQmlEngine::setObjectOwnership(model, QQmlEngine::CppOwnership);
|
QQmlEngine::setObjectOwnership(model, QQmlEngine::CppOwnership);
|
||||||
return static_cast<QObject *>(model);
|
return static_cast<QObject *>(model);
|
||||||
@ -800,7 +800,7 @@ int dos_qabstractlistmodel_columnCount(DosQAbstractListModel *vptr, DosQModelInd
|
|||||||
auto metaObjectHolder = static_cast<DOS::DosIQMetaObjectHolder *>(metaObjectPointer);
|
auto metaObjectHolder = static_cast<DOS::DosIQMetaObjectHolder *>(metaObjectPointer);
|
||||||
auto model = new DOS::DosQAbstractItemModel(dObjectPointer,
|
auto model = new DOS::DosQAbstractItemModel(dObjectPointer,
|
||||||
metaObjectHolder->data(),
|
metaObjectHolder->data(),
|
||||||
DOS::OnSlotExecutedHandler(dObjectPointer, dObjectCallback),
|
dObjectCallback,
|
||||||
*callbacks);
|
*callbacks);
|
||||||
QQmlEngine::setObjectOwnership(model, QQmlEngine::CppOwnership);
|
QQmlEngine::setObjectOwnership(model, QQmlEngine::CppOwnership);
|
||||||
return static_cast<QObject *>(model);
|
return static_cast<QObject *>(model);
|
||||||
|
@ -18,10 +18,10 @@ namespace DOS {
|
|||||||
template<class T>
|
template<class T>
|
||||||
DosQAbstractGenericModel<T>::DosQAbstractGenericModel(void *modelObject,
|
DosQAbstractGenericModel<T>::DosQAbstractGenericModel(void *modelObject,
|
||||||
DosIQMetaObjectPtr metaObject,
|
DosIQMetaObjectPtr metaObject,
|
||||||
OnSlotExecuted onSlotExecuted,
|
DObjectCallback dObjectCallback,
|
||||||
DosQAbstractItemModelCallbacks callbacks)
|
DosQAbstractItemModelCallbacks callbacks)
|
||||||
: m_impl(new DosQObjectImpl(this, ::createParentMetaCall(this), std::move(metaObject), std::move(onSlotExecuted)))
|
: m_impl(new DosQObjectImpl(::createParentMetaCall(this), std::move(metaObject), modelObject, dObjectCallback))
|
||||||
, m_modelObject(std::move(modelObject))
|
, m_modelObject(modelObject)
|
||||||
, m_callbacks(callbacks)
|
, m_callbacks(callbacks)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
@ -13,8 +13,8 @@ DOS::DosQObjectImpl::ParentMetaCall createParentMetaCall(QObject *parent)
|
|||||||
|
|
||||||
namespace DOS {
|
namespace DOS {
|
||||||
|
|
||||||
DosQObject::DosQObject(DosIQMetaObjectPtr metaObject, OnSlotExecuted onSlotExecuted)
|
DosQObject::DosQObject(void *dObjectPointer, DosIQMetaObjectPtr metaObject, DObjectCallback dObjectCallback)
|
||||||
: m_impl(new DosQObjectImpl(this, ::createParentMetaCall(this), std::move(metaObject), std::move(onSlotExecuted)))
|
: m_impl(new DosQObjectImpl(::createParentMetaCall(this), std::move(metaObject), dObjectPointer, dObjectCallback))
|
||||||
{}
|
{}
|
||||||
|
|
||||||
bool DosQObject::emitSignal(QObject *emitter, const QString &name, const std::vector<QVariant> &args)
|
bool DosQObject::emitSignal(QObject *emitter, const QString &name, const std::vector<QVariant> &args)
|
||||||
|
@ -1,19 +1,21 @@
|
|||||||
#include "DOtherSide/DosQObjectImpl.h"
|
#include "DOtherSide/DosQObjectImpl.h"
|
||||||
|
|
||||||
#include "DOtherSide/DosQMetaObject.h"
|
#include "DOtherSide/DosQMetaObject.h"
|
||||||
|
|
||||||
#include <QtCore/QMetaObject>
|
#include <QtCore/QMetaObject>
|
||||||
#include <QtCore/QMetaMethod>
|
#include <QtCore/QMetaMethod>
|
||||||
#include <QtCore/QDebug>
|
#include <QtCore/QDebug>
|
||||||
|
|
||||||
namespace DOS {
|
namespace DOS {
|
||||||
|
|
||||||
DosQObjectImpl::DosQObjectImpl(QObject *parent,
|
DosQObjectImpl::DosQObjectImpl(ParentMetaCall parentMetaCall,
|
||||||
ParentMetaCall parentMetaCall,
|
|
||||||
std::shared_ptr<const DosIQMetaObject> metaObject,
|
std::shared_ptr<const DosIQMetaObject> metaObject,
|
||||||
OnSlotExecuted onSlotExecuted)
|
void *dObjectPointer,
|
||||||
: m_parent(std::move(parent))
|
DObjectCallback dObjectCallback)
|
||||||
, m_parentMetaCall(std::move(parentMetaCall))
|
: m_parentMetaCall(std::move(parentMetaCall))
|
||||||
, m_onSlotExecuted(std::move(onSlotExecuted))
|
|
||||||
, m_metaObject(std::move(metaObject))
|
, m_metaObject(std::move(metaObject))
|
||||||
|
, m_dObjectPointer(dObjectPointer)
|
||||||
|
, m_dObjectCallback(dObjectCallback)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -83,7 +85,7 @@ bool DosQObjectImpl::executeSlot(const QMetaMethod &method, void **args, int arg
|
|||||||
arguments.emplace_back(std::move(argument));
|
arguments.emplace_back(std::move(argument));
|
||||||
}
|
}
|
||||||
|
|
||||||
const QVariant result = m_onSlotExecuted(method.name(), arguments); // Execute method
|
const QVariant result = executeSlot(method.name(), arguments); // Execute method
|
||||||
|
|
||||||
if (hasReturnType && result.isValid()) {
|
if (hasReturnType && result.isValid()) {
|
||||||
QMetaType::construct(method.returnType(), args[0], result.constData());
|
QMetaType::construct(method.returnType(), args[0], result.constData());
|
||||||
@ -92,6 +94,29 @@ bool DosQObjectImpl::executeSlot(const QMetaMethod &method, void **args, int arg
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QVariant DosQObjectImpl::executeSlot(const QString &name, const std::vector<QVariant> &args)
|
||||||
|
{
|
||||||
|
QVariant result;
|
||||||
|
|
||||||
|
if (!m_dObjectCallback || !m_dObjectPointer)
|
||||||
|
return result;
|
||||||
|
|
||||||
|
// prepare slot name
|
||||||
|
QVariant slotName(name);
|
||||||
|
|
||||||
|
// prepare void* for the QVariants
|
||||||
|
std::vector<void *> argumentsAsVoidPointers;
|
||||||
|
argumentsAsVoidPointers.reserve(args.size() + 1);
|
||||||
|
argumentsAsVoidPointers.emplace_back(&result);
|
||||||
|
for (size_t i = 0; i < args.size(); ++i)
|
||||||
|
argumentsAsVoidPointers.emplace_back((void *)(&args[i]));
|
||||||
|
|
||||||
|
// send them to the binding handler
|
||||||
|
m_dObjectCallback(m_dObjectPointer, &slotName, argumentsAsVoidPointers.size(), &argumentsAsVoidPointers[0]);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
bool DosQObjectImpl::readProperty(int index, void **args)
|
bool DosQObjectImpl::readProperty(int index, void **args)
|
||||||
{
|
{
|
||||||
const QMetaObject *const mo = metaObject();
|
const QMetaObject *const mo = metaObject();
|
||||||
|
@ -1,34 +0,0 @@
|
|||||||
#include "DOtherSide/OnSlotExecutedHandler.h"
|
|
||||||
|
|
||||||
namespace DOS {
|
|
||||||
|
|
||||||
OnSlotExecutedHandler::OnSlotExecutedHandler(void *dObjectPointer,
|
|
||||||
DObjectCallback dObjectCallback)
|
|
||||||
: m_dObjectPointer(dObjectPointer)
|
|
||||||
, m_dObjectCallback(dObjectCallback)
|
|
||||||
{}
|
|
||||||
|
|
||||||
QVariant OnSlotExecutedHandler::operator()(const QString &name, const std::vector<QVariant> &args)
|
|
||||||
{
|
|
||||||
QVariant result;
|
|
||||||
|
|
||||||
if (!m_dObjectCallback || !m_dObjectPointer)
|
|
||||||
return result;
|
|
||||||
|
|
||||||
// prepare slot name
|
|
||||||
QVariant slotName(name);
|
|
||||||
|
|
||||||
// prepare void* for the QVariants
|
|
||||||
std::vector<void *> argumentsAsVoidPointers;
|
|
||||||
argumentsAsVoidPointers.reserve(args.size() + 1);
|
|
||||||
argumentsAsVoidPointers.emplace_back(&result);
|
|
||||||
for (size_t i = 0; i < args.size(); ++i)
|
|
||||||
argumentsAsVoidPointers.emplace_back((void *)(&args[i]));
|
|
||||||
|
|
||||||
// send them to the binding handler
|
|
||||||
m_dObjectCallback(m_dObjectPointer, &slotName, argumentsAsVoidPointers.size(), &argumentsAsVoidPointers[0]);
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace DOS
|
|
Loading…
x
Reference in New Issue
Block a user