91 lines
1.7 KiB
C++
Raw Normal View History

2014-07-19 18:26:08 +02:00
#include "DynamicSignal.h"
#include "DynamicQObject.h"
struct SignalData
{
QString name;
2014-08-30 18:46:34 +02:00
QList<QMetaType::Type> argumentsTypes;
2014-07-19 18:26:08 +02:00
QByteArray signature;
};
DynamicSignal::DynamicSignal()
: d(nullptr)
{
}
DynamicSignal::DynamicSignal(const QString& name, const QList<QMetaType::Type>& arguments)
: d(new SignalData())
{
d->name = name;
d->signature = QByteArray();
2014-08-30 18:46:34 +02:00
d->argumentsTypes = arguments;
2014-07-19 18:26:08 +02:00
_initSignature();
}
DynamicSignal::DynamicSignal(const DynamicSignal& signal)
{
if (signal.isValid())
{
d.reset(new SignalData());
*d = *signal.d;
}
2014-08-30 18:46:34 +02:00
else
d.reset(nullptr);
2014-07-19 18:26:08 +02:00
}
DynamicSignal& DynamicSignal::operator=(const DynamicSignal& signal)
{
if (signal.isValid())
{
d.reset(new SignalData());
*d = *signal.d;
}
else
d.reset(nullptr);
return *this;
}
DynamicSignal::~DynamicSignal()
{
}
bool DynamicSignal::isValid() const
{
return d != nullptr;
}
QString DynamicSignal::name() const
{
return isValid() ? d->name : QString();
}
QByteArray DynamicSignal::signature() const
2014-07-19 18:26:08 +02:00
{
return isValid() ? d->signature : QByteArray();
}
bool DynamicSignal::validate(const QVariantList& arguments)
{
2014-08-30 18:46:34 +02:00
return true;
2014-07-19 18:26:08 +02:00
}
bool DynamicSignal::validate(const QList<QMetaType::Type>& argumentsTypes, const QVariantList& argumentsValues)
{
return true;
}
void DynamicSignal::_initSignature()
{
QString signature("%1(%2)");
QString arguments;
2014-08-30 18:46:34 +02:00
for (int i = 0; i < d->argumentsTypes.size(); ++i)
2014-07-19 18:26:08 +02:00
{
if (i != 0)
arguments += ',';
2014-08-30 18:46:34 +02:00
arguments += QMetaType::typeName(d->argumentsTypes[i]);
2014-07-19 18:26:08 +02:00
}
d->signature = signature.arg(d->name, arguments).toUtf8();
}