KD Reports API Documentation  2.0
KDReportsAbstractTableElement.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 
19 #include <QDebug>
20 #include <QTextCursor>
21 #include <QTextTableFormat>
22 
23 class KDReports::AbstractTableElementPrivate
24 {
25 public:
26  AbstractTableElementPrivate()
27  : m_border(1.0)
28  , m_borderBrush(Qt::darkGray /*like Qt does*/)
29  , m_padding(0.5)
30  , m_width(0)
31  , m_unit(KDReports::Millimeters)
32  , m_fontSpecified(false)
33  {
34  }
35  qreal m_border;
36  QBrush m_borderBrush;
37  qreal m_padding;
38  qreal m_width;
39  KDReports::Unit m_unit;
40  QFont m_defaultFont;
41  bool m_fontSpecified;
42  QVector<KDReports::AbstractTableElement::ColumnConstraint> m_constraints;
43 };
44 
46  : Element()
47  , d(new AbstractTableElementPrivate)
48 {
49 }
50 
52  : Element(other)
53  , d(new AbstractTableElementPrivate(*other.d))
54 {
55 }
56 
58 {
59  if (&other == this)
60  return *this;
61  Element::operator=(other);
62  *d = *other.d;
63  return *this;
64 }
65 
66 void KDReports::AbstractTableElement::setColumnConstraints(const QVector<KDReports::AbstractTableElement::ColumnConstraint> &constraints)
67 {
68  d->m_constraints = constraints;
69 }
70 
72 {
73  delete d;
74 }
75 
77 {
78  d->m_border = border;
79 }
80 
82 {
83  return d->m_border;
84 }
85 
87 {
88  d->m_borderBrush = brush;
89 }
90 
92 {
93  return d->m_borderBrush;
94 }
95 
97 {
98  d->m_padding = padding;
99 }
100 
102 {
103  return d->m_padding;
104 }
105 
107 {
108  d->m_width = width;
109  d->m_unit = unit;
110 }
111 
113 {
114  return d->m_width;
115 }
116 
118 {
119  return d->m_unit;
120 }
121 
123 {
124  d->m_defaultFont = font;
125  d->m_fontSpecified = true;
126 }
127 
129 {
130  *isSet = d->m_fontSpecified;
131  return d->m_defaultFont;
132 }
133 
134 void KDReports::AbstractTableElement::fillTableFormat(QTextTableFormat &tableFormat, QTextCursor &textDocCursor) const
135 {
136  if (d->m_width) {
137  if (d->m_unit == Millimeters) {
138  tableFormat.setWidth(QTextLength(QTextLength::FixedLength, mmToPixels(d->m_width)));
139  } else {
140  tableFormat.setWidth(QTextLength(QTextLength::PercentageLength, d->m_width));
141  }
142  }
143 
144  if (!d->m_constraints.isEmpty()) {
145  QVector<QTextLength> constraints;
146  constraints.reserve(d->m_constraints.size());
147  for (const auto &c : qAsConst(d->m_constraints)) {
148  QTextLength length;
149  if (c.unit == Millimeters) {
150  length = QTextLength(QTextLength::FixedLength, mmToPixels(c.width));
151  } else {
152  length = QTextLength(QTextLength::PercentageLength, c.width);
153  }
154  constraints.append(length);
155  }
156  tableFormat.setColumnWidthConstraints(constraints);
157  }
158 
159  tableFormat.setBorder(border());
160  tableFormat.setBorderBrush(borderBrush());
161  tableFormat.setCellPadding(mmToPixels(padding()));
162  tableFormat.setCellSpacing(0); // HTML-like table borders look so old century
163  if (d->m_fontSpecified) {
164  QTextCharFormat charFormat = textDocCursor.charFormat();
165  charFormat.setFont(d->m_defaultFont);
166  textDocCursor.setCharFormat(charFormat);
167  }
168 }
KDReports::AbstractTableElement::setWidth
void setWidth(qreal width, Unit unit=Millimeters)
Definition: KDReportsAbstractTableElement.cpp:106
KDReports::AbstractTableElement::setBorder
void setBorder(qreal border)
Definition: KDReportsAbstractTableElement.cpp:76
KDReports::Millimeters
@ Millimeters
Millimeters (the default)
Definition: KDReportsUnit.h:54
KDReports::AbstractTableElement::setColumnConstraints
void setColumnConstraints(const QVector< ColumnConstraint > &constraints)
Definition: KDReportsAbstractTableElement.cpp:66
KDReports::AbstractTableElement::border
qreal border() const
Definition: KDReportsAbstractTableElement.cpp:81
KDReports::Element
Definition: KDReportsElement.h:39
KDReports::AbstractTableElement::fillTableFormat
void fillTableFormat(QTextTableFormat &tableFormat, QTextCursor &textDocCursor) const
Definition: KDReportsAbstractTableElement.cpp:134
KDReports::AbstractTableElement::~AbstractTableElement
~AbstractTableElement() override
Definition: KDReportsAbstractTableElement.cpp:71
KDReportsAbstractTableElement.h
KDReports::Element::operator=
Element & operator=(const Element &other)
Definition: KDReportsElement.cpp:36
KDReports::AbstractTableElement::width
qreal width() const
Definition: KDReportsAbstractTableElement.cpp:112
KDReports::Unit
Unit
Definition: KDReportsUnit.h:39
KDReports::AbstractTableElement::setPadding
void setPadding(qreal padding)
Definition: KDReportsAbstractTableElement.cpp:96
KDReports::AbstractTableElement::padding
qreal padding() const
Definition: KDReportsAbstractTableElement.cpp:101
KDReports::AbstractTableElement::operator=
AbstractTableElement & operator=(const AbstractTableElement &other)
Definition: KDReportsAbstractTableElement.cpp:57
KDReports::mmToPixels
KDREPORTS_EXPORT qreal mmToPixels(qreal mm)
Definition: KDReportsLayoutHelper.cpp:23
KDReports::AbstractTableElement::setDefaultFont
void setDefaultFont(const QFont &font)
Definition: KDReportsAbstractTableElement.cpp:122
KDReportsLayoutHelper_p.h
KDReports::AbstractTableElement::defaultFont
QFont defaultFont(bool *isSet) const
Definition: KDReportsAbstractTableElement.cpp:128
KDReports::AbstractTableElement::borderBrush
QBrush borderBrush() const
Definition: KDReportsAbstractTableElement.cpp:91
KDReports::AbstractTableElement
Definition: KDReportsAbstractTableElement.h:38
KDReports::AbstractTableElement::setBorderBrush
void setBorderBrush(const QBrush &brush)
Definition: KDReportsAbstractTableElement.cpp:86
KDReports::AbstractTableElement::unit
Unit unit() const
Definition: KDReportsAbstractTableElement.cpp:117
KDReports::AbstractTableElement::AbstractTableElement
AbstractTableElement()
Definition: KDReportsAbstractTableElement.cpp:45
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