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)