diff --git a/src/common/KReportAsyncItemBase.h b/src/common/KReportAsyncItemBase.h --- a/src/common/KReportAsyncItemBase.h +++ b/src/common/KReportAsyncItemBase.h @@ -26,11 +26,17 @@ { Q_OBJECT public: + KReportAsyncItemBase(); + ~KReportAsyncItemBase(); int renderSimpleData(OROPage *page, OROSection *section, const QPointF &offset, const QVariant &data, KReportScriptHandler *script) override = 0; virtual QVariant realItemData(const QVariant& itemData) const; Q_SIGNALS: void finishedRendering(); + +private: + class Private; + Private * const d; }; #endif // KREPORTASYNCITEMBASE_H diff --git a/src/common/KReportAsyncItemBase.cpp b/src/common/KReportAsyncItemBase.cpp --- a/src/common/KReportAsyncItemBase.cpp +++ b/src/common/KReportAsyncItemBase.cpp @@ -19,6 +19,22 @@ #include "KReportAsyncItemBase.h" +class Q_DECL_HIDDEN KReportAsyncItemBase::Private +{ +public: + bool dummy = true; +}; + +KReportAsyncItemBase::KReportAsyncItemBase() : d(new Private) +{ +} + +KReportAsyncItemBase::~KReportAsyncItemBase() +{ + delete d; +} + + QVariant KReportAsyncItemBase::realItemData(const QVariant& itemData) const { return itemData; diff --git a/src/common/KReportDocument.h b/src/common/KReportDocument.h --- a/src/common/KReportDocument.h +++ b/src/common/KReportDocument.h @@ -81,9 +81,7 @@ bool externalData() const; - KReportDetailSectionData* detail() const { - return m_detailSection; - } + KReportDetailSectionData* detail() const; void setName(const QString&n); QString name() const; @@ -94,30 +92,8 @@ QString pageSize(); void setPageSize(const QString &size); - -protected: - - - KReportSectionData * m_pageHeaderFirst; - KReportSectionData * m_pageHeaderOdd; - KReportSectionData * m_pageHeaderEven; - KReportSectionData * m_pageHeaderLast; - KReportSectionData * m_pageHeaderAny; - - KReportSectionData * m_reportHeader; - KReportSectionData * m_reportFooter; - KReportSectionData * m_pageFooterFirst; - KReportSectionData * m_pageFooterOdd; - KReportSectionData * m_pageFooterEven; - KReportSectionData * m_pageFooterLast; - KReportSectionData * m_pageFooterAny; - - KReportDetailSectionData* m_detailSection; - -private: - void init(); - +private: friend class KReportPreRendererPrivate; friend class KReportPreRenderer; #ifdef KREPORT_SCRIPTING diff --git a/src/common/KReportDocument.cpp b/src/common/KReportDocument.cpp --- a/src/common/KReportDocument.cpp +++ b/src/common/KReportDocument.cpp @@ -41,32 +41,38 @@ KReportPrivate::PageLayout pageLayout; QString pageSize; QString labelType; + + KReportSectionData * pageHeaderFirst = nullptr; + KReportSectionData * pageHeaderOdd = nullptr; + KReportSectionData * pageHeaderEven = nullptr; + KReportSectionData * pageHeaderLast = nullptr; + KReportSectionData * pageHeaderAny = nullptr; + + KReportSectionData * reportHeader = nullptr; + KReportSectionData * reportFooter = nullptr; + + KReportSectionData * pageFooterFirst = nullptr; + KReportSectionData * pageFooterOdd = nullptr; + KReportSectionData * pageFooterEven = nullptr; + KReportSectionData * pageFooterLast = nullptr; + KReportSectionData * pageFooterAny = nullptr; + + KReportDetailSectionData* detailSection = nullptr; }; -void KReportDocument::init() -{ - m_pageHeaderFirst = m_pageHeaderOdd = m_pageHeaderEven = m_pageHeaderLast = m_pageHeaderAny = nullptr; - m_pageFooterFirst = m_pageFooterOdd = m_pageFooterEven = m_pageFooterLast = m_pageFooterAny = nullptr; - m_reportHeader = m_reportFooter = nullptr; -} - KReportDocument::KReportDocument(QObject *parent) : QObject(parent), - m_detailSection(nullptr), - d(new Private()) + d(new Private) { - init(); d->valid = true; } KReportDocument::KReportDocument(const QDomElement & elemSource, QObject *parent) : QObject(parent), - m_detailSection(nullptr), - d(new Private()) + d(new Private) { d->valid = false; - init(); - //kreportDebug(); + if (elemSource.tagName() != QLatin1String("report:content")) { kreportWarning() << "QDomElement is not tag" << elemSource.text(); @@ -125,40 +131,40 @@ //kreportDebug() << "Adding section of type " << sd->type(); switch (sd->type()) { case KReportSectionData::Type::PageHeaderFirst: - m_pageHeaderFirst = sd; + d->pageHeaderFirst = sd; break; case KReportSectionData::Type::PageHeaderOdd: - m_pageHeaderOdd = sd; + d->pageHeaderOdd = sd; break; case KReportSectionData::Type::PageHeaderEven: - m_pageHeaderEven = sd; + d->pageHeaderEven = sd; break; case KReportSectionData::Type::PageHeaderLast: - m_pageHeaderLast = sd; + d->pageHeaderLast = sd; break; case KReportSectionData::Type::PageHeaderAny: - m_pageHeaderAny = sd; + d->pageHeaderAny = sd; break; case KReportSectionData::Type::ReportHeader: - m_reportHeader = sd; + d->reportHeader = sd; break; case KReportSectionData::Type::ReportFooter: - m_reportFooter = sd; + d->reportFooter = sd; break; case KReportSectionData::Type::PageFooterFirst: - m_pageFooterFirst = sd; + d->pageFooterFirst = sd; break; case KReportSectionData::Type::PageFooterOdd: - m_pageFooterOdd = sd; + d->pageFooterOdd = sd; break; case KReportSectionData::Type::PageFooterEven: - m_pageFooterEven = sd; + d->pageFooterEven = sd; break; case KReportSectionData::Type::PageFooterLast: - m_pageFooterLast = sd; + d->pageFooterLast = sd; break; case KReportSectionData::Type::PageFooterAny: - m_pageFooterAny = sd; + d->pageFooterAny = sd; break; default: ; @@ -169,7 +175,7 @@ KReportDetailSectionData * dsd = new KReportDetailSectionData(sec.toElement(), this); if (dsd->isValid()) { - m_detailSection = dsd; + d->detailSection = dsd; } else { kreportDebug() << "Invalid detail section"; delete dsd; @@ -202,18 +208,18 @@ } } - if (m_detailSection) { + if (d->detailSection) { //kreportDebug() << "Number of groups: " << m_detailSection->m_groupList.count(); - foreach(KReportDetailGroupSectionData* g, m_detailSection->groupList) { + foreach(KReportDetailGroupSectionData* g, d->detailSection->groupList) { if (g->groupHeader) { obs << g->groupHeader->objects(); } if (g->groupFooter) { obs << g->groupFooter->objects(); } } - if (m_detailSection->detailSection) - obs << m_detailSection->detailSection->objects(); + if (d->detailSection->detailSection) + obs << d->detailSection->detailSection->objects(); } /*kreportDebug() << "Object List:"; @@ -247,18 +253,18 @@ } } - if (m_detailSection) { + if (d->detailSection) { //kreportDebug() << "Number of groups: " << m_detailSection->m_groupList.count(); - foreach(KReportDetailGroupSectionData* g, m_detailSection->groupList) { + foreach(KReportDetailGroupSectionData* g, d->detailSection->groupList) { if (g->groupHeader) { secs << g->groupHeader; } if (g->groupFooter) { secs << g->groupFooter; } } - if (m_detailSection->detailSection) - secs << m_detailSection->detailSection; + if (d->detailSection->detailSection) + secs << d->detailSection->detailSection; } return secs; @@ -281,40 +287,40 @@ KReportSectionData *sec; switch (type) { case KReportSectionData::Type::PageHeaderAny: - sec = m_pageHeaderAny; + sec = d->pageHeaderAny; break; case KReportSectionData::Type::PageHeaderEven: - sec = m_pageHeaderEven; + sec = d->pageHeaderEven; break; case KReportSectionData::Type::PageHeaderOdd: - sec = m_pageHeaderOdd; + sec = d->pageHeaderOdd; break; case KReportSectionData::Type::PageHeaderFirst: - sec = m_pageHeaderFirst; + sec = d->pageHeaderFirst; break; case KReportSectionData::Type::PageHeaderLast: - sec = m_pageHeaderLast; + sec = d->pageHeaderLast; break; case KReportSectionData::Type::PageFooterAny: - sec = m_pageFooterAny; + sec = d->pageFooterAny; break; case KReportSectionData::Type::PageFooterEven: - sec = m_pageFooterEven; + sec = d->pageFooterEven; break; case KReportSectionData::Type::PageFooterOdd: - sec = m_pageFooterOdd; + sec = d->pageFooterOdd; break; case KReportSectionData::Type::PageFooterFirst: - sec = m_pageFooterFirst; + sec = d->pageFooterFirst; break; case KReportSectionData::Type::PageFooterLast: - sec = m_pageFooterLast; + sec = d->pageFooterLast; break; case KReportSectionData::Type::ReportHeader: - sec = m_reportHeader; + sec = d->reportHeader; break; case KReportSectionData::Type::ReportFooter: - sec = m_reportFooter; + sec = d->reportFooter; break; default: sec = nullptr; @@ -386,3 +392,9 @@ { d->labelType = label; } + +KReportDetailSectionData * KReportDocument::detail() const +{ + return d->detailSection; +} + diff --git a/src/plugins/barcode/KReportDesignerItemBarcode.cpp b/src/plugins/barcode/KReportDesignerItemBarcode.cpp --- a/src/plugins/barcode/KReportDesignerItemBarcode.cpp +++ b/src/plugins/barcode/KReportDesignerItemBarcode.cpp @@ -51,7 +51,7 @@ { Q_UNUSED(pos); init(scene); - setSceneRect(properRect(*rw, m_minWidthTotal*m_dpiX, m_minHeight*m_dpiY)); + setSceneRect(properRect(*rw, m_minWidthTotal*dpiX(), m_minHeight*dpiY())); nameProperty()->setValue(designer()->suggestEntityName(typeName())); } diff --git a/src/renderer/KReportPreRenderer.cpp b/src/renderer/KReportPreRenderer.cpp --- a/src/renderer/KReportPreRenderer.cpp +++ b/src/renderer/KReportPreRenderer.cpp @@ -91,32 +91,32 @@ m_yOffset = m_topMargin; - if (m_pageCounter == 1 && m_reportDocument->m_pageHeaderFirst) - renderSection(*(m_reportDocument->m_pageHeaderFirst)); - else if (lastPage == true && m_reportDocument->m_pageHeaderLast) - renderSection(*(m_reportDocument->m_pageHeaderLast)); - else if ((m_pageCounter % 2) == 1 && m_reportDocument->m_pageHeaderOdd) - renderSection(*(m_reportDocument->m_pageHeaderOdd)); - else if ((m_pageCounter % 2) == 0 && m_reportDocument->m_pageHeaderAny) - renderSection(*(m_reportDocument->m_pageHeaderAny)); - else if (m_reportDocument->m_pageHeaderAny) - renderSection(*(m_reportDocument->m_pageHeaderAny)); + if (m_pageCounter == 1 && m_reportDocument->section(KReportSectionData::Type::PageHeaderFirst)) + renderSection(*(m_reportDocument->section(KReportSectionData::Type::PageHeaderFirst))); + else if (lastPage == true && m_reportDocument->section(KReportSectionData::Type::PageHeaderLast)) + renderSection(*(m_reportDocument->section(KReportSectionData::Type::PageHeaderLast))); + else if ((m_pageCounter % 2) == 1 && m_reportDocument->section(KReportSectionData::Type::PageHeaderOdd)) + renderSection(*(m_reportDocument->section(KReportSectionData::Type::PageHeaderOdd))); + else if ((m_pageCounter % 2) == 0 && m_reportDocument->section(KReportSectionData::Type::PageHeaderEven)) + renderSection(*(m_reportDocument->section(KReportSectionData::Type::PageHeaderEven))); + else if (m_reportDocument->section(KReportSectionData::Type::PageHeaderAny)) + renderSection(*(m_reportDocument->section(KReportSectionData::Type::PageHeaderAny))); } qreal KReportPreRendererPrivate::finishCurPageSize(bool lastPage) { qreal retval = 0.0; - if (lastPage && m_reportDocument->m_pageFooterLast) - retval = renderSectionSize(* (m_reportDocument->m_pageFooterLast)); - else if (m_pageCounter == 1 && m_reportDocument->m_pageFooterFirst) - retval = renderSectionSize(* (m_reportDocument->m_pageFooterFirst)); - else if ((m_pageCounter % 2) == 1 && m_reportDocument->m_pageFooterOdd) - retval = renderSectionSize(* (m_reportDocument->m_pageFooterOdd)); - else if ((m_pageCounter % 2) == 0 && m_reportDocument->m_pageFooterEven) - retval = renderSectionSize(* (m_reportDocument->m_pageFooterEven)); - else if (m_reportDocument->m_pageFooterAny) - retval = renderSectionSize(* (m_reportDocument->m_pageFooterAny)); + if (lastPage && m_reportDocument->section(KReportSectionData::Type::PageFooterLast)) + retval = renderSectionSize(* (m_reportDocument->section(KReportSectionData::Type::PageFooterLast))); + else if (m_pageCounter == 1 && m_reportDocument->section(KReportSectionData::Type::PageFooterFirst)) + retval = renderSectionSize(* (m_reportDocument->section(KReportSectionData::Type::PageFooterFirst))); + else if ((m_pageCounter % 2) == 1 && m_reportDocument->section(KReportSectionData::Type::PageFooterOdd)) + retval = renderSectionSize(* (m_reportDocument->section(KReportSectionData::Type::PageFooterOdd))); + else if ((m_pageCounter % 2) == 0 && m_reportDocument->section(KReportSectionData::Type::PageFooterEven)) + retval = renderSectionSize(* (m_reportDocument->section(KReportSectionData::Type::PageFooterEven))); + else if (m_reportDocument->section(KReportSectionData::Type::PageFooterAny)) + retval = renderSectionSize(* (m_reportDocument->section(KReportSectionData::Type::PageFooterAny))); //kreportDebug() << retval; return retval; @@ -129,26 +129,26 @@ qreal retval = 0.0; //kreportDebug() << offset; - if (lastPage && m_reportDocument->m_pageFooterLast) { + if (lastPage && m_reportDocument->section(KReportSectionData::Type::PageFooterLast)) { //kreportDebug() << "Last Footer"; - m_yOffset = offset - renderSectionSize(* (m_reportDocument->m_pageFooterLast)); - retval = renderSection(* (m_reportDocument->m_pageFooterLast)); - } else if (m_pageCounter == 1 && m_reportDocument->m_pageFooterFirst) { + m_yOffset = offset - renderSectionSize(* (m_reportDocument->section(KReportSectionData::Type::PageFooterLast))); + retval = renderSection(* (m_reportDocument->section(KReportSectionData::Type::PageFooterLast))); + } else if (m_pageCounter == 1 && m_reportDocument->section(KReportSectionData::Type::PageFooterFirst)) { //kreportDebug() << "First Footer"; - m_yOffset = offset - renderSectionSize(* (m_reportDocument->m_pageFooterFirst)); - retval = renderSection(* (m_reportDocument->m_pageFooterFirst)); - } else if ((m_pageCounter % 2) == 1 && m_reportDocument->m_pageFooterOdd) { + m_yOffset = offset - renderSectionSize(* (m_reportDocument->section(KReportSectionData::Type::PageFooterLast))); + retval = renderSection(* (m_reportDocument->section(KReportSectionData::Type::PageFooterFirst))); + } else if ((m_pageCounter % 2) == 1 && m_reportDocument->section(KReportSectionData::Type::PageFooterOdd)) { //kreportDebug() << "Odd Footer"; - m_yOffset = offset - renderSectionSize(* (m_reportDocument->m_pageFooterOdd)); - retval = renderSection(* (m_reportDocument->m_pageFooterOdd)); - } else if ((m_pageCounter % 2) == 0 && m_reportDocument->m_pageFooterEven) { + m_yOffset = offset - renderSectionSize(* (m_reportDocument->section(KReportSectionData::Type::PageFooterOdd))); + retval = renderSection(* (m_reportDocument->section(KReportSectionData::Type::PageFooterOdd))); + } else if ((m_pageCounter % 2) == 0 && m_reportDocument->section(KReportSectionData::Type::PageFooterEven)) { //kreportDebug() << "Even Footer"; - m_yOffset = offset - renderSectionSize(* (m_reportDocument->m_pageFooterEven)); - retval = renderSection(* (m_reportDocument->m_pageFooterEven)); - } else if (m_reportDocument->m_pageFooterAny) { + m_yOffset = offset - renderSectionSize(* (m_reportDocument->section(KReportSectionData::Type::PageFooterEven))); + retval = renderSection(* (m_reportDocument->section(KReportSectionData::Type::PageFooterEven))); + } else if (m_reportDocument->section(KReportSectionData::Type::PageFooterAny)) { //kreportDebug() << "Any Footer"; - m_yOffset = offset - renderSectionSize(* (m_reportDocument->m_pageFooterAny)); - retval = renderSection(* (m_reportDocument->m_pageFooterAny)); + m_yOffset = offset - renderSectionSize(* (m_reportDocument->section(KReportSectionData::Type::PageFooterAny))); + retval = renderSection(* (m_reportDocument->section(KReportSectionData::Type::PageFooterAny))); } return retval; @@ -472,7 +472,7 @@ //kreportDebug() << "Page Size:" << m_maxWidth << m_maxHeight; m_document->setPageLayout(m_reportDocument->pageLayout()); - m_dataSource->setSorting(m_reportDocument->m_detailSection->sortedFields); + m_dataSource->setSorting(m_reportDocument->detail()->sortedFields); if (!m_dataSource->open()) { return false; } @@ -515,16 +515,16 @@ qreal tmp; // flip the value around if we are printing landscape - if (!m_reportDocument->pageLayout().orientation() == QPageLayout::Portrait) { + if (!(m_reportDocument->pageLayout().orientation() == QPageLayout::Portrait)) { w = (label.height() / 100.0); wg = (label.yGap() / 100.0); h = (label.width() / 100.0); hg = (label.xGap() / 100.0); numCols = label.rows(); numRows = label.columns(); } - KReportDetailSectionData * detailData = m_reportDocument->m_detailSection; + KReportDetailSectionData * detailData = m_reportDocument->detail(); if (detailData->detailSection) { KReportDataSource *mydata = m_dataSource; @@ -558,19 +558,19 @@ } else { // Normal Print Run - if (m_reportDocument->m_reportHeader) { - renderSection(*(m_reportDocument->m_reportHeader)); + if (m_reportDocument->section(KReportSectionData::Type::ReportHeader)) { + renderSection(*(m_reportDocument->section(KReportSectionData::Type::ReportHeader))); } - if (m_reportDocument->m_detailSection) { - renderDetailSection(m_reportDocument->m_detailSection); + if (m_reportDocument->detail()) { + renderDetailSection(m_reportDocument->detail()); } - if (m_reportDocument->m_reportFooter) { - if (renderSectionSize(*(m_reportDocument->m_reportFooter)) + finishCurPageSize(true) + m_bottomMargin + m_yOffset >= m_maxHeight) { + if (m_reportDocument->section(KReportSectionData::Type::ReportFooter)) { + if (renderSectionSize(*(m_reportDocument->section(KReportSectionData::Type::ReportFooter))) + finishCurPageSize(true) + m_bottomMargin + m_yOffset >= m_maxHeight) { createNewPage(); } - renderSection(*(m_reportDocument->m_reportFooter)); + renderSection(*(m_reportDocument->section(KReportSectionData::Type::ReportFooter))); } } finishCurPage(true); diff --git a/src/wrtembed/KReportDesignerItemRectBase.h b/src/wrtembed/KReportDesignerItemRectBase.h --- a/src/wrtembed/KReportDesignerItemRectBase.h +++ b/src/wrtembed/KReportDesignerItemRectBase.h @@ -47,8 +47,6 @@ virtual void exitInlineEditingMode(); protected: - int m_dpiX; - int m_dpiY; enum class SceneRectFlag { UpdateProperty, @@ -72,7 +70,10 @@ void move(const QPointF&) override; QRectF properRect(const KReportDesigner &d, qreal minWidth, qreal minHeight) const; + int dpiX() const; + int dpiY() const; private: + Q_DISABLE_COPY(KReportDesignerItemRectBase) int grabHandle(const QPointF &pos); QPointF properPressPoint(const KReportDesigner &d) const; diff --git a/src/wrtembed/KReportDesignerItemRectBase.cpp b/src/wrtembed/KReportDesignerItemRectBase.cpp --- a/src/wrtembed/KReportDesignerItemRectBase.cpp +++ b/src/wrtembed/KReportDesignerItemRectBase.cpp @@ -33,6 +33,8 @@ ~Private(); int grabAction = 0; + int dpiX = KReportPrivate::dpiX(); + int dpiY = KReportPrivate::dpiY(); }; KReportDesignerItemRectBase::Private::Private() @@ -46,12 +48,7 @@ KReportDesignerItemRectBase::KReportDesignerItemRectBase(KReportDesigner *r, KReportItemBase *b) : QGraphicsRectItem(), KReportDesignerItemBase(r, b), d(new KReportDesignerItemRectBase::Private) { - m_dpiX = KReportPrivate::dpiX(); - m_dpiY = KReportPrivate::dpiY(); - - d->grabAction = 0; setAcceptHoverEvents(true); - setFlags(ItemIsSelectable | ItemIsMovable | ItemSendsGeometryChanges); } @@ -395,3 +392,13 @@ } } } + +int KReportDesignerItemRectBase::dpiX() const +{ + return d->dpiX; +} + +int KReportDesignerItemRectBase::dpiY() const +{ + return d->dpiY; +}