kopia lustrzana https://gitlab.com/eliggett/wfview
Merge branch 'ui-enhance' into audio-enhance
commit
166e714c26
168
meter.cpp
168
meter.cpp
|
@ -23,6 +23,8 @@ meter::meter(QWidget *parent) : QWidget(parent)
|
|||
//
|
||||
// Text in qdarkstylesheet seems to be #EFF0F1
|
||||
|
||||
meterType = meterS;
|
||||
|
||||
currentColor.setNamedColor("#148CD2");
|
||||
currentColor = currentColor.darker();
|
||||
|
||||
|
@ -36,6 +38,12 @@ meter::meter(QWidget *parent) : QWidget(parent)
|
|||
|
||||
}
|
||||
|
||||
void meter::setMeterType(meterKind type)
|
||||
{
|
||||
meterType = type;
|
||||
// re-draw scale:
|
||||
}
|
||||
|
||||
|
||||
void meter::paintEvent(QPaintEvent *)
|
||||
{
|
||||
|
@ -45,18 +53,36 @@ void meter::paintEvent(QPaintEvent *)
|
|||
// The end effect, is that the drawing functions will all
|
||||
// scale to the window size.
|
||||
|
||||
painter.setWindow(QRect(0, 0, 255+mstart, 50));
|
||||
drawScale(&painter);
|
||||
painter.setWindow(QRect(0, 0, 255+mXstart, widgetWindowHeight));
|
||||
switch(meterType)
|
||||
{
|
||||
case meterS:
|
||||
drawScaleS(&painter);
|
||||
break;
|
||||
case meterPower:
|
||||
drawScalePo(&painter);
|
||||
break;
|
||||
case meterALC:
|
||||
drawScaleALC(&painter);
|
||||
break;
|
||||
case meterSWR:
|
||||
drawScaleSWR(&painter);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
// Current:
|
||||
// Current: the most-current value.
|
||||
// Draws a bar from start to value.
|
||||
painter.setPen(currentColor);
|
||||
painter.setBrush(currentColor);
|
||||
painter.drawRect(mstart,mheight,current,mstart);
|
||||
// X, Y, Width, Height
|
||||
painter.drawRect(mXstart,mYstart,current,barHeight);
|
||||
|
||||
// Average:
|
||||
painter.setPen(averageColor);
|
||||
painter.setBrush(averageColor);
|
||||
painter.drawRect(mstart+average-1,mheight,1,mstart);
|
||||
painter.drawRect(mXstart+average-1,mYstart,1,barHeight); // bar is 1 pixel wide, height = meter start?
|
||||
|
||||
// Peak:
|
||||
painter.setPen(peakColor);
|
||||
|
@ -68,7 +94,7 @@ void meter::paintEvent(QPaintEvent *)
|
|||
painter.setPen(Qt::red);
|
||||
}
|
||||
|
||||
painter.drawRect(mstart+peak-1,mheight,2,mstart);
|
||||
painter.drawRect(mXstart+peak-1,mYstart,2,barHeight);
|
||||
|
||||
}
|
||||
|
||||
|
@ -86,17 +112,131 @@ void meter::updateDrawing(int num)
|
|||
length = num;
|
||||
}
|
||||
|
||||
// The drawScale functions draw the numbers and number unerline for each type of meter
|
||||
|
||||
void meter::drawScale(QPainter *qp)
|
||||
void meter::drawScalePo(QPainter *qp)
|
||||
{
|
||||
//From the manual: "0000=0% to 0143=50% to 0213=100%"
|
||||
float dnPerWatt = 143.0 / 50.0;
|
||||
|
||||
qp->setPen(lowTextColor);
|
||||
qp->setFont(QFont("Arial", fontSize));
|
||||
int i=mXstart;
|
||||
// 13.3 DN per s-unit:
|
||||
int p=0;
|
||||
for(; i<mXstart+143; i+=(int)(10*dnPerWatt))
|
||||
{
|
||||
// Stop just before the next 10w spot
|
||||
if(i<mXstart+140)
|
||||
qp->drawText(i,scaleTextYstart, QString("%1").arg(10*(p++)) );
|
||||
}
|
||||
|
||||
// Modify current scale position:
|
||||
|
||||
// Here, P is now 60 watts:
|
||||
// Higher scale:
|
||||
i = i - (int)(10*dnPerWatt); // back one tick first. Otherwise i starts at 178.
|
||||
qDebug() << "meter i: " << i;
|
||||
dnPerWatt = (213-143.0) / 50.0; // 1.4 dn per watt
|
||||
|
||||
qp->setPen(Qt::yellow);
|
||||
for(i=mXstart+143; i<mXstart+213; i+=(10*dnPerWatt))
|
||||
{
|
||||
qp->drawText(i,scaleTextYstart, QString("%1").arg(10*(p++)) );
|
||||
}
|
||||
|
||||
// Now we're out past 100:
|
||||
qp->setPen(Qt::red);
|
||||
|
||||
for(i=mXstart+213; i<mXstart+255; i+=(10*dnPerWatt))
|
||||
{
|
||||
qp->drawText(i,scaleTextYstart, QString("%1").arg(10*(p++)) );
|
||||
}
|
||||
|
||||
// Now the lines:
|
||||
qp->setPen(lowLineColor);
|
||||
|
||||
// Line: X1, Y1 -->to--> X2, Y2
|
||||
qp->drawLine(mXstart,scaleLineYstart,213+mXstart,scaleLineYstart);
|
||||
qp->setPen(Qt::red);
|
||||
qp->drawLine(213+mXstart,scaleLineYstart,255+mXstart,scaleLineYstart);
|
||||
|
||||
(void)qp;
|
||||
}
|
||||
|
||||
void meter::drawScaleRxdB(QPainter *qp)
|
||||
{
|
||||
(void)qp;
|
||||
}
|
||||
|
||||
void meter::drawScaleALC(QPainter *qp)
|
||||
{
|
||||
// From the manual: 0000=Minimum to 0120=Maximum
|
||||
|
||||
qp->setPen(lowTextColor);
|
||||
qp->setFont(QFont("Arial", fontSize));
|
||||
int i=mXstart;
|
||||
int alc=0;
|
||||
for(; i<mXstart+100; i += (20))
|
||||
{
|
||||
qp->drawText(i,scaleTextYstart, QString("%1").arg(alc) );
|
||||
alc +=20;
|
||||
}
|
||||
|
||||
qp->setPen(Qt::red);
|
||||
|
||||
for(; i<mXstart+120; i+=(int)(10*i))
|
||||
{
|
||||
qp->drawText(i,scaleTextYstart, QString("+%1").arg(alc) );
|
||||
alc +=10;
|
||||
}
|
||||
|
||||
qp->setPen(lowLineColor);
|
||||
qp->drawLine(mXstart,scaleLineYstart,100+mXstart,scaleLineYstart);
|
||||
qp->setPen(Qt::red);
|
||||
qp->drawLine(100+mXstart,scaleLineYstart,255+mXstart,scaleLineYstart);
|
||||
|
||||
(void)qp;
|
||||
}
|
||||
|
||||
void meter::drawScaleSWR(QPainter *qp)
|
||||
{
|
||||
// From the manual:
|
||||
// 0000=SWR1.0,
|
||||
// 0048=SWR1.5,
|
||||
// 0080=SWR2.0,
|
||||
// 0120=SWR3.0
|
||||
|
||||
qp->drawText(mXstart,scaleTextYstart, QString("1.0"));
|
||||
qp->drawText(24+mXstart,scaleTextYstart, QString("1.3"));
|
||||
qp->drawText(48+mXstart,scaleTextYstart, QString("1.5"));
|
||||
qp->drawText(80+mXstart,scaleTextYstart, QString("2.0"));
|
||||
qp->drawText(100+mXstart,scaleTextYstart, QString("2.5"));
|
||||
qp->drawText(120+mXstart,scaleTextYstart, QString("3.0"));
|
||||
|
||||
qp->setPen(lowLineColor);
|
||||
qp->drawLine(mXstart,scaleLineYstart,100+mXstart,scaleLineYstart);
|
||||
qp->setPen(Qt::red);
|
||||
qp->drawLine(100+mXstart,scaleLineYstart,255+mXstart,scaleLineYstart);
|
||||
|
||||
(void)qp;
|
||||
}
|
||||
|
||||
void meter::drawScaleId(QPainter *qp)
|
||||
{
|
||||
(void)qp;
|
||||
}
|
||||
|
||||
void meter::drawScaleS(QPainter *qp)
|
||||
{
|
||||
qp->setPen(lowTextColor);
|
||||
qp->setFont(QFont("Arial", fontSize));
|
||||
int i=mstart;
|
||||
int i=mXstart;
|
||||
// 13.3 DN per s-unit:
|
||||
int s=0;
|
||||
for(; i<mstart+120; i+=13)
|
||||
for(; i<mXstart+120; i+=13)
|
||||
{
|
||||
qp->drawText(i,mstart, QString("%1").arg(s++) );
|
||||
qp->drawText(i,mXstart, QString("%1").arg(s++) );
|
||||
}
|
||||
|
||||
// 2 DN per 1 dB now:
|
||||
|
@ -109,16 +249,16 @@ void meter::drawScale(QPainter *qp)
|
|||
|
||||
qp->setPen(Qt::red);
|
||||
|
||||
for(; i<mstart+255; i+=40)
|
||||
for(; i<mXstart+255; i+=40)
|
||||
{
|
||||
qp->drawText(i,mstart, QString("+%1").arg(s) );
|
||||
qp->drawText(i,mXstart, QString("+%1").arg(s) );
|
||||
s = s + 20;
|
||||
}
|
||||
|
||||
qp->setPen(lowLineColor);
|
||||
|
||||
qp->drawLine(mstart,12,130,12);
|
||||
qp->drawLine(mXstart,scaleLineYstart,130,scaleLineYstart);
|
||||
qp->setPen(Qt::red);
|
||||
qp->drawLine(130,12,255,12);
|
||||
qp->drawLine(130,scaleLineYstart,255,scaleLineYstart);
|
||||
|
||||
}
|
||||
|
|
21
meter.h
21
meter.h
|
@ -4,6 +4,8 @@
|
|||
#include <QWidget>
|
||||
#include <QPainter>
|
||||
|
||||
#include "rigcommander.h" // for meter types
|
||||
|
||||
class meter : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
@ -17,20 +19,33 @@ public slots:
|
|||
|
||||
void updateDrawing(int num);
|
||||
void setLevels(int current, int peak, int average);
|
||||
void setMeterType(meterKind type);
|
||||
|
||||
|
||||
private:
|
||||
//QPainter painter;
|
||||
meterKind meterType;
|
||||
int fontSize = 5;
|
||||
int length=30;
|
||||
int current=0;
|
||||
int peak = 0;
|
||||
int average = 0;
|
||||
|
||||
int mstart = 10; // Starting point for S=0.
|
||||
int mheight = 14; // "thickness" of the meter block rectangle
|
||||
int mXstart = 10; // Starting point for S=0.
|
||||
int mYstart = 14; // height, down from top, where the drawing starts
|
||||
int barHeight = 10; // Height of meter "bar" indicators
|
||||
int scaleLineYstart = 12;
|
||||
int scaleTextYstart = 10;
|
||||
|
||||
void drawScale(QPainter *qp);
|
||||
int widgetWindowHeight = mYstart + barHeight + 10; // height of drawing canvis.
|
||||
|
||||
void drawScaleS(QPainter *qp);
|
||||
void drawScalePo(QPainter *qp);
|
||||
void drawScaleRxdB(QPainter *qp);
|
||||
void drawScaleALC(QPainter *qp);
|
||||
void drawScaleSWR(QPainter *qp);
|
||||
void drawScaleVd(QPainter *qp);
|
||||
void drawScaleId(QPainter *qp);
|
||||
|
||||
QColor currentColor;
|
||||
QColor averageColor;
|
||||
|
|
|
@ -25,7 +25,10 @@ enum meterKind {
|
|||
meterALC,
|
||||
meterComp,
|
||||
meterVoltage,
|
||||
meterCurrent
|
||||
meterCurrent,
|
||||
meterRxdB,
|
||||
meterTxMod,
|
||||
meterRxAudio
|
||||
};
|
||||
|
||||
enum spectrumMode {
|
||||
|
|
34
wfmain.cpp
34
wfmain.cpp
|
@ -2360,6 +2360,12 @@ void wfmain::doCmd(commandtype cmddata)
|
|||
{
|
||||
bool pttrequest = (*std::static_pointer_cast<bool>(data));
|
||||
emit setPTT(pttrequest);
|
||||
if(pttrequest)
|
||||
{
|
||||
ui->meterSPoWidget->setMeterType(meterPower);
|
||||
} else {
|
||||
ui->meterSPoWidget->setMeterType(meterS);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case cmdSetATU:
|
||||
|
@ -4498,9 +4504,9 @@ void wfmain::receiveMeter(meterKind inMeter, unsigned char level)
|
|||
sum += (unsigned char)SMeterReadings.at(i);
|
||||
}
|
||||
average = sum / SMeterReadings.length();
|
||||
ui->meterWidget->setLevels(level, peak, average);
|
||||
ui->meterWidget->repaint();
|
||||
//ui->levelIndicator->setValue((int)level);
|
||||
ui->meterSPoWidget->setMeterType(meterS);
|
||||
ui->meterSPoWidget->setLevels(level, peak, average);
|
||||
ui->meterSPoWidget->repaint();
|
||||
break;
|
||||
case meterSWR:
|
||||
//ui->levelIndicator->setValue((int)level);
|
||||
|
@ -4514,9 +4520,9 @@ void wfmain::receiveMeter(meterKind inMeter, unsigned char level)
|
|||
sum += (unsigned char)powerMeterReadings.at(i);
|
||||
}
|
||||
average = sum / powerMeterReadings.length();
|
||||
ui->meterWidget->setLevels(level, peak, average);
|
||||
ui->meterWidget->update();
|
||||
//ui->levelIndicator->setValue((int)level);
|
||||
ui->meterSPoWidget->setMeterType(meterPower);
|
||||
ui->meterSPoWidget->setLevels(level, peak, average);
|
||||
ui->meterSPoWidget->update();
|
||||
break;
|
||||
case meterALC:
|
||||
//ui->levelIndicator->setValue((int)level);
|
||||
|
@ -5125,7 +5131,19 @@ void wfmain::on_debugBtn_clicked()
|
|||
qInfo(logSystem()) << "Debug button pressed.";
|
||||
//trxadj->show();
|
||||
//setRadioTimeDatePrep();
|
||||
wf->setInteraction(QCP::iRangeZoom, true);
|
||||
wf->setInteraction(QCP::iRangeDrag, true);
|
||||
//wf->setInteraction(QCP::iRangeZoom, true);
|
||||
//wf->setInteraction(QCP::iRangeDrag, true);
|
||||
bool ok = false;
|
||||
unsigned char level = (unsigned char) QInputDialog::getInt(this, "wfview simulated radio level", "Raw level (0-255)", 128, 1, 255, 1, &ok );
|
||||
if(ok)
|
||||
{
|
||||
int peak = level*1.5;
|
||||
if(peak > 255)
|
||||
peak = 255;
|
||||
int average = peak / 2;
|
||||
|
||||
ui->meterSPoWidget->setMeterType(meterALC);
|
||||
ui->meterSPoWidget->setLevels(level, peak, average);
|
||||
ui->meterSPoWidget->update();
|
||||
}
|
||||
}
|
||||
|
|
1
wfmain.h
1
wfmain.h
|
@ -745,7 +745,6 @@ private:
|
|||
|
||||
void initPeriodicCommands();
|
||||
void insertPeriodicCommand(cmds cmd, unsigned char priority);
|
||||
void insertSlowPeriodicCommand(cmds cmd, unsigned char priority);
|
||||
|
||||
void calculateTimingParameters();
|
||||
|
||||
|
|
13
wfmain.ui
13
wfmain.ui
|
@ -238,9 +238,18 @@
|
|||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_21">
|
||||
<layout class="QVBoxLayout" name="meterLayout">
|
||||
<property name="spacing">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>10</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>10</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="meter" name="meterWidget" native="true">
|
||||
<widget class="meter" name="meterSPoWidget" native="true">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
|
|
Ładowanie…
Reference in New Issue