1// Copyright (C) 2021 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3
4#include <QtCharts/qlogvalueaxis.h>
5#include <QtCore/qmath.h>
6#include <private/abstractchartlayout_p.h>
7#include <private/chartpresenter_p.h>
8#include <private/polarchartlogvalueaxisangular_p.h>
9
10QT_BEGIN_NAMESPACE
11
12PolarChartLogValueAxisAngular::PolarChartLogValueAxisAngular(QLogValueAxis *axis,
13 QGraphicsItem *item)
14 : PolarChartAxisAngular(axis, item)
15{
16 QObject::connect(sender: axis, SIGNAL(baseChanged(qreal)), receiver: this, SLOT(handleBaseChanged(qreal)));
17 QObject::connect(sender: axis, SIGNAL(labelFormatChanged(QString)),
18 receiver: this, SLOT(handleLabelFormatChanged(QString)));
19}
20
21PolarChartLogValueAxisAngular::~PolarChartLogValueAxisAngular()
22{
23}
24
25QList<qreal> PolarChartLogValueAxisAngular::calculateLayout() const
26{
27 QLogValueAxis *logValueAxis = qobject_cast<QLogValueAxis *>(object: axis());
28
29 QList<qreal> points;
30 points.resize(size: logValueAxis->tickCount());
31
32 const qreal logMax = qLn(v: logValueAxis->max()) / qLn(v: logValueAxis->base());
33 const qreal logMin = qLn(v: logValueAxis->min()) / qLn(v: logValueAxis->base());
34 const qreal startEdge = qMin(a: logMin, b: logMax);
35 const qreal delta = 360.0 / qAbs(t: logMax - logMin);
36 const qreal initialSpan = (std::ceil(x: startEdge) - startEdge) * delta;
37
38 for (int i = 0; i < logValueAxis->tickCount(); ++i)
39 points[i] = initialSpan + (delta * qreal(i));
40
41 return points;
42}
43
44void PolarChartLogValueAxisAngular::createAxisLabels(const QList<qreal> &layout)
45{
46 QLogValueAxis *logValueAxis = static_cast<QLogValueAxis *>(axis());
47 setLabels(createLogValueLabels(min: logValueAxis->min(),
48 max: logValueAxis->max(),
49 base: logValueAxis->base(),
50 ticks: layout.size(),
51 format: logValueAxis->labelFormat()));
52}
53
54void PolarChartLogValueAxisAngular::handleBaseChanged(qreal base)
55{
56 Q_UNUSED(base);
57 QGraphicsLayoutItem::updateGeometry();
58 if (presenter())
59 presenter()->layout()->invalidate();
60}
61
62void PolarChartLogValueAxisAngular::handleLabelFormatChanged(const QString &format)
63{
64 Q_UNUSED(format);
65 QGraphicsLayoutItem::updateGeometry();
66 if (presenter())
67 presenter()->layout()->invalidate();
68}
69
70QT_END_NAMESPACE
71
72#include "moc_polarchartlogvalueaxisangular_p.cpp"
73

source code of qtcharts/src/charts/axis/logvalueaxis/polarchartlogvalueaxisangular.cpp