summaryrefslogtreecommitdiffstats
path: root/src/datavisualization/data
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@digia.com>2013-11-15 12:48:13 +0200
committerMiikka Heikkinen <miikka.heikkinen@digia.com>2013-11-20 09:34:06 +0200
commit51d4a9fcba6089ba433ae126f554b50979220d07 (patch)
tree5ffdabb461efc3989224226b600a649d395ef80a /src/datavisualization/data
parent96995bda0da7ecf99d2ac4a4e417545c3506bf02 (diff)
Multi series selection part 1: bars
Task-number: QTRD-2556 Change-Id: I1f537f0b4c299028d4415f074d5eac6552bb3b9b Reviewed-by: Pasi Keränen <pasi.keranen@digia.com>
Diffstat (limited to 'src/datavisualization/data')
-rw-r--r--src/datavisualization/data/qabstract3dseries.cpp2
-rw-r--r--src/datavisualization/data/qabstract3dseries.h1
-rw-r--r--src/datavisualization/data/qabstract3dseries_p.h1
-rw-r--r--src/datavisualization/data/qbar3dseries.cpp45
-rw-r--r--src/datavisualization/data/qbar3dseries.h5
-rw-r--r--src/datavisualization/data/qbar3dseries_p.h5
-rw-r--r--src/datavisualization/data/qscatter3dseries.cpp5
-rw-r--r--src/datavisualization/data/qscatter3dseries_p.h1
-rw-r--r--src/datavisualization/data/qsurface3dseries.cpp5
9 files changed, 51 insertions, 19 deletions
diff --git a/src/datavisualization/data/qabstract3dseries.cpp b/src/datavisualization/data/qabstract3dseries.cpp
index 52d3fda1..0ebf2aa1 100644
--- a/src/datavisualization/data/qabstract3dseries.cpp
+++ b/src/datavisualization/data/qabstract3dseries.cpp
@@ -162,6 +162,8 @@ QAbstract3DSeriesPrivate::~QAbstract3DSeriesPrivate()
void QAbstract3DSeriesPrivate::setItemLabelFormat(const QString &format)
{
m_itemLabelFormat = format;
+ if (m_controller)
+ m_controller->setSeriesDirty();
}
QAbstractDataProxy *QAbstract3DSeriesPrivate::dataProxy() const
diff --git a/src/datavisualization/data/qabstract3dseries.h b/src/datavisualization/data/qabstract3dseries.h
index 3f20a161..ccd93ad2 100644
--- a/src/datavisualization/data/qabstract3dseries.h
+++ b/src/datavisualization/data/qabstract3dseries.h
@@ -79,6 +79,7 @@ private:
friend class Bars3DController;
friend class Surface3DController;
friend class Scatter3DController;
+ friend class QBar3DSeries;
};
QT_DATAVISUALIZATION_END_NAMESPACE
diff --git a/src/datavisualization/data/qabstract3dseries_p.h b/src/datavisualization/data/qabstract3dseries_p.h
index 478fe6bb..2851c8e0 100644
--- a/src/datavisualization/data/qabstract3dseries_p.h
+++ b/src/datavisualization/data/qabstract3dseries_p.h
@@ -66,6 +66,7 @@ private:
friend class Bars3DController;
friend class Surface3DController;
friend class Scatter3DController;
+ friend class QBar3DSeries;
};
QT_DATAVISUALIZATION_END_NAMESPACE
diff --git a/src/datavisualization/data/qbar3dseries.cpp b/src/datavisualization/data/qbar3dseries.cpp
index c04f8ca2..febbd97e 100644
--- a/src/datavisualization/data/qbar3dseries.cpp
+++ b/src/datavisualization/data/qbar3dseries.cpp
@@ -136,6 +136,31 @@ QBarDataProxy *QBar3DSeries::dataProxy() const
}
/*!
+ * \property Q3DBars::selectedBar
+ *
+ * Selects a bar in a \a position. The 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).
+ * 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.
+ */
+void QBar3DSeries::setSelectedBar(const QPoint &position)
+{
+ // Don't do this in private to avoid loops, as that is used for callback from controller.
+ if (d_ptr->m_controller)
+ static_cast<Bars3DController *>(d_ptr->m_controller)->setSelectedBar(position, this);
+ else
+ dptr()->setSelectedBar(position);
+}
+
+QPoint QBar3DSeries::selectedBar() const
+{
+ return dptrc()->m_selectedBar;
+}
+
+/*!
* \internal
*/
QBar3DSeriesPrivate *QBar3DSeries::dptr()
@@ -154,7 +179,8 @@ const QBar3DSeriesPrivate *QBar3DSeries::dptrc() const
// QBar3DSeriesPrivate
QBar3DSeriesPrivate::QBar3DSeriesPrivate(QBar3DSeries *q)
- : QAbstract3DSeriesPrivate(q, QAbstract3DSeries::SeriesTypeBar)
+ : QAbstract3DSeriesPrivate(q, QAbstract3DSeries::SeriesTypeBar),
+ m_selectedBar(Bars3DController::noSelectionPoint())
{
m_itemLabelFormat = QStringLiteral("@valueTitle: @valueLabel");
}
@@ -180,16 +206,15 @@ 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
+ // Disconnect old controller/old proxy
QObject::disconnect(barDataProxy, 0, m_controller, 0);
QObject::disconnect(q_ptr, 0, m_controller, 0);
}
if (newController && barDataProxy) {
- Bars3DController *controller = static_cast<Bars3DController *>(newController);
-
QObject::connect(barDataProxy, &QBarDataProxy::arrayReset, controller,
&Bars3DController::handleArrayReset);
QObject::connect(barDataProxy, &QBarDataProxy::rowsAdded, controller,
@@ -206,14 +231,16 @@ void QBar3DSeriesPrivate::connectControllerAndProxy(Abstract3DController *newCon
&Bars3DController::handleDataRowLabelsChanged);
QObject::connect(barDataProxy, &QBarDataProxy::columnLabelsChanged, controller,
&Bars3DController::handleDataColumnLabelsChanged);
-
QObject::connect(q_ptr, &QAbstract3DSeries::visibilityChanged, controller,
&Abstract3DController::handleSeriesVisibilityChanged);
+ }
+}
- // Always clear selection on proxy change
- // TODO: setSelectedBar(noSelectionPoint());
-
- newController->handleSeriesVisibilityChanged(m_visible);
+void QBar3DSeriesPrivate::setSelectedBar(const QPoint &position)
+{
+ if (position != m_selectedBar) {
+ m_selectedBar = position;
+ emit qptr()->selectedBarChanged(m_selectedBar);
}
}
diff --git a/src/datavisualization/data/qbar3dseries.h b/src/datavisualization/data/qbar3dseries.h
index ebb37838..ec1754d1 100644
--- a/src/datavisualization/data/qbar3dseries.h
+++ b/src/datavisualization/data/qbar3dseries.h
@@ -30,6 +30,7 @@ class QT_DATAVISUALIZATION_EXPORT QBar3DSeries : public QAbstract3DSeries
{
Q_OBJECT
Q_PROPERTY(QBarDataProxy *dataProxy READ dataProxy WRITE setDataProxy NOTIFY dataProxyChanged)
+ Q_PROPERTY(QPoint selectedBar READ selectedBar WRITE setSelectedBar NOTIFY selectedBarChanged)
public:
explicit QBar3DSeries(QObject *parent = 0);
@@ -39,8 +40,12 @@ public:
void setDataProxy(QBarDataProxy *proxy);
QBarDataProxy *dataProxy() const;
+ void setSelectedBar(const QPoint &position);
+ QPoint selectedBar() const;
+
signals:
void dataProxyChanged(QBarDataProxy *proxy);
+ void selectedBarChanged(QPoint position);
protected:
explicit QBar3DSeries(QBar3DSeriesPrivate *d, QObject *parent = 0);
diff --git a/src/datavisualization/data/qbar3dseries_p.h b/src/datavisualization/data/qbar3dseries_p.h
index 3ed95a69..89edb84a 100644
--- a/src/datavisualization/data/qbar3dseries_p.h
+++ b/src/datavisualization/data/qbar3dseries_p.h
@@ -43,9 +43,14 @@ public:
virtual void setDataProxy(QAbstractDataProxy *proxy);
virtual void connectControllerAndProxy(Abstract3DController *newController);
+
+ void setSelectedBar(const QPoint &position);
+
private:
QBar3DSeries *qptr();
+ QPoint m_selectedBar;
+
private:
friend class QBar3DSeries;
};
diff --git a/src/datavisualization/data/qscatter3dseries.cpp b/src/datavisualization/data/qscatter3dseries.cpp
index 2fe61cff..f0374339 100644
--- a/src/datavisualization/data/qscatter3dseries.cpp
+++ b/src/datavisualization/data/qscatter3dseries.cpp
@@ -193,11 +193,6 @@ void QScatter3DSeriesPrivate::connectControllerAndProxy(Abstract3DController *ne
QObject::connect(q_ptr, &QAbstract3DSeries::visibilityChanged, controller,
&Abstract3DController::handleSeriesVisibilityChanged);
-
- // Always clear selection on proxy change
- // TODO: setSelectedScatter(noSelectionPoint());
-
- newController->handleSeriesVisibilityChanged(m_visible);
}
}
diff --git a/src/datavisualization/data/qscatter3dseries_p.h b/src/datavisualization/data/qscatter3dseries_p.h
index 001fb00c..b839af2e 100644
--- a/src/datavisualization/data/qscatter3dseries_p.h
+++ b/src/datavisualization/data/qscatter3dseries_p.h
@@ -43,6 +43,7 @@ public:
virtual void setDataProxy(QAbstractDataProxy *proxy);
virtual void connectControllerAndProxy(Abstract3DController *newController);
+
private:
QScatter3DSeries *qptr();
diff --git a/src/datavisualization/data/qsurface3dseries.cpp b/src/datavisualization/data/qsurface3dseries.cpp
index a4622580..d17daeb1 100644
--- a/src/datavisualization/data/qsurface3dseries.cpp
+++ b/src/datavisualization/data/qsurface3dseries.cpp
@@ -185,11 +185,6 @@ void QSurface3DSeriesPrivate::connectControllerAndProxy(Abstract3DController *ne
QObject::connect(q_ptr, &QAbstract3DSeries::visibilityChanged, controller,
&Abstract3DController::handleSeriesVisibilityChanged);
-
- // Always clear selection on proxy change
- // TODO: setSelectedPoint(noSelectionPoint());
-
- newController->handleSeriesVisibilityChanged(m_visible);
}
}