blob: e13ad84e548bb008a0ea6b6d39f42fb9d4bcdbc1 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
|
// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#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
|