summaryrefslogtreecommitdiffstats
path: root/src/datavisualization/data
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@digia.com>2013-11-20 14:49:06 +0200
committerMika Salmela <mika.salmela@digia.com>2013-11-21 10:26:32 +0200
commitd12f993ca802ff02091d6a5141d2847641bc65a8 (patch)
treec4e5fe4811e6942ef51dca6f48a96a7e129fccc3 /src/datavisualization/data
parent51d4a9fcba6089ba433ae126f554b50979220d07 (diff)
Multi series selection part 2: scatter
Task-number: QTRD-2556 Change-Id: I9ee193141dff6603b47db28b0ed0682db6f914c8 Reviewed-by: Mika Salmela <mika.salmela@digia.com>
Diffstat (limited to 'src/datavisualization/data')
-rw-r--r--src/datavisualization/data/qabstract3dseries_p.h1
-rw-r--r--src/datavisualization/data/qbar3dseries.cpp17
-rw-r--r--src/datavisualization/data/qbar3dseries.h1
-rw-r--r--src/datavisualization/data/qscatter3dseries.cpp45
-rw-r--r--src/datavisualization/data/qscatter3dseries.h6
-rw-r--r--src/datavisualization/data/qscatter3dseries_p.h3
6 files changed, 67 insertions, 6 deletions
diff --git a/src/datavisualization/data/qabstract3dseries_p.h b/src/datavisualization/data/qabstract3dseries_p.h
index 2851c8e0..a82c3554 100644
--- a/src/datavisualization/data/qabstract3dseries_p.h
+++ b/src/datavisualization/data/qabstract3dseries_p.h
@@ -67,6 +67,7 @@ private:
friend class Surface3DController;
friend class Scatter3DController;
friend class QBar3DSeries;
+ friend class QScatter3DSeries;
};
QT_DATAVISUALIZATION_END_NAMESPACE
diff --git a/src/datavisualization/data/qbar3dseries.cpp b/src/datavisualization/data/qbar3dseries.cpp
index febbd97e..ac292e5e 100644
--- a/src/datavisualization/data/qbar3dseries.cpp
+++ b/src/datavisualization/data/qbar3dseries.cpp
@@ -138,10 +138,10 @@ QBarDataProxy *QBar3DSeries::dataProxy() const
/*!
* \property Q3DBars::selectedBar
*
- * Selects a bar in a \a position. The position is the (row, column) position in
+ * Selects a bar at the \a position. The \a position is the (row, column) position in
* the data array of the series.
* Only one bar can be selected at a time.
- * To clear selection, specify an illegal \a position, e.g. (-1, -1).
+ * To clear selection, set invalidSelectionPosition() as the \a position.
* If this series is added to a graph, the graph can adjust the selection according to user
* interaction or if it becomes invalid. Selecting a bar on another added series will also
* clear the selection.
@@ -161,6 +161,15 @@ QPoint QBar3DSeries::selectedBar() const
}
/*!
+ * \return an invalid position for selection. Set this position to selectedBar property if you
+ * want to clear the selection.
+ */
+QPoint QBar3DSeries::invalidSelectionPosition() const
+{
+ return Bars3DController::invalidSelectionPosition();
+}
+
+/*!
* \internal
*/
QBar3DSeriesPrivate *QBar3DSeries::dptr()
@@ -180,7 +189,7 @@ const QBar3DSeriesPrivate *QBar3DSeries::dptrc() const
QBar3DSeriesPrivate::QBar3DSeriesPrivate(QBar3DSeries *q)
: QAbstract3DSeriesPrivate(q, QAbstract3DSeries::SeriesTypeBar),
- m_selectedBar(Bars3DController::noSelectionPoint())
+ m_selectedBar(Bars3DController::invalidSelectionPosition())
{
m_itemLabelFormat = QStringLiteral("@valueTitle: @valueLabel");
}
@@ -206,7 +215,6 @@ void QBar3DSeriesPrivate::setDataProxy(QAbstractDataProxy *proxy)
void QBar3DSeriesPrivate::connectControllerAndProxy(Abstract3DController *newController)
{
QBarDataProxy *barDataProxy = static_cast<QBarDataProxy *>(m_dataProxy);
- Bars3DController *controller = static_cast<Bars3DController *>(newController);
if (m_controller && barDataProxy) {
// Disconnect old controller/old proxy
@@ -215,6 +223,7 @@ void QBar3DSeriesPrivate::connectControllerAndProxy(Abstract3DController *newCon
}
if (newController && barDataProxy) {
+ Bars3DController *controller = static_cast<Bars3DController *>(newController);
QObject::connect(barDataProxy, &QBarDataProxy::arrayReset, controller,
&Bars3DController::handleArrayReset);
QObject::connect(barDataProxy, &QBarDataProxy::rowsAdded, controller,
diff --git a/src/datavisualization/data/qbar3dseries.h b/src/datavisualization/data/qbar3dseries.h
index ec1754d1..ddc52170 100644
--- a/src/datavisualization/data/qbar3dseries.h
+++ b/src/datavisualization/data/qbar3dseries.h
@@ -42,6 +42,7 @@ public:
void setSelectedBar(const QPoint &position);
QPoint selectedBar() const;
+ QPoint invalidSelectionPosition() const;
signals:
void dataProxyChanged(QBarDataProxy *proxy);
diff --git a/src/datavisualization/data/qscatter3dseries.cpp b/src/datavisualization/data/qscatter3dseries.cpp
index f0374339..aff0f33c 100644
--- a/src/datavisualization/data/qscatter3dseries.cpp
+++ b/src/datavisualization/data/qscatter3dseries.cpp
@@ -126,6 +126,39 @@ QScatterDataProxy *QScatter3DSeries::dataProxy() const
}
/*!
+ * \property QScatter3DSeries::selectedItem
+ *
+ * Selects an item at the \a index. The \a index is the index in the data array of the series.
+ * Only one item can be selected at a time.
+ * To clear selection, set invalidSelectionIndex() as the \a index.
+ * If this series is added to a graph, the graph can adjust the selection according to user
+ * interaction or if it becomes invalid. Selecting an item on another added series will also
+ * clear the selection.
+ */
+void QScatter3DSeries::setSelectedItem(int index)
+{
+ // Don't do this in private to avoid loops, as that is used for callback from controller.
+ if (d_ptr->m_controller)
+ static_cast<Scatter3DController *>(d_ptr->m_controller)->setSelectedItem(index, this);
+ else
+ dptr()->setSelectedItem(index);
+}
+
+int QScatter3DSeries::selectedItem() const
+{
+ return dptrc()->m_selectedItem;
+}
+
+/*!
+ * \return an invalid index for selection. Set this index to selectedItem property if you
+ * want to clear the selection.
+ */
+int QScatter3DSeries::invalidSelectionIndex() const
+{
+ return Scatter3DController::invalidSelectionIndex();
+}
+
+/*!
* \internal
*/
QScatter3DSeriesPrivate *QScatter3DSeries::dptr()
@@ -144,7 +177,8 @@ const QScatter3DSeriesPrivate *QScatter3DSeries::dptrc() const
// QScatter3DSeriesPrivate
QScatter3DSeriesPrivate::QScatter3DSeriesPrivate(QScatter3DSeries *q)
- : QAbstract3DSeriesPrivate(q, QAbstract3DSeries::SeriesTypeScatter)
+ : QAbstract3DSeriesPrivate(q, QAbstract3DSeries::SeriesTypeScatter),
+ m_selectedItem(Scatter3DController::invalidSelectionIndex())
{
m_itemLabelFormat = QStringLiteral("@valueTitle: @valueLabel");
}
@@ -179,7 +213,6 @@ void QScatter3DSeriesPrivate::connectControllerAndProxy(Abstract3DController *ne
if (newController && scatterDataProxy) {
Scatter3DController *controller = static_cast<Scatter3DController *>(newController);
-
QObject::connect(scatterDataProxy, &QScatterDataProxy::arrayReset,
controller, &Scatter3DController::handleArrayReset);
QObject::connect(scatterDataProxy, &QScatterDataProxy::itemsAdded,
@@ -196,4 +229,12 @@ void QScatter3DSeriesPrivate::connectControllerAndProxy(Abstract3DController *ne
}
}
+void QScatter3DSeriesPrivate::setSelectedItem(int index)
+{
+ if (index != m_selectedItem) {
+ m_selectedItem = index;
+ emit qptr()->selectedItemChanged(m_selectedItem);
+ }
+}
+
QT_DATAVISUALIZATION_END_NAMESPACE
diff --git a/src/datavisualization/data/qscatter3dseries.h b/src/datavisualization/data/qscatter3dseries.h
index bb24f79a..8c28f3a6 100644
--- a/src/datavisualization/data/qscatter3dseries.h
+++ b/src/datavisualization/data/qscatter3dseries.h
@@ -30,6 +30,7 @@ class QT_DATAVISUALIZATION_EXPORT QScatter3DSeries : public QAbstract3DSeries
{
Q_OBJECT
Q_PROPERTY(QScatterDataProxy *dataProxy READ dataProxy WRITE setDataProxy NOTIFY dataProxyChanged)
+ Q_PROPERTY(int selectedItem READ selectedItem WRITE setSelectedItem NOTIFY selectedItemChanged)
public:
explicit QScatter3DSeries(QObject *parent = 0);
@@ -39,8 +40,13 @@ public:
void setDataProxy(QScatterDataProxy *proxy);
QScatterDataProxy *dataProxy() const;
+ void setSelectedItem(int index);
+ int selectedItem() const;
+ Q_INVOKABLE int invalidSelectionIndex() const;
+
signals:
void dataProxyChanged(QScatterDataProxy *proxy);
+ void selectedItemChanged(int index);
protected:
explicit QScatter3DSeries(QScatter3DSeriesPrivate *d, QObject *parent = 0);
diff --git a/src/datavisualization/data/qscatter3dseries_p.h b/src/datavisualization/data/qscatter3dseries_p.h
index b839af2e..0cf47bce 100644
--- a/src/datavisualization/data/qscatter3dseries_p.h
+++ b/src/datavisualization/data/qscatter3dseries_p.h
@@ -44,8 +44,11 @@ public:
virtual void setDataProxy(QAbstractDataProxy *proxy);
virtual void connectControllerAndProxy(Abstract3DController *newController);
+ void setSelectedItem(int index);
+
private:
QScatter3DSeries *qptr();
+ int m_selectedItem;
private:
friend class QScatter3DSeries;