From 64928b2cd0aaa54a0ffd410c126dbaad34a98b07 Mon Sep 17 00:00:00 2001
From: Jacob Gilbert <jacob.gilbert@protonmail.com>
Date: Fri, 16 Jul 2021 22:37:28 -0600
Subject: [PATCH 24/31] Adding checkbox to show / hide SigMF annotations

Signed-off-by: Jacob Gilbert <jacob.gilbert@protonmail.com>
---
 src/mainwindow.cpp          |  1 +
 src/plotview.cpp            | 10 ++++++++++
 src/plotview.h              |  1 +
 src/spectrogramcontrols.cpp |  9 +++++++++
 src/spectrogramcontrols.h   |  1 +
 src/spectrogramplot.cpp     | 10 +++++++++-
 src/spectrogramplot.h       |  2 ++
 7 files changed, 33 insertions(+), 1 deletion(-)

diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index f706611..7b72057 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -50,6 +50,7 @@ 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::enableAnnotations);
     connect(dock->cursorSymbolsSpinBox, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), plots, &PlotView::setCursorSegments);
 
     // Connect dock outputs
diff --git a/src/plotview.cpp b/src/plotview.cpp
index 914c2c9..d5bc424 100644
--- a/src/plotview.cpp
+++ b/src/plotview.cpp
@@ -49,6 +49,8 @@ PlotView::PlotView(InputSource *input) : cursors(this), viewRange({0, 0})
 
     enableScales(true);
 
+    enableAnnotations(true);
+
     addPlot(spectrogramPlot);
 
     mainSampleSource->subscribe(this);
@@ -602,6 +604,14 @@ void PlotView::enableScales(bool enabled)
     viewport()->update();
 }
 
+void PlotView::enableAnnotations(bool enabled)
+{
+    if (spectrogramPlot != nullptr)
+        spectrogramPlot->enableAnnotations(enabled);
+
+    viewport()->update();
+}
+
 int PlotView::sampleToColumn(size_t sample)
 {
     return sample / samplesPerColumn();
diff --git a/src/plotview.h b/src/plotview.h
index 2b6bfdc..c698b07 100644
--- a/src/plotview.h
+++ b/src/plotview.h
@@ -46,6 +46,7 @@ public slots:
     void cursorsMoved();
     void enableCursors(bool enabled);
     void enableScales(bool enabled);
+    void enableAnnotations(bool enabled);
     void invalidateEvent() override;
     void repaint();
     void setCursorSegments(int segments);
diff --git a/src/spectrogramcontrols.cpp b/src/spectrogramcontrols.cpp
index 08007d9..36f152d 100644
--- a/src/spectrogramcontrols.cpp
+++ b/src/spectrogramcontrols.cpp
@@ -93,6 +93,13 @@ 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("<b>SigMF Control</b>")));
+
+    annosCheckBox = new QCheckBox(widget);
+    layout->addRow(new QLabel(tr("Display Annotations:")), annosCheckBox);
+
     widget->setLayout(layout);
     setWidget(widget);
 
@@ -126,6 +133,8 @@ void SpectrogramControls::setDefaults()
     cursorsCheckBox->setCheckState(Qt::Unchecked);
     cursorSymbolsSpinBox->setValue(1);
 
+    annosCheckBox->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..1120619 100644
--- a/src/spectrogramcontrols.h
+++ b/src/spectrogramcontrols.h
@@ -73,4 +73,5 @@ public:
     QLabel *symbolRateLabel;
     QLabel *symbolPeriodLabel;
     QCheckBox *scalesCheckBox;
+    QCheckBox *annosCheckBox;
 };
diff --git a/src/spectrogramplot.cpp b/src/spectrogramplot.cpp
index 8fe9cc8..b779cb6 100644
--- a/src/spectrogramplot.cpp
+++ b/src/spectrogramplot.cpp
@@ -39,6 +39,7 @@ SpectrogramPlot::SpectrogramPlot(std::shared_ptr<SampleSource<std::complex<float
     powerMin = -50.0f;
     sampleRate = 0;
     frequencyScaleEnabled = false;
+    sigmfAnnotationsEnabled = true;
 
     for (int i = 0; i < 256; i++) {
         float p = (float)i / 256;
@@ -66,7 +67,9 @@ void SpectrogramPlot::paintFront(QPainter &painter, QRect &rect, range_t<size_t>
 
     if (frequencyScaleEnabled)
         paintFrequencyScale(painter, rect);
-    paintAnnotations(painter, rect, sampleRange);
+
+    if (sigmfAnnotationsEnabled)
+        paintAnnotations(painter, rect, sampleRange);
 }
 
 void SpectrogramPlot::paintFrequencyScale(QPainter &painter, QRect &rect)
@@ -387,6 +390,11 @@ void SpectrogramPlot::enableScales(bool enabled)
    frequencyScaleEnabled = enabled;
 }
 
+void SpectrogramPlot::enableAnnotations(bool enabled)
+{
+   sigmfAnnotationsEnabled = enabled;
+}
+
 bool SpectrogramPlot::tunerEnabled()
 {
     return (tunerTransform->subscriberCount() > 0);
diff --git a/src/spectrogramplot.h b/src/spectrogramplot.h
index 1b27f40..e7d0891 100644
--- a/src/spectrogramplot.h
+++ b/src/spectrogramplot.h
@@ -48,6 +48,7 @@ public:
     void setSampleRate(double sampleRate);
     bool tunerEnabled();
     void enableScales(bool enabled);
+    void enableAnnotations(bool enabled);
 
 public slots:
     void setFFTSize(int size);
@@ -73,6 +74,7 @@ private:
     float powerMin;
     double sampleRate;
     bool frequencyScaleEnabled;
+    bool sigmfAnnotationsEnabled;
 
     Tuner tuner;
     std::shared_ptr<TunerTransform> tunerTransform;
-- 
2.35.1

