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/DosQObjectImpl.h
|
||||
include/DOtherSide/DosIQObjectImpl.h
|
||||
include/DOtherSide/OnSlotExecutedHandler.h
|
||||
include/DOtherSide/DosQMetaObject.h
|
||||
include/DOtherSide/DosIQAbstractItemModelImpl.h
|
||||
include/DOtherSide/DosQAbstractItemModel.h
|
||||
@ -33,7 +32,6 @@ set(HEADERS_LIST
|
||||
|
||||
set(SRC_LIST
|
||||
src/DOtherSide.cpp
|
||||
src/OnSlotExecutedHandler.cpp
|
||||
src/DosQMetaObject.cpp
|
||||
src/DosQDeclarative.cpp
|
||||
src/DosQObject.cpp
|
||||
|
@ -7,8 +7,8 @@
|
||||
|
||||
// DOtherSide
|
||||
#include "DOtherSide/DOtherSideTypes.h"
|
||||
#include "DOtherSide/DosQMetaObject.h"
|
||||
#include "DOtherSide/DosIQAbstractItemModelImpl.h"
|
||||
#include "DOtherSide/OnSlotExecutedHandler.h"
|
||||
|
||||
namespace DOS {
|
||||
|
||||
@ -19,7 +19,7 @@ public:
|
||||
/// Constructor
|
||||
DosQAbstractGenericModel(void *modelObject,
|
||||
DosIQMetaObjectPtr metaObject,
|
||||
OnSlotExecuted onSlotExecuted,
|
||||
DObjectCallback dObjectCallback,
|
||||
DosQAbstractItemModelCallbacks callbacks);
|
||||
|
||||
/// @see IDynamicQObject::emitSignal
|
||||
|
@ -14,8 +14,7 @@ class DosQObject : public QObject, public DosIQObjectImpl
|
||||
{
|
||||
public:
|
||||
/// Constructor
|
||||
DosQObject(DosIQMetaObjectPtr metaObject,
|
||||
OnSlotExecuted onSlotExecuted);
|
||||
DosQObject(void *dObjectPointer, DosIQMetaObjectPtr metaObject, DObjectCallback dObjectCallback);
|
||||
|
||||
/// Emit a signal
|
||||
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 **)>;
|
||||
|
||||
/// Constructor
|
||||
DosQObjectImpl(QObject *parent,
|
||||
ParentMetaCall parentMetaCall,
|
||||
DosQObjectImpl(ParentMetaCall parentMetaCall,
|
||||
std::shared_ptr<const DosIQMetaObject> metaObject,
|
||||
OnSlotExecuted onSlotExecuted);
|
||||
void *dObjectPointer,
|
||||
DObjectCallback dObjectCallback);
|
||||
|
||||
|
||||
/// @see IDosQObject::emitSignal
|
||||
@ -38,13 +38,15 @@ public:
|
||||
private:
|
||||
bool executeSlot(const QMetaMethod &method, void **args, int argumentsOffset = 1);
|
||||
bool executeSlot(int index, void **args);
|
||||
QVariant executeSlot(const QString &name, const std::vector<QVariant> &args);
|
||||
|
||||
bool readProperty(int index, void **args);
|
||||
bool writeProperty(int index, void **args);
|
||||
|
||||
QObject *m_parent;
|
||||
const ParentMetaCall m_parentMetaCall;
|
||||
const OnSlotExecuted m_onSlotExecuted;
|
||||
mutable std::shared_ptr<const DosIQMetaObject> m_metaObject;
|
||||
const std::shared_ptr<const DosIQMetaObject> m_metaObject;
|
||||
void* const m_dObjectPointer = nullptr;
|
||||
const DObjectCallback m_dObjectCallback;
|
||||
};
|
||||
|
||||
} // 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 "DOtherSide/DOtherSideTypesCpp.h"
|
||||
#include "DOtherSide/OnSlotExecutedHandler.h"
|
||||
#include "DOtherSide/DosQMetaObject.h"
|
||||
#include "DOtherSide/DosQObject.h"
|
||||
#include "DOtherSide/DosQObjectImpl.h"
|
||||
@ -27,10 +26,12 @@
|
||||
#include "DOtherSide/DosQQuickImageProvider.h"
|
||||
|
||||
namespace {
|
||||
|
||||
void register_meta_types()
|
||||
{
|
||||
qRegisterMetaType<QVector<int>>();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
auto metaObjectHolder = static_cast<DOS::DosIQMetaObjectHolder *>(metaObject);
|
||||
auto dosQObject = new DOS::DosQObject(metaObjectHolder->data(),
|
||||
DOS::OnSlotExecutedHandler(dObjectPointer, dObjectCallback));
|
||||
auto dosQObject = new DOS::DosQObject(dObjectPointer, metaObjectHolder->data(), dObjectCallback);
|
||||
QQmlEngine::setObjectOwnership(dosQObject, QQmlEngine::CppOwnership);
|
||||
return static_cast<QObject *>(dosQObject);
|
||||
}
|
||||
@ -718,7 +718,7 @@ void dos_qmetaobject_delete(::DosQMetaObject *vptr)
|
||||
auto metaObjectHolder = static_cast<DOS::DosIQMetaObjectHolder *>(metaObjectPointer);
|
||||
auto model = new DOS::DosQAbstractTableModel(dObjectPointer,
|
||||
metaObjectHolder->data(),
|
||||
DOS::OnSlotExecutedHandler(dObjectPointer, dObjectCallback),
|
||||
dObjectCallback,
|
||||
*callbacks);
|
||||
QQmlEngine::setObjectOwnership(model, QQmlEngine::CppOwnership);
|
||||
return static_cast<QObject *>(model);
|
||||
@ -755,7 +755,7 @@ DosQModelIndex *dos_qabstracttablemodel_parent(DosQAbstractTableModel *vptr, Dos
|
||||
auto metaObjectHolder = static_cast<DOS::DosIQMetaObjectHolder *>(metaObjectPointer);
|
||||
auto model = new DOS::DosQAbstractListModel(dObjectPointer,
|
||||
metaObjectHolder->data(),
|
||||
DOS::OnSlotExecutedHandler(dObjectPointer, dObjectCallback),
|
||||
dObjectCallback,
|
||||
*callbacks);
|
||||
QQmlEngine::setObjectOwnership(model, QQmlEngine::CppOwnership);
|
||||
return static_cast<QObject *>(model);
|
||||
@ -800,7 +800,7 @@ int dos_qabstractlistmodel_columnCount(DosQAbstractListModel *vptr, DosQModelInd
|
||||
auto metaObjectHolder = static_cast<DOS::DosIQMetaObjectHolder *>(metaObjectPointer);
|
||||
auto model = new DOS::DosQAbstractItemModel(dObjectPointer,
|
||||
metaObjectHolder->data(),
|
||||
DOS::OnSlotExecutedHandler(dObjectPointer, dObjectCallback),
|
||||
dObjectCallback,
|
||||
*callbacks);
|
||||
QQmlEngine::setObjectOwnership(model, QQmlEngine::CppOwnership);
|
||||
return static_cast<QObject *>(model);
|
||||
|
@ -18,10 +18,10 @@ namespace DOS {
|
||||
template<class T>
|
||||
DosQAbstractGenericModel<T>::DosQAbstractGenericModel(void *modelObject,
|
||||
DosIQMetaObjectPtr metaObject,
|
||||
OnSlotExecuted onSlotExecuted,
|
||||
DObjectCallback dObjectCallback,
|
||||
DosQAbstractItemModelCallbacks callbacks)
|
||||
: m_impl(new DosQObjectImpl(this, ::createParentMetaCall(this), std::move(metaObject), std::move(onSlotExecuted)))
|
||||
, m_modelObject(std::move(modelObject))
|
||||
: m_impl(new DosQObjectImpl(::createParentMetaCall(this), std::move(metaObject), modelObject, dObjectCallback))
|
||||
, m_modelObject(modelObject)
|
||||
, m_callbacks(callbacks)
|
||||
{}
|
||||
|
||||
|
@ -13,8 +13,8 @@ DOS::DosQObjectImpl::ParentMetaCall createParentMetaCall(QObject *parent)
|
||||
|
||||
namespace DOS {
|
||||
|
||||
DosQObject::DosQObject(DosIQMetaObjectPtr metaObject, OnSlotExecuted onSlotExecuted)
|
||||
: m_impl(new DosQObjectImpl(this, ::createParentMetaCall(this), std::move(metaObject), std::move(onSlotExecuted)))
|
||||
DosQObject::DosQObject(void *dObjectPointer, DosIQMetaObjectPtr metaObject, DObjectCallback dObjectCallback)
|
||||
: m_impl(new DosQObjectImpl(::createParentMetaCall(this), std::move(metaObject), dObjectPointer, dObjectCallback))
|
||||
{}
|
||||
|
||||
bool DosQObject::emitSignal(QObject *emitter, const QString &name, const std::vector<QVariant> &args)
|
||||
|
@ -1,19 +1,21 @@
|
||||
#include "DOtherSide/DosQObjectImpl.h"
|
||||
|
||||
#include "DOtherSide/DosQMetaObject.h"
|
||||
|
||||
#include <QtCore/QMetaObject>
|
||||
#include <QtCore/QMetaMethod>
|
||||
#include <QtCore/QDebug>
|
||||
|
||||
namespace DOS {
|
||||
|
||||
DosQObjectImpl::DosQObjectImpl(QObject *parent,
|
||||
ParentMetaCall parentMetaCall,
|
||||
DosQObjectImpl::DosQObjectImpl(ParentMetaCall parentMetaCall,
|
||||
std::shared_ptr<const DosIQMetaObject> metaObject,
|
||||
OnSlotExecuted onSlotExecuted)
|
||||
: m_parent(std::move(parent))
|
||||
, m_parentMetaCall(std::move(parentMetaCall))
|
||||
, m_onSlotExecuted(std::move(onSlotExecuted))
|
||||
void *dObjectPointer,
|
||||
DObjectCallback dObjectCallback)
|
||||
: m_parentMetaCall(std::move(parentMetaCall))
|
||||
, 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));
|
||||
}
|
||||
|
||||
const QVariant result = m_onSlotExecuted(method.name(), arguments); // Execute method
|
||||
const QVariant result = executeSlot(method.name(), arguments); // Execute method
|
||||
|
||||
if (hasReturnType && result.isValid()) {
|
||||
QMetaType::construct(method.returnType(), args[0], result.constData());
|
||||
@ -92,6 +94,29 @@ bool DosQObjectImpl::executeSlot(const QMetaMethod &method, void **args, int arg
|
||||
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)
|
||||
{
|
||||
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