summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--examples/datavisualization/customitems/customitemgraph.cpp29
-rw-r--r--examples/datavisualization/customitems/customitemgraph.h7
-rw-r--r--examples/datavisualization/customitems/main.cpp15
-rw-r--r--src/datavisualization/doc/src/qtdatavisualization-qml-abstractdeclarative.qdoc37
-rw-r--r--src/datavisualization/engine/abstract3dcontroller.cpp20
-rw-r--r--src/datavisualization/engine/abstract3dcontroller_p.h2
-rw-r--r--src/datavisualization/engine/abstract3drenderer_p.h1
-rw-r--r--src/datavisualization/engine/bars3drenderer.cpp4
-rw-r--r--src/datavisualization/engine/qabstract3dgraph.cpp30
-rw-r--r--src/datavisualization/engine/qabstract3dgraph.h3
-rw-r--r--src/datavisualization/engine/scatter3drenderer.cpp4
-rw-r--r--src/datavisualization/engine/surface3drenderer.cpp3
-rw-r--r--src/datavisualizationqml2/abstractdeclarative.cpp12
-rw-r--r--src/datavisualizationqml2/abstractdeclarative_p.h4
14 files changed, 163 insertions, 8 deletions
diff --git a/examples/datavisualization/customitems/customitemgraph.cpp b/examples/datavisualization/customitems/customitemgraph.cpp
index c2479a9a..0a757e7d 100644
--- a/examples/datavisualization/customitems/customitemgraph.cpp
+++ b/examples/datavisualization/customitems/customitemgraph.cpp
@@ -24,8 +24,9 @@
using namespace QtDataVisualization;
-CustomItemGraph::CustomItemGraph(Q3DSurface *surface)
- : m_graph(surface)
+CustomItemGraph::CustomItemGraph(Q3DSurface *surface, QLabel *label)
+ : m_graph(surface),
+ m_textField(label)
{
QImage layerOneHMap(":/maps/layer_1.png");
QHeightMapSurfaceDataProxy *layerOneProxy = new QHeightMapSurfaceDataProxy(layerOneHMap);
@@ -87,6 +88,9 @@ CustomItemGraph::CustomItemGraph(Q3DSurface *surface)
m_graph->seriesList().at(2)->setColorStyle(Q3DTheme::ColorStyleRangeGradient);
m_graph->scene()->activeCamera()->setCameraPreset(Q3DCamera::CameraPresetFront);
+
+ connect(m_graph, &QAbstract3DGraph::elementSelected,
+ this, &CustomItemGraph::handleElementSelected);
}
CustomItemGraph::~CustomItemGraph()
@@ -189,3 +193,24 @@ void CustomItemGraph::toggleShadows(bool shadows)
else
m_graph->setShadowQuality(QAbstract3DGraph::ShadowQualityNone);
}
+
+void CustomItemGraph::handleElementSelected(QAbstract3DGraph::ElementType type)
+{
+ if (type == QAbstract3DGraph::ElementCustomItem) {
+ int index = m_graph->selectedCustomItemIndex();
+ QCustom3DItem *item = m_graph->selectedCustomItem();
+ QString text;
+ text.setNum(index);
+ text.append(": ");
+ QStringList split = item->meshFile().split("/");
+ text.append(split.last());
+ m_textField->setText(text);
+ } else if (type == QAbstract3DGraph::ElementSeries) {
+ m_textField->setText("Surface");
+ } else if (type > QAbstract3DGraph::ElementSeries
+ && type < QAbstract3DGraph::ElementCustomItem) {
+ m_textField->setText("Axis");
+ } else {
+ m_textField->setText("Nothing");
+ }
+}
diff --git a/examples/datavisualization/customitems/customitemgraph.h b/examples/datavisualization/customitems/customitemgraph.h
index a13e8620..aee32c62 100644
--- a/examples/datavisualization/customitems/customitemgraph.h
+++ b/examples/datavisualization/customitems/customitemgraph.h
@@ -24,6 +24,7 @@
#include <QtDataVisualization/QHeightMapSurfaceDataProxy>
#include <QtDataVisualization/QSurface3DSeries>
#include <QtWidgets/QSlider>
+#include <QtWidgets/QLabel>
using namespace QtDataVisualization;
@@ -31,7 +32,7 @@ class CustomItemGraph : public QObject
{
Q_OBJECT
public:
- explicit CustomItemGraph(Q3DSurface *surface);
+ explicit CustomItemGraph(Q3DSurface *surface, QLabel *label);
~CustomItemGraph();
void toggleItemOne(bool show);
@@ -42,7 +43,11 @@ public:
void toggleShadows(bool shadows);
private:
+ void handleElementSelected(QAbstract3DGraph::ElementType type);
+
+private:
Q3DSurface *m_graph;
+ QLabel *m_textField;
};
#endif
diff --git a/examples/datavisualization/customitems/main.cpp b/examples/datavisualization/customitems/main.cpp
index a37cc76f..fe2d0edc 100644
--- a/examples/datavisualization/customitems/main.cpp
+++ b/examples/datavisualization/customitems/main.cpp
@@ -65,10 +65,12 @@ int main(int argc, char **argv)
vLayoutLeft->addWidget(checkboxThree);
QLabel *label2 = new QLabel("Visuals:");
+ font.setBold(true);
label2->setFont(font);
vLayoutRight->addWidget(label2);
QCheckBox *checkboxOneRight = new QCheckBox("See-Through");
+ font.setBold(false);
checkboxOneRight->setFont(font);
vLayoutRight->addWidget(checkboxOneRight);
@@ -81,11 +83,22 @@ int main(int argc, char **argv)
checkboxThreeRight->setChecked(true);
vLayoutRight->addWidget(checkboxThreeRight);
+ QLabel *label3 = new QLabel("Selection:");
+ font.setBold(true);
+ label3->setFont(font);
+ vLayoutRight->addWidget(label3);
+
+ QLabel *label4 = new QLabel("Nothing");
+ font.setBold(false);
+ font.setPointSize(12);
+ label4->setFont(font);
+ vLayoutRight->addWidget(label4);
+
widget->setWindowTitle(QStringLiteral("Custom Items Example"));
widget->show();
- CustomItemGraph *modifier = new CustomItemGraph(graph);
+ CustomItemGraph *modifier = new CustomItemGraph(graph, label4);
QObject::connect(checkboxOne, &QCheckBox::stateChanged,
modifier, &CustomItemGraph::toggleItemOne);
diff --git a/src/datavisualization/doc/src/qtdatavisualization-qml-abstractdeclarative.qdoc b/src/datavisualization/doc/src/qtdatavisualization-qml-abstractdeclarative.qdoc
index fc91e795..9995c508 100644
--- a/src/datavisualization/doc/src/qtdatavisualization-qml-abstractdeclarative.qdoc
+++ b/src/datavisualization/doc/src/qtdatavisualization-qml-abstractdeclarative.qdoc
@@ -28,8 +28,8 @@
Note that this type is uncreatable, but contains properties that are shared between
the 3D visualizations.
- For AbstractGraph3D enums, see \l QAbstract3DGraph::SelectionFlag and
- \l QAbstract3DGraph::ShadowQuality
+ For AbstractGraph3D enums, see \l QAbstract3DGraph::SelectionFlag,
+ \l QAbstract3DGraph::ShadowQuality, and \l QAbstract3DGraph::ElementType
\sa Bars3D, Scatter3D, Surface3D, {Qt Data Visualization C++ Classes}
*/
@@ -207,3 +207,36 @@
*
* \since Qt Data Visualization 1.1
*/
+
+/*!
+ * \qmlmethod int AbstractGraph3D::selectedCustomItemIndex()
+ *
+ * Can be used to query the index of the selected custom item after receiving elementSelected signal
+ * with \l{QAbstract3DGraph::ElementCustomItem}{ElementCustomItem} type. Selection is valid until
+ * the next elementSelected signal.
+ *
+ * \return index of the selected custom item, or -1.
+ *
+ * \since Qt Data Visualization 1.1
+ */
+
+/*!
+ * \qmlmethod Custom3DItem AbstractGraph3D::selectedCustomItem()
+ *
+ * Can be used to get the selected custom item after receiving elementSelected signal with
+ * \l{QAbstract3DGraph::ElementCustomItem}{ElementCustomItem} type. Ownership of the item remains
+ * with the graph. Selection is valid until the next elementSelected signal.
+ *
+ * \return the selected custom item, or null.
+ *
+ * \since Qt Data Visualization 1.1
+ */
+
+/*! \qmlsignal AbstractGraph3D::elementSelected(ElementType type)
+ *
+ * Emits selection \a type when a selection is made in the graph.
+ *
+ * \sa selectedLabelIndex(), selectedAxis(), selectedCustomItemIndex(), selectedCustomItem()
+ *
+ * \since Qt Data Visualization 1.1
+ */
diff --git a/src/datavisualization/engine/abstract3dcontroller.cpp b/src/datavisualization/engine/abstract3dcontroller.cpp
index fd773675..7c30f1c0 100644
--- a/src/datavisualization/engine/abstract3dcontroller.cpp
+++ b/src/datavisualization/engine/abstract3dcontroller.cpp
@@ -1268,7 +1268,8 @@ void Abstract3DController::handlePendingClick()
int Abstract3DController::selectedLabelIndex() const
{
int index = m_renderer->m_selectedLabelIndex;
- if (selectedAxis()->labels().count() <= index)
+ QAbstract3DAxis *axis = selectedAxis();
+ if (axis && axis->labels().count() <= index)
index = -1;
return index;
}
@@ -1295,4 +1296,21 @@ QAbstract3DAxis *Abstract3DController::selectedAxis() const
return axis;
}
+int Abstract3DController::selectedCustomItemIndex() const
+{
+ int index = m_renderer->m_selectedCustomItemIndex;
+ if (m_customItems.count() <= index)
+ index = -1;
+ return index;
+}
+
+QCustom3DItem *Abstract3DController::selectedCustomItem() const
+{
+ QCustom3DItem *item = 0;
+ int index = selectedCustomItemIndex();
+ if (index >= 0)
+ item = m_customItems[index];
+ return item;
+}
+
QT_END_NAMESPACE_DATAVISUALIZATION
diff --git a/src/datavisualization/engine/abstract3dcontroller_p.h b/src/datavisualization/engine/abstract3dcontroller_p.h
index cebae72b..62b647a6 100644
--- a/src/datavisualization/engine/abstract3dcontroller_p.h
+++ b/src/datavisualization/engine/abstract3dcontroller_p.h
@@ -243,6 +243,8 @@ public:
int selectedLabelIndex() const;
QAbstract3DAxis *selectedAxis() const;
+ int selectedCustomItemIndex() const;
+ QCustom3DItem *selectedCustomItem() const;
void emitNeedRender();
diff --git a/src/datavisualization/engine/abstract3drenderer_p.h b/src/datavisualization/engine/abstract3drenderer_p.h
index 3ae36450..58173a61 100644
--- a/src/datavisualization/engine/abstract3drenderer_p.h
+++ b/src/datavisualization/engine/abstract3drenderer_p.h
@@ -181,6 +181,7 @@ protected:
QAbstract3DSeries *m_clickedSeries;
QAbstract3DGraph::ElementType m_clickedType;
int m_selectedLabelIndex;
+ int m_selectedCustomItemIndex;
QString m_selectionLabel;
LabelItem *m_selectionLabelItem;
diff --git a/src/datavisualization/engine/bars3drenderer.cpp b/src/datavisualization/engine/bars3drenderer.cpp
index bf381754..015f76d5 100644
--- a/src/datavisualization/engine/bars3drenderer.cpp
+++ b/src/datavisualization/engine/bars3drenderer.cpp
@@ -2270,6 +2270,7 @@ QPoint Bars3DRenderer::selectionColorToArrayPosition(const QVector4D &selectionC
QPoint position = Bars3DController::invalidSelectionPosition();
m_clickedType = QAbstract3DGraph::ElementNone;
m_selectedLabelIndex = -1;
+ m_selectedCustomItemIndex = -1;
if (selectionColor.w() == itemAlpha) {
// Normal selection item
position = QPoint(int(selectionColor.x() + int(m_axisCacheZ.min())),
@@ -2305,6 +2306,9 @@ QPoint Bars3DRenderer::selectionColorToArrayPosition(const QVector4D &selectionC
} else if (selectionColor.w() == customItemAlpha) {
// Custom item selection
position = Bars3DController::invalidSelectionPosition();
+ m_selectedCustomItemIndex = int(selectionColor.x())
+ + (int(selectionColor.y()) << 8)
+ + (int(selectionColor.z()) << 16);
m_clickedType = QAbstract3DGraph::ElementCustomItem;
}
return position;
diff --git a/src/datavisualization/engine/qabstract3dgraph.cpp b/src/datavisualization/engine/qabstract3dgraph.cpp
index 13d7972a..f2942026 100644
--- a/src/datavisualization/engine/qabstract3dgraph.cpp
+++ b/src/datavisualization/engine/qabstract3dgraph.cpp
@@ -453,6 +453,34 @@ QAbstract3DAxis *QAbstract3DGraph::selectedAxis() const
}
/*!
+ * Can be used to query the index of the selected custom item after receiving elementSelected signal
+ * with QAbstract3DGraph::ElementCustomItem type. Selection is valid until the next elementSelected
+ * signal.
+ *
+ * \return index of the selected custom item, or -1.
+ *
+ * \since Qt Data Visualization 1.1
+ */
+int QAbstract3DGraph::selectedCustomItemIndex() const
+{
+ return d_ptr->m_visualController->selectedCustomItemIndex();
+}
+
+/*!
+ * Can be used to get the selected custom item after receiving elementSelected signal with
+ * QAbstract3DGraph::ElementCustomItem type. Ownership of the item remains with the graph.
+ * Selection is valid until the next elementSelected signal.
+ *
+ * \return pointer to the selected custom item, or null.
+ *
+ * \since Qt Data Visualization 1.1
+ */
+QCustom3DItem *QAbstract3DGraph::selectedCustomItem() const
+{
+ return d_ptr->m_visualController->selectedCustomItem();
+}
+
+/*!
* Renders current frame to an image of \a imageSize. Default size is the window size. Image is
* rendered with antialiasing level given in \a msaaSamples. Default level is \c{0}.
*
@@ -476,7 +504,7 @@ QImage QAbstract3DGraph::renderToImage(int msaaSamples, const QSize &imageSize)
* Signal can be used for example for implementing custom input handlers, as demonstrated in this
* \l {Axis Range Dragging With Labels Example}{example}.
*
- * \sa selectedLabelIndex(), selectedAxis()
+ * \sa selectedLabelIndex(), selectedAxis(), selectedCustomItemIndex(), selectedCustomItem()
*/
/*!
diff --git a/src/datavisualization/engine/qabstract3dgraph.h b/src/datavisualization/engine/qabstract3dgraph.h
index 2ff2d84f..aeccf667 100644
--- a/src/datavisualization/engine/qabstract3dgraph.h
+++ b/src/datavisualization/engine/qabstract3dgraph.h
@@ -117,6 +117,9 @@ public:
int selectedLabelIndex() const;
QAbstract3DAxis *selectedAxis() const;
+ int selectedCustomItemIndex() const;
+ QCustom3DItem *selectedCustomItem() const;
+
QImage renderToImage(int msaaSamples = 0, const QSize &imageSize = QSize());
void setMeasureFps(bool enable);
diff --git a/src/datavisualization/engine/scatter3drenderer.cpp b/src/datavisualization/engine/scatter3drenderer.cpp
index ff01d51e..9e8712e3 100644
--- a/src/datavisualization/engine/scatter3drenderer.cpp
+++ b/src/datavisualization/engine/scatter3drenderer.cpp
@@ -1762,6 +1762,7 @@ void Scatter3DRenderer::selectionColorToSeriesAndIndex(const QVector4D &color,
{
m_clickedType = QAbstract3DGraph::ElementNone;
m_selectedLabelIndex = -1;
+ m_selectedCustomItemIndex = -1;
if (color != selectionSkipColor) {
if (color.w() == labelRowAlpha) {
// Row selection
@@ -1781,6 +1782,9 @@ void Scatter3DRenderer::selectionColorToSeriesAndIndex(const QVector4D &color,
} else if (color.w() == customItemAlpha) {
// Custom item selection
index = Scatter3DController::invalidSelectionIndex();
+ m_selectedCustomItemIndex = int(color.x())
+ + (int(color.y()) << 8)
+ + (int(color.z()) << 16);
m_clickedType = QAbstract3DGraph::ElementCustomItem;
} else {
int totalIndex = int(color.x())
diff --git a/src/datavisualization/engine/surface3drenderer.cpp b/src/datavisualization/engine/surface3drenderer.cpp
index 00e6e21f..f405212f 100644
--- a/src/datavisualization/engine/surface3drenderer.cpp
+++ b/src/datavisualization/engine/surface3drenderer.cpp
@@ -2287,6 +2287,8 @@ void Surface3DRenderer::updateSelectionPoint(SurfaceSeriesRenderCache *cache, co
QPoint Surface3DRenderer::selectionIdToSurfacePoint(uint id)
{
m_clickedType = QAbstract3DGraph::ElementNone;
+ m_selectedLabelIndex = -1;
+ m_selectedCustomItemIndex = -1;
// Check for label and custom item selection
if (id / alphaMultiplier == labelRowAlpha) {
m_selectedLabelIndex = id - (alphaMultiplier * labelRowAlpha);
@@ -2303,6 +2305,7 @@ QPoint Surface3DRenderer::selectionIdToSurfacePoint(uint id)
} else if (id / alphaMultiplier == customItemAlpha) {
// Custom item selection
m_clickedType = QAbstract3DGraph::ElementCustomItem;
+ m_selectedCustomItemIndex = id - (alphaMultiplier * customItemAlpha);
return Surface3DController::invalidSelectionPosition();
}
diff --git a/src/datavisualizationqml2/abstractdeclarative.cpp b/src/datavisualizationqml2/abstractdeclarative.cpp
index cdcfcf65..375c9bdb 100644
--- a/src/datavisualizationqml2/abstractdeclarative.cpp
+++ b/src/datavisualizationqml2/abstractdeclarative.cpp
@@ -241,6 +241,16 @@ QAbstract3DAxis *AbstractDeclarative::selectedAxis() const
return m_controller->selectedAxis();
}
+int AbstractDeclarative::selectedCustomItemIndex() const
+{
+ return m_controller->selectedCustomItemIndex();
+}
+
+QCustom3DItem *AbstractDeclarative::selectedCustomItem() const
+{
+ return m_controller->selectedCustomItem();
+}
+
QQmlListProperty<QCustom3DItem> AbstractDeclarative::customItemList()
{
return QQmlListProperty<QCustom3DItem>(this, this,
@@ -293,6 +303,8 @@ void AbstractDeclarative::setSharedController(Abstract3DController *controller)
&AbstractDeclarative::themeChanged);
QObject::connect(m_controller.data(), &Abstract3DController::selectionModeChanged, this,
&AbstractDeclarative::handleSelectionModeChange);
+ QObject::connect(m_controller.data(), &Abstract3DController::elementSelected, this,
+ &AbstractDeclarative::elementSelected);
QObject::connect(m_controller.data(), &Abstract3DController::axisXChanged, this,
&AbstractDeclarative::handleAxisXChanged);
diff --git a/src/datavisualizationqml2/abstractdeclarative_p.h b/src/datavisualizationqml2/abstractdeclarative_p.h
index 7db6c935..3dd07dca 100644
--- a/src/datavisualizationqml2/abstractdeclarative_p.h
+++ b/src/datavisualizationqml2/abstractdeclarative_p.h
@@ -137,6 +137,9 @@ public:
Q_REVISION(1) Q_INVOKABLE virtual int selectedLabelIndex() const;
Q_REVISION(1) Q_INVOKABLE virtual QAbstract3DAxis *selectedAxis() const;
+ Q_REVISION(1) Q_INVOKABLE virtual int selectedCustomItemIndex() const;
+ Q_REVISION(1) Q_INVOKABLE virtual QCustom3DItem *selectedCustomItem() const;
+
QQmlListProperty<QCustom3DItem> customItemList();
static void appendCustomItemFunc(QQmlListProperty<QCustom3DItem> *list,
QCustom3DItem *item);
@@ -191,6 +194,7 @@ signals:
void renderingModeChanged(AbstractDeclarative::RenderingMode mode);
Q_REVISION(1) void measureFpsChanged(bool enabled);
Q_REVISION(1) void currentFpsChanged(qreal fps);
+ Q_REVISION(1) void elementSelected(QAbstract3DGraph::ElementType type);
private:
QPointer<Abstract3DController> m_controller;