File: knobbox.cpp

package info (click to toggle)
qwt 6.1.4-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye, forky, sid, trixie
  • size: 23,808 kB
  • sloc: cpp: 57,687; xml: 182; makefile: 32
file content (119 lines) | stat: -rw-r--r-- 3,314 bytes parent folder | download | duplicates (2)
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
#include <qlabel.h>
#include <qlayout.h>
#include <qwt_knob.h>
#include <qwt_scale_engine.h>
#include <qwt_transform.h>
#include "knobbox.h"

KnobBox::KnobBox( QWidget *parent, int knobType ):
    QWidget( parent )
{
    d_knob = createKnob( knobType );
    d_knob->setKnobWidth( 100 );

    d_label = new QLabel( this );
    d_label->setAlignment( Qt::AlignCenter );

    QVBoxLayout *layout = new QVBoxLayout( this );;
    layout->setSpacing( 0 );
    layout->addWidget( d_knob, 10 );
    layout->addWidget( d_label );
    layout->addStretch( 10 );

    connect( d_knob, SIGNAL( valueChanged( double ) ),
        this, SLOT( setNum( double ) ) );

    setNum( d_knob->value() );
}

QwtKnob *KnobBox::createKnob( int knobType ) const
{
    QwtKnob *knob = new QwtKnob();
    knob->setTracking( true );

    switch( knobType )
    {
        case 0:
        {
            knob->setKnobStyle( QwtKnob::Sunken );
            knob->setMarkerStyle( QwtKnob::Nub );
            knob->setWrapping( true );
            knob->setNumTurns( 4 );
            knob->setScaleStepSize( 10.0 );
            knob->setScale( 0, 400 );
            knob->setTotalSteps( 400 );
            break;
        }
        case 1:
        {
            knob->setKnobStyle( QwtKnob::Sunken );
            knob->setMarkerStyle( QwtKnob::Dot );
            break;
        }
        case 2:
        {
            knob->setKnobStyle( QwtKnob::Sunken );
            knob->setMarkerStyle( QwtKnob::Tick );

            QwtLinearScaleEngine *scaleEngine = new QwtLinearScaleEngine( 2 );
            scaleEngine->setTransformation( new QwtPowerTransform( 2 ) );
            knob->setScaleEngine( scaleEngine );

            QList< double > ticks[ QwtScaleDiv::NTickTypes ];
            ticks[ QwtScaleDiv::MajorTick ] << 0 << 4
                << 16 << 32 << 64 << 96 << 128;
            ticks[ QwtScaleDiv::MediumTick ] << 24 << 48 << 80 << 112;
            ticks[ QwtScaleDiv::MinorTick ]
                << 0.5 << 1 << 2
                << 7 << 10 << 13
                << 20 << 28
                << 40 << 56
                << 72 << 88
                << 104 << 120;

            knob->setScale( QwtScaleDiv( 0, 128, ticks ) );

            knob->setTotalSteps( 100 );
            knob->setStepAlignment( false );
            knob->setSingleSteps( 1 );
            knob->setPageSteps( 5 );

            break;
        }
        case 3:
        {
            knob->setKnobStyle( QwtKnob::Flat );
            knob->setMarkerStyle( QwtKnob::Notch );
            knob->setScaleEngine( new QwtLogScaleEngine() );
            knob->setScaleStepSize( 1.0 );
            knob->setScale( 0.1, 1000.0 );
            knob->setScaleMaxMinor( 10 );
            break;
        }
        case 4:
        {
            knob->setKnobStyle( QwtKnob::Raised );
            knob->setMarkerStyle( QwtKnob::Dot );
            knob->setWrapping( true );
            break;
        }
        case 5:
        {
            knob->setKnobStyle( QwtKnob::Styled );
            knob->setMarkerStyle( QwtKnob::Triangle );
            knob->setTotalAngle( 180.0 );
            knob->setScale( 100, -100 );
            break;
        }
    }

    return knob;
}

void KnobBox::setNum( double v )
{
    QString text;
    text.setNum( v, 'f', 2 );

    d_label->setText( text );
}