From 81a82fc467d0930b6e6a5ccc7a96a6e2607ab542 Mon Sep 17 00:00:00 2001 From: Elliott Liggett Date: Mon, 5 Feb 2024 13:42:00 -0800 Subject: [PATCH] More meters! --- prefs.h | 12 ++++--- settingswidget.cpp | 29 ++++++++++++++++ settingswidget.h | 2 ++ settingswidget.ui | 11 +++--- wfmain.cpp | 85 ++++++++++++++++++++++++++++++++++------------ wfmain.h | 2 +- wfmain.ui | 16 +++++++++ 7 files changed, 125 insertions(+), 32 deletions(-) diff --git a/prefs.h b/prefs.h index c4aa482..33bc13a 100644 --- a/prefs.h +++ b/prefs.h @@ -25,11 +25,12 @@ enum prefIfItem { if_confirmExit = 1 << 12, if_confirmPowerOff = 1 << 13, if_meter2Type = 1 << 14, - if_clickDragTuningEnable = 1 << 15, - if_currentColorPresetNumber = 1 << 16, - if_rigCreatorEnable = 1 << 17, - if_frequencyUnits = 1 << 18, - if_all = 1 << 19 + if_meter3Type = 1 << 15, + if_clickDragTuningEnable = 1 << 16, + if_currentColorPresetNumber = 1 << 17, + if_rigCreatorEnable = 1 << 18, + if_frequencyUnits = 1 << 19, + if_all = 1 << 20 }; enum prefColItem { @@ -178,6 +179,7 @@ struct preferences { bool confirmExit; bool confirmPowerOff; meter_t meter2Type; + meter_t meter3Type; bool clickDragTuningEnable; int currentColorPresetNumber = 0; bool rigCreatorEnable = false; diff --git a/settingswidget.cpp b/settingswidget.cpp index 7b44ce8..d2f91c5 100644 --- a/settingswidget.cpp +++ b/settingswidget.cpp @@ -81,6 +81,20 @@ void settingswidget::populateComboBoxes() ui->meter2selectionCombo->show(); ui->meter2selectionCombo->blockSignals(false); + ui->meter3selectionCombo->blockSignals(true); + ui->meter3selectionCombo->addItem("None", meterNone); + ui->meter3selectionCombo->addItem("SWR", meterSWR); + ui->meter3selectionCombo->addItem("ALC", meterALC); + ui->meter3selectionCombo->addItem("Compression", meterComp); + ui->meter3selectionCombo->addItem("Voltage", meterVoltage); + ui->meter3selectionCombo->addItem("Current", meterCurrent); + ui->meter3selectionCombo->addItem("Center", meterCenter); + ui->meter3selectionCombo->addItem("TxRxAudio", meterAudio); + ui->meter3selectionCombo->addItem("RxAudio", meterRxAudio); + ui->meter3selectionCombo->addItem("TxAudio", meterTxMod); + ui->meter3selectionCombo->show(); + ui->meter3selectionCombo->blockSignals(false); + ui->secondaryMeterSelectionLabel->show(); ui->audioRXCodecCombo->blockSignals(true); @@ -414,6 +428,14 @@ void settingswidget::updateIfPref(prefIfItem pif) ui->meter2selectionCombo->blockSignals(false); break; } + case if_meter3Type: + { + ui->meter3selectionCombo->blockSignals(true); + int m = ui->meter3selectionCombo->findData(prefs->meter3Type); + ui->meter3selectionCombo->setCurrentIndex(m); + ui->meter3selectionCombo->blockSignals(false); + break; + } case if_clickDragTuningEnable: quietlyUpdateCheckbox(ui->clickDragTuningEnableChk, prefs->clickDragTuningEnable); break; @@ -1492,6 +1514,12 @@ void settingswidget::on_meter2selectionCombo_currentIndexChanged(int index) emit changedIfPref(if_meter2Type); } +void settingswidget::on_meter3selectionCombo_currentIndexChanged(int index) +{ + prefs->meter3Type = static_cast(ui->meter3selectionCombo->itemData(index).toInt()); + emit changedIfPref(if_meter3Type); +} + void settingswidget::on_tuningFloorZerosChk_clicked(bool checked) { prefs->niceTS = checked; @@ -2646,3 +2674,4 @@ void settingswidget::connectionStatus(bool conn) ui->serverTXAudioOutputCombo->setEnabled(!conn); ui->audioSystemServerCombo->setEnabled(!conn); } + diff --git a/settingswidget.h b/settingswidget.h index efbdf6a..6621afb 100644 --- a/settingswidget.h +++ b/settingswidget.h @@ -236,6 +236,8 @@ private slots: void serverAddUserLine(int row,const QString& user="", const QString& pass="", const int& type=0); + void on_meter3selectionCombo_currentIndexChanged(int index); + private: Ui::settingswidget *ui; void createSettingsListItems(); diff --git a/settingswidget.ui b/settingswidget.ui index d2f44ad..e94da3a 100644 --- a/settingswidget.ui +++ b/settingswidget.ui @@ -41,7 +41,7 @@ - 0 + 1 @@ -1052,13 +1052,16 @@ ONLY use Manual CI-V when Transceive mode is not supported - Secondary Meter Selection: + Additional Meter Selection: + + + @@ -1276,8 +1279,8 @@ ONLY use Manual CI-V when Transceive mode is not supported 0 0 - 925 - 330 + 916 + 309 diff --git a/wfmain.cpp b/wfmain.cpp index 3229486..23f18df 100644 --- a/wfmain.cpp +++ b/wfmain.cpp @@ -729,6 +729,7 @@ void wfmain::receiveNetworkAudioLevels(networkAudioLevels l) void wfmain::setupMainUI() { ui->meter2Widget->hide(); + ui->meter3Widget->hide(); // Future ideas: //ui->meter2selectionCombo->addItem("Transmit Audio", meterTxMod); @@ -1519,6 +1520,8 @@ void wfmain::setDefPrefs() defPrefs.confirmExit = true; defPrefs.confirmPowerOff = true; defPrefs.meter2Type = meterNone; + defPrefs.meter3Type = meterNone; + defPrefs.tcpPort = 0; defPrefs.tciPort = 50001; defPrefs.waterfallFormat = 0; @@ -1589,6 +1592,8 @@ void wfmain::loadSettings() prefs.confirmExit = settings->value("ConfirmExit", defPrefs.confirmExit).toBool(); prefs.confirmPowerOff = settings->value("ConfirmPowerOff", defPrefs.confirmPowerOff).toBool(); prefs.meter2Type = static_cast(settings->value("Meter2Type", defPrefs.meter2Type).toInt()); + prefs.meter3Type = static_cast(settings->value("Meter3Type", defPrefs.meter3Type).toInt()); + prefs.clickDragTuningEnable = settings->value("ClickDragTuning", false).toBool(); prefs.rigCreatorEnable = settings->value("RigCreator",false).toBool(); @@ -2292,7 +2297,10 @@ void wfmain::extChangedIfPref(prefIfItem i) // Not in settings widget break; case if_meter2Type: - changeMeter2Type(prefs.meter2Type); + changeMeterType(prefs.meter2Type, 2); + break; + case if_meter3Type: + changeMeterType(prefs.meter3Type, 3); break; case if_clickDragTuningEnable: // There's nothing to do here since the code @@ -2357,6 +2365,7 @@ void wfmain::extChangedColPref(prefColItem i) case col_meterText: ui->meterSPoWidget->setColors(cp->meterLevel, cp->meterPeakScale, cp->meterPeakLevel, cp->meterAverage, cp->meterLowerLine, cp->meterLowText); ui->meter2Widget->setColors(cp->meterLevel, cp->meterPeakScale, cp->meterPeakLevel, cp->meterAverage, cp->meterLowerLine, cp->meterLowText); + ui->meter3Widget->setColors(cp->meterLevel, cp->meterPeakScale, cp->meterPeakLevel, cp->meterAverage, cp->meterLowerLine, cp->meterLowText); break; default: qWarning(logSystem()) << "Cannot update wfmain col pref" << (int)i; @@ -2748,6 +2757,7 @@ void wfmain::saveSettings() settings->setValue("ConfirmExit", prefs.confirmExit); settings->setValue("ConfirmPowerOff", prefs.confirmPowerOff); settings->setValue("Meter2Type", (int)prefs.meter2Type); + settings->setValue("Meter3Type", (int)prefs.meter3Type); settings->setValue("ClickDragTuning", prefs.clickDragTuningEnable); settings->setValue("RigCreator",prefs.rigCreatorEnable); settings->setValue("FrequencyUnits",prefs.frequencyUnits); @@ -3897,7 +3907,8 @@ void wfmain::receiveRigID(rigCapabilities rigCaps) } // Set the second meter here as I suspect we need to be connected for it to work? - changeMeter2Type(prefs.meter2Type); + changeMeterType(prefs.meter2Type, 2); + changeMeterType(prefs.meter3Type, 3); // for (int i = 0; i < ui->meter2selectionCombo->count(); i++) // { // if (static_cast(ui->meter2selectionCombo->itemData(i).toInt()) == prefs.meter2Type) @@ -3963,6 +3974,17 @@ void wfmain::initPeriodicCommands() queue->add(priorityMediumLow,funcToneSquelchType,true,false); queue->add(priorityHighest,queueItem(funcSMeter,true)); + meter* marray[2]; + marray[0] = ui->meter2Widget; + marray[1] = ui->meter3Widget; + for(int m=0; m < 2; m++) { + funcs meterCmd = meter_tToMeterCommand(marray[m]->getMeterType()); + if(meterCmd != funcNone) { + qDebug() << "Adding meter command per current UI meters."; + queue->add(priorityHighest,queueItem(meterCmd,true)); + } + } + } void wfmain::receivePTTstatus(bool pttOn) @@ -4578,9 +4600,10 @@ void wfmain::receiveTuningStep(unsigned char step) void wfmain::receiveMeter(meter_t inMeter, unsigned char level) { - switch(inMeter) { + // These first two meters, S and Power, + // are automatically assigned to the primary meter. case meterS: ui->meterSPoWidget->setMeterType(meterS); ui->meterSPoWidget->setLevel(level); @@ -4592,17 +4615,23 @@ void wfmain::receiveMeter(meter_t inMeter, unsigned char level) ui->meterSPoWidget->update(); break; default: - if(ui->meter2Widget->getMeterType() == inMeter) - { - // The incoming meter data matches the UI meter - ui->meter2Widget->setLevel(level); - } else if ( (ui->meter2Widget->getMeterType() == meterAudio) && - (inMeter == meterTxMod) && amTransmitting) { - ui->meter2Widget->setLevel(level); - } else if ( (ui->meter2Widget->getMeterType() == meterAudio) && - (inMeter == meterRxAudio) && !amTransmitting) { - ui->meter2Widget->setLevel(level); + meter* marray[2]; + marray[0] = ui->meter2Widget; + marray[1] = ui->meter3Widget; + for(int m=0; m < 2; m++) { + if(marray[m]->getMeterType() == inMeter) + { + // The incoming meter data matches the UI meter + marray[m]->setLevel(level); + } else if ( (marray[m]->getMeterType() == meterAudio) && + (inMeter == meterTxMod) && amTransmitting) { + marray[m]->setLevel(level); + } else if ( (marray[m]->getMeterType() == meterAudio) && + (inMeter == meterRxAudio) && !amTransmitting) { + marray[m]->setLevel(level); + } } + break; } } @@ -4946,15 +4975,26 @@ funcs wfmain::meter_tToMeterCommand(meter_t m) } -void wfmain::changeMeter2Type(meter_t m) +void wfmain::changeMeterType(meter_t m, int meterNum) { + qDebug() << "Changing meter type."; meter_t newMeterType; meter_t oldMeterType; - newMeterType = m; - oldMeterType = ui->meter2Widget->getMeterType(); - - if(newMeterType == oldMeterType) + meter* uiMeter = NULL; + if(meterNum == 2) { + uiMeter = ui->meter2Widget; + } else if (meterNum == 3) { + uiMeter = ui->meter3Widget; + } else { + qCritical() << "Error, invalid meter requested: meterNum ==" << meterNum; return; + } + newMeterType = m; + oldMeterType = uiMeter->getMeterType(); + + if(newMeterType == oldMeterType) { + qDebug() << "Debug note: the old meter was the same as the new meter."; + } funcs newCmd = meter_tToMeterCommand(newMeterType); funcs oldCmd = meter_tToMeterCommand(oldMeterType); @@ -4966,11 +5006,11 @@ void wfmain::changeMeter2Type(meter_t m) if(newMeterType==meterNone) { - ui->meter2Widget->hide(); - ui->meter2Widget->setMeterType(newMeterType); + uiMeter->hide(); + uiMeter->setMeterType(newMeterType); } else { - ui->meter2Widget->show(); - ui->meter2Widget->setMeterType(newMeterType); + uiMeter->show(); + uiMeter->setMeterType(newMeterType); if((newMeterType!=meterRxAudio) && (newMeterType!=meterTxMod) && (newMeterType!=meterAudio)) queue->add(priorityHighest,queueItem(newCmd,true)); } @@ -5059,6 +5099,7 @@ void wfmain::useColorPreset(colorPrefsType *cp) //qInfo(logSystem()) << "Setting plots to color preset number " << cp->presetNum << ", with name " << *(cp->presetName); ui->meterSPoWidget->setColors(cp->meterLevel, cp->meterPeakScale, cp->meterPeakLevel, cp->meterAverage, cp->meterLowerLine, cp->meterLowText); ui->meter2Widget->setColors(cp->meterLevel, cp->meterPeakScale, cp->meterPeakLevel, cp->meterAverage, cp->meterLowerLine, cp->meterLowText); + ui->meter3Widget->setColors(cp->meterLevel, cp->meterPeakScale, cp->meterPeakLevel, cp->meterAverage, cp->meterLowerLine, cp->meterLowText); foreach(auto vfo, vfos) { vfo->colorPreset(cp); } diff --git a/wfmain.h b/wfmain.h index 317e26c..337ffa2 100644 --- a/wfmain.h +++ b/wfmain.h @@ -469,7 +469,7 @@ private slots: void on_ritTuneDial_valueChanged(int value); void on_ritEnableChk_clicked(bool checked); - void changeMeter2Type(meter_t m); + void changeMeterType(meter_t m, int meterNum); void enableRigCtl(bool enabled); void on_memoriesBtn_clicked(); diff --git a/wfmain.ui b/wfmain.ui index d016684..c325d9c 100644 --- a/wfmain.ui +++ b/wfmain.ui @@ -117,6 +117,22 @@ + + + + + 0 + 30 + + + + + 16777215 + 60 + + + +