diff --git a/plot.cpp b/plot.cpp
--- a/plot.cpp
+++ b/plot.cpp
@@ -17,8 +17,8 @@
along with serialplot. If not, see .
*/
+#include
#include "plot.h"
-
Plot::Plot(QWidget* parent) :
QwtPlot(parent),
zoomer(this->canvas(), false),
@@ -31,6 +31,9 @@ Plot::Plot(QWidget* parent) :
zoomer.setZoomBase();
grid.attach(this);
+ rectItem.setRect(QRectF(0,0,100,1));
+ // rectItem.attach(this);
+
darkBackground(false);
}
diff --git a/plot.h b/plot.h
--- a/plot.h
+++ b/plot.h
@@ -22,6 +22,7 @@
#include
#include
+#include
#include "zoomer.h"
#include "scalezoomer.h"
@@ -39,6 +40,7 @@ private:
Zoomer zoomer;
ScaleZoomer sZoomer;
QwtPlotGrid grid;
+ QwtPlotShapeItem rectItem;
void resetAxes();
diff --git a/scalezoomer.cpp b/scalezoomer.cpp
--- a/scalezoomer.cpp
+++ b/scalezoomer.cpp
@@ -28,10 +28,35 @@ ScaleZoomer::ScaleZoomer(QwtPlot* plot,
{
_plot = plot;
_zoomer = zoomer;
+ connect(&bottomPicker, &ScalePicker::pickStarted, this, &ScaleZoomer::bottomPickStarted);
+ connect(&bottomPicker, &ScalePicker::picking, this, &ScaleZoomer::bottomPicking);
connect(&bottomPicker, &ScalePicker::picked, this, &ScaleZoomer::bottomPicked);
connect(&leftPicker, &ScalePicker::picked, this, &ScaleZoomer::leftPicked);
}
+void ScaleZoomer::bottomPickStarted(double firstPos)
+{
+ double yMin = _plot->axisScaleDiv(QwtPlot::yLeft).lowerBound();
+ double yMax = _plot->axisScaleDiv(QwtPlot::yLeft).upperBound();
+ rectShape.setRect(QRectF(firstPos, yMin, 2, yMax-yMin));
+ rectShape.attach(_plot);
+ _plot->replot();
+}
+
+void ScaleZoomer::bottomPicking(double firstPos, double lastPos)
+{
+ double yMin = _plot->axisScaleDiv(QwtPlot::yLeft).lowerBound();
+ double yMax = _plot->axisScaleDiv(QwtPlot::yLeft).upperBound();
+ if (lastPos > firstPos) {
+ rectShape.setRect(QRectF(firstPos, yMin, lastPos-firstPos, yMax-yMin));
+ }
+ else
+ {
+ rectShape.setRect(QRectF(lastPos, yMin, firstPos-lastPos, yMax-yMin));
+ }
+ _plot->replot();
+}
+
void ScaleZoomer::bottomPicked(double firstPos, double lastPos)
{
QRectF zRect;
@@ -49,6 +74,8 @@ void ScaleZoomer::bottomPicked(double fi
zRect.setBottom(_plot->axisScaleDiv(QwtPlot::yLeft).lowerBound());
zRect.setTop(_plot->axisScaleDiv(QwtPlot::yLeft).upperBound());
_zoomer->zoom(zRect);
+ rectShape.detach();
+ _plot->replot();
}
void ScaleZoomer::leftPicked(double firstPos, double lastPos)
diff --git a/scalezoomer.h b/scalezoomer.h
--- a/scalezoomer.h
+++ b/scalezoomer.h
@@ -23,6 +23,7 @@
#include
#include
#include
+#include
#include "scalepicker.h"
@@ -39,9 +40,12 @@ private:
ScalePicker bottomPicker;
ScalePicker leftPicker;
+ QwtPlotShapeItem rectShape;
private slots:
+ void bottomPickStarted(double firstPos);
void bottomPicked(double firstPos, double lastPos);
+ void bottomPicking(double firstPos, double lastPos);
void leftPicked(double firstPos, double lastPos);
};