summaryrefslogtreecommitdiffstats
path: root/src/datavisualization/engine
diff options
context:
space:
mode:
Diffstat (limited to 'src/datavisualization/engine')
-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
8 files changed, 65 insertions, 2 deletions
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();
}