charts panning enabled (QWT)
authorAlexey Chernobaev <achernobaev@dev.rtsoft.ru>
Tue, 13 Mar 2018 11:53:12 +0000 (14:53 +0300)
committerAlexey Chernobaev <achernobaev@dev.rtsoft.ru>
Tue, 13 Mar 2018 11:53:12 +0000 (14:53 +0300)
src/analyze/gui/chartwidget.cpp
src/analyze/gui/chartwidgetqwtplot.cpp
src/analyze/gui/chartwidgetqwtplot.h

index 9699480d268d4511dc8f123afb3023263f875ef7..075c498df1fd0d044f6c4da94e96f4ac0f9299b6 100644 (file)
@@ -105,8 +105,8 @@ ChartWidget::ChartWidget(QWidget* parent)
 #elif defined(QWT_FOUND)
     layout->addWidget(m_plot);
 
-    m_resetZoomAction = new QAction(i18n("Reset Zoom"), this);
-    m_resetZoomAction->setStatusTip(i18n("Reset the chart zoom factor"));
+    m_resetZoomAction = new QAction(i18n("Reset Zoom and Pan"), this);
+    m_resetZoomAction->setStatusTip(i18n("Reset the chart zoom and pan"));
     connect(m_resetZoomAction, &QAction::triggered, this, &ChartWidget::resetZoom);
 
     m_showTotalAction = new QAction(i18n("Show Total"), this);
index 4ec67eaec3b0b62350f36e32330d74c6a1d47ba1..2759ed88c68e79ed22e157e42825b962f6f96cfb 100644 (file)
@@ -74,16 +74,18 @@ ChartWidgetQwtPlot::ChartWidgetQwtPlot(QWidget *parent, Options options)
     enableAxis(QwtPlot::yRight);
     enableAxis(QwtPlot::yLeft, false);
 
+    // TODO!! show help about zooming and panning
+
     // LeftButton for the zooming
     // Shift+LeftButton: zoom out by 1
     // Ctrl+LeftButton: zoom out to full size
     m_zoomer->setMousePattern(QwtEventPattern::MouseSelect2, Qt::LeftButton, Qt::ControlModifier);
     m_zoomer->setMousePattern(QwtEventPattern::MouseSelect3, Qt::LeftButton, Qt::ShiftModifier);
-/*
-    // MidButton for the panning
+
+    // Alt+LeftButton for the panning
     auto panner = new QwtPlotPanner(canvas());
-    panner->setMouseButton(Qt::MidButton);
-*/
+    panner->setMouseButton(Qt::LeftButton, Qt::AltModifier);
+
     m_vLinePen.setStyle(Qt::DashLine);
     m_vLinePen.setColor(Qt::gray);
 }
@@ -180,6 +182,14 @@ void ChartWidgetQwtPlot::rebuild(bool resetZoomAndPan)
 
     if (resetZoomAndPan)
     {
+        if (!m_xScaleDiv.isEmpty())
+        {
+            setAxisScaleDiv(QwtPlot::xBottom, m_xScaleDiv);
+        }
+        if (!m_yScaleDiv.isEmpty())
+        {
+            setAxisScaleDiv(QwtPlot::yRight, m_yScaleDiv);
+        }
         setAxisAutoScale(QwtPlot::xBottom, true);
         setAxisAutoScale(QwtPlot::yRight, true);
     }
@@ -256,13 +266,31 @@ void ChartWidgetQwtPlot::rebuild(bool resetZoomAndPan)
     if (resetZoomAndPan)
     {
         m_zoomer->setZoomBase(false);
+        m_xScaleDiv = axisScaleDiv(QwtPlot::xBottom);
+        m_yScaleDiv = axisScaleDiv(QwtPlot::yRight);
     }
 }
 
 void ChartWidgetQwtPlot::resetZoom()
 {
-    if (m_zoomer)
+    bool doReplot = false;
+    if (m_zoomer->zoomRectIndex() != 0)
     {
         m_zoomer->zoom(0);
+        doReplot = true;
+    }
+    if (!m_xScaleDiv.isEmpty() && (m_xScaleDiv != axisScaleDiv(QwtPlot::xBottom)))
+    {
+        setAxisScaleDiv(QwtPlot::xBottom, m_xScaleDiv);
+        doReplot = true;
+    }
+    if (!m_yScaleDiv.isEmpty() && (m_yScaleDiv != axisScaleDiv(QwtPlot::yRight)))
+    {
+        setAxisScaleDiv(QwtPlot::yRight, m_yScaleDiv);
+        doReplot = true;
+    }
+    if (doReplot)
+    {
+        replot();
     }
 }
index a6ee0097d4e7f64c56d43e3bd0be768b4f04c8b9..95246394bd55d813f14b12068cfe5af37d1eacc2 100644 (file)
@@ -2,6 +2,7 @@
 #define CHARTWIDGETQWTPLOT_H
 
 #include <qwt_plot.h>
+#include <qwt_scale_div.h>
 
 #include <QPen>
 
@@ -48,6 +49,8 @@ private:
     QPen m_vLinePen;
 
     Zoomer *m_zoomer;
+
+    QwtScaleDiv m_xScaleDiv, m_yScaleDiv;
 };
 
 inline ChartWidgetQwtPlot::Options operator | (ChartWidgetQwtPlot::Options i, ChartWidgetQwtPlot::Options f)