From 51d4a9fcba6089ba433ae126f554b50979220d07 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Fri, 15 Nov 2013 12:48:13 +0200 Subject: Multi series selection part 1: bars MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Task-number: QTRD-2556 Change-Id: I1f537f0b4c299028d4415f074d5eac6552bb3b9b Reviewed-by: Pasi Keränen --- src/datavisualization/data/qbar3dseries.cpp | 45 +++++++++++++++++++++++------ 1 file changed, 36 insertions(+), 9 deletions(-) (limited to 'src/datavisualization/data/qbar3dseries.cpp') 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 @@ -135,6 +135,31 @@ QBarDataProxy *QBar3DSeries::dataProxy() const return static_cast(d_ptr->dataProxy()); } +/*! + * \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(d_ptr->m_controller)->setSelectedBar(position, this); + else + dptr()->setSelectedBar(position); +} + +QPoint QBar3DSeries::selectedBar() const +{ + return dptrc()->m_selectedBar; +} + /*! * \internal */ @@ -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(m_dataProxy); + Bars3DController *controller = static_cast(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(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); } } -- cgit v1.2.3