00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef QWT_PLOT_RESCALER_H
00011 #define QWT_PLOT_RESCALER_H 1
00012
00013 #include "qwt_global.h"
00014 #include "qwt_double_rect.h"
00015 #include "qwt_double_interval.h"
00016 #include "qwt_plot.h"
00017 #include <qobject.h>
00018
00019 class QwtPlotCanvas;
00020 class QwtPlot;
00021 class QResizeEvent;
00022
00030 class QWT_EXPORT QwtPlotRescaler: public QObject
00031 {
00032 public:
00059 enum RescalePolicy
00060 {
00061 Fixed,
00062 Expanding,
00063 Fitting
00064 };
00065
00066 enum ExpandingDirection
00067 {
00068 ExpandUp,
00069 ExpandDown,
00070 ExpandBoth
00071 };
00072
00073 explicit QwtPlotRescaler(QwtPlotCanvas *,
00074 int referenceAxis = QwtPlot::xBottom,
00075 RescalePolicy = Expanding );
00076
00077 virtual ~QwtPlotRescaler();
00078
00079 void setEnabled(bool);
00080 bool isEnabled() const;
00081
00082 void setRescalePolicy(RescalePolicy);
00083 RescalePolicy rescalePolicy() const;
00084
00085 void setExpandingDirection(ExpandingDirection);
00086 void setExpandingDirection(int axis, ExpandingDirection);
00087 ExpandingDirection expandingDirection(int axis) const;
00088
00089 void setReferenceAxis(int axis);
00090 int referenceAxis() const;
00091
00092 void setAspectRatio(double ratio);
00093 void setAspectRatio(int axis, double ratio);
00094 double aspectRatio(int axis) const;
00095
00096 void setIntervalHint(int axis, const QwtDoubleInterval&);
00097 QwtDoubleInterval intervalHint(int axis) const;
00098
00099 QwtPlotCanvas *canvas();
00100 const QwtPlotCanvas *canvas() const;
00101
00102 QwtPlot *plot();
00103 const QwtPlot *plot() const;
00104
00105 virtual bool eventFilter(QObject *, QEvent *);
00106
00107 void rescale() const;
00108
00109 protected:
00110 virtual void canvasResizeEvent(QResizeEvent *);
00111
00112 virtual void rescale(const QSize &oldSize, const QSize &newSize) const;
00113 virtual QwtDoubleInterval expandScale( int axis,
00114 const QSize &oldSize, const QSize &newSize) const;
00115
00116 virtual QwtDoubleInterval syncScale(
00117 int axis, const QwtDoubleInterval& reference,
00118 const QSize &size) const;
00119
00120 virtual void updateScales(
00121 QwtDoubleInterval intervals[QwtPlot::axisCnt]) const;
00122
00123 Qt::Orientation orientation(int axis) const;
00124 QwtDoubleInterval interval(int axis) const;
00125 QwtDoubleInterval expandInterval(const QwtDoubleInterval &,
00126 double width, ExpandingDirection) const;
00127
00128 private:
00129 double pixelDist(int axis, const QSize &) const;
00130
00131 class AxisData;
00132 class PrivateData;
00133 PrivateData *d_data;
00134 };
00135
00136 #endif