diff options
author | Chris Adams <christopher.adams@nokia.com> | 2010-07-23 15:07:17 +1000 |
---|---|---|
committer | Chris Adams <christopher.adams@nokia.com> | 2010-07-23 15:07:17 +1000 |
commit | cc358f606d87a7e78e95873d33ed06a3df6a667d (patch) | |
tree | a2a45731deb104838ca35b38817bf2f9e0012a20 | |
parent | 64d745c48ded47820c0b4ea75ab7a880e48e0368 (diff) |
Add datastream operators to organizer module
This commit is based off commits to contacts module, in particular:
7015714ac77179e051033395ff0cc88fb0f99452,
4a39ce6c251183a3eed6a537d951a567bf2b27a2,
d6e93229f98fe1022c0cb3866e11a9265d8550de,
1393121f1e5043c56714b967d23e20602cf78980 and
7bdf5ad0c69f852bae1973d8b500d7e4c96df268.
25 files changed, 510 insertions, 2 deletions
diff --git a/src/organizer/filters/qorganizeritemchangelogfilter_p.h b/src/organizer/filters/qorganizeritemchangelogfilter_p.h index f7acdd3774..c3fd135244 100644 --- a/src/organizer/filters/qorganizeritemchangelogfilter_p.h +++ b/src/organizer/filters/qorganizeritemchangelogfilter_p.h @@ -88,6 +88,24 @@ public: return true; } + QDataStream& outputToStream(QDataStream& stream, quint8 formatVersion) const + { + if (formatVersion == 1) { + stream << static_cast<quint32>(m_eventType) << m_since; + } + return stream; + } + + QDataStream& inputFromStream(QDataStream& stream, quint8 formatVersion) + { + if (formatVersion == 1) { + quint32 eventType; + stream >> eventType >> m_since; + m_eventType = static_cast<QOrganizerItemChangeLogFilter::EventType>(eventType); + } + return stream; + } + Q_IMPLEMENT_ORGANIZERITEMFILTER_VIRTUALCTORS(QOrganizerItemChangeLogFilter, QOrganizerItemFilter::ChangeLogFilter) QOrganizerItemChangeLogFilter::EventType m_eventType; diff --git a/src/organizer/filters/qorganizeritemdatetimeperiodfilter_p.h b/src/organizer/filters/qorganizeritemdatetimeperiodfilter_p.h index 418d02a439..dc8beb944f 100644 --- a/src/organizer/filters/qorganizeritemdatetimeperiodfilter_p.h +++ b/src/organizer/filters/qorganizeritemdatetimeperiodfilter_p.h @@ -88,6 +88,22 @@ public: return true; } + QDataStream& outputToStream(QDataStream& stream, quint8 formatVersion) const + { + if (formatVersion == 1) { + stream << m_start << m_end; + } + return stream; + } + + QDataStream& inputFromStream(QDataStream& stream, quint8 formatVersion) + { + if (formatVersion == 1) { + stream >> m_start >> m_end; + } + return stream; + } + Q_IMPLEMENT_ORGANIZERITEMFILTER_VIRTUALCTORS(QOrganizerItemDateTimePeriodFilter, QOrganizerItemFilter::OrganizerItemDateTimePeriodFilter) QDateTime m_start; diff --git a/src/organizer/filters/qorganizeritemdetailfilter_p.h b/src/organizer/filters/qorganizeritemdetailfilter_p.h index 7c0e2053c9..ad3e230443 100644 --- a/src/organizer/filters/qorganizeritemdetailfilter_p.h +++ b/src/organizer/filters/qorganizeritemdetailfilter_p.h @@ -93,6 +93,25 @@ public: return true; } + QDataStream& outputToStream(QDataStream& stream, quint8 formatVersion) const + { + if (formatVersion == 1) { + stream << m_defId << m_fieldId << m_exactValue << static_cast<quint32>(m_flags); + } + return stream; + } + + QDataStream& inputFromStream(QDataStream& stream, quint8 formatVersion) + { + if (formatVersion == 1) { + quint32 flags; + stream >> m_defId >> m_fieldId >> m_exactValue >> flags; + m_flags = static_cast<QOrganizerItemFilter::MatchFlags>(flags); + } + return stream; + } + + Q_IMPLEMENT_ORGANIZERITEMFILTER_VIRTUALCTORS(QOrganizerItemDetailFilter, QOrganizerItemFilter::OrganizerItemDetailFilter) QString m_defId; diff --git a/src/organizer/filters/qorganizeritemdetailrangefilter_p.h b/src/organizer/filters/qorganizeritemdetailrangefilter_p.h index 63a8291585..ec6dfca465 100644 --- a/src/organizer/filters/qorganizeritemdetailrangefilter_p.h +++ b/src/organizer/filters/qorganizeritemdetailrangefilter_p.h @@ -102,6 +102,28 @@ public: return true; } + QDataStream& outputToStream(QDataStream& stream, quint8 formatVersion) const + { + if (formatVersion == 1) { + stream << m_defId << m_fieldId << m_minValue << m_maxValue + << static_cast<quint32>(m_flags) + << static_cast<quint32>(m_rangeflags); + } + return stream; + } + + QDataStream& inputFromStream(QDataStream& stream, quint8 formatVersion) + { + if (formatVersion == 1) { + quint32 flags; + quint32 rangeFlags; + stream >> m_defId >> m_fieldId >> m_minValue >> m_maxValue >> flags >> rangeFlags; + m_flags = static_cast<QOrganizerItemFilter::MatchFlags>(flags); + m_rangeflags = static_cast<QOrganizerItemDetailRangeFilter::RangeFlags>(rangeFlags); + } + return stream; + } + Q_IMPLEMENT_ORGANIZERITEMFILTER_VIRTUALCTORS(QOrganizerItemDetailRangeFilter, QOrganizerItemFilter::OrganizerItemDetailRangeFilter) QString m_defId; diff --git a/src/organizer/filters/qorganizeritemintersectionfilter_p.h b/src/organizer/filters/qorganizeritemintersectionfilter_p.h index ddc55e9f3b..0fa214f045 100644 --- a/src/organizer/filters/qorganizeritemintersectionfilter_p.h +++ b/src/organizer/filters/qorganizeritemintersectionfilter_p.h @@ -84,6 +84,22 @@ public: return true; } + QDataStream& outputToStream(QDataStream& stream, quint8 formatVersion) const + { + if (formatVersion == 1) { + stream << m_filters; + } + return stream; + } + + QDataStream& inputFromStream(QDataStream& stream, quint8 formatVersion) + { + if (formatVersion == 1) { + stream >> m_filters; + } + return stream; + } + Q_IMPLEMENT_ORGANIZERITEMFILTER_VIRTUALCTORS(QOrganizerItemIntersectionFilter, QOrganizerItemFilter::IntersectionFilter) QList<QOrganizerItemFilter> m_filters; diff --git a/src/organizer/filters/qorganizeriteminvalidfilter.cpp b/src/organizer/filters/qorganizeriteminvalidfilter.cpp index 0f51e672b7..409c836d2b 100644 --- a/src/organizer/filters/qorganizeriteminvalidfilter.cpp +++ b/src/organizer/filters/qorganizeriteminvalidfilter.cpp @@ -66,6 +66,18 @@ public: return true; // all invalid filters are alike } + QDataStream& outputToStream(QDataStream& stream, quint8 formatVersion) const + { + Q_UNUSED(formatVersion) + return stream; + } + + QDataStream& inputFromStream(QDataStream& stream, quint8 formatVersion) + { + Q_UNUSED(formatVersion) + return stream; + } + /* There is no way this can be called - d is never detached */ QOrganizerItemFilterPrivate* clone() const { diff --git a/src/organizer/filters/qorganizeritemlocalidfilter_p.h b/src/organizer/filters/qorganizeritemlocalidfilter_p.h index aba81cc8c9..b4ad0a5ceb 100644 --- a/src/organizer/filters/qorganizeritemlocalidfilter_p.h +++ b/src/organizer/filters/qorganizeritemlocalidfilter_p.h @@ -83,6 +83,22 @@ public: return true; } + QDataStream& outputToStream(QDataStream& stream, quint8 formatVersion) const + { + if (formatVersion == 1) { + stream << m_ids; + } + return stream; + } + + QDataStream& inputFromStream(QDataStream& stream, quint8 formatVersion) + { + if (formatVersion == 1) { + stream >> m_ids; + } + return stream; + } + Q_IMPLEMENT_ORGANIZERITEMFILTER_VIRTUALCTORS(QOrganizerItemLocalIdFilter, QOrganizerItemFilter::LocalIdFilter) QList<QOrganizerItemLocalId> m_ids; diff --git a/src/organizer/filters/qorganizeritemunionfilter_p.h b/src/organizer/filters/qorganizeritemunionfilter_p.h index d7b80a422d..62f7f07bef 100644 --- a/src/organizer/filters/qorganizeritemunionfilter_p.h +++ b/src/organizer/filters/qorganizeritemunionfilter_p.h @@ -84,6 +84,22 @@ public: return true; } + QDataStream& outputToStream(QDataStream& stream, quint8 formatVersion) const + { + if (formatVersion == 1) { + stream << m_filters; + } + return stream; + } + + QDataStream& inputFromStream(QDataStream& stream, quint8 formatVersion) + { + if (formatVersion == 1) { + stream >> m_filters; + } + return stream; + } + Q_IMPLEMENT_ORGANIZERITEMFILTER_VIRTUALCTORS(QOrganizerItemUnionFilter, QOrganizerItemFilter::UnionFilter) QList<QOrganizerItemFilter> m_filters; diff --git a/src/organizer/qorganizeritem.cpp b/src/organizer/qorganizeritem.cpp index 1488a0c10d..968de224a3 100644 --- a/src/organizer/qorganizeritem.cpp +++ b/src/organizer/qorganizeritem.cpp @@ -41,9 +41,9 @@ #include "qorganizeritem.h" - #include <QSet> #include <QDebug> +#include <QDataStream> #include "qorganizeritem.h" #include "qorganizeritem_p.h" @@ -631,6 +631,7 @@ uint qHash(const QOrganizerItem &key) return hash; } +#ifndef QT_NO_DEBUG_STREAM QDebug operator<<(QDebug dbg, const QOrganizerItem& organizeritem) { dbg.nospace() << "QOrganizerItem(" << organizeritem.id() << ")"; @@ -639,6 +640,38 @@ QDebug operator<<(QDebug dbg, const QOrganizerItem& organizeritem) } return dbg.maybeSpace(); } +#endif + +#ifndef QT_NO_DATASTREAM +/*! + * Writes \a item to the stream \a out. + */ +QDataStream& operator<<(QDataStream& out, const QOrganizerItem& item) +{ + quint8 formatVersion = 1; // Version of QDataStream format for QOrganizerItem + return out << formatVersion << item.id() << item.details(); +} + +/*! + * Reads an item from stream \a in into \a item. + */ +QDataStream& operator>>(QDataStream& in, QOrganizerItem& item) +{ + quint8 formatVersion; + in >> formatVersion; + if (formatVersion == 1) { + item = QOrganizerItem(); + QOrganizerItemId id; + QList<QOrganizerItemDetail> details; + in >> id >> details; + item.setId(id); + item.d->m_details = details; + } else { + in.setStatus(QDataStream::ReadCorruptData); + } + return in; +} +#endif /*! * Returns the type of the organizer item. Every organizer item has exactly one type which diff --git a/src/organizer/qorganizeritem.h b/src/organizer/qorganizeritem.h index 4c520a8365..a986602268 100644 --- a/src/organizer/qorganizeritem.h +++ b/src/organizer/qorganizeritem.h @@ -56,12 +56,21 @@ #include "qorganizeritemdisplaylabel.h" #include "qorganizeritemdescription.h" +class QDataStream; + QTM_BEGIN_NAMESPACE class QOrganizerItemManager; class QOrganizerItemData; class QOrganizerItemName; +// MSVC needs the function declared before the friend declaration +class QOrganizerItem; +#ifndef QT_NO_DATASTREAM +Q_ORGANIZER_EXPORT QDataStream& operator<<(QDataStream& out, const QOrganizerItem& item); +Q_ORGANIZER_EXPORT QDataStream& operator>>(QDataStream& in, QOrganizerItem& item); +#endif + class Q_ORGANIZER_EXPORT QOrganizerItem { public: @@ -185,6 +194,8 @@ protected: friend class QOrganizerItemManager; friend class QOrganizerItemManagerData; friend class QOrganizerItemManagerEngine; + friend QDataStream& operator<<(QDataStream& out, const QOrganizerItem& item); + friend QDataStream& operator>>(QDataStream& in, QOrganizerItem& item); QSharedDataPointer<QOrganizerItemData> d; }; diff --git a/src/organizer/qorganizeritemdetail.cpp b/src/organizer/qorganizeritemdetail.cpp index b70ad4b343..ffb90da297 100644 --- a/src/organizer/qorganizeritemdetail.cpp +++ b/src/organizer/qorganizeritemdetail.cpp @@ -43,6 +43,7 @@ #include "qorganizeritemdetail_p.h" #include "qorganizeritemmanager.h" #include <QDebug> +#include <QDataStream> QTM_BEGIN_NAMESPACE @@ -368,6 +369,48 @@ QDebug operator<<(QDebug dbg, const QOrganizerItemDetail& detail) } #endif +#ifndef QT_NO_DATASTREAM +/*! + * Writes \a detail to the stream \a out. + */ +QDataStream& operator<<(QDataStream& out, const QOrganizerItemDetail& detail) +{ + quint8 formatVersion = 1; // Version of QDataStream format for QOrganizerItemDetail + return out << formatVersion + << detail.definitionName() + << static_cast<quint32>(detail.accessConstraints()) + << detail.variantValues(); +} + +/*! + * Reads aan organizer item detail from stream \a in into \a detail. + */ +QDataStream& operator>>(QDataStream& in, QOrganizerItemDetail& detail) +{ + quint8 formatVersion; + in >> formatVersion; + if (formatVersion == 1) { + QString definitionName; + quint32 accessConstraintsInt; + QVariantMap values; + in >> definitionName >> accessConstraintsInt >> values; + + detail = QOrganizerItemDetail(definitionName); + QOrganizerItemDetail::AccessConstraints accessConstraints(accessConstraintsInt); + detail.d->m_access = accessConstraints; + + QMapIterator<QString, QVariant> it(values); + while (it.hasNext()) { + it.next(); + detail.setValue(it.key(), it.value()); + } + } else { + in.setStatus(QDataStream::ReadCorruptData); + } + return in; +} +#endif + /*! Returns true if no values are contained in this detail. Note that context is stored as a value; hence, if a context is set, this function will return false. */ diff --git a/src/organizer/qorganizeritemdetail.h b/src/organizer/qorganizeritemdetail.h index 1c8eb46436..50643a75dc 100644 --- a/src/organizer/qorganizeritemdetail.h +++ b/src/organizer/qorganizeritemdetail.h @@ -49,9 +49,19 @@ #include <QStringList> #include <QVariant> +class QDataStream; + QTM_BEGIN_NAMESPACE class QOrganizerItemDetailPrivate; + +// MSVC needs the function declared before the friend declaration +class QOrganizerItemDetail; +#ifndef QT_NO_DATASTREAM +Q_ORGANIZER_EXPORT QDataStream& operator<<(QDataStream& out, const QOrganizerItemDetail& detail); +Q_ORGANIZER_EXPORT QDataStream& operator>>(QDataStream& in, QOrganizerItemDetail& detail); +#endif + class Q_ORGANIZER_EXPORT QOrganizerItemDetail { public: @@ -146,6 +156,9 @@ protected: private: friend class QOrganizerItem; friend class QOrganizerItemDetailPrivate; +#ifndef QT_NO_DATASTREAM + friend QDataStream& operator>>(QDataStream& in, QOrganizerItemDetail& detail); +#endif QSharedDataPointer<QOrganizerItemDetailPrivate> d; }; diff --git a/src/organizer/qorganizeritemdetaildefinition.cpp b/src/organizer/qorganizeritemdetaildefinition.cpp index 74cb2e8e90..ffec57333d 100644 --- a/src/organizer/qorganizeritemdetaildefinition.cpp +++ b/src/organizer/qorganizeritemdetaildefinition.cpp @@ -107,6 +107,41 @@ bool QOrganizerItemDetailDefinition::isEmpty() const return true; } +#ifndef QT_NO_DATASTREAM +/*! + * Writes \a definition to the stream \a out. + */ +QDataStream& operator<<(QDataStream& out, const QOrganizerItemDetailDefinition& definition) +{ + quint8 formatVersion = 1; // Version of QDataStream format for QOrganizerItemDetailDefinition + return out << formatVersion + << definition.name() + << definition.isUnique() + << definition.fields(); +} + +/*! + * Reads a detail definition from stream \a in into \a definition. + */ +QDataStream& operator>>(QDataStream& in, QOrganizerItemDetailDefinition& definition) +{ + quint8 formatVersion; + in >> formatVersion; + if (formatVersion == 1) { + QString name; + bool unique; + QMap<QString, QOrganizerItemDetailFieldDefinition> fields; + in >> name >> unique >> fields; + definition.setName(name); + definition.setUnique(unique); + definition.setFields(fields); + } else { + in.setStatus(QDataStream::ReadCorruptData); + } + return in; +} +#endif + /*! Sets the unique identifier of this detail type to \a definitionName. */ void QOrganizerItemDetailDefinition::setName(const QString& definitionName) { diff --git a/src/organizer/qorganizeritemdetaildefinition.h b/src/organizer/qorganizeritemdetaildefinition.h index 1b8a6c25d6..931cac5b49 100644 --- a/src/organizer/qorganizeritemdetaildefinition.h +++ b/src/organizer/qorganizeritemdetaildefinition.h @@ -51,6 +51,8 @@ #include "qtorganizerglobal.h" #include "qorganizeritemdetailfielddefinition.h" +class QDataStream; + QTM_BEGIN_NAMESPACE class QOrganizerItemDetailDefinitionData; @@ -92,6 +94,11 @@ private: QSharedDataPointer<QOrganizerItemDetailDefinitionData> d; }; +#ifndef QT_NO_DATASTREAM +Q_ORGANIZER_EXPORT QDataStream& operator<<(QDataStream& out, const QOrganizerItemDetailDefinition& definition); +Q_ORGANIZER_EXPORT QDataStream& operator>>(QDataStream& in, QOrganizerItemDetailDefinition& definition); +#endif + QTM_END_NAMESPACE Q_DECLARE_TYPEINFO(QTM_PREPEND_NAMESPACE(QOrganizerItemDetailDefinition), Q_MOVABLE_TYPE); diff --git a/src/organizer/qorganizeritemdetailfielddefinition.cpp b/src/organizer/qorganizeritemdetailfielddefinition.cpp index 5ca4811480..27c74faf41 100644 --- a/src/organizer/qorganizeritemdetailfielddefinition.cpp +++ b/src/organizer/qorganizeritemdetailfielddefinition.cpp @@ -138,4 +138,34 @@ bool QOrganizerItemDetailFieldDefinition::operator!=(const QOrganizerItemDetailF return !(*this == other); } +#ifndef QT_NO_DATASTREAM +/*! + * Writes the detail field definition \a definition to the stream \a out. + */ +QDataStream& operator<<(QDataStream& out, const QOrganizerItemDetailFieldDefinition& definition) +{ + quint8 formatVersion = 1; // Version of QDataStream format for QOrganizerItemDetailFieldDefinition + return out << formatVersion << static_cast<quint32>(definition.dataType()) << definition.allowableValues(); +} + +/*! + * Reads a detail field definition from stream \a in into \a definition. + */ +QDataStream& operator>>(QDataStream& in, QOrganizerItemDetailFieldDefinition& definition) +{ + quint8 formatVersion; + in >> formatVersion; + if (formatVersion == 1) { + quint32 dataType; + QVariantList allowableValues; + in >> dataType >> allowableValues; + definition.setDataType(QVariant::Type(dataType)); + definition.setAllowableValues(allowableValues); + } else { + in.setStatus(QDataStream::ReadCorruptData); + } + return in; +} +#endif + QTM_END_NAMESPACE diff --git a/src/organizer/qorganizeritemdetailfielddefinition.h b/src/organizer/qorganizeritemdetailfielddefinition.h index 605ea4cacb..e1adb915b0 100644 --- a/src/organizer/qorganizeritemdetailfielddefinition.h +++ b/src/organizer/qorganizeritemdetailfielddefinition.h @@ -48,6 +48,8 @@ #include "qtorganizerglobal.h" +class QDataStream; + QTM_BEGIN_NAMESPACE class QOrganizerItemDetailFieldDefinitionPrivate; @@ -73,6 +75,11 @@ private: QSharedDataPointer<QOrganizerItemDetailFieldDefinitionPrivate> d; }; +#ifndef QT_NO_DATASTREAM +Q_ORGANIZER_EXPORT QDataStream& operator<<(QDataStream& out, const QOrganizerItemDetailFieldDefinition& definition); +Q_ORGANIZER_EXPORT QDataStream& operator>>(QDataStream& in, QOrganizerItemDetailFieldDefinition& definition); +#endif + QTM_END_NAMESPACE Q_DECLARE_TYPEINFO(QTM_PREPEND_NAMESPACE(QOrganizerItemDetailFieldDefinition), Q_MOVABLE_TYPE); diff --git a/src/organizer/qorganizeritemfetchhint.cpp b/src/organizer/qorganizeritemfetchhint.cpp index 585acbefbc..ee66007e3a 100644 --- a/src/organizer/qorganizeritemfetchhint.cpp +++ b/src/organizer/qorganizeritemfetchhint.cpp @@ -168,4 +168,31 @@ void QOrganizerItemFetchHint::setOptimizationHints(OptimizationHints hints) d->m_optimizationHints = hints; } +#ifndef QT_NO_DATASTREAM +QDataStream& operator<<(QDataStream& out, const QOrganizerItemFetchHint& hint) +{ + quint8 formatVersion = 1; // Version of QDataStream format for QOrganizerItemFetchHint + return out << formatVersion + << hint.detailDefinitionsHint() + << static_cast<quint32>(hint.optimizationHints()); +} + +QDataStream& operator>>(QDataStream& in, QOrganizerItemFetchHint& hint) +{ + quint8 formatVersion; + in >> formatVersion; + if (formatVersion == 1) { + QStringList detailDefinitionHints; + quint32 optimizations; + in >> detailDefinitionHints >> optimizations; + hint.setDetailDefinitionsHint(detailDefinitionHints); + hint.setOptimizationHints(static_cast<QOrganizerItemFetchHint::OptimizationHints>(optimizations)); + } else { + in.setStatus(QDataStream::ReadCorruptData); + } + return in; +} +#endif + + QTM_END_NAMESPACE diff --git a/src/organizer/qorganizeritemfetchhint.h b/src/organizer/qorganizeritemfetchhint.h index 5d8055dc5d..bc3cc5bbc6 100644 --- a/src/organizer/qorganizeritemfetchhint.h +++ b/src/organizer/qorganizeritemfetchhint.h @@ -49,6 +49,8 @@ #include "qtorganizerglobal.h" #include "qorganizeritemdetaildefinition.h" +class QDataStream; + QTM_BEGIN_NAMESPACE class QOrganizerItemFetchHintPrivate; @@ -77,6 +79,11 @@ private: QSharedDataPointer<QOrganizerItemFetchHintPrivate> d; }; +#ifndef QT_NO_DATASTREAM +Q_ORGANIZER_EXPORT QDataStream& operator<<(QDataStream& out, const QOrganizerItemFetchHint& hint); +Q_ORGANIZER_EXPORT QDataStream& operator>>(QDataStream& in, QOrganizerItemFetchHint& hint); +#endif + QTM_END_NAMESPACE #endif diff --git a/src/organizer/qorganizeritemfilter.cpp b/src/organizer/qorganizeritemfilter.cpp index 886656b01f..c65aafa51a 100644 --- a/src/organizer/qorganizeritemfilter.cpp +++ b/src/organizer/qorganizeritemfilter.cpp @@ -41,6 +41,7 @@ #include "qorganizeritemfilter.h" #include "qorganizeritemfilter_p.h" +#include "qorganizeritemfilters.h" #include "qorganizeritemintersectionfilter.h" #include "qorganizeritemunionfilter.h" @@ -152,6 +153,70 @@ bool QOrganizerItemFilter::operator==(const QOrganizerItemFilter& other) const return d_ptr->compare(other.d_ptr); } +#ifndef QT_NO_DATASTREAM +/*! + * Writes \a filter to the stream \a out. + */ +QDataStream& operator<<(QDataStream& out, const QOrganizerItemFilter& filter) +{ + quint8 formatVersion = 1; // Version of QDataStream format for QOrganizerItemDetailFilter + out << formatVersion << static_cast<quint32>(filter.type()); + if (filter.d_ptr) + filter.d_ptr->outputToStream(out, formatVersion); + return out; +} + +/*! + * Reads an organizer item filter from stream \a in into \a filter. + */ +QDataStream& operator>>(QDataStream& in, QOrganizerItemFilter& filter) +{ + quint8 formatVersion; + in >> formatVersion; + if (formatVersion == 1) { + quint32 type; + in >> type; + switch (type) { + case QOrganizerItemFilter::InvalidFilter: + filter = QOrganizerItemInvalidFilter(); + break; + case QOrganizerItemFilter::OrganizerItemDetailFilter: + filter = QOrganizerItemDetailFilter(); + break; + case QOrganizerItemFilter::OrganizerItemDetailRangeFilter: + filter = QOrganizerItemDetailRangeFilter(); + break; + case QOrganizerItemFilter::ChangeLogFilter: + filter = QOrganizerItemChangeLogFilter(); + break; + case QOrganizerItemFilter::IntersectionFilter: + filter = QOrganizerItemIntersectionFilter(); + break; + case QOrganizerItemFilter::UnionFilter: + filter = QOrganizerItemUnionFilter(); + break; + case QOrganizerItemFilter::LocalIdFilter: + filter = QOrganizerItemLocalIdFilter(); + break; + case QOrganizerItemFilter::OrganizerItemDateTimePeriodFilter: + filter = QOrganizerItemDateTimePeriodFilter(); + break; + case QOrganizerItemFilter::DefaultFilter: + filter = QOrganizerItemFilter(); + break; + } + + if (filter.d_ptr) { + filter.d_ptr->inputFromStream(in, formatVersion); + } + } else { + in.setStatus(QDataStream::ReadCorruptData); + } + return in; +} +#endif + + /*! \internal Constructs a new filter from the given data pointer \a d diff --git a/src/organizer/qorganizeritemfilter.h b/src/organizer/qorganizeritemfilter.h index a57a541c54..ea5d1f0c3a 100644 --- a/src/organizer/qorganizeritemfilter.h +++ b/src/organizer/qorganizeritemfilter.h @@ -49,6 +49,8 @@ #include "qtorganizerglobal.h" +class QDataStream; + QTM_BEGIN_NAMESPACE /* Manual Q_DECLARE_ORGANIZERITEMFILTER_PRIVATE macro */ @@ -59,6 +61,14 @@ QTM_BEGIN_NAMESPACE friend class Class##Private; class QOrganizerItemFilterPrivate; + +// MSVC needs the function declared before the friend declaration +class QOrganizerItemFilter; +#ifndef QT_NO_DATASTREAM +Q_ORGANIZER_EXPORT QDataStream& operator<<(QDataStream& out, const QOrganizerItemFilter& filter); +Q_ORGANIZER_EXPORT QDataStream& operator>>(QDataStream& in, QOrganizerItemFilter& filter); +#endif + class Q_ORGANIZER_EXPORT QOrganizerItemFilter { public: @@ -101,6 +111,10 @@ protected: protected: friend class QOrganizerItemFilterPrivate; +#ifndef QT_NO_DATASTREAM + friend QDataStream& operator<<(QDataStream& out, const QOrganizerItemFilter& filter); + friend QDataStream& operator>>(QDataStream& in, QOrganizerItemFilter& filter); +#endif QSharedDataPointer<QOrganizerItemFilterPrivate> d_ptr; }; diff --git a/src/organizer/qorganizeritemfilter_p.h b/src/organizer/qorganizeritemfilter_p.h index 4dc16a4c96..406fe7d597 100644 --- a/src/organizer/qorganizeritemfilter_p.h +++ b/src/organizer/qorganizeritemfilter_p.h @@ -55,7 +55,7 @@ #include "qorganizeritemfilter.h" #include <QSharedData> - +#include <QDataStream> /* Boiler plate code */ #define Q_IMPLEMENT_ORGANIZERITEMFILTER_PRIVATE(Class) \ @@ -87,6 +87,8 @@ public: } virtual bool compare(const QOrganizerItemFilterPrivate* other) const = 0; + virtual QDataStream& outputToStream(QDataStream& stream, quint8 formatVersion) const = 0; + virtual QDataStream& inputFromStream(QDataStream& stream, quint8 formatVersion) = 0; virtual QOrganizerItemFilterPrivate* clone() const = 0; virtual QOrganizerItemFilter::FilterType type() const = 0; diff --git a/src/organizer/qorganizeritemid.cpp b/src/organizer/qorganizeritemid.cpp index aa7e3d2ac0..a6e0064dba 100644 --- a/src/organizer/qorganizeritemid.cpp +++ b/src/organizer/qorganizeritemid.cpp @@ -43,6 +43,7 @@ #include "qorganizeritemid_p.h" #include <QHash> #include <QDebug> +#include <QDataStream> QTM_BEGIN_NAMESPACE @@ -159,6 +160,30 @@ QDebug operator<<(QDebug dbg, const QOrganizerItemId& id) } #endif +#ifndef QT_NO_DATASTREAM +QDataStream& operator<<(QDataStream& out, const QOrganizerItemId& id) +{ + quint8 formatVersion = 1; // Version of QDataStream format for QOrganizerItemId + return out << formatVersion << id.managerUri() << id.localId(); +} + +QDataStream& operator>>(QDataStream& in, QOrganizerItemId& id) +{ + quint8 formatVersion; + in >> formatVersion; + if (formatVersion == 1) { + QString managerUri; + QOrganizerItemLocalId localId; + in >> managerUri >> localId; + id.setManagerUri(managerUri); + id.setLocalId(localId); + } else { + in.setStatus(QDataStream::ReadCorruptData); + } + return in; +} +#endif + /*! * Returns the URI of the manager which contains the organizer item identified by this id */ diff --git a/src/organizer/qorganizeritemid.h b/src/organizer/qorganizeritemid.h index 85dbfb2acf..e115da1e31 100644 --- a/src/organizer/qorganizeritemid.h +++ b/src/organizer/qorganizeritemid.h @@ -47,6 +47,8 @@ #include "qtorganizerglobal.h" +class QDataStream; + QTM_BEGIN_NAMESPACE typedef quint32 QOrganizerItemLocalId; @@ -80,6 +82,11 @@ Q_ORGANIZER_EXPORT uint qHash(const QOrganizerItemId& key); Q_ORGANIZER_EXPORT QDebug operator<<(QDebug dbg, const QOrganizerItemId& id); #endif +#ifndef QT_NO_DATASTREAM +Q_ORGANIZER_EXPORT QDataStream& operator<<(QDataStream& out, const QOrganizerItemId& id); +Q_ORGANIZER_EXPORT QDataStream& operator>>(QDataStream& in, QOrganizerItemId& id); +#endif + QTM_END_NAMESPACE Q_DECLARE_TYPEINFO(QTM_PREPEND_NAMESPACE(QOrganizerItemId), Q_MOVABLE_TYPE); diff --git a/src/organizer/qorganizeritemsortorder.cpp b/src/organizer/qorganizeritemsortorder.cpp index bc87f53d3c..974f9aecf1 100644 --- a/src/organizer/qorganizeritemsortorder.cpp +++ b/src/organizer/qorganizeritemsortorder.cpp @@ -130,6 +130,46 @@ bool QOrganizerItemSortOrder::operator ==(const QOrganizerItemSortOrder& other) return false; } +#ifndef QT_NO_DATASTREAM +/*! + * Writes \a sortOrder to the stream \a out. + */ +QDataStream& operator<<(QDataStream& out, const QOrganizerItemSortOrder& sortOrder) +{ + quint8 formatVersion = 1; // Version of QDataStream format for QOrganizerItemSortOrder + return out << formatVersion + << sortOrder.detailDefinitionName() + << sortOrder.detailFieldName() + << static_cast<quint32>(sortOrder.blankPolicy()) + << static_cast<quint32>(sortOrder.direction()) + << static_cast<quint32>(sortOrder.caseSensitivity()); +} + +/*! + * Reads a sort order from stream \a in into \a sortOrder. + */ +QDataStream& operator>>(QDataStream& in, QOrganizerItemSortOrder& sortOrder) +{ + quint8 formatVersion; + in >> formatVersion; + if (formatVersion == 1) { + QString definitionName; + QString fieldName; + quint32 blankPolicy; + quint32 direction; + quint32 caseSensitivity; + in >> definitionName >> fieldName >> blankPolicy >> direction >> caseSensitivity; + sortOrder.setDetailDefinitionName(definitionName, fieldName); + sortOrder.setBlankPolicy(static_cast<QOrganizerItemSortOrder::BlankPolicy>(blankPolicy)); + sortOrder.setDirection(static_cast<Qt::SortOrder>(direction)); + sortOrder.setCaseSensitivity(static_cast<Qt::CaseSensitivity>(caseSensitivity)); + } else { + in.setStatus(QDataStream::ReadCorruptData); + } + return in; +} +#endif + /*! * Sets the definition name of the details which will be inspected to perform sorting to \a definitionName, * and the name of those details' fields which contains the value which organizer items will be sorted by to \a fieldName diff --git a/src/organizer/qorganizeritemsortorder.h b/src/organizer/qorganizeritemsortorder.h index 9a734c25a1..a7523fb7ff 100644 --- a/src/organizer/qorganizeritemsortorder.h +++ b/src/organizer/qorganizeritemsortorder.h @@ -48,6 +48,8 @@ #include <QSharedData> #include <QList> +class QDataStream; + QTM_BEGIN_NAMESPACE class QOrganizerItemSortOrderPrivate; @@ -90,6 +92,11 @@ private: QSharedDataPointer<QOrganizerItemSortOrderPrivate> d; }; +#ifndef QT_NO_DATASTREAM +Q_ORGANIZER_EXPORT QDataStream& operator<<(QDataStream& out, const QOrganizerItemSortOrder& sortOrder); +Q_ORGANIZER_EXPORT QDataStream& operator>>(QDataStream& in, QOrganizerItemSortOrder& sortOrder); +#endif + QTM_END_NAMESPACE Q_DECLARE_TYPEINFO(QTM_PREPEND_NAMESPACE(QOrganizerItemSortOrder), Q_MOVABLE_TYPE); |