Revision control

++ // Copyright (C) 2023 The Qt Company Ltd.
++ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
++ // Qt-Security score:significant reason:default
++
++
++ #include "qcategory3daxis_p.h"
++ #include "qquickgraphsitem_p.h"
++ #include "qgraphs3dlogging_p.h"
++
++ QT_BEGIN_NAMESPACE
++
++ /*!
++ * \class QCategory3DAxis
++ * \inmodule QtGraphs
++ * \ingroup graphs_3D
++ * \brief The QCategory3DAxis class manipulates an axis of a graph.
++ *
++ * QCategory3DAxis provides an axis that can be given labels. The axis is
++ * divided into equal-sized categories based on the data window size defined by
++ * setting the axis range.
++ *
++ * Grid lines are drawn between categories, if visible. Labels are drawn to
++ * positions of categories if provided.
++ */
++
++ /*!
++ * \qmltype Category3DAxis
++ * \inqmlmodule QtGraphs
++ * \ingroup graphs_qml_3D
++ * \nativetype QCategory3DAxis
++ * \inherits Abstract3DAxis
++ * \brief Manipulates an axis of a graph.
++ *
++ * This type provides an axis that can be given labels.
++ */
++
++ /*!
++ * \qmlproperty list Category3DAxis::labels
++ *
++ * The labels for the axis are applied to categories. If there are fewer labels
++ * than categories, the remaining ones do not have a label. If category labels
++ * are not defined explicitly, labels are generated from the data row (or column)
++ * labels of the primary series of the graph.
++ */
++
++ /*!
++ * \qmlsignal Category3DAxis::rowLabelsChanged()
++ *
++ * This signal is emitted when row \l labels change.
++ */
++
++ /*!
++ * \qmlsignal Category3DAxis::columnLabelsChanged()
++ *
++ * This signal is emitted when column \l labels change.
++ */
++
++ /*!
++ * Constructs a category 3D axis with the parent \a parent.
++ */
++ QCategory3DAxis::QCategory3DAxis(QObject *parent)
++ : QAbstract3DAxis(*(new QCategory3DAxisPrivate()), parent)
++ {}
++
++ /*!
++ * Destroys the category 3D axis.
++ */
++ QCategory3DAxis::~QCategory3DAxis() {}
++
++ /*!
++ * \property QCategory3DAxis::labels
++ *
++ * \brief The labels for the axis applied to categories.
++ *
++ * If there are fewer labels than categories, the
++ * remaining ones do not have a label. If category labels are not defined
++ * explicitly, labels are generated from the data row (or column) labels of the
++ * primary series of the graph.
++ */
++ QStringList QCategory3DAxis::labels() const
++ {
++ return QAbstract3DAxis::labels();
++ }
++
++ void QCategory3DAxis::setLabels(const QStringList &labels)
++ {
++ Q_D(QCategory3DAxis);
++ d->m_labelsExplicitlySet = !labels.isEmpty();
++ bool labelsFromData = false;
++
++ // Get labels from data proxy if axis is attached to a bar graph and an active
++ // axis there
++ if (labels.isEmpty()) {
++ QQuickGraphsItem *graph = qobject_cast<QQuickGraphsItem *>(parent());
++ // TODO: QCategory3DAxis is only used with QBars3D, so is it still necessary to check if
++ // the item is bars or something else?
++ if (graph) {
++ if (graph->axisX() == this) {
++ emit rowLabelsChanged();
++ labelsFromData = true;
++ } else if (graph->axisZ() == this) {
++ emit columnLabelsChanged();
++ labelsFromData = true;
++ }
++ }
++ }
++
++ if (!labelsFromData && d->m_labels != labels) {
++ d->m_labels = labels;
++ emit QAbstract3DAxis::labelsChanged();
++ }
++ }
++
++ /*!
++ * \internal
++ */
++ QCategory3DAxisPrivate::QCategory3DAxisPrivate()
++ : QAbstract3DAxisPrivate(QAbstract3DAxis::AxisType::Category)
++ , m_labelsExplicitlySet(false)
++ {}
++
++ QCategory3DAxisPrivate::~QCategory3DAxisPrivate() {}
++
++ /*!
++ * \internal
++ * The graph uses this function to set labels from the data proxy as category
++ * labels.
++ * If the labels have been set explicitly by the user, data proxy labels
++ * are not used.
++ */
++ void QCategory3DAxisPrivate::setDataLabels(const QStringList &labels)
++ {
++ Q_Q(QCategory3DAxis);
++ if (m_labelsExplicitlySet || m_labels == labels) {
++ qCDebug(lcAProperties3D) << __FUNCTION__
++ << "value is already set to:" << labels;
++ return;
++ }
++
++ m_labels = labels;
++ emit q->QAbstract3DAxis::labelsChanged();
++ }
++
++ bool QCategory3DAxisPrivate::allowZero()
++ {
++ return true;
++ }
++
++ bool QCategory3DAxisPrivate::allowNegatives()
++ {
++ return false;
++ }
++
++ bool QCategory3DAxisPrivate::allowMinMaxSame()
++ {
++ return true;
++ }
++
++ QT_END_NAMESPACE
++
++ #include "moc_qcategory3daxis.cpp"