git-svn-id: svn://db.shs.com.ru/libs@500 a8b55f48-bf90-11e4-a774-851b48703e85

This commit is contained in:
2019-02-27 11:29:26 +00:00
parent 3ebeac0579
commit 6c579b169b
4 changed files with 101 additions and 16 deletions

View File

@@ -81,3 +81,39 @@ const PIVariant Q2PIVariant(const QVariant & v) {
if (v.canConvert<QAD::IODevice>()) return PIVariant(QAD2PIIODevice(v.value<QAD::IODevice>()));
return PIVariant();
}
const PIVariantTypes::IODevice QAD2PIIODevice(const QAD::IODevice & v) {
PIVariantTypes::IODevice d;
d.set(Q2PIPropertyStorage(v.props));
d.prefix = Q2PIString(v.prefix);
d.mode = v.mode;
d.options = v.options;
return d;
}
const QAD::IODevice PI2QADIODevice(const PIVariantTypes::IODevice & v) {
return QAD::IODevice(PI2QString(v.prefix), PI2QPropertyStorage(v.get()), v.mode, v.options);
}
const QAD::File PI2QADFile(const PIVariantTypes::File & v) {
return QAD::File(PI2QString(v.file), PI2QString(v.filter), v.is_abs);
}
const QAD::Dir PI2QADDir(const PIVariantTypes::Dir & v) {
return QAD::Dir(PI2QString(v.dir), v.is_abs);
}
const PIVariantTypes::File QAD2PIFile(const QAD::File & v) {
return PIVariantTypes::File(Q2PIString(v.file), Q2PIString(v.filter), v.is_abs);
}
const PIVariantTypes::Dir QAD2PIDir(const QAD::Dir & v) {
return PIVariantTypes::Dir(Q2PIString(v.dir), v.is_abs);
}

View File

