plotzoomer.cpp
Go to the documentation of this file.
1 #include "plotzoomer.h"
2 #include <QMouseEvent>
3 #include <QApplication>
4 #include "qwt_scale_map.h"
5 #include "qwt_plot.h"
6 
7 PlotZoomer::PlotZoomer(QWidget *canvas):
8  QwtPlotZoomer(canvas, true),
9  _mouse_pressed(false),
10  _zoom_enabled(false),
11  _keep_aspect_ratio(true)
12 {
14 }
15 
16 void PlotZoomer::widgetMousePressEvent(QMouseEvent *me)
17 {
18  _mouse_pressed = false;
19  auto patterns = this->mousePattern();
20  for (QwtEventPattern::MousePattern& pattern: patterns)
21  {
22  if( this->mouseMatch(pattern, me) ){
23  _mouse_pressed = true;
24  // this->setTrackerMode(AlwaysOn);
25  _initial_pos = me->pos();
26  }
27  break;
28  }
30 }
31 
32 void PlotZoomer::widgetMouseMoveEvent(QMouseEvent *me)
33 {
34  static QCursor zoom_cursor(QPixmap(":/icons/resources/light/zoom_in.png"));
35 
36  if( _mouse_pressed )
37  {
38  auto patterns = this->mousePattern();
39  for (QwtEventPattern::MousePattern& pattern: patterns)
40  {
41  QRect rect( me->pos(), _initial_pos );
42  QRectF zoomRect = invTransform( rect.normalized() );
43 
44  if( zoomRect.width() > minZoomSize().width() &&
45  zoomRect.height() > minZoomSize().height() )
46  {
47  if( !_zoom_enabled)
48  {
49  _zoom_enabled = true;
52  QApplication::setOverrideCursor(zoom_cursor);
53  }
54  }
55  else if( _zoom_enabled)
56  {
57  _zoom_enabled = false;
58  this->setRubberBand( NoRubberBand );
59  QApplication::restoreOverrideCursor();
60  }
61  break;
62  }
63  }
65 }
66 
68 {
69  _mouse_pressed = false;
70  _zoom_enabled = false;
73 }
74 
75 bool PlotZoomer::accept(QPolygon &pa) const
76 {
77  QApplication::restoreOverrideCursor();
78 
79  if ( pa.count() < 2 )
80  return false;
81 
82  QRect rect = QRect( pa[0], pa[int( pa.count() ) - 1] );
83  QRectF zoomRect = invTransform( rect.normalized() );
84 
85  if ( zoomRect.width() < minZoomSize().width() &&
86  zoomRect.height() < minZoomSize().height() ){
87  return false;
88  }
89  return QwtPlotZoomer::accept(pa);
90 }
91 
92 void PlotZoomer::zoom(const QRectF &zoomRect)
93 {
94  QRectF rect = zoomRect;
95 
96  if( _keep_aspect_ratio )
97  {
98  const QRectF cr = canvas()->contentsRect();
99  const double canvas_ratio = cr.width() / cr.height();
100  const double zoom_ratio = zoomRect.width() / zoomRect.height();
101 
102  if( zoom_ratio < canvas_ratio )
103  {
104  double new_width = zoomRect.height() * canvas_ratio;
105  double increment = new_width - zoomRect.width();
106  rect.setWidth( new_width );
107  rect.moveLeft( rect.left() - 0.5*increment );
108  }
109  else{
110  double new_height = zoomRect.width() / canvas_ratio;
111  double increment = new_height - zoomRect.height();
112  rect.setHeight( new_height );
113  rect.moveTop( rect.top() - 0.5*increment );
114  }
115  }
116  QwtPlotZoomer::zoom( rect );
117 }
118 
120 {
121  return QSizeF(scaleRect().width() * 0.02,
122  scaleRect().height() * 0.02);
123 }
A pattern for mouse events.
virtual void zoom(const QRectF &)
Zoom in.
virtual QSizeF minZoomSize() const override
Limit zooming by a minimum rectangle.
Definition: plotzoomer.cpp:119
void setRubberBand(RubberBand)
Definition: qwt_picker.cpp:301
QWidget * canvas()
void setTrackerMode(DisplayMode)
Set the display mode of the tracker.
Definition: qwt_picker.cpp:331
QRectF scaleRect() const
QRectF invTransform(const QRect &) const
QRectF zoomRect() const
No rubberband.
Definition: qwt_picker.h:122
bool _mouse_pressed
Definition: plotzoomer.h:31
QPoint _initial_pos
Definition: plotzoomer.h:34
virtual void widgetMouseMoveEvent(QMouseEvent *)
bool _zoom_enabled
Definition: plotzoomer.h:32
bool mouseMatch(MousePatternCode, const QMouseEvent *) const
Compare a mouse event with an event pattern.
virtual bool accept(QPolygon &) const override
Check and correct a selected rectangle.
Definition: plotzoomer.cpp:75
virtual void widgetMouseMoveEvent(QMouseEvent *event) override
Definition: plotzoomer.cpp:32
QwtPlotZoomer provides stacked zooming for a plot widget.
A rectangle ( only for QwtPickerMachine::RectSelection )
Definition: qwt_picker.h:134
virtual void zoom(const QRectF &rect) override
Zoom in.
Definition: plotzoomer.cpp:92
virtual void widgetMouseReleaseEvent(QMouseEvent *)
virtual bool accept(QPolygon &) const override
Check and correct a selected rectangle.
Display never.
Definition: qwt_picker.h:156
virtual void widgetMouseReleaseEvent(QMouseEvent *event) override
Definition: plotzoomer.cpp:67
const QVector< MousePattern > & mousePattern() const
virtual void widgetMousePressEvent(QMouseEvent *event) override
Definition: plotzoomer.cpp:16
virtual void widgetMousePressEvent(QMouseEvent *)
Definition: qwt_picker.cpp:991
bool _keep_aspect_ratio
Definition: plotzoomer.h:33


plotjuggler
Author(s): Davide Faconti
autogenerated on Sat Jul 6 2019 03:44:17