diff --git a/src/inputsource.cpp b/src/inputsource.cpp index fd90020..64cf81a 100644 --- a/src/inputsource.cpp +++ b/src/inputsource.cpp @@ -42,6 +42,7 @@ #include #include #include +#include class ComplexF32SampleAdapter : public SampleAdapter { @@ -245,6 +246,12 @@ void InputSource::readMetaData(const QString &filename) Annotation a; auto core = annotation.access(); + if (QColor::isValidColor(QString::fromStdString(core.comment))) { + a.annoColor = QString::fromStdString(core.comment); + } else { + a.annoColor = QString::fromStdString("white"); + } + a.sampleRange = range_t{core.sample_start, core.sample_start + core.sample_count - 1}; a.frequencyRange = range_t{core.freq_lower_edge, core.freq_upper_edge}; a.description = QString::fromStdString(core.description); diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index f706611..4fbe9ac 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -50,6 +50,8 @@ MainWindow::MainWindow() connect(dock->powerMinSlider, &QSlider::valueChanged, plots, &PlotView::setPowerMin); connect(dock->cursorsCheckBox, &QCheckBox::stateChanged, plots, &PlotView::enableCursors); connect(dock->scalesCheckBox, &QCheckBox::stateChanged, plots, &PlotView::enableScales); + connect(dock->annosCheckBox, &QCheckBox::stateChanged, plots, &PlotView::enableAnnos); + connect(dock->annoColorCheckBox, &QCheckBox::stateChanged, plots, &PlotView::enableAnnoColors); connect(dock->cursorSymbolsSpinBox, static_cast(&QSpinBox::valueChanged), plots, &PlotView::setCursorSegments); // Connect dock outputs diff --git a/src/plotview.cpp b/src/plotview.cpp index 914c2c9..9009e5c 100644 --- a/src/plotview.cpp +++ b/src/plotview.cpp @@ -49,6 +49,10 @@ PlotView::PlotView(InputSource *input) : cursors(this), viewRange({0, 0}) enableScales(true); + enableAnnos(true); + + enableAnnoColors(true); + addPlot(spectrogramPlot); mainSampleSource->subscribe(this); @@ -602,6 +606,22 @@ void PlotView::enableScales(bool enabled) viewport()->update(); } +void PlotView::enableAnnos(bool enabled) +{ + if (spectrogramPlot != nullptr) + spectrogramPlot->enableAnnos(enabled); + + viewport()->update(); +} + +void PlotView::enableAnnoColors(bool enabled) +{ + if (spectrogramPlot != nullptr) + spectrogramPlot->enableAnnoColors(enabled); + + viewport()->update(); +} + int PlotView::sampleToColumn(size_t sample) { return sample / samplesPerColumn(); diff --git a/src/plotview.h b/src/plotview.h index 2b6bfdc..1e96b11 100644 --- a/src/plotview.h +++ b/src/plotview.h @@ -46,6 +46,8 @@ public slots: void cursorsMoved(); void enableCursors(bool enabled); void enableScales(bool enabled); + void enableAnnos(bool enabled); + void enableAnnoColors(bool enabled); void invalidateEvent() override; void repaint(); void setCursorSegments(int segments); diff --git a/src/samplesource.h b/src/samplesource.h index 9995eb4..61eef1e 100644 --- a/src/samplesource.h +++ b/src/samplesource.h @@ -25,6 +25,7 @@ #include "util.h" #include +#include #include class Annotation @@ -32,6 +33,7 @@ class Annotation public: range_t sampleRange; range_t frequencyRange; + QColor annoColor; QString description; }; diff --git a/src/spectrogramcontrols.cpp b/src/spectrogramcontrols.cpp index 08007d9..8926f6e 100644 --- a/src/spectrogramcontrols.cpp +++ b/src/spectrogramcontrols.cpp @@ -46,7 +46,7 @@ SpectrogramControls::SpectrogramControls(const QString & title, QWidget * parent layout->addRow(new QLabel(tr("Spectrogram"))); fftSizeSlider = new QSlider(Qt::Horizontal, widget); - fftSizeSlider->setRange(4, 13); + fftSizeSlider->setRange(4, 16); fftSizeSlider->setPageStep(1); layout->addRow(new QLabel(tr("FFT size:")), fftSizeSlider); @@ -93,6 +93,15 @@ SpectrogramControls::SpectrogramControls(const QString & title, QWidget * parent symbolPeriodLabel = new QLabel(); layout->addRow(new QLabel(tr("Symbol period:")), symbolPeriodLabel); + // SigMF selection settings + layout->addRow(new QLabel()); // TODO: find a better way to add an empty row? + layout->addRow(new QLabel(tr("SigMF Control"))); + + annosCheckBox = new QCheckBox(widget); + layout->addRow(new QLabel(tr("Display Annotations:")), annosCheckBox); + annoColorCheckBox = new QCheckBox(widget); + layout->addRow(new QLabel(tr("Annotation Colors:")), annoColorCheckBox); + widget->setLayout(layout); setWidget(widget); @@ -126,6 +135,9 @@ void SpectrogramControls::setDefaults() cursorsCheckBox->setCheckState(Qt::Unchecked); cursorSymbolsSpinBox->setValue(1); + annosCheckBox->setCheckState(Qt::Checked); + annoColorCheckBox->setCheckState(Qt::Checked); + // Try to set the sample rate from the last-used value QSettings settings; int savedSampleRate = settings.value("SampleRate", 8000000).toInt(); diff --git a/src/spectrogramcontrols.h b/src/spectrogramcontrols.h index abe06d6..63845e5 100644 --- a/src/spectrogramcontrols.h +++ b/src/spectrogramcontrols.h @@ -73,4 +73,6 @@ private slots: QLabel *symbolRateLabel; QLabel *symbolPeriodLabel; QCheckBox *scalesCheckBox; + QCheckBox *annosCheckBox; + QCheckBox *annoColorCheckBox; }; diff --git a/src/spectrogramplot.cpp b/src/spectrogramplot.cpp index 8fe9cc8..cbace35 100644 --- a/src/spectrogramplot.cpp +++ b/src/spectrogramplot.cpp @@ -39,6 +39,8 @@ SpectrogramPlot::SpectrogramPlot(std::shared_ptr if (frequencyScaleEnabled) paintFrequencyScale(painter, rect); - paintAnnotations(painter, rect, sampleRange); + + if (sigmfAnnotationsEnabled) + paintAnnotations(painter, rect, sampleRange); } void SpectrogramPlot::paintFrequencyScale(QPainter &painter, QRect &rect) @@ -188,6 +192,8 @@ void SpectrogramPlot::paintAnnotations(QPainter &painter, QRect &rect, range_tsubscriberCount() > 0); diff --git a/src/spectrogramplot.h b/src/spectrogramplot.h index 1b27f40..7ad40cd 100644 --- a/src/spectrogramplot.h +++ b/src/spectrogramplot.h @@ -48,6 +48,8 @@ class SpectrogramPlot : public Plot void setSampleRate(double sampleRate); bool tunerEnabled(); void enableScales(bool enabled); + void enableAnnos(bool enabled); + void enableAnnoColors(bool enabled); public slots: void setFFTSize(int size); @@ -73,6 +75,8 @@ public slots: float powerMin; double sampleRate; bool frequencyScaleEnabled; + bool sigmfAnnotationsEnabled; + bool sigmfAnnotationColors; Tuner tuner; std::shared_ptr tunerTransform;