1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163
|
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
|