OpenCurves  0.9
plotzoomer.h
1 //
2 // author
3 //
4 // Copyright (c) CSIRO 2015
5 //
6 #ifndef PLOTZOOMER_H_
7 #define PLOTZOOMER_H_
8 
9 #include "ocurvesconfig.h"
10 
11 #include <qwt_plot_zoomer.h>
12 
13 class QAction;
14 class QMenu;
15 class QSettings;
16 class QwtPlotCanvas;
17 
22 class PlotZoomer : public QwtPlotZoomer
23 {
24  Q_OBJECT
25 
26 public:
28  typedef QwtPlotZoomer Super;
29 
31  enum ZoomMode
32  {
39 
40  ZoomModeCount
41  };
42 
44  static const unsigned int AxisY = 0;
46  static const unsigned int AxisX = 2;
47 
53  explicit PlotZoomer(QwtPlotCanvas *plot, bool doReplot = true);
54 
56  ~PlotZoomer();
57 
60  inline ZoomMode zoomMode() const { return _zoomMode; }
61 
64  QAction *zoomBothAction() const { return _zoomActions[ZoomBoth]; }
65 
68  QAction *zoomXAction() const { return _zoomActions[ZoomX]; }
69 
72  QAction *zoomYAction() const { return _zoomActions[ZoomY]; }
73 
80  void loadSettings(QSettings &settings);
81 
103  void saveSettings(QSettings &settings);
104 
106  void fitIfAutoScaling();
107 
110  void zoomToFit(bool replot = true);
111 
114  void zoom(const QRectF &rect) override;
115 
118  void zoom(int up) override;
119 
120 public slots:
125  void setZoomMode(ZoomMode mode);
126 
129 
131  inline void setZoomModeX() { setZoomMode(ZoomX); }
132 
134  inline void setZoomModeY() { setZoomMode(ZoomY); }
135 
139  void zoomSync(const QRectF &rect);
140 
141 signals:
143  void zoomModeChanged(int mode);
144 
147  void zoomModeBoth(bool isset);
148 
151  void zoomModeX(bool isset);
152 
155  void zoomModeY(bool isset);
156 
157 protected slots:
159  void zoomActionToggled(bool checked);
160 
161 protected:
164  void widgetMousePressEvent(QMouseEvent *event) override;
165 
168  void widgetMouseReleaseEvent(QMouseEvent *event) override;
169 
172  void widgetWheelEvent(QWheelEvent *event) override;
173 
175  bool end(bool ok = true) override;
176 
177 private slots:
195  void contextMenuTimeout();
196 
197 private:
198  ZoomMode _zoomMode;
199  unsigned _contextMenuTimeMs;
200  quint16 _contextMenuSequenceNumber;
203  quint16 _contextMenuExpectedSeq;
204 
205  QMenu *_contextMenu;
206  QAction *_zoomActions[ZoomModeCount];
207 
208  bool _ignoreSync;
209 };
210 
211 
212 #endif // PLOTZOOMER_H_
void zoomModeX(bool isset)
Signal for changes to/from ZoomX.
~PlotZoomer()
Destructor.
Zoom only X axis.
Definition: plotzoomer.h:36
ZoomMode
Zooming mode.
Definition: plotzoomer.h:31
QwtPlotZoomer Super
Parent class.
Definition: plotzoomer.h:28
QAction * zoomBothAction() const
Fetch the action used to select the ZoomBoth mode.
Definition: plotzoomer.h:64
void zoomModeChanged(int mode)
Notifies changes in zoomMode().
ZoomMode zoomMode() const
Access the current ZoomMode.
Definition: plotzoomer.h:60
PlotZoomer(QwtPlotCanvas *plot, bool doReplot=true)
Constructor, operating on the given plot.
void zoomModeY(bool isset)
Signal for changes to/from ZoomY.
Zoom only Y axis.
Definition: plotzoomer.h:38
QAction * zoomYAction() const
Fetch the action used to select the ZoomY mode.
Definition: plotzoomer.h:72
static const unsigned int AxisY
YAxis reference within QwtPlot.
Definition: plotzoomer.h:44
void widgetWheelEvent(QWheelEvent *event) override
Cycle zoom levels on wheel.
static const unsigned int AxisX
XAxis reference within QwtPlot.
Definition: plotzoomer.h:46
void setZoomMode(ZoomMode mode)
Set the active ZoomMode.
void zoomToFit(bool replot=true)
Zoom to fit even if auto-scaling is off.
void zoomActionToggled(bool checked)
Bound to zoom actions simply to ensure one is kept active.
void zoomModeBoth(bool isset)
Signal for changes to/from ZoomBoth.
void setZoomModeBoth()
Set the zoom mode to ZoomBoth.
Definition: plotzoomer.h:128
Custom zoom handler for Plot objects.
Definition: plotzoomer.h:22
bool end(bool ok=true) override
Overload to handle ZoomMode.
void fitIfAutoScaling()
Set current zoom to fit if auto scaling is enabled.
void setZoomModeY()
Set the zoom mode to ZoomY.
Definition: plotzoomer.h:134
void zoom(const QRectF &rect) override
Override to prevent catastrophic event propagation on synchronised zoom response. ...
void setZoomModeX()
Set the zoom mode to ZoomX.
Definition: plotzoomer.h:131
Zoom both axes.
Definition: plotzoomer.h:34
QAction * zoomXAction() const
Fetch the action used to select the ZoomX mode.
Definition: plotzoomer.h:68
void zoomSync(const QRectF &rect)
Event for zoom synchronisation.
void widgetMouseReleaseEvent(QMouseEvent *event) override
Ignore middle click - handled by panner - resolve right click zoom restore or context menu...
void widgetMousePressEvent(QMouseEvent *event) override
End panning or reset the zoom level on right mouse button.
void loadSettings(QSettings &settings)
Load zoom settings stored by saveSettings().
void saveSettings(QSettings &settings)
Save zoom settings to settings.