123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224 |
- /* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
- * Qwt Widget Library
- * Copyright (C) 1997 Josef Wilgen
- * Copyright (C) 2002 Uwe Rathmann
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the Qwt License, Version 1.0
- *****************************************************************************/
- #ifndef QWT_DIAL_H
- #define QWT_DIAL_H 1
- #include "qwt_global.h"
- #include "qwt_abstract_slider.h"
- #include "qwt_round_scale_draw.h"
- #include <qframe.h>
- #include <qpalette.h>
- class QwtDialNeedle;
- class QwtDial;
- /*!
- \brief A special scale draw made for QwtDial
- \sa QwtDial, QwtCompass
- */
- class QWT_EXPORT QwtDialScaleDraw: public QwtRoundScaleDraw
- {
- public:
- explicit QwtDialScaleDraw( QwtDial * );
- virtual QwtText label( double value ) const;
- void setPenWidth( double );
- double penWidth() const;
- private:
- QwtDial *d_parent;
- double d_penWidth;
- };
- /*!
- \brief QwtDial class provides a rounded range control.
- QwtDial is intended as base class for dial widgets like
- speedometers, compass widgets, clocks ...
- \image html dials2.png
- A dial contains a scale and a needle indicating the current value
- of the dial. Depending on Mode one of them is fixed and the
- other is rotating. If not isReadOnly() the
- dial can be rotated by dragging the mouse or using keyboard inputs
- (see keyPressEvent()). A dial might be wrapping, what means
- a rotation below/above one limit continues on the other limit (f.e compass).
- The scale might cover any arc of the dial, its values are related to
- the origin() of the dial.
- Qwt is missing a set of good looking needles (QwtDialNeedle).
- Contributions are very welcome.
- \sa QwtCompass, QwtAnalogClock, QwtDialNeedle
- \note The examples/dials example shows different types of dials.
- */
- class QWT_EXPORT QwtDial: public QwtAbstractSlider
- {
- Q_OBJECT
- Q_ENUMS( Shadow )
- Q_ENUMS( Mode )
- Q_ENUMS( Direction )
- Q_PROPERTY( bool visibleBackground READ hasVisibleBackground WRITE showBackground )
- Q_PROPERTY( int lineWidth READ lineWidth WRITE setLineWidth )
- Q_PROPERTY( Shadow frameShadow READ frameShadow WRITE setFrameShadow )
- Q_PROPERTY( Mode mode READ mode WRITE setMode )
- Q_PROPERTY( double origin READ origin WRITE setOrigin )
- Q_PROPERTY( bool wrapping READ wrapping WRITE setWrapping )
- Q_PROPERTY( Direction direction READ direction WRITE setDirection )
- friend class QwtDialScaleDraw;
- public:
- /*!
- \brief Frame shadow
- Unfortunately it is not possible to use QFrame::Shadow
- as a property of a widget that is not derived from QFrame.
- The following enum is made for the designer only. It is safe
- to use QFrame::Shadow instead.
- */
- enum Shadow
- {
- Plain = QFrame::Plain,
- Raised = QFrame::Raised,
- Sunken = QFrame::Sunken
- };
- //! see QwtDial::setScaleOptions
- enum ScaleOptions
- {
- ScaleBackbone = 1,
- ScaleTicks = 2,
- ScaleLabel = 4
- };
- /*!
- In case of RotateNeedle the needle is rotating, in case of
- RotateScale, the needle points to origin()
- and the scale is rotating.
- */
- enum Mode
- {
- RotateNeedle,
- RotateScale
- };
- /*!
- Direction of the dial
- */
- enum Direction
- {
- Clockwise,
- CounterClockwise
- };
- explicit QwtDial( QWidget *parent = NULL );
- virtual ~QwtDial();
- void setFrameShadow( Shadow );
- Shadow frameShadow() const;
- bool hasVisibleBackground() const;
- void showBackground( bool );
- void setLineWidth( int );
- int lineWidth() const;
- void setMode( Mode );
- Mode mode() const;
- virtual void setWrapping( bool );
- bool wrapping() const;
- virtual void setScale( int maxMajIntv, int maxMinIntv, double step = 0.0 );
- void setScaleArc( double min, double max );
- void setScaleOptions( int );
- void setScaleTicks( int minLen, int medLen, int majLen, int penWidth = 1 );
- double minScaleArc() const;
- double maxScaleArc() const;
- virtual void setOrigin( double );
- double origin() const;
- void setDirection( Direction );
- Direction direction() const;
- virtual void setNeedle( QwtDialNeedle * );
- const QwtDialNeedle *needle() const;
- QwtDialNeedle *needle();
- QRect boundingRect() const;
- QRect contentsRect() const;
- virtual QRect scaleContentsRect() const;
- virtual QSize sizeHint() const;
- virtual QSize minimumSizeHint() const;
- virtual void setScaleDraw( QwtDialScaleDraw * );
- QwtDialScaleDraw *scaleDraw();
- const QwtDialScaleDraw *scaleDraw() const;
- protected:
- virtual void paintEvent( QPaintEvent * );
- virtual void resizeEvent( QResizeEvent * );
- virtual void keyPressEvent( QKeyEvent * );
- virtual void updateMask();
- virtual void drawFrame( QPainter *p );
- virtual void drawContents( QPainter * ) const;
- virtual void drawFocusIndicator( QPainter * ) const;
- virtual void drawScale( QPainter *, const QPoint ¢er,
- int radius, double origin, double arcMin, double arcMax ) const;
- /*!
- Draw the contents inside the scale
- Paints nothing.
- \param painter Painter
- \param center Center of the contents circle
- \param radius Radius of the contents circle
- */
- virtual void drawScaleContents( QPainter *painter,
- const QPoint ¢er, int radius ) const;
- virtual void drawNeedle( QPainter *, const QPoint &,
- int radius, double direction, QPalette::ColorGroup ) const;
- virtual QwtText scaleLabel( double ) const;
- void updateScale();
- virtual void rangeChange();
- virtual void valueChange();
- virtual double getValue( const QPoint & );
- virtual void getScrollMode( const QPoint &,
- int &scrollMode, int &direction );
- private:
- void initDial();
- class PrivateData;
- PrivateData *d_data;
- };
- #endif
|