kopia lustrzana https://gitlab.com/eliggett/wfview
Preliminary secondary meter support. See Settings tab for selection.
Some scales incomplete.merge-requests/5/head
rodzic
8257a3540f
commit
027815f4c0
16
meter.cpp
16
meter.cpp
|
@ -40,10 +40,19 @@ meter::meter(QWidget *parent) : QWidget(parent)
|
|||
|
||||
void meter::setMeterType(meterKind type)
|
||||
{
|
||||
if(type == meterType)
|
||||
return;
|
||||
|
||||
meterType = type;
|
||||
// clear average and peak vectors:
|
||||
|
||||
// re-draw scale:
|
||||
}
|
||||
|
||||
meterKind meter::getMeterType()
|
||||
{
|
||||
return meterType;
|
||||
}
|
||||
|
||||
void meter::paintEvent(QPaintEvent *)
|
||||
{
|
||||
|
@ -57,15 +66,19 @@ void meter::paintEvent(QPaintEvent *)
|
|||
switch(meterType)
|
||||
{
|
||||
case meterS:
|
||||
peakRedLevel = 120; // S9+
|
||||
drawScaleS(&painter);
|
||||
break;
|
||||
case meterPower:
|
||||
peakRedLevel = 210; // 100%
|
||||
drawScalePo(&painter);
|
||||
break;
|
||||
case meterALC:
|
||||
peakRedLevel = 100;
|
||||
drawScaleALC(&painter);
|
||||
break;
|
||||
case meterSWR:
|
||||
peakRedLevel = 100; // SWR 2.5
|
||||
drawScaleSWR(&painter);
|
||||
break;
|
||||
default:
|
||||
|
@ -87,9 +100,8 @@ void meter::paintEvent(QPaintEvent *)
|
|||
// Peak:
|
||||
painter.setPen(peakColor);
|
||||
painter.setBrush(peakColor);
|
||||
if(peak > 120)
|
||||
if(peak > peakRedLevel)
|
||||
{
|
||||
// 120 = +S9
|
||||
painter.setBrush(Qt::red);
|
||||
painter.setPen(Qt::red);
|
||||
}
|
||||
|
|
3
meter.h
3
meter.h
|
@ -20,6 +20,7 @@ public slots:
|
|||
void updateDrawing(int num);
|
||||
void setLevels(int current, int peak, int average);
|
||||
void setMeterType(meterKind type);
|
||||
meterKind getMeterType();
|
||||
|
||||
|
||||
private:
|
||||
|
@ -31,6 +32,8 @@ private:
|
|||
int peak = 0;
|
||||
int average = 0;
|
||||
|
||||
int peakRedLevel=0;
|
||||
|
||||
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
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
#define compCivAddr 0xE1
|
||||
|
||||
enum meterKind {
|
||||
meterNone=0,
|
||||
meterS,
|
||||
meterSWR,
|
||||
meterPower,
|
||||
|
@ -28,7 +29,8 @@ enum meterKind {
|
|||
meterCurrent,
|
||||
meterRxdB,
|
||||
meterTxMod,
|
||||
meterRxAudio
|
||||
meterRxAudio,
|
||||
meterLatency
|
||||
};
|
||||
|
||||
enum spectrumMode {
|
||||
|
|
128
wfmain.cpp
128
wfmain.cpp
|
@ -661,6 +661,22 @@ void wfmain::setupMainUI()
|
|||
ui->wfthemeCombo->addItem("Spectrum", QCPColorGradient::gpSpectrum);
|
||||
ui->wfthemeCombo->addItem("Candy", QCPColorGradient::gpCandy);
|
||||
|
||||
ui->meter2selectionCombo->addItem("None", meterNone);
|
||||
ui->meter2selectionCombo->addItem("SWR", meterSWR);
|
||||
ui->meter2selectionCombo->addItem("ALC", meterALC);
|
||||
ui->meter2selectionCombo->addItem("Compression", meterComp);
|
||||
ui->meter2selectionCombo->addItem("Voltage", meterVoltage);
|
||||
ui->meter2selectionCombo->addItem("Current", meterCurrent);
|
||||
ui->meter2Widget->hide();
|
||||
|
||||
// Future ideas:
|
||||
//ui->meter2selectionCombo->addItem("Transmit Audio", meterTxMod);
|
||||
//ui->meter2selectionCombo->addItem("Receive Audio", meterRxAudio);
|
||||
//ui->meter2selectionCombo->addItem("Latency", meterLatency);
|
||||
|
||||
|
||||
|
||||
|
||||
spans << "2.5k" << "5.0k" << "10k" << "25k";
|
||||
spans << "50k" << "100k" << "250k" << "500k";
|
||||
ui->scopeBWCombo->insertItems(0, spans);
|
||||
|
@ -2547,6 +2563,10 @@ void wfmain::doCmd(cmds cmd)
|
|||
if(amTransmitting)
|
||||
emit getMeters(meterPower);
|
||||
break;
|
||||
case cmdGetSWRMeter:
|
||||
if(amTransmitting)
|
||||
emit getMeters(meterSWR);
|
||||
break;
|
||||
case cmdGetIdMeter:
|
||||
emit getMeters(meterCurrent);
|
||||
break;
|
||||
|
@ -2983,6 +3003,31 @@ void wfmain::insertPeriodicCommand(cmds cmd, unsigned char priority)
|
|||
}
|
||||
}
|
||||
|
||||
void wfmain::insertPeriodicCommandUnique(cmds cmd)
|
||||
{
|
||||
// Use this function to insert a non-duplicate command
|
||||
// into the fast periodic polling queue, typically
|
||||
// meter commands where high refresh rates are desirable.
|
||||
|
||||
removePeriodicCommand(cmd);
|
||||
periodicCmdQueue.push_front(cmd);
|
||||
}
|
||||
|
||||
void wfmain::removePeriodicCommand(cmds cmd)
|
||||
{
|
||||
while(true)
|
||||
{
|
||||
auto it = std::find(this->periodicCmdQueue.begin(), this->periodicCmdQueue.end(), cmd);
|
||||
if(it != periodicCmdQueue.end())
|
||||
{
|
||||
periodicCmdQueue.erase(it);
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void wfmain::insertSlowPeriodicCommand(cmds cmd, unsigned char priority)
|
||||
{
|
||||
// TODO: meaningful priority
|
||||
|
@ -4502,9 +4547,6 @@ void wfmain::receiveMeter(meterKind inMeter, unsigned char level)
|
|||
ui->meterSPoWidget->setLevels(level, peak, average);
|
||||
ui->meterSPoWidget->repaint();
|
||||
break;
|
||||
case meterSWR:
|
||||
//ui->levelIndicator->setValue((int)level);
|
||||
break;
|
||||
case meterPower:
|
||||
powerMeterReadings[(powerMeterPos++)%powerMeterReadings.length()] = level;
|
||||
for(int i=0; i < powerMeterReadings.length(); i++)
|
||||
|
@ -4518,19 +4560,11 @@ void wfmain::receiveMeter(meterKind inMeter, unsigned char level)
|
|||
ui->meterSPoWidget->setLevels(level, peak, average);
|
||||
ui->meterSPoWidget->update();
|
||||
break;
|
||||
case meterALC:
|
||||
//ui->levelIndicator->setValue((int)level);
|
||||
break;
|
||||
case meterComp:
|
||||
//ui->levelIndicator->setValue((int)level);
|
||||
break;
|
||||
case meterCurrent:
|
||||
//ui->levelIndicator->setValue((int)level);
|
||||
break;
|
||||
case meterVoltage:
|
||||
//ui->levelIndicator->setValue((int)level);
|
||||
break;
|
||||
default:
|
||||
if(ui->meter2Widget->getMeterType() == inMeter)
|
||||
{
|
||||
ui->meter2Widget->setLevels(level, level, level);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -5108,6 +5142,70 @@ void wfmain::on_wfInterpolateChk_clicked(bool checked)
|
|||
prefs.wfInterpolate = checked;
|
||||
}
|
||||
|
||||
wfmain::cmds wfmain::meterKindToMeterCommand(meterKind m)
|
||||
{
|
||||
cmds c;
|
||||
switch(m)
|
||||
{
|
||||
case meterNone:
|
||||
c = cmdNone;
|
||||
break;
|
||||
case meterS:
|
||||
c = cmdGetSMeter;
|
||||
break;
|
||||
case meterPower:
|
||||
c = cmdGetPowerMeter;
|
||||
break;
|
||||
case meterSWR:
|
||||
c = cmdGetSWRMeter;
|
||||
break;
|
||||
case meterALC:
|
||||
c = cmdGetALCMeter;
|
||||
break;
|
||||
case meterComp:
|
||||
c = cmdGetCompMeter;
|
||||
break;
|
||||
case meterCurrent:
|
||||
c = cmdGetIdMeter;
|
||||
break;
|
||||
case meterVoltage:
|
||||
c = cmdGetVdMeter;
|
||||
break;
|
||||
default:
|
||||
c = cmdNone;
|
||||
break;
|
||||
}
|
||||
|
||||
return c;
|
||||
}
|
||||
|
||||
|
||||
void wfmain::on_meter2selectionCombo_activated(int index)
|
||||
{
|
||||
meterKind newMeterType;
|
||||
meterKind oldMeterType;
|
||||
newMeterType = static_cast<meterKind>(ui->meter2selectionCombo->currentData().toInt());
|
||||
oldMeterType = ui->meter2Widget->getMeterType();
|
||||
|
||||
if(newMeterType == oldMeterType)
|
||||
return;
|
||||
|
||||
cmds newCmd = meterKindToMeterCommand(newMeterType);
|
||||
cmds oldCmd = meterKindToMeterCommand(oldMeterType);
|
||||
|
||||
removePeriodicCommand(oldCmd);
|
||||
|
||||
if(newMeterType==meterNone)
|
||||
{
|
||||
ui->meter2Widget->hide();
|
||||
} else {
|
||||
ui->meter2Widget->show();
|
||||
ui->meter2Widget->setMeterType(newMeterType);
|
||||
insertPeriodicCommandUnique(newCmd);
|
||||
}
|
||||
(void)index;
|
||||
}
|
||||
|
||||
// --- DEBUG FUNCTION ---
|
||||
void wfmain::on_debugBtn_clicked()
|
||||
{
|
||||
|
|
10
wfmain.h
10
wfmain.h
|
@ -468,6 +468,8 @@ private slots:
|
|||
|
||||
void on_wfInterpolateChk_clicked(bool checked);
|
||||
|
||||
void on_meter2selectionCombo_activated(int index);
|
||||
|
||||
private:
|
||||
Ui::wfmain *ui;
|
||||
void closeEvent(QCloseEvent *event);
|
||||
|
@ -602,7 +604,7 @@ private:
|
|||
cmdGetSql, cmdSetSql, cmdGetATUStatus, cmdSetATU, cmdStartATU, cmdGetSpectrumMode, cmdGetSpectrumSpan, cmdScopeCenterMode, cmdScopeFixedMode, cmdGetPTT, cmdSetPTT,
|
||||
cmdGetTxPower, cmdSetTxPower, cmdGetMicGain, cmdSetMicGain, cmdSetModLevel, cmdGetSpectrumRefLevel, cmdGetDuplexMode, cmdGetModInput, cmdGetModDataInput,
|
||||
cmdGetCurrentModLevel, cmdStartRegularPolling, cmdStopRegularPolling, cmdQueNormalSpeed,
|
||||
cmdGetVdMeter, cmdGetIdMeter, cmdGetSMeter, cmdGetPowerMeter, cmdGetALCMeter, cmdGetCompMeter, cmdGetTxRxMeter,
|
||||
cmdGetVdMeter, cmdGetIdMeter, cmdGetSMeter, cmdGetPowerMeter, cmdGetSWRMeter, cmdGetALCMeter, cmdGetCompMeter, cmdGetTxRxMeter,
|
||||
cmdGetTone, cmdGetTSQL, cmdGetDTCS, cmdGetRptAccessMode, cmdGetPreamp, cmdGetAttenuator, cmdGetAntenna,
|
||||
cmdSetTime, cmdSetDate, cmdSetUTCOffset};
|
||||
|
||||
|
@ -741,14 +743,20 @@ private:
|
|||
|
||||
void changeModLabelAndSlider(rigInput source);
|
||||
|
||||
// Fast command queue:
|
||||
void initPeriodicCommands();
|
||||
void insertPeriodicCommand(cmds cmd, unsigned char priority);
|
||||
void insertPeriodicCommandUnique(cmds cmd);
|
||||
void removePeriodicCommand(cmds cmd);
|
||||
|
||||
void insertSlowPeriodicCommand(cmds cmd, unsigned char priority);
|
||||
void calculateTimingParameters();
|
||||
|
||||
void changeMode(mode_kind mode);
|
||||
void changeMode(mode_kind mode, bool dataOn);
|
||||
|
||||
cmds meterKindToMeterCommand(meterKind m);
|
||||
|
||||
int oldFreqDialVal;
|
||||
|
||||
rigCapabilities rigCaps;
|
||||
|
|
20
wfmain.ui
20
wfmain.ui
|
@ -18,7 +18,7 @@
|
|||
<item>
|
||||
<widget class="QTabWidget" name="tabWidget">
|
||||
<property name="currentIndex">
|
||||
<number>0</number>
|
||||
<number>3</number>
|
||||
</property>
|
||||
<widget class="QWidget" name="mainTab">
|
||||
<attribute name="title">
|
||||
|
@ -141,8 +141,11 @@
|
|||
</item>
|
||||
<item>
|
||||
<widget class="QComboBox" name="wfthemeCombo">
|
||||
<property name="toolTip">
|
||||
<string>Waterfall color theme</string>
|
||||
</property>
|
||||
<property name="accessibleName">
|
||||
<string>Spectrum color theme</string>
|
||||
<string>Waterfall display color theme</string>
|
||||
</property>
|
||||
<property name="accessibleDescription">
|
||||
<string>Selects the theme for the color waterfall dispaly</string>
|
||||
|
@ -264,6 +267,9 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="meter" name="meter2Widget" native="true"/>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
|
@ -2205,6 +2211,16 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="secondaryMeterSelectionLabel">
|
||||
<property name="text">
|
||||
<string>Secondary Meter Selection:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QComboBox" name="meter2selectionCombo"/>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_5">
|
||||
<property name="orientation">
|
||||
|
|
Ładowanie…
Reference in New Issue