| 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/polarchartlogvalueaxisradial_p.h> | 
| 9 |  | 
| 10 | QT_BEGIN_NAMESPACE | 
| 11 |  | 
| 12 | PolarChartLogValueAxisRadial::PolarChartLogValueAxisRadial(QLogValueAxis *axis, QGraphicsItem *item) | 
| 13 |     : PolarChartAxisRadial(axis, item) | 
| 14 | { | 
| 15 |     QObject::connect(sender: axis, SIGNAL(baseChanged(qreal)), receiver: this, SLOT(handleBaseChanged(qreal))); | 
| 16 |     QObject::connect(sender: axis, SIGNAL(labelFormatChanged(QString)), | 
| 17 |                      receiver: this, SLOT(handleLabelFormatChanged(QString))); | 
| 18 | } | 
| 19 |  | 
| 20 | PolarChartLogValueAxisRadial::~PolarChartLogValueAxisRadial() | 
| 21 | { | 
| 22 | } | 
| 23 |  | 
| 24 | QList<qreal> PolarChartLogValueAxisRadial::calculateLayout() const | 
| 25 | { | 
| 26 |     QLogValueAxis *logValueAxis = qobject_cast<QLogValueAxis *>(object: axis()); | 
| 27 |  | 
| 28 |     QList<qreal> points; | 
| 29 |     points.resize(size: logValueAxis->tickCount()); | 
| 30 |  | 
| 31 |     const qreal logMax = qLn(v: logValueAxis->max()) / qLn(v: logValueAxis->base()); | 
| 32 |     const qreal logMin = qLn(v: logValueAxis->min()) / qLn(v: logValueAxis->base()); | 
| 33 |     const qreal innerEdge = logMin < logMax ? logMin : logMax; | 
| 34 |     const qreal delta = (axisGeometry().width() / 2.0) / qAbs(t: logMax - logMin); | 
| 35 |     const qreal initialSpan = (std::ceil(x: innerEdge) - innerEdge) * delta; | 
| 36 |  | 
| 37 |     for (int i = 0; i < logValueAxis->tickCount(); ++i) | 
| 38 |         points[i] = initialSpan + (delta * qreal(i)); | 
| 39 |  | 
| 40 |     return points; | 
| 41 | } | 
| 42 |  | 
| 43 | void PolarChartLogValueAxisRadial::createAxisLabels(const QList<qreal> &layout) | 
| 44 | { | 
| 45 |     QLogValueAxis *logValueAxis = static_cast<QLogValueAxis *>(axis()); | 
| 46 |     setLabels(createLogValueLabels(min: logValueAxis->min(), | 
| 47 |                                    max: logValueAxis->max(), | 
| 48 |                                    base: logValueAxis->base(), | 
| 49 |                                    ticks: layout.size(), | 
| 50 |                                    format: logValueAxis->labelFormat())); | 
| 51 | } | 
| 52 |  | 
| 53 | void PolarChartLogValueAxisRadial::handleBaseChanged(qreal base) | 
| 54 | { | 
| 55 |     Q_UNUSED(base); | 
| 56 |     QGraphicsLayoutItem::updateGeometry(); | 
| 57 |     if (presenter()) | 
| 58 |         presenter()->layout()->invalidate(); | 
| 59 | } | 
| 60 |  | 
| 61 | void PolarChartLogValueAxisRadial::handleLabelFormatChanged(const QString &format) | 
| 62 | { | 
| 63 |     Q_UNUSED(format); | 
| 64 |     QGraphicsLayoutItem::updateGeometry(); | 
| 65 |     if (presenter()) | 
| 66 |         presenter()->layout()->invalidate(); | 
| 67 | } | 
| 68 |  | 
| 69 | QT_END_NAMESPACE | 
| 70 |  | 
| 71 | #include "moc_polarchartlogvalueaxisradial_p.cpp" | 
| 72 |  |