diff options
author | Miikka Heikkinen <miikka.heikkinen@digia.com> | 2013-10-29 14:01:42 +0200 |
---|---|---|
committer | Miikka Heikkinen <miikka.heikkinen@digia.com> | 2013-10-30 10:06:08 +0200 |
commit | 84c156d3e2fcceeab608f401fbc638f2d01219b3 (patch) | |
tree | 74de2de1635c60645f4864d08f6afb941948aea8 /src/datavisualization/engine/scatter3dcontroller.cpp | |
parent | 233d5c02638903e96687d580ada7188f0e6a9756 (diff) |
Selection overhaul
Selection modes are now proper flags, so you can easily mix and match
item, row, and column modes as you wish. Slice flag means automatic
slicing control - if user wishes to control slicing himself, he should
not set this mode flag.
Clicking an item on graph now emits clicked signal from renderer to
controller on all graphs instead of setting the selected item.
Controller will set the selected item based on this information.
Task-number: QTRD-2366
Task-number: QTRD-2491
Change-Id: I6251c42e22ea676613fbd36685e33574e6eb9a1a
Reviewed-by: Tomi Korpipää <tomi.korpipaa@digia.com>
Diffstat (limited to 'src/datavisualization/engine/scatter3dcontroller.cpp')
-rw-r--r-- | src/datavisualization/engine/scatter3dcontroller.cpp | 37 |
1 files changed, 19 insertions, 18 deletions
diff --git a/src/datavisualization/engine/scatter3dcontroller.cpp b/src/datavisualization/engine/scatter3dcontroller.cpp index 9f43d94e..ca16a34b 100644 --- a/src/datavisualization/engine/scatter3dcontroller.cpp +++ b/src/datavisualization/engine/scatter3dcontroller.cpp @@ -60,8 +60,8 @@ void Scatter3DController::initializeOpenGL() setRenderer(m_renderer); synchDataToRenderer(); - QObject::connect(m_renderer, &Scatter3DRenderer::selectedItemIndexChanged, this, - &Scatter3DController::handleSelectedItemIndexChanged, Qt::QueuedConnection); + QObject::connect(m_renderer, &Scatter3DRenderer::itemClicked, this, + &Scatter3DController::handleItemClicked, Qt::QueuedConnection); emitNeedRender(); } @@ -117,17 +117,15 @@ void Scatter3DController::setActiveDataProxy(QAbstractDataProxy *proxy) adjustValueAxisRange(); setSelectedItemIndex(noSelectionIndex()); - setSlicingActive(false); m_isDataDirty = true; emitNeedRender(); } void Scatter3DController::handleArrayReset() { - setSlicingActive(false); adjustValueAxisRange(); m_isDataDirty = true; - setSelectedItemIndex(noSelectionIndex()); + setSelectedItemIndex(m_selectedItemIndex); emitNeedRender(); } @@ -173,13 +171,11 @@ void Scatter3DController::handleItemsInserted(int startIndex, int count) emitNeedRender(); } -void Scatter3DController::handleSelectedItemIndexChanged(int index) +void Scatter3DController::handleItemClicked(int index) { - if (index != m_selectedItemIndex) { - m_selectedItemIndex = index; - emit selectedItemIndexChanged(index); - emitNeedRender(); - } + setSelectedItemIndex(index); + // TODO: pass clicked to parent. (QTRD-2517) + // TODO: Also hover needed? (QTRD-2131) } void Scatter3DController::handleAxisAutoAdjustRangeChangedInOrientation( @@ -190,6 +186,14 @@ void Scatter3DController::handleAxisAutoAdjustRangeChangedInOrientation( adjustValueAxisRange(); } +void Scatter3DController::handleAxisRangeChangedBySender(QObject *sender) +{ + Abstract3DController::handleAxisRangeChangedBySender(sender); + + // Update selected index - may be moved offscreen + setSelectedItemIndex(m_selectedItemIndex); +} + void Scatter3DController::setObjectType(QDataVis::MeshStyle style, bool smooth) { QString objFile; @@ -207,21 +211,18 @@ void Scatter3DController::setObjectType(QDataVis::MeshStyle style, bool smooth) Abstract3DController::setMeshFileName(objFile); } -void Scatter3DController::setSelectionMode(QDataVis::SelectionMode mode) +void Scatter3DController::setSelectionMode(QDataVis::SelectionFlags mode) { - if (mode > QDataVis::SelectionModeItem) { - qWarning("Unsupported selection mode."); + // We only support single item selection mode + if (int(mode ^ QDataVis::SelectionItem) != 0) { + qWarning("Unsupported selection mode - only item selection mode is supported."); return; } - // Disable zoom if selection mode changes - setSlicingActive(false); Abstract3DController::setSelectionMode(mode); } void Scatter3DController::setSelectedItemIndex(int index) { - // TODO If items not within axis ranges are culled from drawing, should they be - // TODO unselectable as well? if (index < 0 || index >= static_cast<QScatterDataProxy *>(m_data)->itemCount()) index = noSelectionIndex(); |