mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-31 04:50:34 -04:00 
			
		
		
		
	
		
			
	
	
		
			50 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
		
		
			
		
	
	
			50 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
|  | // 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); | ||
|  | } |