# qwt_dial.h

    00001 /* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
    00002  * Qwt Widget Library
    00003  * Copyright (C) 1997   Josef Wilgen
    00004  * Copyright (C) 2002   Uwe Rathmann
    00005  *
    00006  * This library is free software; you can redistribute it and/or
    00007  * modify it under the terms of the Qwt License, Version 1.0
    00008  *****************************************************************************/
    00009
    00010 #ifndef QWT_DIAL_H
    00011 #define QWT_DIAL_H 1
    00012
    00013 #include "qwt_global.h"
    00014 #include "qwt_abstract_slider.h"
    00015 #include "qwt_round_scale_draw.h"
    00016 #include <qframe.h>
    00017 #include <qpalette.h>
    00018
    00019 class QwtDialNeedle;
    00020 class QwtDial;
    00021
    00027 class QWT_EXPORT QwtDialScaleDraw: public QwtRoundScaleDraw
    00028 {
    00029 public:
    00030     explicit QwtDialScaleDraw( QwtDial * );
    00031
    00032     virtual QwtText label( double value ) const;
    00033
    00034     void setPenWidth( double );
    00035     double penWidth() const;
    00036
    00037 private:
    00038     QwtDial *d_parent;
    00039     double d_penWidth;
    00040 };
    00041
    00066 class QWT_EXPORT QwtDial: public QwtAbstractSlider
    00067 {
    00068     Q_OBJECT
    00069
    00070     Q_ENUMS( Shadow )
    00071     Q_ENUMS( Mode )
    00072     Q_ENUMS( Direction )
    00073
    00074     Q_PROPERTY( int lineWidth READ lineWidth WRITE setLineWidth )
    00075     Q_PROPERTY( Shadow frameShadow READ frameShadow WRITE setFrameShadow )
    00076     Q_PROPERTY( Mode mode READ mode WRITE setMode )
    00077     Q_PROPERTY( double origin READ origin WRITE setOrigin )
    00078     Q_PROPERTY( bool wrapping READ wrapping WRITE setWrapping )
    00079     Q_PROPERTY( Direction direction READ direction WRITE setDirection )
    00080
    00081     friend class QwtDialScaleDraw;
    00082 public:
    00083
    00092     enum Shadow
    00093     {
    00095         Plain = QFrame::Plain,
    00096
    00098         Raised = QFrame::Raised,
    00099
    00101         Sunken = QFrame::Sunken
    00102     };
    00103
    00105     enum Mode
    00106     {
    00108         RotateNeedle,
    00109
    00111         RotateScale
    00112     };
    00113
    00115     enum Direction
    00116     {
    00118         Clockwise,
    00119
    00121         CounterClockwise
    00122     };
    00123
    00124     explicit QwtDial( QWidget *parent = NULL );
    00125     virtual ~QwtDial();
    00126
    00127     void setFrameShadow( Shadow );
    00128     Shadow frameShadow() const;
    00129
    00130     void setLineWidth( int );
    00131     int lineWidth() const;
    00132
    00133     void setMode( Mode );
    00134     Mode mode() const;
    00135
    00136     virtual void setWrapping( bool );
    00137     bool wrapping() const;
    00138
    00139     virtual void setScale( int maxMajIntv, int maxMinIntv, double step = 0.0 );
    00140
    00141     void setScaleArc( double min, double max );
    00142     void setScaleComponents( QwtAbstractScaleDraw::ScaleComponents );
    00143     void setScaleTicks( int minLen, int medLen, int majLen, int penWidth = 1 );
    00144
    00145     double minScaleArc() const;
    00146     double maxScaleArc() const;
    00147
    00148     virtual void setOrigin( double );
    00149     double origin() const;
    00150
    00151     void setDirection( Direction );
    00152     Direction direction() const;
    00153
    00154     virtual void setNeedle( QwtDialNeedle * );
    00155     const QwtDialNeedle *needle() const;
    00156     QwtDialNeedle *needle();
    00157
    00158     QRectF boundingRect() const;
    00159     QRectF innerRect() const;
    00160     virtual QRectF scaleInnerRect() const;
    00161
    00162     virtual QSize sizeHint() const;
    00163     virtual QSize minimumSizeHint() const;
    00164
    00165     virtual void setScaleDraw( QwtDialScaleDraw * );
    00166
    00167     QwtDialScaleDraw *scaleDraw();
    00168     const QwtDialScaleDraw *scaleDraw() const;
    00169
    00170 protected:
    00171     virtual void paintEvent( QPaintEvent * );
    00172     virtual void keyPressEvent( QKeyEvent * );
    00173
    00174     virtual void drawFrame( QPainter *p );
    00175     virtual void drawContents( QPainter * ) const;
    00176     virtual void drawFocusIndicator( QPainter * ) const;
    00177
    00178     virtual void drawScale(
    00179         QPainter *, const QPointF &center,
    00180         double radius, double origin,
    00181         double arcMin, double arcMax ) const;
    00182
    00192     virtual void drawScaleContents( QPainter *painter,
    00193         const QPointF &center, double radius ) const;
    00194
    00195     virtual void drawNeedle( QPainter *, const QPointF &,
    00196         double radius, double direction, QPalette::ColorGroup ) const;
    00197
    00198     virtual QwtText scaleLabel( double ) const;
    00199     void updateScale();
    00200
    00201     virtual void rangeChange();
    00202     virtual void valueChange();
    00203
    00204     virtual double getValue( const QPoint & );
    00205     virtual void getScrollMode( const QPoint &,
    00206         QwtAbstractSlider::ScrollMode &, int &direction ) const;
    00207
    00208 private:
    00209     void initDial();
    00210
    00211     class PrivateData;
    00212     PrivateData *d_data;
    00213 };
    00214
    00215 #endif