From 0ab45b018fa98e9ef6cffd70178f208eb4f16550 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Thu, 25 Sep 2014 15:04:44 +0300 Subject: Implement zooming to cursor MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Zooming to cursor is now default operating mode of the default input handler. Task-number: QTRD-3263 Change-Id: I5699fc0ce7393059538972cd52f31f06d87e3d8d Reviewed-by: Tomi Korpipää --- tests/barstest/chart.cpp | 6 ++++++ tests/barstest/chart.h | 1 + tests/barstest/main.cpp | 7 +++++++ tests/scattertest/scatterchart.cpp | 6 ++++++ tests/surfacetest/graphmodifier.cpp | 25 ++++++++++++++++++++++--- tests/surfacetest/graphmodifier.h | 5 ++++- tests/surfacetest/main.cpp | 2 +- tests/volumetrictest/volumetrictest.pro | 4 ---- 8 files changed, 47 insertions(+), 9 deletions(-) (limited to 'tests') diff --git a/tests/barstest/chart.cpp b/tests/barstest/chart.cpp index 9a81fc86..d7b23719 100644 --- a/tests/barstest/chart.cpp +++ b/tests/barstest/chart.cpp @@ -203,6 +203,7 @@ GraphModifier::GraphModifier(Q3DBars *barchart, QColorDialog *colorDialog) m_graph->activeTheme()->setFont(QFont("Times Roman", 20)); + // Release and store the default input handler. m_defaultInputHandler = static_cast(m_graph->activeInputHandler()); m_graph->releaseInputHandler(m_defaultInputHandler); @@ -1421,6 +1422,11 @@ void GraphModifier::setInputHandlerSelectionEnabled(int enabled) m_defaultInputHandler->setSelectionEnabled(enabled); } +void GraphModifier::setInputHandlerZoomAtTargetEnabled(int enabled) +{ + m_defaultInputHandler->setZoomAtTargetEnabled(enabled); +} + void GraphModifier::changeValueAxisSegments(int value) { qDebug() << __FUNCTION__ << value; diff --git a/tests/barstest/chart.h b/tests/barstest/chart.h index eac6d3f1..93abbfa4 100644 --- a/tests/barstest/chart.h +++ b/tests/barstest/chart.h @@ -97,6 +97,7 @@ public: void setInputHandlerRotationEnabled(int enabled); void setInputHandlerZoomEnabled(int enabled); void setInputHandlerSelectionEnabled(int enabled); + void setInputHandlerZoomAtTargetEnabled(int enabled); void setReflection(bool enabled); void setReflectivity(int value); void toggleCustomItem(); diff --git a/tests/barstest/main.cpp b/tests/barstest/main.cpp index 1cc47859..cffbf4b4 100644 --- a/tests/barstest/main.cpp +++ b/tests/barstest/main.cpp @@ -234,6 +234,10 @@ int main(int argc, char **argv) inputHandlerSelectionCheckBox->setText("IH: Allow selection"); inputHandlerSelectionCheckBox->setChecked(true); + QCheckBox *inputHandlerZoomAtTargetCheckBox = new QCheckBox(widget); + inputHandlerZoomAtTargetCheckBox->setText("IH: setZoomAtTarget"); + inputHandlerZoomAtTargetCheckBox->setChecked(false); + QSlider *rotationSliderX = new QSlider(Qt::Horizontal, widget); rotationSliderX->setTickInterval(1); rotationSliderX->setMinimum(-180); @@ -422,6 +426,7 @@ int main(int argc, char **argv) vLayout3->addWidget(inputHandlerRotationCheckBox, 0, Qt::AlignTop); vLayout3->addWidget(inputHandlerZoomCheckBox, 0, Qt::AlignTop); vLayout3->addWidget(inputHandlerSelectionCheckBox, 0, Qt::AlignTop); + vLayout3->addWidget(inputHandlerZoomAtTargetCheckBox, 0, Qt::AlignTop); vLayout3->addWidget(new QLabel(QStringLiteral("Adjust shadow quality")), 0, Qt::AlignTop); vLayout3->addWidget(shadowQuality, 0, Qt::AlignTop); vLayout3->addWidget(new QLabel(QStringLiteral("Change font")), 0, Qt::AlignTop); @@ -559,6 +564,8 @@ int main(int argc, char **argv) &GraphModifier::setInputHandlerZoomEnabled); QObject::connect(inputHandlerSelectionCheckBox, &QCheckBox::stateChanged, modifier, &GraphModifier::setInputHandlerSelectionEnabled); + QObject::connect(inputHandlerZoomAtTargetCheckBox, &QCheckBox::stateChanged, modifier, + &GraphModifier::setInputHandlerZoomAtTargetEnabled); QObject::connect(rotationCheckBox, &QCheckBox::stateChanged, modifier, &GraphModifier::setUseNullInputHandler); diff --git a/tests/scattertest/scatterchart.cpp b/tests/scattertest/scatterchart.cpp index 35d56236..a45c090b 100644 --- a/tests/scattertest/scatterchart.cpp +++ b/tests/scattertest/scatterchart.cpp @@ -23,6 +23,7 @@ #include #include #include +#include #include using namespace QtDataVisualization; @@ -46,6 +47,7 @@ ScatterDataModifier::ScatterDataModifier(Q3DScatter *scatter) m_chart->setAxisX(new QValue3DAxis); m_chart->setAxisY(new QValue3DAxis); m_chart->setAxisZ(new QValue3DAxis); + static_cast(m_chart->activeInputHandler())->setZoomAtTargetEnabled(true); createAndAddSeries(); createAndAddSeries(); @@ -435,6 +437,10 @@ void ScatterDataModifier::testAxisReverse() m_chart->axisX()->setRange(0.0f, 10.0f); m_chart->axisY()->setRange(-20.0f, 50.0f); m_chart->axisZ()->setRange(5.0f, 15.0f); + m_chart->axisX()->setTitle("Axis X"); + m_chart->axisZ()->setTitle("Axis Z"); + m_chart->axisX()->setTitleVisible(true); + m_chart->axisZ()->setTitleVisible(true); m_chart->addSeries(series0); m_chart->addSeries(series1); } diff --git a/tests/surfacetest/graphmodifier.cpp b/tests/surfacetest/graphmodifier.cpp index a22ede2b..1a069cf4 100644 --- a/tests/surfacetest/graphmodifier.cpp +++ b/tests/surfacetest/graphmodifier.cpp @@ -21,18 +21,21 @@ #include #include #include +#include #include #include #include #include - +#ifndef QT_NO_CURSOR +#include +#endif using namespace QtDataVisualization; //#define JITTER_PLANE //#define WONKY_PLANE -GraphModifier::GraphModifier(Q3DSurface *graph) +GraphModifier::GraphModifier(Q3DSurface *graph, QWidget *parentWidget) : m_graph(graph), m_series1(new QSurface3DSeries), m_series2(new QSurface3DSeries), @@ -63,7 +66,8 @@ GraphModifier::GraphModifier(Q3DSurface *graph) m_drawMode2(QSurface3DSeries::DrawSurfaceAndWireframe), m_drawMode3(QSurface3DSeries::DrawSurfaceAndWireframe), m_drawMode4(QSurface3DSeries::DrawSurfaceAndWireframe), - m_offset(4.0f) + m_offset(4.0f), + m_parentWidget(parentWidget) { m_graph->setAxisX(new QValue3DAxis); m_graph->axisX()->setTitle("X-Axis"); @@ -97,6 +101,8 @@ GraphModifier::GraphModifier(Q3DSurface *graph) m_graph->axisY()->setRange(m_minY, m_minY + m_rangeY); m_graph->axisZ()->setRange(m_minZ, m_minZ + m_rangeZ); + static_cast(m_graph->activeInputHandler())->setZoomAtTargetEnabled(true); + for (int i = 0; i < 4; i++) { m_multiseries[i] = new QSurface3DSeries; m_multiseries[i]->setName(QStringLiteral("Series %1").arg(i+1)); @@ -109,6 +115,7 @@ GraphModifier::GraphModifier(Q3DSurface *graph) m_theSeries->setItemLabelFormat(QStringLiteral("@seriesName: (@xLabel, @zLabel): @yLabel")); connect(&m_timer, &QTimer::timeout, this, &GraphModifier::timeout); + connect(&m_graphPositionQueryTimer, &QTimer::timeout, this, &GraphModifier::graphQueryTimeout); connect(m_theSeries, &QSurface3DSeries::selectedPointChanged, this, &GraphModifier::selectedPointChanged); QObject::connect(m_graph, &Q3DSurface::axisXChanged, this, @@ -119,6 +126,8 @@ GraphModifier::GraphModifier(Q3DSurface *graph) &GraphModifier::handleAxisZChanged); QObject::connect(m_graph, &QAbstract3DGraph::currentFpsChanged, this, &GraphModifier::handleFpsChange); + + //m_graphPositionQueryTimer.start(100); } GraphModifier::~GraphModifier() @@ -691,6 +700,16 @@ void GraphModifier::timeout() m_theSeries->dataProxy()->resetArray(m_planeArray); } +void GraphModifier::graphQueryTimeout() +{ +#ifndef QT_NO_CURSOR + m_graph->scene()->setGraphPositionQuery(m_parentWidget->mapFromGlobal(QCursor::pos())); + qDebug() << "pos: " << (m_parentWidget->mapFromGlobal(QCursor::pos())); +#else + m_graph->scene()->setGraphPositionQuery(QPoint(100, 100)); +#endif +} + void GraphModifier::handleAxisXChanged(QValue3DAxis *axis) { qDebug() << __FUNCTION__ << axis << axis->orientation() << (axis == m_graph->axisX()); diff --git a/tests/surfacetest/graphmodifier.h b/tests/surfacetest/graphmodifier.h index f461f022..d1c77940 100644 --- a/tests/surfacetest/graphmodifier.h +++ b/tests/surfacetest/graphmodifier.h @@ -41,7 +41,7 @@ public: Map }; - explicit GraphModifier(Q3DSurface *graph); + explicit GraphModifier(Q3DSurface *graph, QWidget *parentWidget); ~GraphModifier(); void toggleSeries1(bool enabled); @@ -122,6 +122,7 @@ public slots: void flipViews(); void changeSelectionMode(int mode); void timeout(); + void graphQueryTimeout(); void handleAxisXChanged(QValue3DAxis *axis); void handleAxisYChanged(QValue3DAxis *axis); @@ -190,6 +191,8 @@ private: float m_multiSampleOffsetZ[4]; QSurfaceDataArray m_massiveTestCacheArray; QVector3D m_cameraTarget; + QWidget *m_parentWidget; + QTimer m_graphPositionQueryTimer; }; #endif diff --git a/tests/surfacetest/main.cpp b/tests/surfacetest/main.cpp index f89e6c50..9e14c665 100644 --- a/tests/surfacetest/main.cpp +++ b/tests/surfacetest/main.cpp @@ -524,7 +524,7 @@ int main(int argc, char *argv[]) widget->show(); - GraphModifier *modifier = new GraphModifier(surfaceGraph); + GraphModifier *modifier = new GraphModifier(surfaceGraph, container); // Connect controls to slots on modifier QObject::connect(smoothCB, &QCheckBox::stateChanged, diff --git a/tests/volumetrictest/volumetrictest.pro b/tests/volumetrictest/volumetrictest.pro index 137e5bab..df3ef0dd 100644 --- a/tests/volumetrictest/volumetrictest.pro +++ b/tests/volumetrictest/volumetrictest.pro @@ -1,7 +1,3 @@ -android|ios { - error( "This example is not supported for android or ios." ) -} - !include( ../tests.pri ) { error( "Couldn't find the tests.pri file!" ) } -- cgit v1.2.3