summaryrefslogtreecommitdiff
path: root/src/libpcp_qwt/src/qwt_dial_needle.h
blob: a02a590b2182e0e90c7532a278efbd708b2279d3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
/* -*- 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_NEEDLE_H
#define QWT_DIAL_NEEDLE_H 1

#include "qwt_global.h"
#include <qpalette.h>

class QPainter;
class QPoint;

/*!
  \brief Base class for needles that can be used in a QwtDial.

  QwtDialNeedle is a pointer that indicates a value by pointing
  to a specific direction.

  Qwt is missing a set of good looking needles.
  Contributions are very welcome.

  \sa QwtDial, QwtCompass
*/

class QWT_EXPORT QwtDialNeedle
{
public:
    QwtDialNeedle();
    virtual ~QwtDialNeedle();

    virtual void setPalette( const QPalette & );
    const QPalette &palette() const;

    virtual void draw( QPainter *painter, const QPointF &center,
        double length, double direction, 
        QPalette::ColorGroup = QPalette::Active ) const;

protected:
    /*!
      \brief Draw the needle

      The origin of the needle is at position (0.0, 0.0 )
      pointing in direction 0.0 ( = east ). 

      The painter is already initilaized with translation and 
      rotation.

      \param painter Painter
      \param length Length of the needle
      \param colorGroup Color group, used for painting

      \sa setPalette(), palette()
    */
    virtual void drawNeedle( QPainter *painter, 
        double length, QPalette::ColorGroup colorGroup ) const = 0;

    virtual void drawKnob( QPainter *, double width, 
        const QBrush &, bool sunken ) const;

private:
    QPalette d_palette;
};

/*!
  \brief A needle for dial widgets

  The following colors are used:

  - QPalette::Mid\n
    Pointer
  - QPalette::Base\n
    Knob

  \sa QwtDial, QwtCompass
*/

class QWT_EXPORT QwtDialSimpleNeedle: public QwtDialNeedle
{
public:
    //! Style of the needle
    enum Style
    {
        //! Arrow
        Arrow,

        //! A straight line from the center
        Ray
    };

    QwtDialSimpleNeedle( Style, bool hasKnob = true,
        const QColor &mid = Qt::gray, const QColor &base = Qt::darkGray );

    void setWidth( double width );
    double width() const;

protected:
    virtual void drawNeedle( QPainter *, double length,
        QPalette::ColorGroup ) const;

private:
    Style d_style;
    bool d_hasKnob;
    double d_width;
};

/*!
  \brief A magnet needle for compass widgets

  A magnet needle points to two opposite directions indicating
  north and south.

  The following colors are used:
  - QPalette::Light\n
    Used for pointing south
  - QPalette::Dark\n
    Used for pointing north
  - QPalette::Base\n
    Knob (ThinStyle only)

  \sa QwtDial, QwtCompass
*/

class QWT_EXPORT QwtCompassMagnetNeedle: public QwtDialNeedle
{
public:
    //! Style of the needle
    enum Style
    {
        //! A needle with a triangular shape
        TriangleStyle,

        //! A thin needle 
        ThinStyle
    };

    QwtCompassMagnetNeedle( Style = TriangleStyle,
        const QColor &light = Qt::white, const QColor &dark = Qt::red );

protected:
    virtual void drawNeedle( QPainter *, 
        double length, QPalette::ColorGroup ) const;

private:
    Style d_style;
};

/*!
  \brief An indicator for the wind direction

  QwtCompassWindArrow shows the direction where the wind comes from.

  - QPalette::Light\n
    Used for Style1, or the light half of Style2
  - QPalette::Dark\n
    Used for the dark half of Style2

  \sa QwtDial, QwtCompass
*/

class QWT_EXPORT QwtCompassWindArrow: public QwtDialNeedle
{
public:
    //! Style of the arrow
    enum Style
    {
        //! A needle pointing to the center
        Style1,

        //! A needle pointing to the center
        Style2
    };

    QwtCompassWindArrow( Style, const QColor &light = Qt::white,
        const QColor &dark = Qt::gray );

protected:
    virtual void drawNeedle( QPainter *, 
        double length, QPalette::ColorGroup ) const;

private:
    Style d_style;
};

#endif