KD Reports API Documentation  2.1
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 }
103 
105 {
106  d->m_elements.append(KDReports::ElementData(element.clone()));
107 }
108 
109 void KDReports::Frame::addElement(const Element &element, Qt::AlignmentFlag horizontalAlignment)
110 {
111  d->m_elements.append(KDReports::ElementData(element.clone(), horizontalAlignment));
112 }
113 
115 {
116  d->m_elements.append(KDReports::ElementData(variable));
117 }
118 
120 {
121  // prepare the frame
122  QTextFrameFormat format;
123  if (d->m_width) {
124  if (d->m_widthUnit == Millimeters) {
126  } else {
128  }
129  }
130  if (d->m_height) {
131  if (d->m_heightUnit == Millimeters) {
133  } else {
135  }
136  }
137 
138  format.setPadding(mmToPixels(padding()));
139  format.setBorder(d->m_border);
140  // TODO borderBrush like in AbstractTableElement
142 
143  QTextCursor &textDocCursor = builder.cursor();
144 
145  QTextFrame *frame = textDocCursor.insertFrame(format);
146 
147  QTextCursor contentsCursor = frame->firstCursorPosition();
148 
149  ReportBuilder contentsBuilder(builder.currentDocumentData(), contentsCursor, builder.report());
150  contentsBuilder.copyStateFrom(builder);
151 
152  foreach (const KDReports::ElementData &ed, d->m_elements) {
153  switch (ed.m_type) {
155  contentsBuilder.addInlineElement(*ed.m_element);
156  break;
158  contentsBuilder.addBlockElement(*ed.m_element, ed.m_align);
159  break;
161  contentsBuilder.addVariable(ed.m_variableType);
162  break;
163  }
164  }
165 
166  textDocCursor.movePosition(QTextCursor::End);
167 }
168 
170 {
171  return new Frame(*this);
172 }
Qt::AlignmentFlag
AlignmentFlag
KDReports::ReportBuilder
Definition: KDReportsReportBuilder_p.h:42
QTextFrameFormat
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:79
KDReports::Frame::padding
qreal padding() const
Definition: KDReportsFrame.cpp:85
KDReports::Millimeters
@ Millimeters
Millimeters (the default)
Definition: KDReportsUnit.h:26
QTextFrameFormat::setWidth
void setWidth(qreal width)
KDReports::Frame::~Frame
~Frame() override
Definition: KDReportsFrame.cpp:100
QTextFrame
KDReports::ElementData::m_element
Element * m_element
Definition: KDReportsElementData_p.h:78
KDReports::ElementData::Inline
@ Inline
Definition: KDReportsElementData_p.h:43
QList< KDReports::ElementData >
KDReports::ElementData::m_variableType
KDReports::VariableType m_variableType
Definition: KDReportsElementData_p.h:81
KDReports::Element
Definition: KDReportsElement.h:41
QTextFrameFormat::setPadding
void setPadding(qreal width)
KDReports::Element::clone
virtual Element * clone() const =0
KDReports::Frame::operator=
Frame & operator=(const Frame &other)
Definition: KDReportsFrame.cpp:59
KDReportsFrame.h
QTextLength
KDReportsElement.h
KDReports::ElementData::Block
@ Block
Definition: KDReportsElementData_p.h:44
QTextFrameFormat::setPosition
void setPosition(QTextFrameFormat::Position policy)
QTextFrame::firstCursorPosition
QTextCursor firstCursorPosition() const const
KDReports::Element::operator=
Element & operator=(const Element &other)
Definition: KDReportsElement.cpp:36
KDReports::ReportBuilder::addVariable
virtual void addVariable(KDReports::VariableType variable)
Definition: KDReportsReportBuilder.cpp:88
QTextFrameFormat::setHeight
void setHeight(qreal height)
KDReports::ElementData
Definition: KDReportsElementData_p.h:42
KDReports::Frame::setHeight
void setHeight(qreal height, Unit unit=Millimeters)
Definition: KDReportsFrame.cpp:74
KDReports::Unit
Unit
Definition: KDReportsUnit.h:25
KDReports::Frame::addElement
void addElement(const Element &element, Qt::AlignmentFlag horizontalAlignment=Qt::AlignLeft)
Definition: KDReportsFrame.cpp:109
KDReportsReportBuilder_p.h
KDReports::ReportBuilder::addInlineElement
virtual void addInlineElement(const Element &element)
Definition: KDReportsReportBuilder.cpp:34
QTextCursor::insertFrame
QTextFrame * insertFrame(const QTextFrameFormat &format)
KDReports::ElementData::Variable
@ Variable
Definition: KDReportsElementData_p.h:45
KDReports::Frame::clone
Element * clone() const override
Definition: KDReportsFrame.cpp:169
QTextFrameFormat::setBorder
void setBorder(qreal width)
KDReports::Frame::border
qreal border() const
Definition: KDReportsFrame.cpp:95
KDReports::Frame::addInlineElement
void addInlineElement(const Element &element)
Definition: KDReportsFrame.cpp:104
KDReports::Frame::setPadding
void setPadding(qreal padding)
Definition: KDReportsFrame.cpp:80
KDReports::Frame
Definition: KDReportsFrame.h:38
KDReports::Frame::build
void build(ReportBuilder &builder) const override
Definition: KDReportsFrame.cpp:119
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:114
KDReports::ReportBuilder::addBlockElement
virtual void addBlockElement(const Element &element, Qt::AlignmentFlag horizontalAlignment, const QColor &backgroundColor=QColor())
Definition: KDReportsReportBuilder.cpp:48
QTextCursor::End
End
QTextLength::FixedLength
FixedLength
KDReports::ReportBuilder::cursor
QTextCursor & cursor()
Definition: KDReportsReportBuilder_p.h:48
KDReports::ReportBuilder::copyStateFrom
void copyStateFrom(const ReportBuilder &parentBuilder)
Definition: KDReportsReportBuilder.cpp:180
KDReports::Frame::setBorder
void setBorder(qreal border)
Definition: KDReportsFrame.cpp:90
KDReports::VariableType
VariableType
Definition: KDReportsVariableType.h:29
QTextFrameFormat::InFlow
InFlow
KDReports::Frame::setWidth
void setWidth(qreal width, Unit unit=Millimeters)
Definition: KDReportsFrame.cpp:68
QTextCursor::movePosition
bool movePosition(QTextCursor::MoveOperation operation, QTextCursor::MoveMode mode, int n)
KDReports::ElementData::m_align
Qt::AlignmentFlag m_align
Definition: KDReportsElementData_p.h:82
QTextCursor
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