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

« back to all changes in this revision

Viewing changes to qwt-5.1.1/examples/radio/tunerfrm.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 <qlabel.h>
 
3
#include <qwt_wheel.h>
 
4
#include <qwt_slider.h>
 
5
#include <qwt_thermo.h>
 
6
#include <qwt_math.h>
 
7
#include "tunerfrm.h"
 
8
 
 
9
class TuningThermo: public QWidget
 
10
{
 
11
public:
 
12
    TuningThermo(QWidget *parent):
 
13
        QWidget(parent)
 
14
    {
 
15
        d_thermo = new QwtThermo(this);
 
16
        d_thermo->setOrientation(Qt::Horizontal, QwtThermo::NoScale);
 
17
        d_thermo->setRange(0.0, 1.0);
 
18
        d_thermo->setFillColor(Qt::green);
 
19
 
 
20
        QLabel *label = new QLabel("Tuning", this);
 
21
        label->setAlignment(Qt::AlignCenter);
 
22
 
 
23
        QVBoxLayout *layout = new QVBoxLayout(this);
 
24
        layout->setMargin(0);
 
25
        layout->addWidget(d_thermo);
 
26
        layout->addWidget(label);
 
27
 
 
28
        setFixedWidth(3 * label->sizeHint().width());
 
29
    }
 
30
 
 
31
    void setValue(double value)
 
32
    {
 
33
        d_thermo->setValue(value);
 
34
    }
 
35
 
 
36
private:
 
37
    QwtThermo *d_thermo;
 
38
};
 
39
 
 
40
TunerFrame::TunerFrame(QWidget *parent): 
 
41
    QFrame(parent)
 
42
{
 
43
    d_sldFreq = new QwtSlider(this, Qt::Horizontal, QwtSlider::TopScale);
 
44
    d_sldFreq->setRange(87.5, 108, 0.01, 10);
 
45
    d_sldFreq->setScaleMaxMinor(5);
 
46
    d_sldFreq->setScaleMaxMajor(12);
 
47
    d_sldFreq->setThumbLength(80);
 
48
    d_sldFreq->setBorderWidth(1);
 
49
 
 
50
    d_thmTune = new TuningThermo(this);
 
51
 
 
52
    d_whlFreq = new QwtWheel(this);
 
53
    d_whlFreq->setMass(0.5);
 
54
    d_whlFreq->setRange(87.5, 108, 0.01);
 
55
    d_whlFreq->setTotalAngle(3600.0);
 
56
    d_whlFreq->setFixedHeight(30);
 
57
 
 
58
 
 
59
    connect(d_whlFreq, SIGNAL(valueChanged(double)), SLOT(adjustFreq(double)));
 
60
    connect(d_sldFreq, SIGNAL(valueChanged(double)), SLOT(adjustFreq(double)));
 
61
 
 
62
    QVBoxLayout *mainLayout = new QVBoxLayout(this);
 
63
    mainLayout->setMargin(10);
 
64
    mainLayout->setSpacing(5);
 
65
    mainLayout->addWidget(d_sldFreq);
 
66
 
 
67
    QHBoxLayout *hLayout = new QHBoxLayout;
 
68
    hLayout->setMargin(0);
 
69
    hLayout->addWidget(d_thmTune, 0);
 
70
    hLayout->addStretch(5);
 
71
    hLayout->addWidget(d_whlFreq, 2);
 
72
 
 
73
    mainLayout->addLayout(hLayout);
 
74
}
 
75
 
 
76
void TunerFrame::adjustFreq(double frq)
 
77
{
 
78
    const double factor = 13.0 / (108 - 87.5);
 
79
 
 
80
    const double x = (frq - 87.5) * factor;
 
81
    const double field = qwtSqr(sin(x) * cos(4.0 * x));
 
82
    
 
83
    d_thmTune->setValue(field);  
 
84
 
 
85
    if (d_sldFreq->value() != frq) 
 
86
        d_sldFreq->setValue(frq);
 
87
    if (d_whlFreq->value() != frq) 
 
88
        d_whlFreq->setValue(frq);
 
89
 
 
90
    emit fieldChanged(field);   
 
91
}
 
92
 
 
93
void TunerFrame::setFreq(double frq)
 
94
{
 
95
    d_whlFreq->setValue(frq);
 
96
}