KD Reports API Documentation  2.1
KDReportsHeader.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-2022 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
6 **
7 ** SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDAB-KDReports OR LicenseRef-KDAB-KDReports-US
8 **
9 ** Licensees holding valid commercial KD Reports licenses may use this file in
10 ** accordance with the KD Reports Commercial License Agreement provided with
11 ** the Software.
12 **
13 ** Contact info@kdab.com if any conditions of this licensing are not clear to you.
14 **
15 ****************************************************************************/
16 
17 #include "KDReportsHeader.h"
18 #include "KDReportsHeader_p.h"
21 #include "KDReportsReport.h"
22 #include "KDReportsReport_p.h"
23 #include "KDReportsTextElement.h"
24 
25 #include <QDate>
26 #include <QDebug>
27 #include <QLocale>
28 #include <QTextBlock>
29 #include <QTime>
30 
31 KDReports::Header::Header(KDReports::Report *report)
32  : d(new HeaderPrivate(report))
33 {
34  d->m_textDocument.contentDocument().setDefaultFont(report->d->m_layout->defaultFont());
35 }
36 
37 KDReports::Header::~Header()
38 {
39 }
40 
42 {
43  d->m_builder.addInlineElementPublic(element);
44  // don't add anything else here, it won't be called from the xml parser
45 }
46 
47 void KDReports::Header::addElement(const Element &element, Qt::AlignmentFlag horizontalAlignment)
48 {
49  d->m_builder.addBlockElementPublic(element, horizontalAlignment);
50  // don't add anything else here, it won't be called from the xml parser
51 }
52 
53 KDReports::TextDocument &KDReports::Header::doc()
54 {
55  return d->m_textDocument;
56 }
57 
60 
61 namespace KDReports {
62 QString variableValue(int pageNumber, KDReports::Report *report, VariableType type)
63 {
64  switch (type) {
65  case PageNumber:
66  return QString::number(pageNumber + 1);
67  case PageCount:
68  return QString::number(report->numberOfPages());
69  case TextDate:
71  case ISODate:
77  case LocaleDate:
82  case TextTime:
84  case ISOTime:
86  case LocaleTime:
88  default:
89  qWarning() << "Program error, variable" << type << "not implemented";
90  }
91  return QString();
92 }
93 }
94 
95 void KDReports::setVariableMarker(QTextDocument &textDoc, int pos, KDReports::VariableType variableType, int valueLength)
96 {
97  QTextCursor c(&textDoc);
98  c.setPosition(pos);
100  QTextCharFormat charFormat = c.charFormat();
102  charFormat.setProperty(VariableTypeProperty, variableType);
103  charFormat.setProperty(VariableLengthProperty, valueLength);
104  c.setCharFormat(charFormat);
105 }
106 
108 {
112 }
113 
115 {
116  d->m_builder.addVariablePublic(variable);
117 }
118 
120 {
121  d->m_builder.addVerticalSpacingPublic(space);
122 }
123 
124 void KDReports::Header::preparePaintingPage(int pageNumber)
125 {
126  // qDebug() << "preparePaintingPage" << pageNumber;
127  QTextCursor c(&d->m_textDocument.contentDocument());
128  do {
129  c.movePosition(QTextCursor::NextCharacter);
130  // qDebug() << c.block().text() << c.position();
131  QTextCharFormat format = c.charFormat();
132  if (format.hasProperty(VariableTypeProperty)) {
133  // go back one char, due to charFormat() being the format of the character -before- the cursor!
134  c.movePosition(QTextCursor::PreviousCharacter);
135  const VariableType variableType = static_cast<VariableType>(format.property(VariableTypeProperty).toInt());
136  const int oldLength = format.property(VariableLengthProperty).toInt();
137  // qDebug() << "Found variable type" << variableType << "length" << oldLength << "at pos" << c.position();
138  const QString value = KDReports::variableValue(pageNumber, d->m_report, variableType);
139  const int startPos = c.position();
140  c.setPosition(c.position() + oldLength, QTextCursor::KeepAnchor);
141  // qDebug() << "inserting text" << value << "with format" << c.charFormat().font();
142  c.insertText(value); // update variable value
143  // update marker
144  setVariableMarker(d->m_textDocument.contentDocument(), startPos, variableType, value.length());
145  }
146  } while (!c.atEnd());
147 }
148 
150 {
151  QFont f(font);
152  f.setStyleStrategy(QFont::ForceOutline); // bitmap fonts look awful in printed documents
153  d->m_textDocument.contentDocument().setDefaultFont(f);
154  d->m_builder.setDefaultFont(f);
155 }
156 
158 {
159  return d->m_textDocument.contentDocument().defaultFont();
160 }
161 
163 {
164  d->m_builder.setTabPositions(tabs);
165 }
166 
168 {
169  return d->m_builder.currentPosition();
170 }
KDReports::SystemLocaleShortDate
@ SystemLocaleShortDate
Current date formatted according to the system locale, short format, see Qt::SystemLocaleShortDate.
Definition: KDReportsVariableType.h:40
QTextDocument
Qt::AlignmentFlag
AlignmentFlag
QString::number
QString number(int n, int base)
QTextCharFormat
KDReports::cleanupVariableProperties
void cleanupVariableProperties(QTextCharFormat &charFormat)
Definition: KDReportsHeader.cpp:107
KDReports::PageNumber
@ PageNumber
Page number.
Definition: KDReportsVariableType.h:30
QTextFormat::UserProperty
UserProperty
KDReports::Header::addElement
void addElement(const Element &element, Qt::AlignmentFlag horizontalAlignment=Qt::AlignLeft)
Definition: KDReportsHeader.cpp:47
KDReports::Header::setTabPositions
void setTabPositions(const QList< QTextOption::Tab > &tabs)
Definition: KDReportsHeader.cpp:162
KDReportsReport_p.h
KDReports::ResizableImageProperty
static const int ResizableImageProperty
Definition: KDReportsLayoutHelper_p.h:44
QList< QTextOption::Tab >
KDReportsTextElement.h
KDReports::Element
Definition: KDReportsElement.h:41
KDReports::LocaleTime
@ LocaleTime
Current time in locale-dependent format.
Definition: KDReportsVariableType.h:38
QLocale
KDReports::DefaultLocaleLongDate
@ DefaultLocaleLongDate
Current date formatted according to the application locale, long format, see Qt::DefaultLocaleLongDat...
Definition: KDReportsVariableType.h:43
QTextCursor::KeepAnchor
KeepAnchor
KDReports::PageCount
@ PageCount
Page count.
Definition: KDReportsVariableType.h:31
QLocale::system
QLocale system()
QTime::currentTime
QTime currentTime()
QTextCursor::setCharFormat
void setCharFormat(const QTextCharFormat &format)
KDReports::Report
Definition: KDReportsReport.h:81
KDReports::Header::addInlineElement
void addInlineElement(const Element &element)
Definition: KDReportsHeader.cpp:41
KDReports::TextDocument
Definition: KDReportsTextDocument_p.h:56
QString
KDReports::TextTime
@ TextTime
Current time in text format like "13:42:59".
Definition: KDReportsVariableType.h:36
KDReportsReport.h
KDReportsHeader.h
KDReportsHeader_p.h
QString::length
int length() const const
QLocale::toString
QString toString(qlonglong i) const const
QVariant::toInt
int toInt(bool *ok) const const
KDReports::SystemLocaleLongDate
@ SystemLocaleLongDate
Current date formatted according to the system locale, long format, see Qt::SystemLocaleLongDate.
Definition: KDReportsVariableType.h:41
KDReports::DefaultLocaleShortDate
@ DefaultLocaleShortDate
Current date formatted according to the application locale, short format, see Qt::DefaultLocaleShortD...
Definition: KDReportsVariableType.h:42
KDReports::setVariableMarker
void setVariableMarker(QTextDocument &textDoc, int pos, KDReports::VariableType variableType, int valueLength)
Definition: KDReportsHeader.cpp:95
QDate::currentDate
QDate currentDate()
KDReports::Header::defaultFont
QFont defaultFont() const
Definition: KDReportsHeader.cpp:157
KDReports::Report::numberOfPages
int numberOfPages() const
Definition: KDReportsReport.cpp:654
KDReports::Header::addVerticalSpacing
void addVerticalSpacing(qreal space)
Definition: KDReportsHeader.cpp:119
KDReports::Header::setDefaultFont
void setDefaultFont(const QFont &font)
Definition: KDReportsHeader.cpp:149
QTextFormat::setProperty
void setProperty(int propertyId, const QVariant &value)
QFont::setStyleStrategy
void setStyleStrategy(QFont::StyleStrategy s)
QTextFormat::hasProperty
bool hasProperty(int propertyId) const const
KDReports::TextDate
@ TextDate
Definition: KDReportsVariableType.h:32
QTextFormat::property
QVariant property(int propertyId) const const
QLocale::ShortFormat
ShortFormat
QTextCursor::setPosition
void setPosition(int pos, QTextCursor::MoveMode m)
KDReports::variableValue
QString variableValue(int pageNumber, KDReports::Report *report, VariableType type)
Definition: KDReportsHeader.cpp:62
KDReports::Header::currentPosition
int currentPosition() const
Definition: KDReportsHeader.cpp:167
KDReportsLayoutHelper_p.h
KDReports::LocaleDate
@ LocaleDate
Current date in locale-dependent format, deprecated in favour of SystemLocaleShortDate or SystemLocal...
Definition: KDReportsVariableType.h:35
KDReports::ISOTime
@ ISOTime
Current time in ISO 8601 format like "13:42:59".
Definition: KDReportsVariableType.h:37
KDReports::ISODate
@ ISODate
names but unlocalized order of names and numbers
Definition: KDReportsVariableType.h:34
QTextCursor::NextCharacter
NextCharacter
QTime::toString
QString toString(Qt::DateFormat format) const const
QDate::toString
QString toString(Qt::DateFormat format) const const
VariableLengthProperty
static const int VariableLengthProperty
Definition: KDReportsHeader.cpp:59
KDReportsAbstractReportLayout_p.h
KDReports::VariableType
VariableType
Definition: KDReportsVariableType.h:29
QVariant
QFont::ForceOutline
ForceOutline
KDReports::Header::addVariable
void addVariable(VariableType variable)
Definition: KDReportsHeader.cpp:114
QTextCursor::movePosition
bool movePosition(QTextCursor::MoveOperation operation, QTextCursor::MoveMode mode, int n)
QFont
VariableTypeProperty
static const int VariableTypeProperty
Definition: KDReportsHeader.cpp:58
QTextCursor
Qt::TextDate
TextDate
QTextCursor::charFormat
QTextCharFormat charFormat() const const
KDReports
Definition: KDReportsAbstractReportLayout_p.h:30

© 2007-2021 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 Fri Jul 15 2022 13:09:06 for KD Reports API Documentation by doxygen 1.8.20