File: meterwidget.cpp

package info (click to toggle)
wsjtx 2.7.0%2Brepack-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 70,440 kB
  • sloc: cpp: 75,379; f90: 46,460; python: 27,241; ansic: 13,367; fortran: 2,382; makefile: 197; sh: 133
file content (49 lines) | stat: -rwxr-xr-x 1,029 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
// Simple bargraph meter
// Implemented by Edson Pereira PY2SDR

#include "meterwidget.h"

MeterWidget::MeterWidget(QWidget *parent) :
    QWidget(parent),
    m_signal(0)
{
    for ( int i = 0; i < 10; i++ ) {
        signalQueue.enqueue(0);
    }
}

void MeterWidget::setValue(int value)
{
    m_signal = value;
    signalQueue.enqueue(value);
    signalQueue.dequeue();

    // Get signal peak
    int tmp = 0;
    for (int i = 0; i < signalQueue.size(); ++i) {
        if (signalQueue.at(i) > tmp)
            tmp = signalQueue.at(i);
    }
    m_sigPeak = tmp;

    update();
}

void MeterWidget::paintEvent( QPaintEvent * )
{
    int pos;
    QPainter p {this};

    // Sanitize
    m_signal = m_signal < 0 ? 0 : m_signal;
    m_signal = m_signal > 60 ? 60 : m_signal;

    pos = m_signal * 2;
    QRect r(0, height() - pos, width(), pos );
    p.fillRect(r, QColor( 255, 150, 0 ));

    // Draw peak hold indicator
    p.setPen(Qt::black);
    pos = m_sigPeak * 2;
    p.drawLine(0, height() - pos, 10, height() - pos);
}