KD Reports API Documentation  2.0
KDReportsFrame.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 "KDReportsFrame.h"
18 #include "KDReportsElement.h"
19 #include "KDReportsElementData_p.h"
22 
23 #include <QDebug>
24 #include <QTextFrame>
25 
26 class KDReports::FramePrivate
27 {
28 public:
29  FramePrivate()
30  : m_width(0)
31  , m_height(0)
32  , m_padding(0.5)
33  , m_border(1.0)
34  , m_widthUnit(KDReports::Millimeters)
35  , m_heightUnit(KDReports::Millimeters)
36  {
37  }
38  ~FramePrivate() { }
40  qreal m_width;
41  qreal m_height;
42  qreal m_padding;
43  qreal m_border;
44  KDReports::Unit m_widthUnit;
45  KDReports::Unit m_heightUnit;
46 };
47 
49  : d(new FramePrivate)
50 {
51 }
52 
54  : Element(other)
55  , d(new FramePrivate(*other.d))
56 {
57 }
58 
60 {
61  if (&other == this)
62  return *this;
63  Element::operator=(other);
64  *d = *other.d;
65  return *this;
66 }
67 
69 {
70  d->m_width = width;
71  d->m_widthUnit = unit;
72 }
73 
75 {
76  d->m_height = height;
77  d->m_heightUnit = unit;
78 }
79 
80 void KDReports::Frame::setPadding(qreal padding)
81 {
82  d->m_padding = padding;
83 }
84 
86 {
87  return d->m_padding;
88 }
89 
90 void KDReports::Frame::setBorder(qreal border)
91 {
92  d->m_border = border;
93 }
94 
96 {
97  return d->m_border;
98 }
99 
101 {
102  delete d;
103 }
104 
106 {
107  d->m_elements.append(KDReports::ElementData(element.clone()));
108 }
109 
110 void KDReports::Frame::addElement(const Element &element, Qt::AlignmentFlag horizontalAlignment)
111 {
112  d->m_elements.append(KDReports::ElementData(element.clone(), horizontalAlignment));
113 }
114 
116 {
117  d->m_elements.append(KDReports::ElementData(variable));
118 }
119 
121 {
122  // prepare the frame
123  QTextFrameFormat format;
124  if (d->m_width) {
125  if (d->m_widthUnit == Millimeters) {
126  format.setWidth(QTextLength(QTextLength::FixedLength, mmToPixels(d->m_width)));
127  } else {
128  format.setWidth(QTextLength(QTextLength::PercentageLength, d->m_width));
129  }
130  }
131  if (d->m_height) {
132  if (d->m_heightUnit == Millimeters) {
133  format.setHeight(QTextLength(QTextLength::FixedLength, mmToPixels(d->m_height)));
134  } else {
135  format.setHeight(QTextLength(QTextLength::PercentageLength, d->m_height));
136  }
137  }
138 
139  format.setPadding(mmToPixels(padding()));
140  format.setBorder(d->m_border);
141  // TODO borderBrush like in AbstractTableElement
142  format.setPosition(QTextFrameFormat::InFlow);
143 
144  QTextCursor &textDocCursor = builder.cursor();
145 
146  QTextFrame *frame = textDocCursor.insertFrame(format);
147 
148  QTextCursor contentsCursor = frame->firstCursorPosition();
149 
150  ReportBuilder contentsBuilder(builder.currentDocumentData(), contentsCursor, builder.report());
151  contentsBuilder.copyStateFrom(builder);
152 
153  foreach (const KDReports::ElementData &ed, d->m_elements) {
154  switch (ed.m_type) {
156  contentsBuilder.addInlineElement(*ed.m_element);
157  break;
159  contentsBuilder.addBlockElement(*ed.m_element, ed.m_align);
160  break;
162  contentsBuilder.addVariable(ed.m_variableType);
163  break;
164  }
165  }
166 
167  textDocCursor.movePosition(QTextCursor::End);
168 }
169 
171 {
172  return new Frame(*this);
173 }
KDReports::ReportBuilder
Definition: KDReportsReportBuilder_p.h:41
KDReports::Frame::Frame
Frame()
Definition: KDReportsFrame.cpp:48
KDReports::ReportBuilder::currentDocumentData
TextDocumentData & currentDocumentData()
Definition: KDReportsReportBuilder_p.h:69
KDReports::ReportBuilder::report
Report * report()
Definition: KDReportsReportBuilder_p.h:53
KDReports::ElementData::m_type
Type m_type
Definition: KDReportsElementData_p.h:107
KDReports::Frame::padding
qreal padding() const
Definition: KDReportsFrame.cpp:85
KDReports::Millimeters
@ Millimeters
Millimeters (the default)
Definition: KDReportsUnit.h:54
KDReports::Frame::~Frame
~Frame() override
Definition: KDReportsFrame.cpp:100
KDReports::ElementData::m_element
Element * m_element
Definition: KDReportsElementData_p.h:106
KDReports::ElementData::Inline
@ Inline
Definition: KDReportsElementData_p.h:85
QList< KDReports::ElementData >
KDReports::ElementData::m_variableType
KDReports::VariableType m_variableType
Definition: KDReportsElementData_p.h:109
KDReports::Element
Definition: KDReportsElement.h:39
KDReports::ReportBuilder::copyStateFrom
void copyStateFrom(ReportBuilder &parentBuilder)
Definition: KDReportsReportBuilder.cpp:178
KDReports::Element::clone
virtual Element * clone() const =0
KDReports::Frame::operator=
Frame & operator=(const Frame &other)
Definition: KDReportsFrame.cpp:59
KDReportsFrame.h
KDReportsElement.h
KDReports::ElementData::Block
@ Block
Definition: KDReportsElementData_p.h:86
KDReports::Element::operator=
Element & operator=(const Element &other)
Definition: KDReportsElement.cpp:36
KDReports::ReportBuilder::addVariable
virtual void addVariable(KDReports::VariableType variable)
Definition: KDReportsReportBuilder.cpp:87
KDReports::ElementData
Definition: KDReportsElementData_p.h:55
KDReports::Frame::setHeight
void setHeight(qreal height, Unit unit=Millimeters)
Definition: KDReportsFrame.cpp:74
KDReports::Unit
Unit
Definition: KDReportsUnit.h:39
KDReports::Frame::addElement
void addElement(const Element &element, Qt::AlignmentFlag horizontalAlignment=Qt::AlignLeft)
Definition: KDReportsFrame.cpp:110
KDReportsReportBuilder_p.h
KDReports::ReportBuilder::addInlineElement
virtual void addInlineElement(const Element &element)
Definition: KDReportsReportBuilder.cpp:34
KDReports::ElementData::Variable
@ Variable
Definition: KDReportsElementData_p.h:87
KDReports::Frame::clone
Element * clone() const override
Definition: KDReportsFrame.cpp:170
KDReports::Frame::border
qreal border() const
Definition: KDReportsFrame.cpp:95
KDReports::Frame::addInlineElement
void addInlineElement(const Element &element)
Definition: KDReportsFrame.cpp:105
KDReports::Frame::setPadding
void setPadding(qreal padding)
Definition: KDReportsFrame.cpp:80
KDReports::Frame
Definition: KDReportsFrame.h:51
KDReports::Frame::build
void build(ReportBuilder &builder) const override
Definition: KDReportsFrame.cpp:120
KDReportsElementData_p.h
KDReports::mmToPixels
KDREPORTS_EXPORT qreal mmToPixels(qreal mm)
Definition: KDReportsLayoutHelper.cpp:23
KDReportsLayoutHelper_p.h
KDReports::Frame::addVariable
void addVariable(VariableType variable)
Definition: KDReportsFrame.cpp:115
KDReports::ReportBuilder::addBlockElement
virtual void addBlockElement(const Element &element, Qt::AlignmentFlag horizontalAlignment, const QColor &backgroundColor=QColor())
Definition: KDReportsReportBuilder.cpp:47
KDReports::ReportBuilder::cursor
QTextCursor & cursor()
Definition: KDReportsReportBuilder_p.h:48
KDReports::Frame::setBorder
void setBorder(qreal border)
Definition: KDReportsFrame.cpp:90
KDReports::VariableType
VariableType
Definition: KDReportsVariableType.h:29
KDReports::Frame::setWidth
void setWidth(qreal width, Unit unit=Millimeters)
Definition: KDReportsFrame.cpp:68
KDReports::ElementData::m_align
Qt::AlignmentFlag m_align
Definition: KDReportsElementData_p.h:110
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