summaryrefslogtreecommitdiffstats
path: root/src/datavisualization/engine/bars3dcontroller.cpp
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/engine/bars3dcontroller.cpp
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/engine/bars3dcontroller.cpp')
-rw-r--r--src/datavisualization/engine/bars3dcontroller.cpp33
1 files changed, 17 insertions, 16 deletions
diff --git a/src/datavisualization/engine/bars3dcontroller.cpp b/src/datavisualization/engine/bars3dcontroller.cpp
index 995633a8..b1cf8338 100644
--- a/src/datavisualization/engine/bars3dcontroller.cpp
+++ b/src/datavisualization/engine/bars3dcontroller.cpp
@@ -32,7 +32,7 @@ QT_DATAVISUALIZATION_BEGIN_NAMESPACE
Bars3DController::Bars3DController(QRect boundRect)
: Abstract3DController(boundRect),
- m_selectedBar(noSelectionPoint()),
+ m_selectedBar(invalidSelectionPosition()),
m_selectedBarSeries(0),
m_isBarSpecRelative(true),
m_barThicknessRatio(1.0f),
@@ -179,11 +179,7 @@ void Bars3DController::handleDataColumnLabelsChanged()
void Bars3DController::handleBarClicked(const QPoint &position, QBar3DSeries *series)
{
- // Series may already have been removed, so check it before setting the selection.
- if (m_seriesList.contains(series))
- setSelectedBar(position, series);
- else
- setSelectedBar(noSelectionPoint(), 0);
+ setSelectedBar(position, series);
// TODO: pass clicked to parent. (QTRD-2517)
// TODO: Also hover needed? (QTRD-2131)
@@ -206,7 +202,7 @@ void Bars3DController::handleSeriesVisibilityChangedBySender(QObject *sender)
setSelectedBar(m_selectedBar, m_selectedBarSeries);
}
-QPoint Bars3DController::noSelectionPoint()
+QPoint Bars3DController::invalidSelectionPosition()
{
static QPoint noSelectionPos(-1, -1);
return noSelectionPos;
@@ -240,7 +236,7 @@ void Bars3DController::addSeries(QAbstract3DSeries *series)
}
QBar3DSeries *barSeries = static_cast<QBar3DSeries *>(series);
- if (barSeries->selectedBar() != noSelectionPoint())
+ if (barSeries->selectedBar() != invalidSelectionPosition())
setSelectedBar(barSeries->selectedBar(), barSeries);
}
@@ -249,7 +245,7 @@ void Bars3DController::removeSeries(QAbstract3DSeries *series)
bool firstRemoved = (m_seriesList.size() && m_seriesList.at(0) == series);
if (m_selectedBarSeries == series)
- setSelectedBar(noSelectionPoint(), 0);
+ setSelectedBar(invalidSelectionPosition(), 0);
Abstract3DController::removeSeries(series);
@@ -365,6 +361,10 @@ void Bars3DController::setSelectedBar(const QPoint &position, QBar3DSeries *seri
// If the selection targets non-existent bar, clear selection instead.
QPoint pos = position;
+ // Series may already have been removed, so check it before setting the selection.
+ if (!m_seriesList.contains(series))
+ series = 0;
+
adjustSelectionPosition(pos, series);
if (selectionMode().testFlag(QDataVis::SelectionSlice)) {
@@ -383,14 +383,15 @@ void Bars3DController::setSelectedBar(const QPoint &position, QBar3DSeries *seri
m_selectedBar = pos;
m_selectedBarSeries = series;
m_changeTracker.selectedBarChanged = true;
- // Clear selection from other series and set the new selection to the affected series
+
+ // Clear selection from other series and finally set new selection to the specified series
foreach (QAbstract3DSeries *otherSeries, m_seriesList) {
QBar3DSeries *barSeries = static_cast<QBar3DSeries *>(otherSeries);
if (barSeries != m_selectedBarSeries)
- barSeries->dptr()->setSelectedBar(noSelectionPoint());
- else
- barSeries->dptr()->setSelectedBar(m_selectedBar);
+ barSeries->dptr()->setSelectedBar(invalidSelectionPosition());
}
+ if (m_selectedBarSeries)
+ m_selectedBarSeries->dptr()->setSelectedBar(m_selectedBar);
emitNeedRender();
}
@@ -449,15 +450,15 @@ void Bars3DController::adjustSelectionPosition(QPoint &pos, const QBar3DSeries *
proxy = series->dataProxy();
if (!proxy)
- pos = noSelectionPoint();
+ pos = invalidSelectionPosition();
- if (pos != noSelectionPoint()) {
+ if (pos != invalidSelectionPosition()) {
int maxRow = proxy->rowCount() - 1;
int maxCol = (pos.x() <= maxRow && pos.x() >= 0 && proxy->rowAt(pos.x()))
? proxy->rowAt(pos.x())->size() - 1 : -1;
if (pos.x() < 0 || pos.x() > maxRow || pos.y() < 0 || pos.y() > maxCol)
- pos = noSelectionPoint();
+ pos = invalidSelectionPosition();
}
}