~ubuntu-branches/ubuntu/oneiric/qwt/oneiric-proposed

« back to all changes in this revision

Viewing changes to qwt-5.0.2/examples/dials/compass_grid.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Fathi Boudra
  • Date: 2007-10-05 15:20:41 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20071005152041-qmybqh4fj9jejyo2
Tags: 5.0.2-2
* Handle nostrip build option. (Closes: #437877)
* Build libqwt5-doc package in binary-indep target. (Closes: #443110)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#include <qlayout.h>
 
2
#include <qwt_compass.h>
 
3
#include <qwt_compass_rose.h>
 
4
#include <qwt_dial_needle.h>
 
5
#include "compass_grid.h"
 
6
 
 
7
#if QT_VERSION < 0x040000
 
8
typedef QColorGroup Palette;
 
9
#else
 
10
typedef QPalette Palette;
 
11
#endif
 
12
 
 
13
CompassGrid::CompassGrid(QWidget *parent):
 
14
    QFrame(parent)
 
15
{
 
16
#if QT_VERSION < 0x040000
 
17
    setBackgroundColor(Qt::gray);
 
18
#else
 
19
    QPalette p = palette();
 
20
    p.setColor(backgroundRole(), Qt::gray);
 
21
    setPalette(p);
 
22
#endif
 
23
 
 
24
#if QT_VERSION >= 0x040100
 
25
    setAutoFillBackground(true);
 
26
#endif
 
27
 
 
28
    QGridLayout *layout = new QGridLayout(this);
 
29
    layout->setSpacing(5);
 
30
    layout->setMargin(0);
 
31
 
 
32
    int i;
 
33
    for ( i = 0; i < 6; i++ )
 
34
    {
 
35
        QwtCompass *compass = createCompass(i);
 
36
        layout->addWidget(compass, i / 3, i % 3);
 
37
    }
 
38
 
 
39
#if QT_VERSION < 0x040000
 
40
    for ( i = 0; i < layout->numCols(); i++ )
 
41
        layout->setColStretch(i, 1);
 
42
#else
 
43
    for ( i = 0; i < layout->columnCount(); i++ )
 
44
        layout->setColumnStretch(i, 1);
 
45
#endif
 
46
}
 
47
 
 
48
QwtCompass *CompassGrid::createCompass(int pos)
 
49
{
 
50
    int c;
 
51
 
 
52
    Palette colorGroup;
 
53
    for ( c = 0; c < Palette::NColorRoles; c++ )
 
54
        colorGroup.setColor((Palette::ColorRole)c, QColor());
 
55
 
 
56
#if QT_VERSION < 0x040000
 
57
    colorGroup.setColor(Palette::Base, backgroundColor().light(120));
 
58
#else
 
59
    colorGroup.setColor(Palette::Base,
 
60
        palette().color(backgroundRole()).light(120));
 
61
#endif
 
62
    colorGroup.setColor(Palette::Foreground, 
 
63
        colorGroup.color(Palette::Base));
 
64
 
 
65
    QwtCompass *compass = new QwtCompass(this);
 
66
    compass->setLineWidth(4);
 
67
    compass->setFrameShadow(
 
68
        pos <= 2 ? QwtCompass::Sunken : QwtCompass::Raised);
 
69
 
 
70
    switch(pos)
 
71
    {
 
72
        case 0:
 
73
        {
 
74
            /*
 
75
              A compass with a rose and no needle. Scale and rose are
 
76
              rotating.
 
77
             */
 
78
            compass->setMode(QwtCompass::RotateScale);
 
79
 
 
80
            QwtSimpleCompassRose *rose = new QwtSimpleCompassRose(16, 2);
 
81
            rose->setWidth(0.15);
 
82
 
 
83
            compass->setRose(rose);
 
84
            break;
 
85
        }
 
86
        case 1:
 
87
        {
 
88
            /*
 
89
              A windrose, with a scale indicating the main directions only
 
90
             */
 
91
            QMap<double, QString> map;
 
92
            map.insert(0.0, "N");
 
93
            map.insert(90.0, "E");
 
94
            map.insert(180.0, "S");
 
95
            map.insert(270.0, "W");
 
96
 
 
97
            compass->setLabelMap(map);
 
98
 
 
99
            QwtSimpleCompassRose *rose = new QwtSimpleCompassRose(4, 1);
 
100
            compass->setRose(rose);
 
101
 
 
102
            compass->setNeedle(
 
103
                new QwtCompassWindArrow(QwtCompassWindArrow::Style2));
 
104
            compass->setValue(60.0);
 
105
            break;
 
106
        }
 
107
        case 2:
 
108
        {
 
109
            /*
 
110
              A compass with a rotating needle in darkBlue. Shows
 
111
              a ticks for each degree.
 
112
             */
 
113
 
 
114
            colorGroup.setColor(Palette::Base, Qt::darkBlue);
 
115
            colorGroup.setColor(Palette::Foreground, 
 
116
                QColor(Qt::darkBlue).dark(120));
 
117
            colorGroup.setColor(Palette::Text, Qt::white);
 
118
 
 
119
            compass->setScaleOptions(QwtDial::ScaleTicks | QwtDial::ScaleLabel);
 
120
            compass->setScaleTicks(1, 1, 3);
 
121
            compass->setScale(36, 5, 0);
 
122
 
 
123
            compass->setNeedle(
 
124
                new QwtCompassMagnetNeedle(QwtCompassMagnetNeedle::ThinStyle));
 
125
            compass->setValue(220.0);
 
126
 
 
127
            break;
 
128
        }
 
129
        case 3:
 
130
        {
 
131
            /*
 
132
              A compass without a frame, showing numbers as tick labels.
 
133
              The origin is at 220.0
 
134
             */
 
135
#if QT_VERSION < 0x040000
 
136
            colorGroup.setColor(Palette::Base, backgroundColor());
 
137
#else
 
138
            colorGroup.setColor(Palette::Base, 
 
139
                palette().color(backgroundRole()));
 
140
#endif
 
141
            colorGroup.setColor(Palette::Foreground, Qt::blue);
 
142
                
 
143
            compass->setLineWidth(0);
 
144
 
 
145
            compass->setScaleOptions(QwtDial::ScaleBackbone | 
 
146
                QwtDial::ScaleTicks | QwtDial::ScaleLabel);
 
147
            compass->setScaleTicks(0, 0, 3);
 
148
 
 
149
            QMap<double, QString> map;
 
150
            for ( double d = 0.0; d < 360.0; d += 60.0 )
 
151
            {
 
152
                QString label;
 
153
                label.sprintf("%.0f", d);
 
154
                map.insert(d, label);
 
155
            }
 
156
            compass->setLabelMap(map);
 
157
            compass->setScale(36, 5, 0);
 
158
 
 
159
            compass->setNeedle(new QwtDialSimpleNeedle(QwtDialSimpleNeedle::Ray,
 
160
                false, Qt::white));
 
161
            compass->setOrigin(220.0);
 
162
            compass->setValue(20.0);
 
163
            break;
 
164
        }
 
165
        case 4:
 
166
        {
 
167
            /*
 
168
             A compass showing another needle
 
169
             */
 
170
            compass->setScaleOptions(QwtDial::ScaleTicks | QwtDial::ScaleLabel);
 
171
            compass->setScaleTicks(0, 0, 3);
 
172
 
 
173
            compass->setNeedle(new QwtCompassMagnetNeedle(
 
174
                QwtCompassMagnetNeedle::TriangleStyle, Qt::white, Qt::red));
 
175
            compass->setValue(220.0);
 
176
            break;
 
177
        }
 
178
        case 5:
 
179
        {
 
180
            /*
 
181
             A compass with a yellow on black ray
 
182
             */
 
183
            colorGroup.setColor(Palette::Foreground, Qt::black);
 
184
 
 
185
            compass->setNeedle(new QwtDialSimpleNeedle(QwtDialSimpleNeedle::Ray,
 
186
                false, Qt::yellow));
 
187
            compass->setValue(315.0);
 
188
            break;
 
189
        }
 
190
    }
 
191
 
 
192
    QPalette newPalette = compass->palette();
 
193
    for ( c = 0; c < Palette::NColorRoles; c++ )
 
194
    {
 
195
        if ( colorGroup.color((Palette::ColorRole)c).isValid() )
 
196
        {
 
197
            for ( int cg = 0; cg < QPalette::NColorGroups; cg++ )
 
198
            {   
 
199
                newPalette.setColor(
 
200
                    (QPalette::ColorGroup)cg, 
 
201
                    (Palette::ColorRole)c, 
 
202
                    colorGroup.color((Palette::ColorRole)c));
 
203
            }
 
204
        }
 
205
    }
 
206
 
 
207
    for ( int i = 0; i < QPalette::NColorGroups; i++ )
 
208
    {
 
209
        QPalette::ColorGroup cg = (QPalette::ColorGroup)i;
 
210
 
 
211
        const QColor light = 
 
212
            newPalette.color(cg, Palette::Base).light(170);
 
213
        const QColor dark = newPalette.color(cg, Palette::Base).dark(170);
 
214
        const QColor mid = compass->frameShadow() == QwtDial::Raised
 
215
            ? newPalette.color(cg, Palette::Base).dark(110)
 
216
            : newPalette.color(cg, Palette::Base).light(110);
 
217
    
 
218
        newPalette.setColor(cg, Palette::Dark, dark);
 
219
        newPalette.setColor(cg, Palette::Mid, mid);
 
220
        newPalette.setColor(cg, Palette::Light, light);
 
221
    }
 
222
    compass->setPalette(newPalette);
 
223
 
 
224
    return compass;
 
225
}