From 639373f7eb24dc38c4ebcf38e45a796ad66d8f98 Mon Sep 17 00:00:00 2001 From: f4exb Date: Sat, 22 Jan 2022 06:10:57 +0100 Subject: [PATCH] Spectrum Markers: tri-state show marker state --- sdrbase/dsp/spectrummarkers.cpp | 7 ++- sdrbase/dsp/spectrummarkers.h | 15 +++-- sdrbase/dsp/spectrumsettings.cpp | 4 +- sdrbase/resources/webapi/doc/html2/index.html | 4 +- .../doc/swagger/include/GLSpectrum.yaml | 5 +- sdrgui/gui/glspectrum.cpp | 20 ++++--- sdrgui/gui/spectrummarkersdialog.cpp | 22 ++++--- sdrgui/gui/spectrummarkersdialog.h | 3 +- sdrgui/gui/spectrummarkersdialog.ui | 59 +++++++++++++------ .../api/swagger/include/GLSpectrum.yaml | 5 +- swagger/sdrangel/code/html2/index.html | 4 +- 11 files changed, 98 insertions(+), 50 deletions(-) diff --git a/sdrbase/dsp/spectrummarkers.cpp b/sdrbase/dsp/spectrummarkers.cpp index 702ed031d..6b4b5c560 100644 --- a/sdrbase/dsp/spectrummarkers.cpp +++ b/sdrbase/dsp/spectrummarkers.cpp @@ -80,7 +80,7 @@ QByteArray SpectrumWaterfallMarker::serialize() const s.writeS32(4, r); s.writeS32(5, g); s.writeS32(6, b); - s.writeBool(7, m_show); + s.writeS32(7, (int) m_show); return s.final(); } @@ -141,6 +141,8 @@ bool SpectrumAnnotationMarker::deserialize(const QByteArray& data) if (d.getVersion() == 1) { + int tmp; + d.readS64(1, &m_startFrequency, 0); d.readU32(2, &m_bandwidth, 0); int r, g, b; @@ -150,7 +152,8 @@ bool SpectrumAnnotationMarker::deserialize(const QByteArray& data) m_markerColor.setGreen(g); d.readS32(6, &b, 255); m_markerColor.setBlue(b); - d.readBool(7, &m_show, true); + d.readS32 (7, &tmp, 1); + m_show = (ShowState) tmp; d.readString(8, &m_text); return true; diff --git a/sdrbase/dsp/spectrummarkers.h b/sdrbase/dsp/spectrummarkers.h index 05e955317..c2e7d7209 100644 --- a/sdrbase/dsp/spectrummarkers.h +++ b/sdrbase/dsp/spectrummarkers.h @@ -157,12 +157,18 @@ struct SDRBASE_API SpectrumWaterfallMarker struct SDRBASE_API SpectrumAnnotationMarker { + enum ShowState + { + Hidden, + ShowTop, + ShowFull + }; + qint64 m_startFrequency; uint32_t m_bandwidth; QColor m_markerColor; - bool m_show; + ShowState m_show; QString m_text; - bool m_selected; float m_startPos; float m_stopPos; @@ -170,9 +176,8 @@ struct SDRBASE_API SpectrumAnnotationMarker m_startFrequency(0), m_bandwidth(0), m_markerColor("white"), - m_show(true), + m_show(ShowTop), m_text("Text"), - m_selected(false), m_startPos(0.0f), m_stopPos(1.0f) {} @@ -181,7 +186,7 @@ struct SDRBASE_API SpectrumAnnotationMarker qint64 startFrequency, uint32_t bandwidth, QColor markerColor, - bool show, + ShowState show, const QString& text ) : m_startFrequency(startFrequency), diff --git a/sdrbase/dsp/spectrumsettings.cpp b/sdrbase/dsp/spectrumsettings.cpp index 3c605fe9b..d114ce2fd 100644 --- a/sdrbase/dsp/spectrumsettings.cpp +++ b/sdrbase/dsp/spectrumsettings.cpp @@ -301,7 +301,7 @@ void SpectrumSettings::formatTo(SWGSDRangel::SWGObject *swgObject) const swgSpectrum->getAnnotationMarkers()->back()->setStartFrequency(marker.m_startFrequency); swgSpectrum->getAnnotationMarkers()->back()->setBandwidth(marker.m_bandwidth); swgSpectrum->getAnnotationMarkers()->back()->setMarkerColor(qColorToInt(marker.m_markerColor)); - swgSpectrum->getAnnotationMarkers()->back()->setShow(marker.m_show ? 1 : 0); + swgSpectrum->getAnnotationMarkers()->back()->setShow((int) marker.m_show); } } } @@ -447,7 +447,7 @@ void SpectrumSettings::updateFrom(const QStringList& keys, const SWGSDRangel::SW m_annoationMarkers.back().m_startFrequency = swgAnnotationMarker->getStartFrequency(); m_annoationMarkers.back().m_bandwidth = swgAnnotationMarker->getBandwidth() < 0 ? 0 : swgAnnotationMarker->getBandwidth(); m_annoationMarkers.back().m_markerColor = intToQColor(swgAnnotationMarker->getMarkerColor()); - m_annoationMarkers.back().m_show = swgAnnotationMarker->getShow() != 0; + m_annoationMarkers.back().m_show = (SpectrumAnnotationMarker::ShowState) swgAnnotationMarker->getShow(); } } } diff --git a/sdrbase/resources/webapi/doc/html2/index.html b/sdrbase/resources/webapi/doc/html2/index.html index 690073b01..1eabfdf3a 100644 --- a/sdrbase/resources/webapi/doc/html2/index.html +++ b/sdrbase/resources/webapi/doc/html2/index.html @@ -11804,7 +11804,7 @@ margin-bottom: 20px; }, "show" : { "type" : "integer", - "description" : "Boolean - Marker display state\n * 0 - Hidden\n * 1 - Visible\n" + "description" : "SpectrumAnnotationMarker::ShowState - Marker display state\n * 0 - Hidden\n * 1 - Only top marker visible\n * 2 - Fully visible with text and full sized limits\n" } }, "description" : "Spectrum annotation marker settings" @@ -51969,7 +51969,7 @@ except ApiException as e:
- Generated 2022-01-15T23:01:29.100+01:00 + Generated 2022-01-21T22:15:59.334+01:00
diff --git a/sdrbase/resources/webapi/doc/swagger/include/GLSpectrum.yaml b/sdrbase/resources/webapi/doc/swagger/include/GLSpectrum.yaml index 0da5a9c7d..dbd9df4c6 100644 --- a/sdrbase/resources/webapi/doc/swagger/include/GLSpectrum.yaml +++ b/sdrbase/resources/webapi/doc/swagger/include/GLSpectrum.yaml @@ -59,9 +59,10 @@ SpectrumAnnotationMarker: show: type: integer description: > - Boolean - Marker display state + SpectrumAnnotationMarker::ShowState - Marker display state * 0 - Hidden - * 1 - Visible + * 1 - Only top marker visible + * 2 - Fully visible with text and full sized limits GLSpectrum: description: GLSpectrumGUI settings diff --git a/sdrgui/gui/glspectrum.cpp b/sdrgui/gui/glspectrum.cpp index ac5cdd4a0..54453ca57 100644 --- a/sdrgui/gui/glspectrum.cpp +++ b/sdrgui/gui/glspectrum.cpp @@ -1406,7 +1406,11 @@ void GLSpectrum::drawAnnotationMarkers() for (const auto &marker : m_visibleAnnotationMarkers) { - QVector4D color(marker->m_markerColor.redF(), marker->m_markerColor.greenF(), marker->m_markerColor.blueF(), 0.5f); + if (marker->m_show == SpectrumAnnotationMarker::Hidden) { + continue; + } + + QVector4D color(marker->m_markerColor.redF(), marker->m_markerColor.greenF(), marker->m_markerColor.blueF(), 0.5f); if (marker->m_bandwidth == 0) { @@ -1427,7 +1431,7 @@ void GLSpectrum::drawAnnotationMarkers() m_glShaderSimple.drawSurface(m_glHistogramBoxMatrix, color, q3, 4); } - if (marker->m_selected) + if (marker->m_show == SpectrumAnnotationMarker::ShowFull) { QVector4D color( marker->m_markerColor.redF(), @@ -2283,7 +2287,6 @@ void GLSpectrum::updateSortedAnnotationMarkers() if ((startPos > 1.0f) || (stopPos < 0.0f)) // out of range { - marker->m_selected = false; continue; } @@ -2579,18 +2582,19 @@ void GLSpectrum::mousePressEvent(QMouseEvent* event) for (auto iMarker = m_visibleAnnotationMarkers.rbegin(); iMarker != m_visibleAnnotationMarkers.rend(); ++iMarker) { + if ((*iMarker)->m_show == SpectrumAnnotationMarker::Hidden) { + continue; + } + qint64 stopFrequency = (*iMarker)->m_startFrequency + ((*iMarker)->m_bandwidth == 0 ? m_frequencyScale.getRange()*0.01f : (*iMarker)->m_bandwidth); if (((*iMarker)->m_startFrequency < selectedFrequency) && (selectedFrequency <= stopFrequency) && !selected) { - (*iMarker)->m_selected = true; + (*iMarker)->m_show = (*iMarker)->m_show == SpectrumAnnotationMarker::ShowFull ? + SpectrumAnnotationMarker::ShowTop : SpectrumAnnotationMarker::ShowFull; selected = true; } - else - { - (*iMarker)->m_selected = false; - } } } diff --git a/sdrgui/gui/spectrummarkersdialog.cpp b/sdrgui/gui/spectrummarkersdialog.cpp index c5bdd8baa..0b07e333e 100644 --- a/sdrgui/gui/spectrummarkersdialog.cpp +++ b/sdrgui/gui/spectrummarkersdialog.cpp @@ -176,7 +176,7 @@ void SpectrumMarkersDialog::displayAnnotationMarker() ui->aMarkerFrequency->blockSignals(true); ui->aCenterFrequency->blockSignals(true); ui->aMarkerColor->blockSignals(true); - ui->aShowMarker->blockSignals(true); + ui->aMarkerShowState->blockSignals(true); ui->aMarkerText->blockSignals(true); ui->aMarker->blockSignals(true); ui->aMarkerAdd->blockSignals(true); @@ -189,7 +189,7 @@ void SpectrumMarkersDialog::displayAnnotationMarker() ui->aMarker->setEnabled(false); ui->aMarkerFrequency->setEnabled(false); ui->aMarkerBandwidth->setEnabled(false); - ui->aShowMarker->setEnabled(false); + ui->aMarkerShowState->setEnabled(false); ui->aMarkerIndexText->setText("-"); ui->aMarkerText->setText(""); } @@ -198,7 +198,7 @@ void SpectrumMarkersDialog::displayAnnotationMarker() ui->aMarker->setEnabled(true); ui->aMarkerFrequency->setEnabled(true); ui->aMarkerBandwidth->setEnabled(true); - ui->aShowMarker->setEnabled(true); + ui->aMarkerShowState->setEnabled(true); ui->aMarker->setValue(m_annotationMarkerIndex); ui->aMarkerIndexText->setText(tr("%1").arg(m_annotationMarkerIndex)); qint64 frequency = m_annotationMarkers[m_annotationMarkerIndex].m_startFrequency + @@ -215,6 +215,7 @@ void SpectrumMarkersDialog::displayAnnotationMarker() m_annotationMarkers[m_annotationMarkerIndex].m_markerColor.getRgb(&r, &g, &b, &a); ui->aMarkerColor->setStyleSheet(tr("QLabel { background-color : rgb(%1,%2,%3); }").arg(r).arg(g).arg(b)); ui->aMarkerText->setText(tr("%1").arg(m_annotationMarkers[m_annotationMarkerIndex].m_text)); + ui->aMarkerShowState->setCurrentIndex((int) m_annotationMarkers[m_annotationMarkerIndex].m_show); } ui->aMarkerToggleFrequency->setChecked(m_annoFreqStartElseCenter); @@ -222,7 +223,7 @@ void SpectrumMarkersDialog::displayAnnotationMarker() ui->aMarkerFrequency->blockSignals(false); ui->aCenterFrequency->blockSignals(false); ui->aMarkerColor->blockSignals(false); - ui->aShowMarker->blockSignals(false); + ui->aMarkerShowState->blockSignals(false); ui->aMarkerText->blockSignals(false); ui->aMarker->blockSignals(false); ui->aMarkerAdd->blockSignals(false); @@ -613,13 +614,20 @@ void SpectrumMarkersDialog::on_aMarkerColor_clicked() } } -void SpectrumMarkersDialog::on_aShowMarker_clicked(bool clicked) +void SpectrumMarkersDialog::on_aMarkerShowState_currentIndexChanged(int state) { if (m_annotationMarkers.size() == 0) { return; } - m_annotationMarkers[m_annotationMarkerIndex].m_show = clicked; + m_annotationMarkers[m_annotationMarkerIndex].m_show = (SpectrumAnnotationMarker::ShowState) state; +} + +void SpectrumMarkersDialog::on_aMarkerShowStateAll_clicked() +{ + for (auto &marker : m_annotationMarkers) { + marker.m_show = (SpectrumAnnotationMarker::ShowState) ui->aMarkerShowState->currentIndex(); + } } void SpectrumMarkersDialog::on_aMarkerText_editingFinished() @@ -726,7 +734,7 @@ void SpectrumMarkersDialog::on_aMarkersImport_clicked() m_annotationMarkers.back().m_startFrequency = cols[startCol].toLongLong(); m_annotationMarkers.back().m_bandwidth = cols[widthCol].toUInt(); m_annotationMarkers.back().m_text = cols[textCol]; - m_annotationMarkers.back().m_show = cols[showCol].toInt() != 0; + m_annotationMarkers.back().m_show = (SpectrumAnnotationMarker::ShowState) cols[showCol].toInt(); int r = cols[redCol].toInt(); int g = cols[greenCol].toInt(); int b = cols[blueCol].toInt(); diff --git a/sdrgui/gui/spectrummarkersdialog.h b/sdrgui/gui/spectrummarkersdialog.h index 567e41c3e..6da8d6413 100644 --- a/sdrgui/gui/spectrummarkersdialog.h +++ b/sdrgui/gui/spectrummarkersdialog.h @@ -97,7 +97,8 @@ private slots: void on_aMakerDuplicate_clicked(); void on_aMakersSort_clicked(); void on_aMarkerColor_clicked(); - void on_aShowMarker_clicked(bool clicked); + void on_aMarkerShowState_currentIndexChanged(int state); + void on_aMarkerShowStateAll_clicked(); void on_aMarkerText_editingFinished(); void on_aMarker_valueChanged(int value); void on_aMarkerAdd_clicked(); diff --git a/sdrgui/gui/spectrummarkersdialog.ui b/sdrgui/gui/spectrummarkersdialog.ui index 12c1ebaa9..1f3b1fc5b 100644 --- a/sdrgui/gui/spectrummarkersdialog.ui +++ b/sdrgui/gui/spectrummarkersdialog.ui @@ -29,7 +29,7 @@ - 2 + 0 @@ -1035,7 +1035,7 @@ - 15 + 30 0 @@ -1046,7 +1046,7 @@ 0 - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter @@ -1216,26 +1216,13 @@ - - - - Show this marker - - - - - - true - - - Marker text - 30 + 36 @@ -1640,6 +1627,44 @@ + + + + Marker show state + + + + Hidden + + + + + Top + + + + + Full + + + + + + + + + 30 + 16777215 + + + + Apply current show state to all markers + + + All + + + diff --git a/swagger/sdrangel/api/swagger/include/GLSpectrum.yaml b/swagger/sdrangel/api/swagger/include/GLSpectrum.yaml index b25174ab1..9e54d2ad3 100644 --- a/swagger/sdrangel/api/swagger/include/GLSpectrum.yaml +++ b/swagger/sdrangel/api/swagger/include/GLSpectrum.yaml @@ -59,9 +59,10 @@ SpectrumAnnotationMarker: show: type: integer description: > - Boolean - Marker display state + SpectrumAnnotationMarker::ShowState - Marker display state * 0 - Hidden - * 1 - Visible + * 1 - Only top marker visible + * 2 - Fully visible with text and full sized limits GLSpectrum: description: GLSpectrumGUI settings diff --git a/swagger/sdrangel/code/html2/index.html b/swagger/sdrangel/code/html2/index.html index 690073b01..1eabfdf3a 100644 --- a/swagger/sdrangel/code/html2/index.html +++ b/swagger/sdrangel/code/html2/index.html @@ -11804,7 +11804,7 @@ margin-bottom: 20px; }, "show" : { "type" : "integer", - "description" : "Boolean - Marker display state\n * 0 - Hidden\n * 1 - Visible\n" + "description" : "SpectrumAnnotationMarker::ShowState - Marker display state\n * 0 - Hidden\n * 1 - Only top marker visible\n * 2 - Fully visible with text and full sized limits\n" } }, "description" : "Spectrum annotation marker settings" @@ -51969,7 +51969,7 @@ except ApiException as e:
- Generated 2022-01-15T23:01:29.100+01:00 + Generated 2022-01-21T22:15:59.334+01:00