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

« back to all changes in this revision

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

  • Committer: Bazaar Package Importer
  • Author(s): Fathi Boudra
  • Date: 2008-05-26 10:26:31 UTC
  • mfrom: (1.1.3 upstream) (2.1.1 lenny)
  • Revision ID: james.westby@ubuntu.com-20080526102631-bp95mfccnrb957nx
Tags: 5.1.1-1
New upstream release.

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
 
}