00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef QWT_DIAL_H
00013 #define QWT_DIAL_H 1
00014
00015 #include <qframe.h>
00016 #include <qpalette.h>
00017 #include "qwt_global.h"
00018 #include "qwt_abstract_slider.h"
00019 #include "qwt_round_scale_draw.h"
00020
00021 class QwtDialNeedle;
00022 class QwtDial;
00023
00029 class QWT_EXPORT QwtDialScaleDraw: public QwtRoundScaleDraw
00030 {
00031 public:
00032 explicit QwtDialScaleDraw(QwtDial *);
00033 virtual QwtText label(double value) const;
00034
00035 void setPenWidth(uint);
00036 uint penWidth() const;
00037
00038 private:
00039 QwtDial *d_parent;
00040 int d_penWidth;
00041 };
00042
00067 class QWT_EXPORT QwtDial: public QwtAbstractSlider
00068 {
00069 Q_OBJECT
00070
00071 Q_ENUMS(Shadow)
00072 Q_ENUMS(Mode)
00073
00074 Q_PROPERTY(bool visibleBackground READ hasVisibleBackground WRITE showBackground)
00075 Q_PROPERTY(int lineWidth READ lineWidth WRITE setLineWidth)
00076 Q_PROPERTY(Shadow frameShadow READ frameShadow WRITE setFrameShadow)
00077 Q_PROPERTY(Mode mode READ mode WRITE setMode)
00078 Q_PROPERTY(double origin READ origin WRITE setOrigin)
00079 Q_PROPERTY(bool wrapping READ wrapping WRITE setWrapping)
00080
00081 friend class QwtDialScaleDraw;
00082 public:
00083
00092 enum Shadow
00093 {
00094 Plain = QFrame::Plain,
00095 Raised = QFrame::Raised,
00096 Sunken = QFrame::Sunken
00097 };
00098
00100 enum ScaleOptions
00101 {
00102 ScaleBackbone = 1,
00103 ScaleTicks = 2,
00104 ScaleLabel = 4
00105 };
00106
00112 enum Mode
00113 {
00114 RotateNeedle,
00115 RotateScale
00116 };
00117
00118 explicit QwtDial( QWidget *parent = NULL);
00119 #if QT_VERSION < 0x040000
00120 explicit QwtDial( QWidget *parent, const char *name);
00121 #endif
00122
00123 virtual ~QwtDial();
00124
00125 void setFrameShadow(Shadow);
00126 Shadow frameShadow() const;
00127
00128 bool hasVisibleBackground() const;
00129 void showBackground(bool);
00130
00131 void setLineWidth(int);
00132 int lineWidth() const;
00133
00134 void setMode(Mode);
00135 Mode mode() const;
00136
00137 virtual void setWrapping(bool);
00138 bool wrapping() const;
00139
00140 virtual void setScale(int maxMajIntv, int maxMinIntv, double step = 0.0);
00141
00142 void setScaleArc(double min, double max);
00143 void setScaleOptions(int);
00144 void setScaleTicks(int minLen, int medLen, int majLen, int penWidth = 1);
00145
00146 double minScaleArc() const;
00147 double maxScaleArc() const;
00148
00149 virtual void setOrigin(double);
00150 double origin() const;
00151
00152 virtual void setNeedle(QwtDialNeedle *);
00153 const QwtDialNeedle *needle() const;
00154 QwtDialNeedle *needle();
00155
00156 QRect boundingRect() const;
00157 QRect contentsRect() const;
00158 virtual QRect scaleContentsRect() const;
00159
00160 virtual QSize sizeHint() const;
00161 virtual QSize minimumSizeHint() const;
00162
00163 virtual void setScaleDraw(QwtDialScaleDraw *);
00164
00165 QwtDialScaleDraw *scaleDraw();
00166 const QwtDialScaleDraw *scaleDraw() const;
00167
00168 protected:
00169 virtual void paintEvent(QPaintEvent *);
00170 virtual void resizeEvent(QResizeEvent *);
00171 virtual void keyPressEvent(QKeyEvent *);
00172
00173 virtual void updateMask();
00174
00175 virtual void drawFrame(QPainter *p);
00176 virtual void drawContents(QPainter *) const;
00177 virtual void drawFocusIndicator(QPainter *) const;
00178
00179 virtual void drawScale(QPainter *, const QPoint ¢er,
00180 int radius, double origin, double arcMin, double arcMax) const;
00181
00191 virtual void drawScaleContents(QPainter *painter, const QPoint ¢er,
00192 int radius) const;
00193
00194 virtual void drawNeedle(QPainter *, const QPoint &,
00195 int radius, double direction, QPalette::ColorGroup) const;
00196
00197 virtual QwtText scaleLabel(double) const;
00198 void updateScale();
00199
00200 virtual void rangeChange();
00201 virtual void valueChange();
00202
00203 virtual double getValue(const QPoint &);
00204 virtual void getScrollMode(const QPoint &,
00205 int &scrollMode, int &direction);
00206
00207 private:
00208 void initDial();
00209
00210 class PrivateData;
00211 PrivateData *d_data;
00212 };
00213
00214 #endif