mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2026-07-12 22:04:17 -04:00
Modified behavior of audio level meter and adjacent slider; Tx6 at program startup.
1. Level meter range increased to 0-90 dB. 2. Level meter reading is independent of slider setting. 3. For a trial period: thermometer bar goes red if a 16-bit sample is within 5 dB A/D limit. 4. Slider can be used to adjust levels sent to waterfall. 5. Tx6 message is selected on program startup. Thanks to W9MDB for most of this code. git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@7596 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
+21
-6
@@ -8,9 +8,12 @@
|
||||
|
||||
#include "moc_meterwidget.cpp"
|
||||
|
||||
#define MAXDB 90
|
||||
|
||||
MeterWidget::MeterWidget(QWidget * parent)
|
||||
: QWidget {parent}
|
||||
, m_signal {0}
|
||||
, m_noisePeak {0}
|
||||
, m_sigPeak {0}
|
||||
{
|
||||
for ( int i = 0; i < 10; i++ ) {
|
||||
@@ -30,7 +33,7 @@ void MeterWidget::setValue(int value)
|
||||
if (signalQueue.at(i) > tmp)
|
||||
tmp = signalQueue.at(i);
|
||||
}
|
||||
m_sigPeak = tmp;
|
||||
m_noisePeak = tmp;
|
||||
|
||||
update();
|
||||
}
|
||||
@@ -46,23 +49,35 @@ void MeterWidget::paintEvent (QPaintEvent * event)
|
||||
|
||||
// Sanitize
|
||||
m_signal = m_signal < 0 ? 0 : m_signal;
|
||||
m_signal = m_signal > 60 ? 60 : m_signal;
|
||||
m_signal = m_signal > MAXDB ? MAXDB : m_signal;
|
||||
|
||||
QPainter p {this};
|
||||
p.setPen (Qt::NoPen);
|
||||
|
||||
auto const& target = contentsRect ();
|
||||
QRect r {QPoint {target.left (), static_cast<int> (target.top () + target.height () - m_signal / 60. * target.height ())}
|
||||
QRect r {QPoint {target.left (), static_cast<int> (target.top () + target.height () - m_signal / (double)MAXDB * target.height ())}
|
||||
, QPoint {target.right (), target.bottom ()}};
|
||||
p.setBrush (QColor {255, 150, 0});
|
||||
p.setBrush (QColor {Qt::green});
|
||||
if (m_sigPeak > 85) {
|
||||
p.setBrush(Qt::red);
|
||||
}
|
||||
else if (m_noisePeak < 15) {
|
||||
p.setBrush(Qt::yellow);
|
||||
}
|
||||
p.drawRect (r);
|
||||
|
||||
if (m_sigPeak)
|
||||
if (m_noisePeak)
|
||||
{
|
||||
// Draw peak hold indicator
|
||||
auto peak = static_cast<int> (target.top () + target.height () - m_sigPeak / 60. * target.height ());
|
||||
auto peak = static_cast<int> (target.top () + target.height () - m_noisePeak / (double)MAXDB * target.height ());
|
||||
p.setBrush (Qt::black);
|
||||
p.translate (target.left (), peak);
|
||||
p.drawPolygon (QPolygon {{{0, -4}, {0, 4}, {target.width (), 0}}});
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
void MeterWidget::set_sigPeak(int value)
|
||||
{
|
||||
m_sigPeak = value;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user