diff --git a/piqt_utils/piqt_iodevice_edit.cpp b/piqt_utils/piqt_iodevice_edit.cpp index 65cedbb..0fb094f 100644 --- a/piqt_utils/piqt_iodevice_edit.cpp +++ b/piqt_utils/piqt_iodevice_edit.cpp @@ -4,6 +4,8 @@ #include #include #include +#include +#include IODeviceEdit::IODeviceEdit(QWidget * parent): QWidget(parent) { @@ -73,4 +75,18 @@ public: __IODeviceEditRegistrator__::__IODeviceEditRegistrator__() { QVariantEditorFactories::registerEditorFactory(qMetaTypeId(), new Factory()); + __QADTypesRegistrator__::instance()->toString_funcs.insert(qMetaTypeId(), &QAD_IODevice_toString); +} + + +void QAD_IODevice_toString(const QVariant & v, QString & r) { + PIVariantTypes::IODevice sd = Q2PIVariant(v).toIODevice(); +// piCout << sd; + PIIODevice * rd = PIIODevice::createFromVariant(sd); + if (rd) { + PIString ps = rd->constructFullPath(); + r = PI2QString(ps); + } else { + piCout << "error in " << sd; + } } diff --git a/piqt_utils/piqt_iodevice_edit.h b/piqt_utils/piqt_iodevice_edit.h index 95ca616..8a64e36 100644 --- a/piqt_utils/piqt_iodevice_edit.h +++ b/piqt_utils/piqt_iodevice_edit.h @@ -48,4 +48,5 @@ public: static __IODeviceEditRegistrator__ __iodeviceeditregistrator__; +void QAD_IODevice_toString(const QVariant & v, QString & r); #endif // PIQT_IODEVICE_EDIT_H diff --git a/qad/utils/qad_types.cpp b/qad/utils/qad_types.cpp index cc23f13..afaa84c 100644 --- a/qad/utils/qad_types.cpp +++ b/qad/utils/qad_types.cpp @@ -10,6 +10,16 @@ bool __QADTypesRegistrator__::_inited = false; + +__QADTypesRegistrator__::__QADTypesRegistrator__(int) { + instance()->_inited = true; +} + +__QADTypesRegistrator__ *__QADTypesRegistrator__::instance() { + static __QADTypesRegistrator__ ret; + return &ret; +} + __QADTypesRegistrator__::__QADTypesRegistrator__() { if (_inited) return; _inited = true; @@ -38,7 +48,7 @@ __QADTypesRegistrator__::__QADTypesRegistrator__() { #endif } -__QADTypesRegistrator__ __registrator__; +__QADTypesRegistrator__ __registrator__(1); int QAD::Enum::selectedValue() const { @@ -124,26 +134,36 @@ QAD::Enum & QAD::Enum::operator <<(const QStringList & v) { QString QAD::IODevice::toString() const { QString s; - s += "IODevice(" + prefix + ", "; - int rwc = 0; - if (mode & QIODevice::ReadOnly) {s += "r"; ++rwc;} - if (mode & QIODevice::WriteOnly) {s += "w"; ++rwc;} - if (rwc == 1) s += "o"; - if (options != 0) { - if (options & 1) - s += " br"; - if (options & 2) - s += " bw"; + if (__QADTypesRegistrator__::instance()->toString_funcs.contains(qMetaTypeId())) { + QVariant v; + v.setValue(*this); + (*(__QADTypesRegistrator__::instance()->toString_funcs[qMetaTypeId()]))(v, s); + return s; + } else { +// s += "IODevice(" + prefix + ", mode="; +// int rwc = 0; +// if (mode & QIODevice::ReadOnly) {s += "r"; ++rwc;} +// if (mode & QIODevice::WriteOnly) {s += "w"; ++rwc;} +// if (rwc == 1) s += "o"; +// if (options != 0) { +// s += ", flags="; +// if (options & 1) +// s += "br"; +// if (options & 2) +// if (options & 1) +// s+= "|"; +// s += "bw"; +// } +// PropertyStorage ps = props; +// foreach (const PropertyStorage::Property & p, ps) { +// QString vs = p.value.toString(); +// if (p.value.type() == QVariant::StringList) +// vs = p.value.toStringList().join(";"); +// s += ", " + p.name + "=\"" + vs + "\""; +// } +// s += ")"; + return s; } - PropertyStorage ps = props; - foreach (const PropertyStorage::Property & p, ps) { - QString vs = p.value.toString(); - if (p.value.type() == QVariant::StringList) - vs = p.value.toStringList().join(";"); - s += ", " + p.name + "=\"" + vs + "\""; - } - s += ")"; - return s; } diff --git a/qad/utils/qad_types.h b/qad/utils/qad_types.h index 761315a..aade459 100644 --- a/qad/utils/qad_types.h +++ b/qad/utils/qad_types.h @@ -89,6 +89,10 @@ inline QDebug operator <<(QDebug s, const QAD::IODevice & v) {s.nospace() << v.t class __QADTypesRegistrator__ { public: + __QADTypesRegistrator__(int); + static __QADTypesRegistrator__ * instance(); + QMap toString_funcs; +private: __QADTypesRegistrator__(); static bool _inited; };