KD Chart API Documentation 3.1
Loading...
Searching...
No Matches
KDChartMeasure.cpp
Go to the documentation of this file.
1/****************************************************************************
2**
3** This file is part of the KD Chart library.
4**
5** SPDX-FileCopyrightText: 2001 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
6**
7** SPDX-License-Identifier: MIT
8**
9****************************************************************************/
10
11#include "KDChartMeasure.h"
12
13#include <QWidget>
14
15#include <KDChartAbstractArea.h>
20
21#include <KDABLibFakes>
22
23namespace KDChart {
24
26{
27 // this block left empty intentionally
28}
29
30Measure::Measure(qreal value,
33 : mValue(value)
34 , mMode(mode)
35 , mArea(nullptr)
36 , mOrientation(orientation)
37{
38 // this block left empty intentionally
39}
40
42 : mValue(r.value())
43 , mMode(r.calculationMode())
44 , mArea(r.referenceArea())
45 , mOrientation(r.referenceOrientation())
46{
47 // this block left empty intentionally
48}
49
51{
52 if (this != &r) {
53 mValue = r.value();
54 mMode = r.calculationMode();
55 mArea = r.referenceArea();
56 mOrientation = r.referenceOrientation();
57 }
58
59 return *this;
60}
61
62qreal Measure::calculatedValue(const QSizeF &autoSize,
63 KDChartEnums::MeasureOrientation autoOrientation) const
64{
66 return mValue;
67 } else {
68 qreal value = 0.0;
69 const QObject theAutoArea;
70 const QObject *autoArea = &theAutoArea;
71 const QObject *area = mArea ? mArea : autoArea;
72 KDChartEnums::MeasureOrientation orientation = mOrientation;
73 switch (mMode) {
75 area = autoArea;
76 orientation = autoOrientation;
77 break;
79 area = autoArea;
80 break;
82 orientation = autoOrientation;
83 break;
84 case KDChartEnums::MeasureCalculationModeAbsolute: // fall through intended
86 break;
87 }
88 if (area) {
89 QSizeF size;
90 if (area == autoArea)
91 size = autoSize;
92 else
93 size = sizeOfArea(area);
94 // qDebug() << ( area == autoArea ) << "size" << size;
95 qreal referenceValue = 0;
96 switch (orientation) {
97 case KDChartEnums::MeasureOrientationAuto: // fall through intended
99 referenceValue = qMin(size.width(), size.height());
100 break;
102 referenceValue = qMax(size.width(), size.height());
103 break;
105 referenceValue = size.width();
106 break;
108 referenceValue = size.height();
109 break;
110 }
111 value = mValue / 1000.0 * referenceValue;
112 }
113 return value;
114 }
115}
116
117qreal Measure::calculatedValue(const QObject *autoArea,
118 KDChartEnums::MeasureOrientation autoOrientation) const
119{
120 return calculatedValue(sizeOfArea(autoArea), autoOrientation);
121}
122
123const QSizeF Measure::sizeOfArea(const QObject *area) const
124{
125 QSizeF size;
126 const auto *plane = dynamic_cast<const CartesianCoordinatePlane *>(area);
127 if (false) {
128 size = plane->visibleDiagramArea().size();
129 } else {
130 const auto *kdcArea = dynamic_cast<const AbstractArea *>(area);
131 if (kdcArea) {
132 size = kdcArea->geometry().size();
133 // qDebug() << "Measure::sizeOfArea() found kdcArea with size" << size;
134 } else {
135 const auto *widget = dynamic_cast<const QWidget *>(area);
136 if (widget) {
137 /* ATTENTION: Using the layout does not work: The Legend will never get the right size then!
138 const QLayout * layout = widget->layout();
139 if ( layout ) {
140 size = layout->geometry().size();
141 //qDebug() << "Measure::sizeOfArea() found widget with layout size" << size;
142 } else*/
143 {
144 size = widget->geometry().size();
145 // qDebug() << "Measure::sizeOfArea() found widget with size" << size;
146 }
148 size = QSizeF(1.0, 1.0);
149 // qDebug("Measure::sizeOfArea() got no valid area.");
150 }
151 }
152 }
154 return QSizeF(size.width() * factors.first, size.height() * factors.second);
155}
156
157bool Measure::operator==(const Measure &r) const
158{
159 return (mValue == r.value() && mMode == r.calculationMode() && mArea == r.referenceArea() && mOrientation == r.referenceOrientation());
160}
161
163{
164 mFactors.push(qMakePair(qreal(1.0), qreal(1.0)));
165}
166
168{
169 // this space left empty intentionally
170}
171
177
178void GlobalMeasureScaling::setFactors(qreal factorX, qreal factorY)
179{
180 instance()->mFactors.push(qMakePair(factorX, factorY));
181}
182
184{
185 // never remove the initial (1.0. 1.0) setting
186 if (instance()->mFactors.count() > 1)
187 instance()->mFactors.pop();
188}
189
191{
192 return instance()->mFactors.top();
193}
194
196{
197 instance()->m_paintDevice = paintDevice;
198}
199
201{
202 return instance()->m_paintDevice;
203}
204}
205
206#if !defined(QT_NO_DEBUG_STREAM)
208{
209 dbg << "KDChart::Measure("
210 << "value=" << m.value()
211 << "calculationmode=" << m.calculationMode()
212 << "referencearea=" << m.referenceArea()
213 << "referenceorientation=" << m.referenceOrientation()
214 << ")";
215 return dbg;
216}
217#endif /* QT_NO_DEBUG_STREAM */
QDebug operator<<(QDebug dbg, const KDChart::Measure &m)
Declaring the class KDChart::Measure.
@ MeasureCalculationModeRelative
@ MeasureCalculationModeAutoOrientation
@ MeasureCalculationModeAbsolute
@ MeasureCalculationModeAuto
@ MeasureCalculationModeAutoArea
@ MeasureOrientationVertical
@ MeasureOrientationMinimum
@ MeasureOrientationMaximum
@ MeasureOrientationHorizontal
An area in the chart with a background, a frame, etc.
static const QPair< qreal, qreal > currentFactors()
static void setFactors(qreal factorX, qreal factorY)
static GlobalMeasureScaling * instance()
static void setPaintDevice(QPaintDevice *paintDevice)
static QPaintDevice * paintDevice()
Measure is used to specify relative and absolute sizes in KDChart, e.g. font sizes.
qreal calculatedValue(const QObject *autoArea, KDChartEnums::MeasureOrientation autoOrientation) const
const QObject * referenceArea() const
qreal value() const
const QSizeF sizeOfArea(const QObject *area) const
KDChartEnums::MeasureOrientation referenceOrientation() const
KDChartEnums::MeasureCalculationMode calculationMode() const
Measure & operator=(const Measure &)
bool operator==(const Measure &) const
qreal height() const const
qreal width() const const
void push(const T &t)
T & top()

© 2001 Klarälvdalens Datakonsult AB (KDAB)
"The Qt, C++ and OpenGL Experts"
https://www.kdab.com/
https://www.kdab.com/development-resources/qt-tools/kd-chart/
Generated on Wed May 1 2024 00:01:10 for KD Chart API Documentation by doxygen 1.9.8