KD Reports API Documentation  2.0
KDReportsChartElement.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 "KDReportsChartElement.h"
20 #include "KDReportsReport.h"
22 #include "KDReportsReport_p.h" // modelForKey
24 #ifdef HAVE_KDCHART
25 #include <KDChartBarDiagram>
26 #include <KDChartChart>
27 //#include <KDChartSerializer>
28 #endif
29 #include <QDebug>
30 #include <QFile>
31 #include <QLabel>
32 #include <QPainter>
33 #include <QTextDocument>
34 #include <QUrl>
35 
36 class KDReports::ChartElementPrivate : public QSharedData
37 {
38 public:
39  ChartElementPrivate()
40  : m_tableModel(nullptr)
41  , m_size(100, 100)
42  , m_unit(KDReports::Millimeters)
43  ,
44 #ifdef HAVE_KDCHART
45  m_chart(0)
46  ,
47 #endif
48  m_deleteChart(false)
49  {
50  }
51 
52  ~ChartElementPrivate()
53  {
54 #ifdef HAVE_KDCHART
55  if (m_deleteChart)
56  delete m_chart;
57 #endif
58  }
59  QAbstractItemModel *m_tableModel;
60  QSizeF m_size;
61  KDReports::Unit m_unit;
62 #ifdef HAVE_KDCHART
63  mutable KDChart::Chart *m_chart;
64 #endif
65  mutable bool m_deleteChart;
66 };
67 
68 KDReports::ChartElement::ChartElement(QAbstractItemModel *tableModel)
69  : d(new ChartElementPrivate)
70 {
71  d->m_tableModel = tableModel;
72 }
73 
74 KDReports::ChartElement::ChartElement(const QString &modelKey)
75  : d(new ChartElementPrivate)
76 {
77  if (!modelKey.isEmpty())
78  d->m_tableModel = KDReports::modelForKey(modelKey);
79 }
80 
82  : d(new ChartElementPrivate)
83 {
84  d->m_tableModel = nullptr;
85 #ifdef HAVE_KDCHART
86  d->m_chart = chart;
87 #else
88  Q_UNUSED(chart);
89  qWarning("ChartElement: cannot use chart, KD Reports was compiled without KD Chart support");
90 #endif
91 }
92 
94  : Element(other)
95  , d(other.d)
96 {
97 }
98 
100 {
101  if (&other == this)
102  return *this;
103  Element::operator=(other);
104  d = other.d;
105  return *this;
106 }
107 
109 
110 void KDReports::ChartElement::setChart(KDChart::Chart *chart)
111 {
112 #ifdef HAVE_KDCHART
113  if (d->m_deleteChart)
114  delete d->m_chart;
115  d->m_chart = chart;
116  d->m_deleteChart = false;
117 #else
118  Q_UNUSED(chart);
119 #endif
120 }
121 
122 void KDReports::ChartElement::setSize(qreal width, qreal height, Unit unit)
123 {
124  d->m_size = QSizeF(width, height);
125  d->m_unit = unit;
126 }
127 
129 {
130 #ifdef HAVE_KDCHART
131  if (!d->m_tableModel && !d->m_chart)
132  return; // no model has been associated yet - give up
133 #else
134  if (!d->m_tableModel)
135  return; // no model has been associated yet - give up
136 #endif
137 
138 #ifdef HAVE_KDCHART
139 
140  if (!d->m_chart) {
141  d->m_chart = new KDChart::Chart;
142  d->m_deleteChart = true;
143  }
144 
145  if (d->m_chart->coordinatePlane()->diagram() == 0) {
146  KDChart::BarDiagram *diagram = new KDChart::BarDiagram();
147  diagram->setModel(d->m_tableModel);
148  d->m_chart->coordinatePlane()->replaceDiagram(diagram);
149  }
150 
151 #if 0 // TODO, but not here...
152  KDChart::Serializer serializer( d->m_chart, d->m_tableModel );
153  QFile file("testSettings.xml");
154  if ( file.open( QIODevice::ReadOnly ) ) {
155  if ( serializer.read( &file ) ) {
156  qDebug() << "Success loading XML for chart";
157  }
158  }
159 #endif
160 
161  QTextCursor &cursor = builder.cursor();
162  QTextCharFormat fmt;
163 
164  fmt.setObjectType(ChartTextObject::ChartObjectTextFormat);
165  fmt.setProperty(ChartTextObject::Size, d->m_size);
166  fmt.setProperty(ChartTextObject::Unit, int(d->m_unit));
167  fmt.setProperty(ChartTextObject::ChartObject, QVariant::fromValue(d->m_chart));
168 
169  cursor.insertText(QString(QChar::ObjectReplacementCharacter), fmt);
170 
171 #else
172  Q_UNUSED(builder);
173  qWarning("ChartElement: cannot create chart, KD Reports was compiled without KD Chart support");
174 #endif
175 }
176 
178 {
179  return new ChartElement(*this);
180 }
181 
183 {
184  return d->m_size;
185 }
186 
188 {
189  return d->m_unit;
190 }
191 
192 void KDReports::ChartElement::setModelKey(const QString &modelKey)
193 {
194  if (!modelKey.isEmpty())
195  d->m_tableModel = KDReports::modelForKey(modelKey);
196 }
197 
198 void KDReports::ChartElement::setTableModel(QAbstractItemModel *tableModel)
199 {
200  d->m_tableModel = tableModel;
201 }
KDReports::ReportBuilder
Definition: KDReportsReportBuilder_p.h:41
KDReports::modelForKey
QAbstractItemModel * modelForKey(const QString &key)
Definition: KDReportsReport.cpp:426
KDReports::ChartElement::size
QSizeF size() const
Definition: KDReportsChartElement.cpp:182
KDReports::Millimeters
@ Millimeters
Millimeters (the default)
Definition: KDReportsUnit.h:54
KDReports::ChartElement::setChart
void setChart(KDChart::Chart *chart)
Definition: KDReportsChartElement.cpp:110
KDReportsReport_p.h
KDReportsTextDocument_p.h
KDReports::ChartElement::ChartElement
ChartElement(QAbstractItemModel *tableModel)
Definition: KDReportsChartElement.cpp:68
KDReports::Element
Definition: KDReportsElement.h:39
KDReports::ChartElement::operator=
ChartElement & operator=(const ChartElement &other)
Definition: KDReportsChartElement.cpp:99
KDReportsChartTextObject_p.h
KDReports::ChartElement::setModelKey
void setModelKey(const QString &modelKey)
Definition: KDReportsChartElement.cpp:192
KDReportsReport.h
KDReports::Element::operator=
Element & operator=(const Element &other)
Definition: KDReportsElement.cpp:36
KDReports::ChartElement::setTableModel
void setTableModel(QAbstractItemModel *tableModel)
Definition: KDReportsChartElement.cpp:198
KDReports::Unit
Unit
Definition: KDReportsUnit.h:39
KDReportsReportBuilder_p.h
KDReports::ChartElement
Definition: KDReportsChartElement.h:41
KDReportsLayoutHelper_p.h
KDReports::ChartElement::~ChartElement
~ChartElement() override
Definition: KDReportsChartElement.cpp:108
KDReports::ReportBuilder::cursor
QTextCursor & cursor()
Definition: KDReportsReportBuilder_p.h:48
KDReports::ChartElement::clone
Element * clone() const override
Definition: KDReportsChartElement.cpp:177
KDReports::ChartElement::unit
Unit unit() const
Definition: KDReportsChartElement.cpp:187
KDReports::ChartElement::build
void build(ReportBuilder &) const override
Definition: KDReportsChartElement.cpp:128
KDReportsChartElement.h
KDReports::ChartElement::setSize
void setSize(qreal width, qreal height, Unit unit=Millimeters)
Definition: KDReportsChartElement.cpp:122
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