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 /tests/surfacetest | |
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 'tests/surfacetest')
-rw-r--r-- | tests/surfacetest/graphmodifier.cpp | 49 | ||||
-rw-r--r-- | tests/surfacetest/graphmodifier.h | 5 | ||||
-rw-r--r-- | tests/surfacetest/main.cpp | 38 |
3 files changed, 65 insertions, 27 deletions
diff --git a/tests/surfacetest/graphmodifier.cpp b/tests/surfacetest/graphmodifier.cpp index d4e99031..bd6ec920 100644 --- a/tests/surfacetest/graphmodifier.cpp +++ b/tests/surfacetest/graphmodifier.cpp @@ -23,11 +23,12 @@ #include <qmath.h> #include <QLinearGradient> #include <QDebug> +#include <QComboBox> QT_DATAVISUALIZATION_USE_NAMESPACE //#define JITTER_PLANE -//#define WONKY_PLANE +#define WONKY_PLANE GraphModifier::GraphModifier(Q3DSurface *graph) : m_graph(graph), @@ -55,6 +56,7 @@ GraphModifier::GraphModifier(Q3DSurface *graph) changeStyle(); connect(&m_timer, &QTimer::timeout, this, &GraphModifier::timeout); + connect(m_graph, &Q3DSurface::selectedPointChanged, this, &GraphModifier::selectedPointChanged); } GraphModifier::~GraphModifier() @@ -137,6 +139,7 @@ void GraphModifier::togglePlane(bool enable) float halfZ = m_zCount / 2; float wonkyFactor = 0.01f; float maxStepX = 0.0f; + float add = 0.0f; for (float i = 0; i < m_zCount; i++) { QSurfaceDataRow *newRow = new QSurfaceDataRow(m_xCount); if (i < halfZ) { @@ -145,15 +148,17 @@ void GraphModifier::togglePlane(bool enable) } else { stepX -= wonkyFactor; } + add = 0.0f; for (float j = 0; j < m_xCount; j++) { (*newRow)[j].setPosition(QVector3D(j * stepX + minX, -0.04f, - i * stepZ + minZ)); + i * stepZ + minZ + add)); + add += 0.5f; } *m_planeArray << newRow; } - resetArrayAndSliders(m_planeArray, minZ, maxZ, minX, m_xCount * maxStepX + minZ); + resetArrayAndSliders(m_planeArray, minZ, maxZ + add, minX, m_xCount * maxStepX + minX); #else for (float i = 0; i < m_zCount; i++) { QSurfaceDataRow *newRow = new QSurfaceDataRow(m_xCount); @@ -303,6 +308,20 @@ void GraphModifier::changeStyle() style = QDataVis::LabelStyleOpaque; } +void GraphModifier::selectButtonClicked() +{ + int row = rand() % m_graph->activeDataProxy()->rowCount(); + int col = rand() % m_graph->activeDataProxy()->columnCount(); + + m_graph->setSelectedPoint(QPoint(row, col)); +} + +void GraphModifier::selectedPointChanged(const QPoint &point) +{ + QString labelText = QStringLiteral("Selected row: %1, column: %2").arg(point.x()).arg(point.y()); + m_selectionInfoLabel->setText(labelText); +} + void GraphModifier::changeTheme(int theme) { m_graph->setTheme((QDataVis::Theme)theme); @@ -347,26 +366,10 @@ void GraphModifier::changeShadowQuality(int quality) void GraphModifier::changeSelectionMode(int mode) { - switch (mode) { - case 0: - qDebug() << "QDataVis::SelectionModeNone"; - m_graph->setSelectionMode(QDataVis::SelectionModeNone); - break; - case 1: - qDebug() << "QDataVis::SelectionModeItem"; - m_graph->setSelectionMode(QDataVis::SelectionModeItem); - break; - case 2: - qDebug() << "QDataVis::SelectionModeSliceRow"; - m_graph->setSelectionMode(QDataVis::SelectionModeSliceRow); - break; - case 3: - qDebug() << "QDataVis::SelectionModeSliceColumn"; - m_graph->setSelectionMode(QDataVis::SelectionModeSliceColumn); - break; - default: - qDebug() << __FUNCTION__ << " Unsupported selection mode."; - break; + QComboBox *comboBox = qobject_cast<QComboBox *>(sender()); + if (comboBox) { + int flags = comboBox->itemData(mode).toInt(); + m_graph->setSelectionMode(QDataVis::SelectionFlags(flags)); } } diff --git a/tests/surfacetest/graphmodifier.h b/tests/surfacetest/graphmodifier.h index 83b1873b..ed94b372 100644 --- a/tests/surfacetest/graphmodifier.h +++ b/tests/surfacetest/graphmodifier.h @@ -23,6 +23,7 @@ #include <QtDataVisualization/QSurfaceDataProxy> #include <QSlider> #include <QTimer> +#include <QLabel> using namespace QtDataVisualization; @@ -61,6 +62,9 @@ public: void gradientPressed(); void changeFont(const QFont &font); void changeStyle(); + void selectButtonClicked(); + void setSelectionInfoLabel(QLabel *label) {m_selectionInfoLabel = label; } + void selectedPointChanged(const QPoint &point); public slots: void changeShadowQuality(int quality); @@ -90,6 +94,7 @@ private: qreal m_minZ; QTimer m_timer; QSurfaceDataArray *m_planeArray; + QLabel *m_selectionInfoLabel; }; #endif diff --git a/tests/surfacetest/main.cpp b/tests/surfacetest/main.cpp index 19f30e5d..e4283b3e 100644 --- a/tests/surfacetest/main.cpp +++ b/tests/surfacetest/main.cpp @@ -167,12 +167,37 @@ int main(int argc, char *argv[]) // shadowQuality->addItem(QStringLiteral("High Soft")); // shadowQuality->setCurrentIndex(3); QComboBox *selectionMode = new QComboBox(widget); - selectionMode->addItem(QStringLiteral("SelectionModeNone")); - selectionMode->addItem(QStringLiteral("SelectionModeItem")); - selectionMode->addItem(QStringLiteral("SelectionModeSliceRow")); - selectionMode->addItem(QStringLiteral("SelectionModeSliceColumn")); + selectionMode->addItem(QStringLiteral("None"), + int(QDataVis::SelectionNone)); + selectionMode->addItem(QStringLiteral("Item"), + int(QDataVis::SelectionItem)); + selectionMode->addItem(QStringLiteral("Row"), + int(QDataVis::SelectionRow)); + selectionMode->addItem(QStringLiteral("Item and Row"), + int(QDataVis::SelectionItemAndRow)); + selectionMode->addItem(QStringLiteral("Column"), + int(QDataVis::SelectionColumn)); + selectionMode->addItem(QStringLiteral("Item and Column"), + int(QDataVis::SelectionItemAndColumn)); + selectionMode->addItem(QStringLiteral("Row and Column"), + int(QDataVis::SelectionRowAndColumn)); + selectionMode->addItem(QStringLiteral("Item, Row and Column"), + int(QDataVis::SelectionItemRowAndColumn)); + selectionMode->addItem(QStringLiteral("Slice into Row"), + int(QDataVis::SelectionSlice | QDataVis::SelectionRow)); + selectionMode->addItem(QStringLiteral("Slice into Row and Item"), + int(QDataVis::SelectionSlice | QDataVis::SelectionItemAndRow)); + selectionMode->addItem(QStringLiteral("Slice into Column"), + int(QDataVis::SelectionSlice | QDataVis::SelectionColumn)); + selectionMode->addItem(QStringLiteral("Slice into Column and Item"), + int(QDataVis::SelectionSlice | QDataVis::SelectionItemAndColumn)); selectionMode->setCurrentIndex(1); + QPushButton *selectButton = new QPushButton(widget); + selectButton->setText(QStringLiteral("Select random point")); + + QLabel *selectionInfoLabel = new QLabel(widget); + // Add controls to the layout vLayout->addWidget(smoothCB); vLayout->addWidget(surfaceGridCB); @@ -200,6 +225,8 @@ int main(int argc, char *argv[]) // vLayout->addWidget(shadowQuality); vLayout->addWidget(new QLabel(QStringLiteral("Selection Mode"))); vLayout->addWidget(selectionMode); + vLayout->addWidget(selectButton); + vLayout->addWidget(selectionInfoLabel); widget->show(); @@ -242,6 +269,8 @@ int main(int argc, char *argv[]) // modifier, SLOT(changeShadowQuality(int))); QObject::connect(selectionMode, SIGNAL(currentIndexChanged(int)), modifier, SLOT(changeSelectionMode(int))); + QObject::connect(selectButton, &QPushButton::clicked, + modifier, &GraphModifier::selectButtonClicked); modifier->setGridSliderZ(gridSliderZ); modifier->setGridSliderX(gridSliderX); @@ -250,6 +279,7 @@ int main(int argc, char *argv[]) modifier->setAxisMinSliderX(axisMinSliderX); modifier->setAxisMinSliderZ(axisMinSliderZ); modifier->toggleGridSliderLock(gridSlidersLockCB->checkState()); + modifier->setSelectionInfoLabel(selectionInfoLabel); sqrtSinCB->setChecked(true); return app.exec(); |