@@ -1,7 +1,7 @@
#ifndef PIQT_H
#define PIQT_H
#include "pimathvector.h"
#include "pimathmatrix.h"
#include "pipropertystorage.h"
#include "qad_types.h"
#include <QVector3D>
@@ -41,6 +41,35 @@ inline const PIPointd Q2PIPoint(const QPointF & v) {return PIPointd(v.x(), v.y()
inline const QRectF PI2QRect(const PIRectd & v) {return QRectF(v.x0, v.y0, v.width(), v.height());}
inline const PIRectd Q2PIRect(const QRectF & v) {return PIRectd(v.x(), v.y(), v.width(), v.height());}
inline const QAD::MathVector PI2QMathVector(const PIMathVectord & v) {
QVector<double> q = QVector<double>(v.size());
memcpy(q.data(), v.data(), q.size()*sizeof(double));
return QAD::MathVector(q);
}
inline const PIMathVectord Q2PIMathVector(const QAD::MathVector & v) {
PIMathVectord p = PIMathVectord(v.v.size());
memcpy(p.data(), v.v.data(), p.size()*sizeof(double));
return p;
}
inline const QAD::MathMatrix PI2QMathMatrix(const PIMathMatrixd & v) {
PIVector<PIVector<double> > p = v.toVectors();
QVector<QVector<double> > q = QVector<QVector<double> >(p.size());
for (int i = 0; i < q.size(); ++i) {
q[i].resize(p[i].size());
memcpy(q[i].data(), p[i].data(), q[i].size()*sizeof(double));
}
return QAD::MathMatrix(q);
}
inline const PIMathMatrixd Q2PIMathMatrix(const QAD::MathMatrix & v) {
PIVector<PIVector<double> > p = PIVector<PIVector<double> >(v.m.size());
for (int i = 0; i < v.m.size(); ++i) {
p[i].resize(v.m[i].size());
memcpy(p[i].data(), v.m[i].data(), p[i].size()*sizeof(double));
}
return PIMathMatrixd(p);
}
inline const QDate PI2QDate(const PIDate & v) {return QDate(v.year, v.month, v.day);}
inline const QTime PI2QTime(const PITime & v) {return QTime(v.hours, v.minutes, v.seconds, v.milliseconds);}
@@ -54,6 +83,7 @@ inline const PIDateTime Q2PIDateTime(const QDateTime & v) {return PIDateTime(Q2P
inline const QColor PI2QColor(const PIVariantTypes::Color & v) {return QColor::fromRgba(v.rgba);}
inline const PIVariantTypes::Color Q2PIColor(const QColor & v) {return PIVariantTypes::Color(v.rgba());}
inline PIPropertyStorage Q2PIPropertyStorage(const PropertyStorage & props) {
PIPropertyStorage ret;
foreach (const PropertyStorage::Property & p, props)
@@ -70,22 +100,13 @@ inline PropertyStorage PI2QPropertyStorage(const PIPropertyStorage & props) {
const QAD::Enum PI2QADEnum(const PIVariantTypes::Enum & el);
inline const QAD::File PI2QADFile(const PIVariantTypes::File & v) {return QAD::File(PI2QString(v.file), PI2QString(v.filter), v.is_abs);}
inline const QAD::Dir PI2QADDir(const PIVariantTypes::Dir & v) {return QAD::Dir(PI2QString(v.dir), v.is_abs);}
inline const QAD::IODevice PI2QADIODevice(const PIVariantTypes::IODevice & v) {
return QAD::IODevice(PI2QString(v.prefix), PI2QPropertyStorage(v.get()), v.mode, v.options);
}
const QAD::File PI2QADFile(const PIVariantTypes::File & v);
const QAD::Dir PI2QADDir(const PIVariantTypes::Dir & v);
const QAD::IODevice PI2QADIODevice(const PIVariantTypes::IODevice & v);
const PIVariantTypes::Enum QAD2PIEnum(const QAD::Enum & el);
inline const PIVariantTypes::File QAD2PIFile(const QAD::File & v) {return PIVariantTypes::File(Q2PIString(v.file), Q2PIString(v.filter), v.is_abs);}
inline const PIVariantTypes::Dir QAD2PIDir(const QAD::Dir & v) {return PIVariantTypes::Dir(Q2PIString(v.dir), v.is_abs);}
inline const PIVariantTypes::IODevice QAD2PIIODevice(const QAD::IODevice & v) {
PIVariantTypes::IODevice d;
d.set(Q2PIPropertyStorage(v.props));
d.prefix = Q2PIString(v.prefix);
d.mode = v.mode;
d.options = v.options;
return d;
}
const PIVariantTypes::File QAD2PIFile(const QAD::File & v);
const PIVariantTypes::Dir QAD2PIDir(const QAD::Dir & v);
const PIVariantTypes::IODevice QAD2PIIODevice(const QAD::IODevice & v);
//inline const PIVariant QString2PIVariant(const QString & v) {return PIVariant::readFromString(QString2PIString(v));}

View File

@@ -39,6 +39,12 @@ __QADTypesRegistrator__::__QADTypesRegistrator__() {
qRegisterMetaType<QAD::IODevice>("QAD::IODevice");
qRegisterMetaTypeStreamOperators<QAD::IODevice>("QAD::IODevice");
qRegisterMetaType<QAD::MathVector>("QAD::MathVector");
qRegisterMetaTypeStreamOperators<QAD::MathVector>("QAD::MathVector");
qRegisterMetaType<QAD::MathMatrix>("QAD::MathMatrix");
qRegisterMetaTypeStreamOperators<QAD::MathMatrix>("QAD::MathMatrix");
#if QT_VERSION >= 0x050200
QMetaType::registerConverter<QAD::Enum, int>(&QAD::Enum::selectedValue);
QMetaType::registerConverter<QAD::Enum, QString>(&QAD::Enum::selectedName);
@@ -185,6 +191,8 @@ QVariant::Type typeFromLetter(const QString & l) {
if (ft == "F") return (QVariant::Type)qMetaTypeId<QAD::File>();
if (ft == "D") return (QVariant::Type)qMetaTypeId<QAD::Dir>();
if (ft == "d") return (QVariant::Type)qMetaTypeId<QAD::IODevice>();
if (ft == "V") return (QVariant::Type)qMetaTypeId<QAD::MathVector>();
if (ft == "M") return (QVariant::Type)qMetaTypeId<QAD::MathMatrix>();
return QVariant::String;
}

View File

@@ -59,6 +59,16 @@ namespace QAD {
PropertyStorage props;
};
struct MathVector {
MathVector(const QVector<double> & vec = QVector<double>()) {v = vec;}
QVector<double> v;
};
struct MathMatrix {
MathMatrix(const QVector<QVector<double> > & mat = QVector<QVector<double> > ()) {m = mat;}
QVector<QVector<double> > m; // [Row][Column]
};
}
Q_DECLARE_METATYPE(QAD::Enumerator)
@@ -86,6 +96,16 @@ inline QDataStream & operator <<(QDataStream & s, const QAD::IODevice & v) {s <<
inline QDataStream & operator >>(QDataStream & s, QAD::IODevice & v) {s >> v.prefix >> v.mode >> v.options >> v.props; return s;}
inline QDebug operator <<(QDebug s, const QAD::IODevice & v) {s.nospace() << v.toString(); return s.space();}
Q_DECLARE_METATYPE(QAD::MathVector)
inline QDataStream & operator <<(QDataStream & s, const QAD::MathVector & v) {s << v.v; return s;}
inline QDataStream & operator >>(QDataStream & s, QAD::MathVector & v) {s >> v.v; return s;}
inline QDebug operator <<(QDebug s, const QAD::MathVector & v) {s.nospace() << "Vector " << v.v; return s.space();}
Q_DECLARE_METATYPE(QAD::MathMatrix)
inline QDataStream & operator <<(QDataStream & s, const QAD::MathMatrix & v) {s << v.m; return s;}
inline QDataStream & operator >>(QDataStream & s, QAD::MathMatrix & v) {s >> v.m; return s;}
inline QDebug operator <<(QDebug s, const QAD::MathMatrix & v) {s.nospace() << "Matrix " << v.m; return s.space();}
class __QADTypesRegistrator__ {
public: