1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2024-11-25 09:18:54 -05:00

Spectrum markers: implemented histogram markers display enable

This commit is contained in:
f4exb 2021-08-04 19:28:52 +02:00
parent 7a00e51dc6
commit deafa0833b
8 changed files with 152 additions and 8 deletions

View File

@ -37,6 +37,12 @@ public:
AvgModeMax
};
enum MarkersDisplay
{
MarkersDisplayNone,
MarkersDisplaySpectrum
};
int m_fftSize;
int m_fftOverlap;
FFTWindow::Function m_fftWindow;

View File

@ -41,6 +41,7 @@ const float GLSpectrum::m_maxFrequencyZoom = 10.0f;
GLSpectrum::GLSpectrum(QWidget* parent) :
QGLWidget(parent),
m_markersDisplay(SpectrumSettings::MarkersDisplaySpectrum),
m_cursorState(CSNormal),
m_cursorChannel(0),
m_spectrumVis(nullptr),
@ -1019,7 +1020,9 @@ void GLSpectrum::paintGL()
}
}
drawMarkers();
if (m_markersDisplay == SpectrumSettings::MarkersDisplaySpectrum) {
drawSpectrumMarkers();
}
// paint waterfall grid
if (m_displayWaterfall && m_displayGrid)
@ -1166,7 +1169,7 @@ void GLSpectrum::paintGL()
m_mutex.unlock();
}
void GLSpectrum::drawMarkers()
void GLSpectrum::drawSpectrumMarkers()
{
QVector4D lineColor(1.0f, 1.0f, 1.0f, 0.3f);
@ -1175,6 +1178,10 @@ void GLSpectrum::drawMarkers()
{
for (int i = 0; i < m_histogramMarkers.size(); i++)
{
if (!m_histogramMarkers.at(i).m_show) {
continue;
}
QPointF ypoint = m_histogramMarkers.at(i).m_point;
QString powerStr = m_histogramMarkers.at(i).m_powerStr;
@ -1307,6 +1314,10 @@ void GLSpectrum::drawMarkers()
// crosshairs
for (int i = 0; i < m_waterfallMarkers.size(); i++)
{
if (!m_waterfallMarkers.at(i).m_show) {
continue;
}
GLfloat h[] {
(float) m_waterfallMarkers.at(i).m_point.x(), 0,
(float) m_waterfallMarkers.at(i).m_point.x(), 1
@ -1317,10 +1328,10 @@ void GLSpectrum::drawMarkers()
1, (float) m_waterfallMarkers.at(i).m_point.y()
};
m_glShaderSimple.drawSegments(m_glWaterfallBoxMatrix, lineColor, v, 2);
}
// }
// text
for (int i = 0; i < m_waterfallMarkers.size(); i++)
{
// for (int i = 0; i < m_waterfallMarkers.size(); i++)
// {
QColor textColor = m_waterfallMarkers.at(i).m_markerColor;
textColor.setAlpha(192);

View File

@ -34,6 +34,7 @@
#include "gui/glshadertextured.h"
#include "gui/spectrummarkers.h"
#include "dsp/channelmarker.h"
#include "dsp/spectrumsettings.h"
#include "export.h"
#include "util/incrementalarray.h"
#include "util/message.h"
@ -162,6 +163,7 @@ public:
void setWaterfallMarkers(const QList<SpectrumWaterfallMarker>& waterfallMarkers);
void updateHistogramMarkers();
void updateWaterfallMarkers();
SpectrumSettings::MarkersDisplay& getMarkersDisplay() { return m_markersDisplay; }
private:
struct ChannelMarkerState {
@ -190,6 +192,7 @@ private:
QList<SpectrumHistogramMarker> m_histogramMarkers;
QList<SpectrumWaterfallMarker> m_waterfallMarkers;
SpectrumSettings::MarkersDisplay m_markersDisplay;
CursorState m_cursorState;
int m_cursorChannel;
@ -296,7 +299,7 @@ private:
void initializeGL();
void resizeGL(int width, int height);
void paintGL();
void drawMarkers();
void drawSpectrumMarkers();
void stopDrag();
void applyChanges();

View File

@ -343,6 +343,7 @@ void GLSpectrumGUI::on_markers_clicked(bool checked)
SpectrumMarkersDialog markersDialog(
m_glSpectrum->getHistogramMarkers(),
m_glSpectrum->getWaterfallMarkers(),
m_glSpectrum->getMarkersDisplay(),
this
);

View File

@ -41,6 +41,7 @@ struct SpectrumHistogramMarker
float m_powerMax;
SpectrumHistogramMarkerType m_markerType;
QColor m_markerColor;
bool m_show;
QString m_frequencyStr;
QString m_powerStr;
QString m_deltaFrequencyStr;
@ -56,6 +57,7 @@ struct SpectrumHistogramMarker
m_powerMax(0),
m_markerType(SpectrumHistogramMarkerTypeManual),
m_markerColor(QColorConstants::White),
m_show(true),
m_frequencyStr(),
m_powerStr(),
m_deltaFrequencyStr(),
@ -71,6 +73,7 @@ struct SpectrumHistogramMarker
float powerMax,
SpectrumHistogramMarkerType markerType,
QColor markerColor,
bool show,
const QString& frequencyStr,
const QString& powerStr,
const QString& deltaFrequencyStr,
@ -84,6 +87,7 @@ struct SpectrumHistogramMarker
m_powerMax(powerMax),
m_markerType(markerType),
m_markerColor(markerColor),
m_show(show),
m_frequencyStr(frequencyStr),
m_powerStr(powerStr),
m_deltaFrequencyStr(deltaFrequencyStr),
@ -100,6 +104,7 @@ struct SpectrumWaterfallMarker
float m_frequency;
float m_time;
QColor m_markerColor;
bool m_show;
QString m_frequencyStr;
QString m_timeStr;
QString m_deltaFrequencyStr;
@ -111,6 +116,7 @@ struct SpectrumWaterfallMarker
m_frequency(0),
m_time(0),
m_markerColor(QColorConstants::White),
m_show(true),
m_frequencyStr(),
m_timeStr(),
m_deltaFrequencyStr(),
@ -122,6 +128,7 @@ struct SpectrumWaterfallMarker
float frequency,
float time,
QColor markerColor,
bool show,
const QString& frequencyStr,
const QString& timeStr,
const QString& deltaFrequencyStr,
@ -131,6 +138,7 @@ struct SpectrumWaterfallMarker
m_frequency(frequency),
m_time(time),
m_markerColor(markerColor),
m_show(show),
m_frequencyStr(frequencyStr),
m_timeStr(timeStr),
m_deltaFrequencyStr(deltaFrequencyStr),

View File

@ -27,11 +27,13 @@
SpectrumMarkersDialog::SpectrumMarkersDialog(
QList<SpectrumHistogramMarker>& histogramMarkers,
QList<SpectrumWaterfallMarker>& waterfallMarkers,
SpectrumSettings::MarkersDisplay& markersDisplay,
QWidget* parent) :
QDialog(parent),
ui(new Ui::SpectrumMarkersDialog),
m_histogramMarkers(histogramMarkers),
m_waterfallMarkers(waterfallMarkers),
m_markersDisplay(markersDisplay),
m_histogramMarkerIndex(0),
m_waterfallMarkerIndex(0),
m_centerFrequency(0),
@ -44,6 +46,7 @@ SpectrumMarkersDialog::SpectrumMarkersDialog(
ui->wMarkerFrequency->setColorMapper(ColorMapper(ColorMapper::GrayGold));
ui->wMarkerFrequency->setValueRange(false, 10, -9999999999L, 9999999999L);
ui->wMarker->setMaximum(m_waterfallMarkers.size() - 1);
ui->showSelect->setCurrentIndex((int) m_markersDisplay);
displayHistogramMarker();
displayWaterfallMarker();
}
@ -59,6 +62,7 @@ void SpectrumMarkersDialog::displayHistogramMarker()
ui->markerFrequency->setEnabled(false);
ui->powerMode->setEnabled(false);
ui->fixedPower->setEnabled(false);
ui->showMarker->setEnabled(false);
ui->markerText->setText("-");
ui->fixedPower->setValue(0);
ui->fixedPowerText->setText(tr("0.0"));
@ -69,6 +73,7 @@ void SpectrumMarkersDialog::displayHistogramMarker()
ui->markerFrequency->setEnabled(true);
ui->powerMode->setEnabled(true);
ui->fixedPower->setEnabled(true);
ui->showMarker->setEnabled(true);
ui->markerText->setText(tr("%1").arg(m_histogramMarkerIndex));
ui->markerFrequency->setValue(m_histogramMarkers[m_histogramMarkerIndex].m_frequency);
ui->powerMode->setCurrentIndex((int) m_histogramMarkers[m_histogramMarkerIndex].m_markerType);
@ -78,6 +83,7 @@ void SpectrumMarkersDialog::displayHistogramMarker()
int r,g,b,a;
m_histogramMarkers[m_histogramMarkerIndex].m_markerColor.getRgb(&r, &g, &b, &a);
ui->markerColor->setStyleSheet(tr("QLabel { background-color : rgb(%1,%2,%3); }").arg(r).arg(g).arg(b));
ui->showMarker->setChecked(m_histogramMarkers[m_histogramMarkerIndex].m_show);
}
}
@ -90,6 +96,7 @@ void SpectrumMarkersDialog::displayWaterfallMarker()
ui->timeCoarse->setEnabled(false);
ui->timeFine->setEnabled(false);
ui->timeExp->setEnabled(false);
ui->wShowMarker->setEnabled(false);
ui->wMarkerText->setText("-");
ui->timeCoarse->setValue(0);
ui->timeFine->setValue(0);
@ -104,6 +111,7 @@ void SpectrumMarkersDialog::displayWaterfallMarker()
ui->timeCoarse->setEnabled(true);
ui->timeFine->setEnabled(true);
ui->timeExp->setEnabled(true);
ui->wShowMarker->setEnabled(true);
ui->wMarkerText->setText(tr("%1").arg(m_waterfallMarkerIndex));
ui->wMarkerFrequency->setValue(m_waterfallMarkers[m_waterfallMarkerIndex].m_frequency);
int r,g,b,a;
@ -175,6 +183,15 @@ void SpectrumMarkersDialog::on_markerColor_clicked()
}
}
void SpectrumMarkersDialog::on_showMarker_clicked(bool clicked)
{
if (m_histogramMarkers.size() == 0) {
return;
}
m_histogramMarkers[m_histogramMarkerIndex].m_show = clicked;
}
void SpectrumMarkersDialog::on_fixedPower_valueChanged(int value)
{
if (m_histogramMarkers.size() == 0) {
@ -247,7 +264,15 @@ void SpectrumMarkersDialog::on_powerMode_currentIndexChanged(int index)
return;
}
m_histogramMarkers[m_histogramMarkerIndex].m_markerType = (SpectrumHistogramMarkerType) index;
SpectrumHistogramMarkerType newType = (SpectrumHistogramMarkerType) index;
if ((m_histogramMarkers[m_histogramMarkerIndex].m_markerType != newType)
&& (newType == SpectrumHistogramMarkerTypePowerMax))
{
m_histogramMarkers[m_histogramMarkerIndex].m_holdReset = true;
}
m_histogramMarkers[m_histogramMarkerIndex].m_markerType = newType;
}
void SpectrumMarkersDialog::on_powerHoldReset_clicked()
@ -338,6 +363,15 @@ void SpectrumMarkersDialog::on_wMarkerColor_clicked()
}
}
void SpectrumMarkersDialog::on_wShowMarker_clicked(bool clicked)
{
if (m_waterfallMarkers.size() == 0) {
return;
}
m_waterfallMarkers[m_waterfallMarkerIndex].m_show = clicked;
}
void SpectrumMarkersDialog::on_wMarker_valueChanged(int value)
{
if (m_waterfallMarkers.size() == 0) {
@ -391,3 +425,8 @@ void SpectrumMarkersDialog::on_wMarkerDel_clicked()
ui->wMarker->setMaximum(m_waterfallMarkers.size() - 1);
displayWaterfallMarker();
}
void SpectrumMarkersDialog::on_showSelect_currentIndexChanged(int index)
{
m_markersDisplay = (SpectrumSettings::MarkersDisplay) index;
}

View File

@ -22,6 +22,7 @@
#include <QDialog>
#include <QList>
#include "dsp/spectrumsettings.h"
#include "gui/spectrummarkers.h"
#include "export.h"
@ -36,6 +37,7 @@ public:
explicit SpectrumMarkersDialog(
QList<SpectrumHistogramMarker>& histogramMarkers,
QList<SpectrumWaterfallMarker>& waterfallMarkers,
SpectrumSettings::MarkersDisplay& markersDisplay,
QWidget* parent = nullptr
);
~SpectrumMarkersDialog();
@ -47,6 +49,7 @@ private:
Ui::SpectrumMarkersDialog* ui;
QList<SpectrumHistogramMarker>& m_histogramMarkers;
QList<SpectrumWaterfallMarker>& m_waterfallMarkers;
SpectrumSettings::MarkersDisplay& m_markersDisplay;
int m_histogramMarkerIndex;
int m_waterfallMarkerIndex;
qint64 m_centerFrequency;
@ -62,6 +65,7 @@ private slots:
void on_markerFrequency_changed(qint64 value);
void on_centerFrequency_clicked();
void on_markerColor_clicked();
void on_showMarker_clicked(bool clicked);
void on_fixedPower_valueChanged(int value);
void on_marker_valueChanged(int value);
void on_setReference_clicked();
@ -75,10 +79,12 @@ private slots:
void on_timeExp_valueChanged(int value);
void on_wCenterFrequency_clicked();
void on_wMarkerColor_clicked();
void on_wShowMarker_clicked(bool clicked);
void on_wMarker_valueChanged(int value);
void on_wSetReference_clicked();
void on_wMarkerAdd_clicked();
void on_wMarkerDel_clicked();
void on_showSelect_currentIndexChanged(int index);
signals:
void updateHistogram();

View File

@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>418</width>
<height>201</height>
<height>237</height>
</rect>
</property>
<property name="font">
@ -158,6 +158,19 @@
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="showMarker">
<property name="toolTip">
<string>Show this marker</string>
</property>
<property name="text">
<string/>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</item>
<item>
@ -594,6 +607,19 @@
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="wShowMarker">
<property name="toolTip">
<string>Show this marker</string>
</property>
<property name="text">
<string/>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</item>
<item>
@ -963,6 +989,50 @@
</widget>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="commonLayout">
<property name="topMargin">
<number>6</number>
</property>
<item>
<widget class="QLabel" name="showLabel">
<property name="text">
<string>Show</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="showSelect">
<property name="toolTip">
<string>Select which set of markers to show</string>
</property>
<item>
<property name="text">
<string>None</string>
</property>
</item>
<item>
<property name="text">
<string>Spec</string>
</property>
</item>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_5">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">