KD Reports API Documentation  2.0
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  delete d;
40 }
41 
43 {
44  d->m_builder.addInlineElementPublic(element);
45  // don't add anything else here, it won't be called from the xml parser
46 }
47 
48 void KDReports::Header::addElement(const Element &element, Qt::AlignmentFlag horizontalAlignment)
49 {
50  d->m_builder.addBlockElementPublic(element, horizontalAlignment);
51  // don't add anything else here, it won't be called from the xml parser
52 }
53 
54 KDReports::TextDocument &KDReports::Header::doc()
55 {
56  return d->m_textDocument;
57 }
58 
59 static const int VariableTypeProperty = QTextFormat::UserProperty + 246;
60 static const int VariableLengthProperty = QTextFormat::UserProperty + 247;
61 
62 namespace KDReports {
63 QString variableValue(int pageNumber, KDReports::Report *report, VariableType type)
64 {
65  switch (type) {
66  case PageNumber:
67  return QString::number(pageNumber + 1);
68  case PageCount:
69  return QString::number(report->numberOfPages());
70  case TextDate:
71  return QDate::currentDate().toString(Qt::TextDate);
72  case ISODate:
73  return QDate::currentDate().toString(Qt::ISODate);
75  return QLocale::system().toString(QDate::currentDate(), QLocale::ShortFormat);
77  return QLocale::system().toString(QDate::currentDate(), QLocale::LongFormat);
78  case LocaleDate:
80  return QLocale().toString(QDate::currentDate(), QLocale::ShortFormat);
82  return QLocale().toString(QDate::currentDate(), QLocale::LongFormat);
83  case TextTime:
84  return QTime::currentTime().toString(Qt::TextDate);
85  case ISOTime:
86  return QTime::currentTime().toString(Qt::ISODate);
87  case LocaleTime:
88  return QLocale().toString(QTime::currentTime(), QLocale::ShortFormat);
89  default:
90  qWarning() << "Program error, variable" << type << "not implemented";
91  }
92  return QString();
93 }
94 }
95 
96 void KDReports::setVariableMarker(QTextDocument &textDoc, int pos, KDReports::VariableType variableType, int valueLength)
97 {
98  QTextCursor c(&textDoc);
99  c.setPosition(pos);
100  c.movePosition(QTextCursor::NextCharacter, QTextCursor::KeepAnchor);
101  QTextCharFormat charFormat = c.charFormat();
102  charFormat.setProperty(ResizableImageProperty, QVariant());
103  charFormat.setProperty(VariableTypeProperty, variableType);
104  charFormat.setProperty(VariableLengthProperty, valueLength);
105  c.setCharFormat(charFormat);
106 }
107 
108 void KDReports::cleanupVariableProperties(QTextCharFormat &charFormat)
109 {
110  charFormat.setProperty(ResizableImageProperty, QVariant());
111  charFormat.setProperty(VariableTypeProperty, QVariant());
112  charFormat.setProperty(VariableLengthProperty, QVariant());
113 }
114 
116 {
117  d->m_builder.addVariablePublic(variable);
118 }
119 
121 {
122  d->m_builder.addVerticalSpacingPublic(space);
123 }
124 
125 void KDReports::Header::preparePaintingPage(int pageNumber)
126 {
127  // qDebug() << "preparePaintingPage" << pageNumber;
128  QTextCursor c(&d->m_textDocument.contentDocument());
129  do {
130  c.movePosition(QTextCursor::NextCharacter);
131  // qDebug() << c.block().text() << c.position();
132  QTextCharFormat format = c.charFormat();
133  if (format.hasProperty(VariableTypeProperty)) {
134  // go back one char, due to charFormat() being the format of the character -before- the cursor!
135  c.movePosition(QTextCursor::PreviousCharacter);
136  const VariableType variableType = static_cast<VariableType>(format.property(VariableTypeProperty).toInt());
137  const int oldLength = format.property(VariableLengthProperty).toInt();
138  // qDebug() << "Found variable type" << variableType << "length" << oldLength << "at pos" << c.position();
139  const QString value = KDReports::variableValue(pageNumber, d->m_report, variableType);
140  const int startPos = c.position();
141  c.setPosition(c.position() + oldLength, QTextCursor::KeepAnchor);
142  // qDebug() << "inserting text" << value << "with format" << c.charFormat().font();
143  c.insertText(value); // update variable value
144  // update marker
145  setVariableMarker(d->m_textDocument.contentDocument(), startPos, variableType, value.length());
146  }
147  } while (!c.atEnd());
148 }
149 
150 void KDReports::Header::setDefaultFont(const QFont &font)
151 {
152  QFont f(font);
153  f.setStyleStrategy(QFont::ForceOutline); // bitmap fonts look awful in printed documents
154  d->m_textDocument.contentDocument().setDefaultFont(f);
155  d->m_builder.setDefaultFont(f);
156 }
157 
159 {
160  return d->m_textDocument.contentDocument().defaultFont();
161 }
162 
164 {
165  d->m_builder.setTabPositions(tabs);
166 }
167 
169 {
170  return d->m_builder.currentPosition();
171 }
KDReports::SystemLocaleShortDate
@ SystemLocaleShortDate
Current date formatted according to the system locale, short format, see Qt::SystemLocaleShortDate.
Definition: KDReportsVariableType.h:40
KDReports::cleanupVariableProperties
void cleanupVariableProperties(QTextCharFormat &charFormat)
Definition: KDReportsHeader.cpp:108
KDReports::PageNumber
@ PageNumber
Page number.
Definition: KDReportsVariableType.h:30
KDReports::Header::addElement
void addElement(const Element &element, Qt::AlignmentFlag horizontalAlignment=Qt::AlignLeft)
Definition: KDReportsHeader.cpp:48
KDReports::Header::setTabPositions
void setTabPositions(const QList< QTextOption::Tab > &tabs)
Definition: KDReportsHeader.cpp:163
KDReportsReport_p.h
KDReports::AbstractReportLayout::defaultFont
virtual QFont defaultFont() const =0
KDReports::ResizableImageProperty
static const int ResizableImageProperty
Definition: KDReportsLayoutHelper_p.h:58
QList< QTextOption::Tab >
KDReportsTextElement.h
KDReports::Element
Definition: KDReportsElement.h:39
KDReports::LocaleTime
@ LocaleTime
Current time in locale-dependent format.
Definition: KDReportsVariableType.h:38
KDReports::DefaultLocaleLongDate
@ DefaultLocaleLongDate
Current date formatted according to the application locale, long format, see Qt::DefaultLocaleLongDat...
Definition: KDReportsVariableType.h:43
KDReports::PageCount
@ PageCount
Page count.
Definition: KDReportsVariableType.h:31
KDReports::Report
Definition: KDReportsReport.h:80
KDReports::Header::addInlineElement
void addInlineElement(const Element &element)
Definition: KDReportsHeader.cpp:42
KDReports::TextDocument
Definition: KDReportsTextDocument_p.h:55
KDReports::TextTime
@ TextTime
Current time in text format like "13:42:59".
Definition: KDReportsVariableType.h:36
KDReportsReport.h
KDReportsHeader.h
KDReportsHeader_p.h
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:96
KDReports::ReportPrivate::m_layout
KDReports::AbstractReportLayout * m_layout
Definition: KDReportsReport_p.h:171
KDReports::Header::defaultFont
QFont defaultFont() const
Definition: KDReportsHeader.cpp:158
KDReports::Report::numberOfPages
int numberOfPages() const
Definition: KDReportsReport.cpp:655
KDReports::Header::addVerticalSpacing
void addVerticalSpacing(qreal space)
Definition: KDReportsHeader.cpp:120
KDReports::Header::setDefaultFont
void setDefaultFont(const QFont &font)
Definition: KDReportsHeader.cpp:150
KDReports::TextDate
@ TextDate
Definition: KDReportsVariableType.h:32
KDReports::variableValue
QString variableValue(int pageNumber, KDReports::Report *report, VariableType type)
Definition: KDReportsHeader.cpp:63
KDReports::Header::currentPosition
int currentPosition() const
Definition: KDReportsHeader.cpp:168
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
VariableLengthProperty
static const int VariableLengthProperty
Definition: KDReportsHeader.cpp:60
KDReportsAbstractReportLayout_p.h
KDReports::VariableType
VariableType
Definition: KDReportsVariableType.h:29
KDReports::Header::addVariable
void addVariable(VariableType variable)
Definition: KDReportsHeader.cpp:115
VariableTypeProperty
static const int VariableTypeProperty
Definition: KDReportsHeader.cpp:59
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 Sat Jan 8 2022 02:38:32 for KD Reports API Documentation by doxygen 1.8.17