1 | /* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
|
---|
2 | * Qwt Widget Library
|
---|
3 | * Copyright (C) 1997 Josef Wilgen
|
---|
4 | * Copyright (C) 2002 Uwe Rathmann
|
---|
5 | *
|
---|
6 | * This library is free software; you can redistribute it and/or
|
---|
7 | * modify it under the terms of the Qwt License, Version 1.0
|
---|
8 | *****************************************************************************/
|
---|
9 |
|
---|
10 | #ifndef QWT_DIAL_H
|
---|
11 | #define QWT_DIAL_H 1
|
---|
12 |
|
---|
13 | #include "qwt_global.h"
|
---|
14 | #include "qwt_abstract_slider.h"
|
---|
15 | #include "qwt_abstract_scale_draw.h"
|
---|
16 | #include <qframe.h>
|
---|
17 | #include <qpalette.h>
|
---|
18 |
|
---|
19 | class QwtDialNeedle;
|
---|
20 | class QwtRoundScaleDraw;
|
---|
21 |
|
---|
22 | /*!
|
---|
23 | \brief QwtDial class provides a rounded range control.
|
---|
24 |
|
---|
25 | QwtDial is intended as base class for dial widgets like
|
---|
26 | speedometers, compass widgets, clocks ...
|
---|
27 |
|
---|
28 | \image html dials2.png
|
---|
29 |
|
---|
30 | A dial contains a scale and a needle indicating the current value
|
---|
31 | of the dial. Depending on Mode one of them is fixed and the
|
---|
32 | other is rotating. If not isReadOnly() the
|
---|
33 | dial can be rotated by dragging the mouse or using keyboard inputs
|
---|
34 | (see QwtAbstractSlider::keyPressEvent()). A dial might be wrapping, what means
|
---|
35 | a rotation below/above one limit continues on the other limit (f.e compass).
|
---|
36 | The scale might cover any arc of the dial, its values are related to
|
---|
37 | the origin() of the dial.
|
---|
38 |
|
---|
39 | Often dials have to be updated very often according to values from external
|
---|
40 | devices. For these high refresh rates QwtDial caches as much as possible.
|
---|
41 | For derived classes it might be necessary to clear these caches manually
|
---|
42 | according to attribute changes using invalidateCache().
|
---|
43 |
|
---|
44 | \sa QwtCompass, QwtAnalogClock, QwtDialNeedle
|
---|
45 | \note The controls and dials examples shows different types of dials.
|
---|
46 | \note QDial is more similar to QwtKnob than to QwtDial
|
---|
47 | */
|
---|
48 |
|
---|
49 | class QWT_EXPORT QwtDial: public QwtAbstractSlider
|
---|
50 | {
|
---|
51 | Q_OBJECT
|
---|
52 |
|
---|
53 | Q_ENUMS( Shadow Mode Direction )
|
---|
54 |
|
---|
55 | Q_PROPERTY( int lineWidth READ lineWidth WRITE setLineWidth )
|
---|
56 | Q_PROPERTY( Shadow frameShadow READ frameShadow WRITE setFrameShadow )
|
---|
57 | Q_PROPERTY( Mode mode READ mode WRITE setMode )
|
---|
58 | Q_PROPERTY( double origin READ origin WRITE setOrigin )
|
---|
59 | Q_PROPERTY( double minScaleArc READ minScaleArc WRITE setMinScaleArc )
|
---|
60 | Q_PROPERTY( double maxScaleArc READ maxScaleArc WRITE setMaxScaleArc )
|
---|
61 |
|
---|
62 | public:
|
---|
63 |
|
---|
64 | /*!
|
---|
65 | \brief Frame shadow
|
---|
66 |
|
---|
67 | Unfortunately it is not possible to use QFrame::Shadow
|
---|
68 | as a property of a widget that is not derived from QFrame.
|
---|
69 | The following enum is made for the designer only. It is safe
|
---|
70 | to use QFrame::Shadow instead.
|
---|
71 | */
|
---|
72 | enum Shadow
|
---|
73 | {
|
---|
74 | //! QFrame::Plain
|
---|
75 | Plain = QFrame::Plain,
|
---|
76 |
|
---|
77 | //! QFrame::Raised
|
---|
78 | Raised = QFrame::Raised,
|
---|
79 |
|
---|
80 | //! QFrame::Sunken
|
---|
81 | Sunken = QFrame::Sunken
|
---|
82 | };
|
---|
83 |
|
---|
84 | //! Mode controlling whether the needle or the scale is rotating
|
---|
85 | enum Mode
|
---|
86 | {
|
---|
87 | //! The needle is rotating
|
---|
88 | RotateNeedle,
|
---|
89 |
|
---|
90 | //! The needle is fixed, the scales are rotating
|
---|
91 | RotateScale
|
---|
92 | };
|
---|
93 |
|
---|
94 | explicit QwtDial( QWidget *parent = NULL );
|
---|
95 | virtual ~QwtDial();
|
---|
96 |
|
---|
97 | void setFrameShadow( Shadow );
|
---|
98 | Shadow frameShadow() const;
|
---|
99 |
|
---|
100 | void setLineWidth( int );
|
---|
101 | int lineWidth() const;
|
---|
102 |
|
---|
103 | void setMode( Mode );
|
---|
104 | Mode mode() const;
|
---|
105 |
|
---|
106 | void setScaleArc( double minArc, double maxArc );
|
---|
107 |
|
---|
108 | void setMinScaleArc( double );
|
---|
109 | double minScaleArc() const;
|
---|
110 |
|
---|
111 | void setMaxScaleArc( double );
|
---|
112 | double maxScaleArc() const;
|
---|
113 |
|
---|
114 | virtual void setOrigin( double );
|
---|
115 | double origin() const;
|
---|
116 |
|
---|
117 | void setNeedle( QwtDialNeedle * );
|
---|
118 | const QwtDialNeedle *needle() const;
|
---|
119 | QwtDialNeedle *needle();
|
---|
120 |
|
---|
121 | QRect boundingRect() const;
|
---|
122 | QRect innerRect() const;
|
---|
123 |
|
---|
124 | virtual QRect scaleInnerRect() const;
|
---|
125 |
|
---|
126 | virtual QSize sizeHint() const;
|
---|
127 | virtual QSize minimumSizeHint() const;
|
---|
128 |
|
---|
129 | void setScaleDraw( QwtRoundScaleDraw * );
|
---|
130 |
|
---|
131 | QwtRoundScaleDraw *scaleDraw();
|
---|
132 | const QwtRoundScaleDraw *scaleDraw() const;
|
---|
133 |
|
---|
134 | protected:
|
---|
135 | virtual void wheelEvent( QWheelEvent * );
|
---|
136 | virtual void paintEvent( QPaintEvent * );
|
---|
137 | virtual void changeEvent( QEvent * );
|
---|
138 |
|
---|
139 | virtual void drawFrame( QPainter * );
|
---|
140 | virtual void drawContents( QPainter * ) const;
|
---|
141 | virtual void drawFocusIndicator( QPainter * ) const;
|
---|
142 |
|
---|
143 | void invalidateCache();
|
---|
144 |
|
---|
145 | virtual void drawScale( QPainter *,
|
---|
146 | const QPointF ¢er, double radius ) const;
|
---|
147 |
|
---|
148 | virtual void drawScaleContents( QPainter *painter,
|
---|
149 | const QPointF ¢er, double radius ) const;
|
---|
150 |
|
---|
151 | virtual void drawNeedle( QPainter *, const QPointF &,
|
---|
152 | double radius, double direction, QPalette::ColorGroup ) const;
|
---|
153 |
|
---|
154 | virtual double scrolledTo( const QPoint & ) const;
|
---|
155 | virtual bool isScrollPosition( const QPoint & ) const;
|
---|
156 |
|
---|
157 | virtual void sliderChange();
|
---|
158 | virtual void scaleChange();
|
---|
159 |
|
---|
160 | private:
|
---|
161 | void setAngleRange( double angle, double span );
|
---|
162 | void drawNeedle( QPainter * ) const;
|
---|
163 |
|
---|
164 | class PrivateData;
|
---|
165 | PrivateData *d_data;
|
---|
166 | };
|
---|
167 |
|
---|
168 | #endif
|
---|