KD Reports API Documentation 2.2
Loading...
Searching...
No Matches
KDReportsTextDocReportLayout.cpp
Go to the documentation of this file.
1/****************************************************************************
2**
3** This file is part of the KD Reports library.
4**
5** SPDX-FileCopyrightText: 2007 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
6**
7** SPDX-License-Identifier: MIT
8**
9****************************************************************************/
10
12#include <QAbstractTextDocumentLayout>
13#include <QDebug>
14#include <QPainter>
15#include <QTextBlock>
16
18 : m_textDocument()
19 , m_builder(m_textDocument.contentDocumentData(), QTextCursor(&m_textDocument.contentDocument()), report)
20
21{
22}
23
27
29{
30 painter.translate(0, -pageNumber * m_textDocument.contentDocument().pageSize().height());
31
32 // Instead of using drawContents directly, we have to fork it in order to fix the palette (to avoid white-on-white in dark color schemes)
33 // m_textDocument.contentDocument().drawContents(&painter, painter.clipRegion().boundingRect());
34 // This even allows us to optimize it a bit (painter clip rect already set)
35
37 ctx.clip = painter.clipRegion().boundingRect();
38 ctx.palette.setColor(QPalette::Text, Qt::black);
39 m_textDocument.contentDocument().documentLayout()->draw(&painter, ctx);
40}
41
42//@cond PRIVATE
44{
45 // qDebug() << "page height" << m_textDocument.contentDocument().pageSize().height();
46 // qDebug() << "doc height" << m_textDocument.contentDocument().size().height();
47 return m_textDocument.contentDocument().pageCount();
48}
49//@endcond
50
52{
53 m_textDocument.setPageSize(size);
54}
55
59
61{
62 return m_textDocument.asHtml();
63}
64
66{
67 m_textDocument.layoutWithTextWidth(docWidth);
68 qreal docHeight = m_textDocument.contentDocument().size().height();
69
70 // We need to get rid of all page breaks...
71 // Unittest: PageLayout::testEndlessPrinterWithPageBreaks()
72 QTextCursor c(&m_textDocument.contentDocument());
74 QTextBlock block = m_textDocument.contentDocument().firstBlock();
75 do {
76 // qDebug() << "addBlock: Looking at block" << block.blockNumber();
77 QTextBlockFormat format = block.blockFormat();
80 c.setPosition(block.position());
81 c.setBlockFormat(format);
82 block = block.next();
83 } while (block.isValid());
84 c.endEditBlock();
85
86 setPageContentSize(QSizeF(docWidth, docHeight));
87 qDebug() << "m_textDocument.layoutDocument().setPageSize" << docWidth << "x" << docHeight << numberOfPages() << "pages";
88 qreal newDocHeight = m_textDocument.contentDocument().size().height();
89 if (newDocHeight > docHeight) {
90 // QTextDocument is playing tricks on us; it was able to layout as docWidth x docHeight
91 // but once we set that as the page size, we end up with more height...
92 // Unittest: PageLayout::testEndlessPrinterBug()
93 qDebug() << "newDocHeight=" << newDocHeight << "expected" << docHeight;
94 setPageContentSize(QSizeF(docWidth, newDocHeight));
95 newDocHeight = m_textDocument.contentDocument().size().height();
96 qDebug() << "final newDocHeight=" << newDocHeight << numberOfPages() << "pages";
97 }
98
99 /* cppcheck-suppress assertWithSideEffect */
100 Q_ASSERT(numberOfPages() == 1);
101 return newDocHeight;
102}
103
105{
106 m_textDocument.contentDocumentData().saveResourcesToFiles();
107}
108
110{
111 m_textDocument.contentDocument().setDefaultFont(font);
112 m_builder.setDefaultFont(font);
113}
114
116{
117 return m_textDocument.defaultFont();
118}
119
121{
122 m_textDocument.updateTextValue(id, newValue);
123}
124
125//@cond PRIVATE
127{
128 // See Database example for the +1, the right border was missing otherwise.
129 return m_textDocument.contentDocument().idealWidth() + 1; // in pixels
130}
131
132bool KDReports::TextDocReportLayout::scaleTo(int numPagesHorizontally, int numPagesVertically)
133{
134 Q_UNUSED(numPagesHorizontally);
135 Q_UNUSED(numPagesVertically);
136 qWarning("scaleTo is only implemented in Spreadsheet mode currently");
137 return false;
138}
139
141{
142 Q_UNUSED(height);
143 qWarning("fixed row height is only implemented in Spreadsheet mode");
144}
145
147{
148 return 1;
149}
150
152{
153 return 1; // not implemented
154}
155//@endcond
156
158{
159 Q_UNUSED(factor);
160 qWarning("font scaling is only implemented in Spreadsheet mode currently");
161}
162
164{
165 return 1; // not implemented
166}
167
169{
170 const QPointF posInPage = pos + QPointF(0, pageNumber * m_textDocument.contentDocument().pageSize().height());
171 return m_textDocument.contentDocument().documentLayout()->anchorAt(posInPage);
172}
int maximumNumberOfPagesForHorizontalScaling() const override
Reimplemented for internal purposes. .
void ensureLayouted() override
Reimplemented for internal purposes. .
void finishHtmlExport() override
Reimplemented for internal purposes. .
void setFixedRowHeight(qreal height) override
Reimplemented for internal purposes. .
void setPageContentSize(QSizeF size) override
Reimplemented for internal purposes. .
bool scaleTo(int numPagesHorizontally, int numPagesVertically) override
Reimplemented for internal purposes. .
qreal userRequestedFontScalingFactor() const override
Reimplemented for internal purposes. .
QFont defaultFont() const override
Reimplemented for internal purposes. .
void setLayoutDirty() override
Reimplemented for internal purposes. .
void setDefaultFont(const QFont &font) override
Reimplemented for internal purposes. .
qreal layoutAsOnePage(qreal width) override
Reimplemented for internal purposes. .
qreal idealWidth() override
Reimplemented for internal purposes. .
int numberOfPages() override
Reimplemented for internal purposes. .
QString anchorAt(int pageNumber, QPoint pos) override
Reimplemented for internal purposes. .
void setUserRequestedFontScalingFactor(qreal factor) override
Reimplemented for internal purposes. .
void updateTextValue(const QString &id, const QString &newValue) override
Reimplemented for internal purposes. .
void paintPageContent(int pageNumber, QPainter &painter) override
Reimplemented for internal purposes. .
int maximumNumberOfPagesForVerticalScaling() const override
Reimplemented for internal purposes. .
QString toHtml() const override
Reimplemented for internal purposes. .
QRegion clipRegion() const const
void translate(const QPointF &offset)
QRect boundingRect() const const
int size() const const
QTextBlockFormat blockFormat() const const
bool isValid() const const
QTextBlock next() const const
int position() const const
QTextFormat::PageBreakFlags pageBreakPolicy() const const
void setPageBreakPolicy(QTextFormat::PageBreakFlags policy)
void beginEditBlock()
void endEditBlock()
void setBlockFormat(const QTextBlockFormat &format)
void setPosition(int pos, QTextCursor::MoveMode m)

© Klarälvdalens Datakonsult AB (KDAB)
"The Qt, C++ and OpenGL Experts"
https://www.kdab.com/
https://www.kdab.com/development-resources/qt-tools/kd-reports/
Generated on Wed Apr 24 2024 04:08:15 for KD Reports API Documentation by doxygen 1.9.8