Added some preferences for the plasma.

monitor
Elliott Liggett 2022-08-17 18:41:35 -07:00
rodzic 32d55ef490
commit 6ebb3b7680
3 zmienionych plików z 241 dodań i 22 usunięć

Wyświetl plik

@ -1050,6 +1050,25 @@ void wfmain::setUIToPrefs()
on_drawPeakChk_clicked(prefs.drawPeaks);
drawPeaks = prefs.drawPeaks;
underlayMode = prefs.underlayMode;
switch(underlayMode)
{
case underlayNone:
ui->underlayNone->setChecked(true);
break;
case underlayPeakHold:
ui->underlayPeakHold->setChecked(true);
break;
case underlayPeakBuffer:
ui->underlayPeakBuffer->setChecked(true);
break;
case underlayAverageBuffer:
ui->underlayAverageBuffer->setChecked(true);
break;
default:
break;
}
ui->wfAntiAliasChk->setChecked(prefs.wfAntiAlias);
on_wfAntiAliasChk_clicked(prefs.wfAntiAlias);
@ -1059,6 +1078,12 @@ void wfmain::setUIToPrefs()
ui->wfLengthSlider->setValue(prefs.wflength);
prepareWf(prefs.wflength);
ui->topLevelSlider->setValue(prefs.plotCeiling);
ui->botLevelSlider->setValue(prefs.plotFloor);
plot->yAxis->setRange(QCPRange(prefs.plotFloor, prefs.plotCeiling));
colorMap->setDataRange(QCPRange(prefs.plotFloor, prefs.plotCeiling));
ui->wfthemeCombo->setCurrentIndex(ui->wfthemeCombo->findData(prefs.wftheme));
colorMap->setGradient(static_cast<QCPColorGradient::GradientPreset>(prefs.wftheme));
@ -1250,6 +1275,7 @@ void wfmain::setDefPrefs()
defPrefs.useDarkMode = true;
defPrefs.useSystemTheme = false;
defPrefs.drawPeaks = true;
defPrefs.underlayMode = underlayNone;
defPrefs.wfAntiAlias = false;
defPrefs.wfInterpolate = true;
defPrefs.stylesheetPath = QString("qdarkstyle/style.qss");
@ -1266,6 +1292,8 @@ void wfmain::setDefPrefs()
defPrefs.localAFgain = 255;
defPrefs.wflength = 160;
defPrefs.wftheme = static_cast<int>(QCPColorGradient::gpJet);
defPrefs.plotFloor = 0;
defPrefs.plotCeiling = 160;
defPrefs.confirmExit = true;
defPrefs.confirmPowerOff = true;
defPrefs.meter2Type = meterNone;
@ -1293,7 +1321,14 @@ void wfmain::loadSettings()
prefs.useDarkMode = settings->value("UseDarkMode", defPrefs.useDarkMode).toBool();
prefs.useSystemTheme = settings->value("UseSystemTheme", defPrefs.useSystemTheme).toBool();
prefs.wftheme = settings->value("WFTheme", defPrefs.wftheme).toInt();
prefs.plotFloor = settings->value("plotFloor", defPrefs.plotFloor).toInt();
prefs.plotCeiling = settings->value("plotCeiling", defPrefs.plotCeiling).toInt();
plotFloor = prefs.plotFloor;
plotCeiling = prefs.plotCeiling;
wfFloor = prefs.plotFloor;
wfCeiling = prefs.plotCeiling;
prefs.drawPeaks = settings->value("DrawPeaks", defPrefs.drawPeaks).toBool();
prefs.underlayMode = static_cast<underlay_t>(settings->value("underlayMode", defPrefs.underlayMode).toInt());
prefs.wfAntiAlias = settings->value("WFAntiAlias", defPrefs.wfAntiAlias).toBool();
prefs.wfInterpolate = settings->value("WFInterpolate", defPrefs.wfInterpolate).toBool();
prefs.wflength = (unsigned int)settings->value("WFLength", defPrefs.wflength).toInt();
@ -1801,9 +1836,12 @@ void wfmain::saveSettings()
settings->setValue("UseSystemTheme", prefs.useSystemTheme);
settings->setValue("UseDarkMode", prefs.useDarkMode);
settings->setValue("DrawPeaks", prefs.drawPeaks);
settings->setValue("underlayMode", prefs.underlayMode);
settings->setValue("WFAntiAlias", prefs.wfAntiAlias);
settings->setValue("WFInterpolate", prefs.wfInterpolate);
settings->setValue("WFTheme", prefs.wftheme);
settings->setValue("plotFloor", prefs.plotFloor);
settings->setValue("plotCeiling", prefs.plotCeiling);
settings->setValue("StylesheetPath", prefs.stylesheetPath);
settings->setValue("splitter", ui->splitter->saveState());
settings->setValue("windowGeometry", saveGeometry());
@ -3195,8 +3233,7 @@ void wfmain::receiveRigID(rigCapabilities rigCaps)
wfCeiling = rigCaps.spectAmpMax;
plotCeiling = rigCaps.spectAmpMax;
ui->topLevelSlider->setMaximum(rigCaps.spectAmpMax);
wfFloor = 0;
plotFloor = 0;
haveRigCaps = true;
// Added so that server receives rig capabilities.
emit sendRigCaps(rigCaps);
@ -3316,6 +3353,8 @@ void wfmain::receiveRigID(rigCapabilities rigCaps)
{
ui->scopeBWCombo->addItem(rigCaps.scopeCenterSpans.at(i).name, (int)rigCaps.scopeCenterSpans.at(i).cstype);
}
plot->yAxis->setRange(QCPRange(prefs.plotFloor, prefs.plotCeiling));
colorMap->setDataRange(QCPRange(prefs.plotFloor, prefs.plotCeiling));
} else {
ui->scopeBWCombo->setHidden(true);
}
@ -3527,7 +3566,7 @@ void wfmain::receiveSpectrumData(QByteArray spectrum, double startFreq, double e
{
//x[i] = (i * (endFreq-startFreq)/specLen) + startFreq;
y[i] = (unsigned char)spectrum.at(i);
if(drawPeaks)
if(underlayMode == underlayPeakHold)
{
if((unsigned char)spectrum.at(i) > (unsigned char)spectrumPeaks.at(i))
{
@ -3553,13 +3592,16 @@ void wfmain::receiveSpectrumData(QByteArray spectrum, double startFreq, double e
freqIndicatorLine->start->setCoords(freq.MHzDouble,0);
freqIndicatorLine->end->setCoords(freq.MHzDouble,rigCaps.spectAmpMax);
}
if(drawPeaks)
if(underlayMode == underlayPeakHold)
{
plot->graph(1)->setData(x,y2); // peaks
} else if (drawPlasma) {
} else if (underlayMode != underlayNone) {
computePlasma();
plot->graph(1)->setData(x,spectrumPlasmaLine); // peaks
plot->graph(1)->setData(x,spectrumPlasmaLine);
} else {
plot->graph(1)->setData(x,y2); // peaks, but probably cleared out
}
plot->yAxis->setRange(plotFloor, plotCeiling);
plot->xAxis->setRange(startFreq, endFreq);
plot->replot();
@ -3590,8 +3632,7 @@ void wfmain::computePlasma()
{
spectrumPlasmaLine.clear();
spectrumPlasmaLine.resize(spectWidth);
bool averageMode = true;
if(averageMode)
if(underlayMode == underlayAverageBuffer)
{
for(int col=0; col < spectWidth; col++)
{
@ -3602,7 +3643,7 @@ void wfmain::computePlasma()
}
spectrumPlasmaLine[col] = spectrumPlasmaLine[col] / spectrumPlasma.size();
}
} else {
} else if (underlayMode == underlayPeakBuffer){
// peak mode, running peak display
for(int col=0; col < spectWidth; col++)
{
@ -6033,6 +6074,7 @@ void wfmain::on_topLevelSlider_valueChanged(int value)
{
wfCeiling = value;
plotCeiling = value;
prefs.plotCeiling = value;
plot->yAxis->setRange(QCPRange(plotFloor, plotCeiling));
colorMap->setDataRange(QCPRange(wfFloor, wfCeiling));
}
@ -6041,10 +6083,59 @@ void wfmain::on_botLevelSlider_valueChanged(int value)
{
wfFloor = value;
plotFloor = value;
prefs.plotFloor = value;
plot->yAxis->setRange(QCPRange(plotFloor, plotCeiling));
colorMap->setDataRange(QCPRange(wfFloor, wfCeiling));
}
void wfmain::on_underlayBufferSlider_valueChanged(int value)
{
// TODO: lock first...
spectrumPlasma.resize(value);
}
void wfmain::on_underlayNone_toggled(bool checked)
{
ui->underlayBufferSlider->setDisabled(checked);
if(checked)
{
underlayMode = underlayNone;
prefs.underlayMode = underlayMode;
on_clearPeakBtn_clicked();
}
}
void wfmain::on_underlayPeakHold_toggled(bool checked)
{
ui->underlayBufferSlider->setDisabled(checked);
if(checked)
{
underlayMode = underlayPeakHold;
prefs.underlayMode = underlayMode;
on_clearPeakBtn_clicked();
}
}
void wfmain::on_underlayPeakBuffer_toggled(bool checked)
{
ui->underlayBufferSlider->setDisabled(!checked);
if(checked)
{
underlayMode = underlayPeakBuffer;
prefs.underlayMode = underlayMode;
}
}
void wfmain::on_underlayAverageBuffer_toggled(bool checked)
{
ui->underlayBufferSlider->setDisabled(!checked);
if(checked)
{
underlayMode = underlayAverageBuffer;
prefs.underlayMode = underlayMode;
}
}
// --- DEBUG FUNCTION ---
void wfmain::on_debugBtn_clicked()
@ -6056,17 +6147,20 @@ void wfmain::on_debugBtn_clicked()
//setRadioTimeDatePrep();
//wf->setInteraction(QCP::iRangeZoom, true);
//wf->setInteraction(QCP::iRangeDrag, true);
bool ok;
int height = QInputDialog::getInt(this, "wfview window fixed height", "number: ", 350, 1, 500, 1, &ok );
plot->yAxis->setRange(QCPRange(plotFloor, plotCeiling));
colorMap->setDataRange(QCPRange(wfFloor, wfCeiling));
this->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
this->setMaximumSize(QSize(1025,height));
this->setMinimumSize(QSize(1025,height));
//this->setMaximumSize(QSize(929, 270));
//this->setMinimumSize(QSize(929, 270));
// bool ok;
// int height = QInputDialog::getInt(this, "wfview window fixed height", "number: ", 350, 1, 500, 1, &ok );
resize(minimumSize());
adjustSize(); // main window
adjustSize();
// this->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
// this->setMaximumSize(QSize(1025,height));
// this->setMinimumSize(QSize(1025,height));
// //this->setMaximumSize(QSize(929, 270));
// //this->setMinimumSize(QSize(929, 270));
// resize(minimumSize());
// adjustSize(); // main window
// adjustSize();
}

Wyświetl plik

@ -543,6 +543,16 @@ private slots:
void on_botLevelSlider_valueChanged(int value);
void on_underlayBufferSlider_valueChanged(int value);
void on_underlayNone_toggled(bool checked);
void on_underlayPeakHold_toggled(bool checked);
void on_underlayPeakBuffer_toggled(bool checked);
void on_underlayAverageBuffer_toggled(bool checked);
private:
Ui::wfmain *ui;
void closeEvent(QCloseEvent *event);
@ -652,10 +662,14 @@ private:
quint16 wfLength;
bool spectrumDrawLock;
enum underlay_t { underlayNone, underlayPeakHold, underlayPeakBuffer, underlayAverageBuffer };
QByteArray spectrumPeaks;
QVector <double> spectrumPlasmaLine;
QVector <QByteArray> spectrumPlasma;
unsigned int spectrumPlasmaSize = 64;
underlay_t underlayMode = underlayNone;
bool drawPlasma = true;
double plotFloor = 0;
@ -770,6 +784,7 @@ private:
bool useDarkMode;
bool useSystemTheme;
bool drawPeaks;
underlay_t underlayMode = underlayNone;
bool wfAntiAlias;
bool wfInterpolate;
QString stylesheetPath;
@ -788,13 +803,14 @@ private:
unsigned char localAFgain;
unsigned int wflength;
int wftheme;
int plotFloor;
int plotCeiling;
bool confirmExit;
bool confirmPowerOff;
meterKind meter2Type;
quint16 tcpPort;
quint8 waterfallFormat;
audioType audioSystem;
// plot scheme
} prefs;
preferences defPrefs;

113
wfmain.ui
Wyświetl plik

@ -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">
@ -2174,7 +2174,7 @@
<item>
<widget class="QStackedWidget" name="settingsStack">
<property name="currentIndex">
<number>0</number>
<number>1</number>
</property>
<widget class="QWidget" name="radioAccess">
<layout class="QVBoxLayout" name="verticalLayout_21">
@ -2907,6 +2907,114 @@
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_43">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QLabel" name="underlayLabel">
<property name="text">
<string>Underlay Mode</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="underlayNone">
<property name="text">
<string>None</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
<attribute name="buttonGroup">
<string notr="true">underlayButtonGroup</string>
</attribute>
</widget>
</item>
<item>
<widget class="QRadioButton" name="underlayPeakHold">
<property name="text">
<string>Peak Hold</string>
</property>
<attribute name="buttonGroup">
<string notr="true">underlayButtonGroup</string>
</attribute>
</widget>
</item>
<item>
<widget class="QRadioButton" name="underlayPeakBuffer">
<property name="text">
<string>Peak</string>
</property>
<attribute name="buttonGroup">
<string notr="true">underlayButtonGroup</string>
</attribute>
</widget>
</item>
<item>
<widget class="QRadioButton" name="underlayAverageBuffer">
<property name="text">
<string>Average</string>
</property>
<attribute name="buttonGroup">
<string notr="true">underlayButtonGroup</string>
</attribute>
</widget>
</item>
<item>
<widget class="QLabel" name="label_42">
<property name="text">
<string>Uneerlay Buffer Size:</string>
</property>
</widget>
</item>
<item>
<widget class="QSlider" name="underlayBufferSlider">
<property name="maximumSize">
<size>
<width>100</width>
<height>16777215</height>
</size>
</property>
<property name="minimum">
<number>8</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>64</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_27">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_28">
<item>
@ -3921,5 +4029,6 @@
<connections/>
<buttongroups>
<buttongroup name="buttonGroup"/>
<buttongroup name="underlayButtonGroup"/>
</buttongroups>
</ui>