diff --git a/mainwindow.cpp b/mainwindow.cpp index 5b983d6..723a74e 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -44,6 +44,7 @@ MainWindow::MainWindow() connect(dock->powerMinSlider, SIGNAL(valueChanged(int)), plots, SLOT(setPowerMin(int))); connect(dock->cursorsCheckBox, &QCheckBox::stateChanged, plots, &PlotView::enableCursors); connect(dock->cursorSymbolsSpinBox, static_cast(&QSpinBox::valueChanged), plots, &PlotView::setCursorSegments); + connect(dock->timeScaleCheckBox, SIGNAL(stateChanged(int)), plots, SLOT(setTimeScaleEnable(int))); // Connect dock outputs connect(plots, SIGNAL(timeSelectionChanged(float)), dock, SLOT(timeSelectionChanged(float))); diff --git a/plotview.cpp b/plotview.cpp index 05171cf..013255e 100644 --- a/plotview.cpp +++ b/plotview.cpp @@ -339,3 +339,9 @@ void PlotView::setSampleRate(off_t rate) spectrogramPlot->setSampleRate(rate); } +void PlotView::setTimeScaleEnable(int state) +{ + bool timeScaleIsEnabled = (state == Qt::Checked); + spectrogramPlot->setTimeScaleEnable(timeScaleIsEnabled); +} + diff --git a/plotview.h b/plotview.h index 783a826..094ec09 100644 --- a/plotview.h +++ b/plotview.h @@ -51,6 +51,7 @@ public slots: void setFFTAndZoom(int fftSize, int zoomLevel); void setPowerMin(int power); void setPowerMax(int power); + void setTimeScaleEnable(int state); protected: void contextMenuEvent(QContextMenuEvent * event) override; diff --git a/spectrogramcontrols.cpp b/spectrogramcontrols.cpp index 2b728e4..9f31d40 100644 --- a/spectrogramcontrols.cpp +++ b/spectrogramcontrols.cpp @@ -57,6 +57,10 @@ SpectrogramControls::SpectrogramControls(const QString & title, QWidget * parent powerMinSlider->setRange(-140, 10); layout->addRow(new QLabel(tr("Power min:")), powerMinSlider); + timeScaleCheckBox = new QCheckBox(widget); + timeScaleCheckBox->setCheckState(Qt::Checked); + layout->addRow(new QLabel(tr("Time overlay:")), timeScaleCheckBox); + // Time selection settings layout->addRow(new QLabel()); // TODO: find a better way to add an empty row? layout->addRow(new QLabel(tr("Time selection"))); diff --git a/spectrogramcontrols.h b/spectrogramcontrols.h index cdf8744..3b3bfee 100644 --- a/spectrogramcontrols.h +++ b/spectrogramcontrols.h @@ -68,4 +68,5 @@ public: QLabel *periodLabel; QLabel *symbolRateLabel; QLabel *symbolPeriodLabel; + QCheckBox *timeScaleCheckBox; }; diff --git a/spectrogramplot.cpp b/spectrogramplot.cpp index ee71c23..8af44c5 100644 --- a/spectrogramplot.cpp +++ b/spectrogramplot.cpp @@ -37,6 +37,7 @@ SpectrogramPlot::SpectrogramPlot(std::shared_ptr if (tunerEnabled()) tuner.paintFront(painter, rect, sampleRange); + if (timeScaleIsEnabled) + paintTimeScale(painter, rect, sampleRange); +} + +void SpectrogramPlot::paintTimeScale(QPainter &painter, QRect &rect, range_t sampleRange) +{ float startTime = (float)sampleRange.minimum / sampleRate; float stopTime = (float)sampleRange.maximum / sampleRate; float duration = stopTime - startTime; @@ -293,3 +300,8 @@ void SpectrogramPlot::setSampleRate(off_t rate) emit repaint(); } +void SpectrogramPlot::setTimeScaleEnable(bool enabled) +{ + timeScaleIsEnabled = enabled; + emit repaint(); +} diff --git a/spectrogramplot.h b/spectrogramplot.h index 52a56f6..a620618 100644 --- a/spectrogramplot.h +++ b/spectrogramplot.h @@ -43,6 +43,7 @@ public: void paintMid(QPainter &painter, QRect &rect, range_t sampleRange) override; bool mouseEvent(QEvent::Type type, QMouseEvent event) override; void setSampleRate(off_t rate); + void setTimeScaleEnable(bool enabled); public slots: void setFFTSize(int size); @@ -67,6 +68,7 @@ private: float powerMax; float powerMin; off_t sampleRate = 0; + bool timeScaleIsEnabled; Tuner tuner; std::shared_ptr tunerTransform; @@ -79,6 +81,7 @@ private: std::vector getTunerTaps(); int linesPerTile(); bool tunerEnabled(); + void paintTimeScale(QPainter &painter, QRect &rect, range_t sampleRange); }; class TileCacheKey