diff --git a/src/common/KReportData.h b/src/common/KReportData.h --- a/src/common/KReportData.h +++ b/src/common/KReportData.h @@ -29,16 +29,27 @@ { public: + KReportData(); virtual ~KReportData(); //! Describes sorting for single field /*! By default the order is ascending. */ class KREPORT_EXPORT SortedField { public: SortedField(); - QString field; - Qt::SortOrder order; + ~SortedField(); + SortedField& operator=(const SortedField &other); + void setField(const QString &field); + void setOrder(Qt::SortOrder order); + QString field() const; + QString field(); + Qt::SortOrder order() const; + Qt::SortOrder order(); + + private: + class Private; + Private * const d; }; //! Open the dataset @@ -117,6 +128,11 @@ //! @a source is implementation-specific identifier. //! Owner of the returned pointer is the caller. virtual KReportData* create(const QString &source) const Q_REQUIRED_RESULT; + +private: + Q_DISABLE_COPY(KReportData) + class Private; + Private * const d; }; #endif diff --git a/src/common/KReportData.cpp b/src/common/KReportData.cpp --- a/src/common/KReportData.cpp +++ b/src/common/KReportData.cpp @@ -18,13 +18,81 @@ #include "KReportData.h" #include -KReportData::~KReportData() +class KReportData::SortedField::Private { -} + +public: + QString field; + Qt::SortOrder order = Qt::AscendingOrder; +}; + +class KReportData::Private +{ +public: + bool dummy = true; +}; + +//==========KReportData::SortedField========== KReportData::SortedField::SortedField() - : order(Qt::AscendingOrder) + : d(new Private()) +{ +} + +KReportData::SortedField::~SortedField() +{ + delete d; +} + +KReportData::SortedField & KReportData::SortedField::operator=(const KReportData::SortedField& other) +{ + if (this != &other) { + setField(other.field()); + setOrder(other.order()); + } + return *this; +} + +QString KReportData::SortedField::field() +{ + return d->field; +} + +QString KReportData::SortedField::field() const +{ + return d->field; +} + +Qt::SortOrder KReportData::SortedField::order() +{ + return d->order; +} + +Qt::SortOrder KReportData::SortedField::order() const +{ + return d->order; +} + +void KReportData::SortedField::setField(const QString& field) +{ + d->field = field; +} + +void KReportData::SortedField::setOrder(Qt::SortOrder order) +{ + d->order = order; +} + + +//==========KReportData========== + +KReportData::KReportData() : d(new Private()) +{ +} + +KReportData::~KReportData() { + delete d; } QStringList KReportData::fieldKeys() const diff --git a/src/common/KReportDesign.h b/src/common/KReportDesign.h --- a/src/common/KReportDesign.h +++ b/src/common/KReportDesign.h @@ -39,21 +39,32 @@ /*! For empty status objects isError() returns false. */ KReportDesignReadingStatus(); + ~KReportDesignReadingStatus(); + //! @return true if the status is error. //! Equivalent of lineNumber >= 0. bool isError() const; - //! Error message suitable for displaying to the user, translated. - QString errorMessage; - - //! Detailed error message, partially translated. - QString errorDetails; - - //! Line number (counting from 0) in which the error occured. -1 if there is no error. - int lineNumber; - - //! Column number (counting from 0) in which the error occured. -1 if there is no error. - int columnNumber; + QString errorMessage() const; + QString errorMessage(); + QString errorDetails() const; + QString errorDetails(); + + int lineNumber() const; + int lineNumber(); + + int columnNumber() const; + int columnNumber(); + + void setErrorMessage(const QString& msg); + void setErrorDetails(const QString& details); + void setErrorLine(int line); + void setErrorColumn(int column); + +private: + Q_DISABLE_COPY(KReportDesignReadingStatus) + class Private; + Private * const d; }; //! Sends information about the reading status @a status to debug output @a dbg. diff --git a/src/common/KReportDesign.cpp b/src/common/KReportDesign.cpp --- a/src/common/KReportDesign.cpp +++ b/src/common/KReportDesign.cpp @@ -30,24 +30,104 @@ #include #include -KReportDesignReadingStatus::KReportDesignReadingStatus() - : lineNumber(-1), columnNumber(-1) +class KReportDesignReadingStatus::Private { +public: + //! Error message suitable for displaying to the user, translated. + QString errorMessage; + + //! Detailed error message, partially translated. + QString errorDetails; + + //! Line number (counting from 0) in which the error occured. -1 if there is no error. + int lineNumber = -1; + + //! Column number (counting from 0) in which the error occured. -1 if there is no error. + int columnNumber = -1; +}; + +KReportDesignReadingStatus::KReportDesignReadingStatus() : d(new Private()) +{ +} + +KReportDesignReadingStatus::~KReportDesignReadingStatus() +{ + delete d; } bool KReportDesignReadingStatus::isError() const { - return lineNumber >= 0; + return d->lineNumber >= 0; +} + +int KReportDesignReadingStatus::columnNumber() +{ + return d->columnNumber; +} + +int KReportDesignReadingStatus::columnNumber() const +{ + return d->columnNumber; +} + +QString KReportDesignReadingStatus::errorDetails() +{ + return d->errorDetails; +} + +QString KReportDesignReadingStatus::errorDetails() const +{ + return d->errorDetails; +} + +QString KReportDesignReadingStatus::errorMessage() +{ + return d->errorMessage; +} + +QString KReportDesignReadingStatus::errorMessage() const +{ + return d->errorMessage; +} + +int KReportDesignReadingStatus::lineNumber() +{ + return d->lineNumber; +} + +int KReportDesignReadingStatus::lineNumber() const +{ + return d->lineNumber; +} + +void KReportDesignReadingStatus::setErrorColumn(int column) +{ + d->columnNumber = column; +} + +void KReportDesignReadingStatus::setErrorDetails(const QString& details) +{ + d->errorDetails = details; +} + +void KReportDesignReadingStatus::setErrorLine(int line) +{ + d->lineNumber = line; +} + +void KReportDesignReadingStatus::setErrorMessage(const QString& msg) +{ + d->errorMessage = msg; } QDebug operator<<(QDebug dbg, const KReportDesignReadingStatus& status) { if (status.isError()) { dbg.nospace() << qPrintable( QString::fromLatin1("KReportDesignReadingStatus: errorMessage=\"%1\" " "errorDetails=\"%2\" line=%3 column=%4") - .arg(status.errorMessage).arg(status.errorDetails) - .arg(status.lineNumber).arg(status.columnNumber)); + .arg(status.errorMessage()).arg(status.errorDetails()) + .arg(status.lineNumber()).arg(status.columnNumber())); } else { dbg.nospace() << "KReportDesignReadingStatus: OK"; } @@ -69,11 +149,17 @@ bool KReportDesign::setContent(const QString &text, KReportDesignReadingStatus *status) { QDomDocument doc; - if (!doc.setContent(text, status ? &status->errorDetails : 0, status ? &status->lineNumber : 0, - status ? &status->columnNumber : 0)) + QString errorDetails; + int errorLine; + int errorColumn; + + if (!doc.setContent(text, &errorDetails, &errorLine, &errorColumn)) { if (status) { - status->errorMessage = tr("Could not parse XML document."); + status->setErrorMessage(tr("Could not parse XML document.")); + status->setErrorDetails(errorDetails); + status->setErrorLine(errorLine); + status->setErrorColumn(errorColumn); } return false; } @@ -115,7 +201,7 @@ KReportPluginInterface* plugin = d->findPlugin(typeName, el, &status); if (!plugin) { if (errorMessage) { - *errorMessage = status.errorMessage; + *errorMessage = status.errorMessage(); } return KReportElement(); } diff --git a/src/common/KReportDesign_p.cpp b/src/common/KReportDesign_p.cpp --- a/src/common/KReportDesign_p.cpp +++ b/src/common/KReportDesign_p.cpp @@ -110,9 +110,9 @@ const QDomNode &node) { if (status) { - status->errorDetails = details; - status->lineNumber = node.lineNumber() == -1 ? 0 /* mark error */ : node.lineNumber(); - status->columnNumber = node.columnNumber() == -1 ? 0 /* mark error */ : node.columnNumber(); + status->setErrorDetails(details); + status->setErrorLine(node.lineNumber() == -1 ? 0 /* mark error */ : node.lineNumber()); + status->setErrorColumn(node.columnNumber() == -1 ? 0 /* mark error */ : node.columnNumber()); } } @@ -452,10 +452,10 @@ } if (status) { - status->lineNumber = -1; - status->columnNumber = -1; - status->errorMessage.clear(); - status->errorDetails.clear(); + status->setErrorLine(-1); + status->setErrorColumn(-1); + status->setErrorMessage(QString()); + status->setErrorDetails(QString()); } return true; } diff --git a/src/common/KReportDetailSectionData.cpp b/src/common/KReportDetailSectionData.cpp --- a/src/common/KReportDetailSectionData.cpp +++ b/src/common/KReportDetailSectionData.cpp @@ -91,8 +91,8 @@ } m_groupList.append(dgsd); KReportData::SortedField s; - s.field = dgsd->m_column; - s.order = dgsd->m_sort; + s.setField(dgsd->m_column); + s.setOrder(dgsd->m_sort); m_sortedFields.append(s); } else if (elemThis.tagName() == QLatin1String("report:section") && elemThis.attribute(QLatin1String("report:section-type")) == QLatin1String("detail")) { diff --git a/src/wrtembed/KReportDesignerItemBase.h b/src/wrtembed/KReportDesignerItemBase.h --- a/src/wrtembed/KReportDesignerItemBase.h +++ b/src/wrtembed/KReportDesignerItemBase.h @@ -79,6 +79,7 @@ QString renderText() const; private: + Q_DISABLE_COPY(KReportDesignerItemBase) class Private; Private * const d; };