#ifndef PIQT_H #define PIQT_H #include "pimathvector.h" #include "pipropertystorage.h" #include "qad_types.h" #include #include #include const QVariant PI2QVariant(const PIVariant & v); const PIVariant Q2PIVariant(const QVariant & v); //inline const QString PI2QString(const PIString & v) {return QString::fromLocal8Bit(v.data());} inline const QString PI2QString(const PIString & v) {return QString::fromUtf8(v.dataUTF8());} //inline const PIString Q2PIString(const QString & v) {return PIString(v.toLocal8Bit().data());} inline const PIString Q2PIString(const QString & v) {return PIString::fromUTF8(v.toUtf8().data());} inline const QStringList PI2QStringList(const PIStringList & v) {QStringList ret; piForeachC (PIString & s, v) ret << PI2QString(s); return ret;} inline const PIStringList Q2PIStringList(const QStringList & v) {PIStringList ret; foreach (const QString & s, v) ret << Q2PIString(s); return ret;} inline const QByteArray PI2QByteArray(const PIByteArray & v) {return QByteArray((const char *)(v.data()), v.size_s());} inline const PIByteArray Q2PIByteArray(const QByteArray & v) {return PIByteArray(v.constData(), v.size());} inline const QPointF PI2QVector2(const PIMathVectorT2d & v) {return QPointF(v[0], v[1]);} inline const QVector3D PI2QVector3(const PIMathVectorT3d & v) {return QVector3D(v[0], v[1], v[2]);} inline const PIMathVectorT2d Q2PIVector2(const QPointF & v) {return createVectorT2d(double(v.x()), double(v.y()));} inline const PIMathVectorT3d Q2PIVector3(const QVector3D & v) {return createVectorT3d(double(v.x()), double(v.y()), double(v.z()));} inline const QPointF PI2QPoint(const PIPointd & v) {return QPointF(v.x, v.y);} 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 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);} inline const QDateTime PI2QDateTime(const PIDateTime & v) {return QDateTime(PI2QDate(v.date()), PI2QTime(v.time()));} inline const PIDate Q2PIDate(const QDate & v) {return PIDate(v.year(), v.month(), v.day());} inline const PITime Q2PITime(const QTime & v) {return PITime(v.hour(), v.minute(), v.second(), v.msec());} inline const PIDateTime Q2PIDateTime(const QDateTime & v) {return PIDateTime(Q2PIDate(v.date()), Q2PITime(v.time()));} 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) ret.addProperty(Q2PIString(p.name), Q2PIVariant(p.value), Q2PIString(p.comment), p.flags); return ret; } inline PropertyStorage PI2QPropertyStorage(const PIPropertyStorage & props) { PropertyStorage ret; piForeachC (PIPropertyStorage::Property & p, props) ret.addProperty(PI2QString(p.name), PI2QVariant(p.value), PI2QString(p.comment), p.flags); return ret; } 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 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; } //inline const PIVariant QString2PIVariant(const QString & v) {return PIVariant::readFromString(QString2PIString(v));} template class __PIQtConverter { public: __PIQtConverter(const From & v): val(v) {} template operator To() {return To();} From val; }; template inline __PIQtConverter __PIQtConvert(const From & f) {return __PIQtConverter(f);} #define _PIQt_CONVERT(ft, tt, ftc, tfc) \ template<> template<> inline __PIQtConverter::operator tt() {return ftc(val);} \ template<> template<> inline __PIQtConverter::operator ft() {return tfc(val);} #define _PIQt_CONVERT_S(t) _PIQt_CONVERT(PI##t, Q##t, PI2Q##t, Q2PI##t) _PIQt_CONVERT_S(String) _PIQt_CONVERT_S(ByteArray) _PIQt_CONVERT_S(Time) _PIQt_CONVERT_S(Date) _PIQt_CONVERT_S(DateTime) _PIQt_CONVERT(PIMathVectorT2d, QPointF, PI2QVector2, Q2PIVector2) _PIQt_CONVERT(PIMathVectorT3d, QVector3D, PI2QVector3, Q2PIVector3) #define piqt __PIQtConvert #define qtpi __PIQtConvert #endif // PIQT_H