diff --git a/sdrgui/CMakeLists.txt b/sdrgui/CMakeLists.txt index 057ca5d4e..f0acfef6a 100644 --- a/sdrgui/CMakeLists.txt +++ b/sdrgui/CMakeLists.txt @@ -59,6 +59,7 @@ set(sdrgui_SOURCES gui/scaleengine.cpp gui/scaledimage.cpp gui/sdrangelsplash.cpp + gui/spectrummarkersdialog.cpp gui/tickedslider.cpp gui/transverterbutton.cpp gui/transverterdialog.cpp @@ -148,6 +149,7 @@ set(sdrgui_HEADERS gui/scaledimage.h gui/sdrangelsplash.h gui/spectrummarkers.h + gui/spectrummarkersdialog.h gui/tickedslider.h gui/transverterbutton.h gui/transverterdialog.h @@ -205,6 +207,7 @@ set(sdrgui_FORMS gui/audioselectdialog.ui gui/samplingdevicecontrol.ui gui/samplingdevicedialog.ui + gui/spectrummarkersdialog.ui gui/myposdialog.ui gui/transverterdialog.ui gui/loggingdialog.ui diff --git a/sdrgui/gui/glspectrum.cpp b/sdrgui/gui/glspectrum.cpp index f3b8f8dd1..e72863d4f 100644 --- a/sdrgui/gui/glspectrum.cpp +++ b/sdrgui/gui/glspectrum.cpp @@ -28,6 +28,7 @@ #include "dsp/spectrumvis.h" #include "gui/glspectrum.h" #include "util/messagequeue.h" +#include "util/db.h" #include @@ -417,6 +418,31 @@ void GLSpectrum::removeChannelMarker(ChannelMarker* channelMarker) m_mutex.unlock(); } +void GLSpectrum::setHistogramMarkers(const QList& histogramMarkers) +{ + m_mutex.lock(); + m_histogramMarkers = histogramMarkers; + updateHistogramMarkers(); + m_changesPending = true; + m_mutex.unlock(); + update(); +} + +void GLSpectrum::setWaterfallMarkers(const QList& waterfallMarkers) +{ + m_mutex.lock(); + m_waterfallMarkers = waterfallMarkers; + updateWaterfallMarkers(); + m_changesPending = true; + m_mutex.unlock(); + update(); +} + +float GLSpectrum::getPowerMax() const +{ + return m_linear ? m_powerScale.getRangeMax() : CalcDb::powerFromdB(m_powerScale.getRangeMax()); +} + void GLSpectrum::newSpectrum(const Real *spectrum, int nbBins, int fftSize) { QMutexLocker mutexLocker(&m_mutex); @@ -1197,10 +1223,10 @@ void GLSpectrum::drawMarkers() { float power0 = m_histogramMarkers.at(0).m_markerType == SpectrumHistogramMarkerTypePower ? m_currentSpectrum[m_histogramMarkers.at(0).m_fftBin] : - m_histogramMarkers.at(0).m_power; + m_linear ? m_histogramMarkers.at(0).m_power : CalcDb::dbPower(m_histogramMarkers.at(0).m_power); float poweri = m_histogramMarkers.at(i).m_markerType == SpectrumHistogramMarkerTypePower ? m_currentSpectrum[m_histogramMarkers.at(i).m_fftBin] : - m_histogramMarkers.at(i).m_power; + m_linear ? m_histogramMarkers.at(i).m_power : CalcDb::dbPower(m_histogramMarkers.at(i).m_power); QString deltaPowerStr = displayScaledF( poweri - power0, m_linear ? 'e' : 'f', @@ -1979,25 +2005,88 @@ void GLSpectrum::applyChanges() m_q3TickTime.allocate(4*m_timeScale.getTickList().count()); m_q3TickFrequency.allocate(4*m_frequencyScale.getTickList().count()); m_q3TickPower.allocate(4*m_powerScale.getTickList().count()); + updateHistogramMarkers(); + updateWaterfallMarkers(); +} // applyChanges - // Histogram markers +void GLSpectrum::updateHistogramMarkers() +{ for (int i = 0; i < m_histogramMarkers.size(); i++) { + float powerI = m_linear ? m_histogramMarkers[i].m_power : CalcDb::dbPower(m_histogramMarkers[i].m_power); m_histogramMarkers[i].m_point.rx() = (m_histogramMarkers[i].m_frequency - m_frequencyScale.getRangeMin()) / m_frequencyScale.getRange(); m_histogramMarkers[i].m_point.ry() = - (m_powerScale.getRangeMax() - m_histogramMarkers[i].m_power) / m_powerScale.getRange(); + (m_powerScale.getRangeMax() - powerI) / m_powerScale.getRange(); m_histogramMarkers[i].m_fftBin = (((m_histogramMarkers[i].m_frequency - m_centerFrequency) / (float) m_sampleRate) * m_fftSize) + (m_fftSize / 2); - } + m_histogramMarkers[i].m_frequencyStr = displayScaled( + m_histogramMarkers[i].m_frequency, + 'f', + getPrecision((m_centerFrequency*1000)/m_sampleRate), + false); + m_histogramMarkers[i].m_powerStr = displayScaledF( + powerI, + m_linear ? 'e' : 'f', + m_linear ? 3 : 1, + false); - // Waterfall markers + if (i > 0) + { + int64_t deltaFrequency = m_histogramMarkers.at(i).m_frequency - m_histogramMarkers.at(0).m_frequency; + m_histogramMarkers.back().m_deltaFrequencyStr = displayScaled( + deltaFrequency, + 'f', + getPrecision(deltaFrequency/m_sampleRate), + true); + float power0 = m_linear ? + m_histogramMarkers.at(0).m_power : + CalcDb::dbPower(m_histogramMarkers.at(0).m_power); + float powerI = m_linear ? + m_histogramMarkers.at(i).m_power : + CalcDb::dbPower(m_histogramMarkers.at(i).m_power); + m_histogramMarkers.back().m_deltaPowerStr = displayScaledF( + powerI - power0, + m_linear ? 'e' : 'f', + m_linear ? 3 : 1, + false); + } + } +} + +void GLSpectrum::updateWaterfallMarkers() +{ for (int i = 0; i < m_waterfallMarkers.size(); i++) { m_waterfallMarkers[i].m_point.rx() = (m_waterfallMarkers[i].m_frequency - m_frequencyScale.getRangeMin()) / m_frequencyScale.getRange(); m_waterfallMarkers[i].m_point.ry() = (m_waterfallMarkers[i].m_time - m_timeScale.getRangeMin()) / m_timeScale.getRange(); + m_waterfallMarkers[i].m_frequencyStr = displayScaled( + m_waterfallMarkers[i].m_frequency, + 'f', + getPrecision((m_centerFrequency*1000)/m_sampleRate), + false); + m_waterfallMarkers[i].m_timeStr = displayScaledF( + m_waterfallMarkers[i].m_time, + 'f', + 3, + true); + + if (i > 0) + { + int64_t deltaFrequency = m_waterfallMarkers.at(i).m_frequency - m_waterfallMarkers.at(0).m_frequency; + m_waterfallMarkers.back().m_deltaFrequencyStr = displayScaled( + deltaFrequency, + 'f', + getPrecision(deltaFrequency/m_sampleRate), + true); + m_waterfallMarkers.back().m_deltaTimeStr = displayScaledF( + m_waterfallMarkers.at(i).m_time - m_waterfallMarkers.at(0).m_time, + 'f', + 3, + true); + } } } @@ -2171,12 +2260,13 @@ void GLSpectrum::mousePressEvent(QMouseEvent* event) pHis.rx() = (ep.x()/width() - m_histogramRect.left()) / m_histogramRect.width(); pHis.ry() = (ep.y()/height() - m_histogramRect.top()) / m_histogramRect.height(); float frequency = m_frequencyScale.getRangeMin() + pHis.x()*m_frequencyScale.getRange(); - float power = m_powerScale.getRangeMax() - pHis.y()*m_powerScale.getRange(); + float powerVal = m_powerScale.getRangeMax() - pHis.y()*m_powerScale.getRange(); + float power = m_linear ? powerVal : CalcDb::powerFromdB(powerVal); int fftBin = (((frequency - m_centerFrequency) / (float) m_sampleRate) * m_fftSize) + (m_fftSize / 2); if ((pHis.x() >= 0) && (pHis.x() <= 1) && (pHis.y() >= 0) && (pHis.y() <= 1)) { - if (m_histogramMarkers.size() < 2) + if (m_histogramMarkers.size() < SpectrumHistogramMarker::m_maxNbOfMarkers) { m_histogramMarkers.push_back(SpectrumHistogramMarker()); m_histogramMarkers.back().m_point = pHis; @@ -2189,7 +2279,7 @@ void GLSpectrum::mousePressEvent(QMouseEvent* event) false); m_histogramMarkers.back().m_power = power; m_histogramMarkers.back().m_powerStr = displayScaledF( - power, + powerVal, m_linear ? 'e' : 'f', m_linear ? 3 : 1, false); @@ -2202,8 +2292,11 @@ void GLSpectrum::mousePressEvent(QMouseEvent* event) 'f', getPrecision(deltaFrequency/m_sampleRate), true); + float power0 = m_linear ? + m_histogramMarkers.at(0).m_power : + CalcDb::dbPower(m_histogramMarkers.at(0).m_power); m_histogramMarkers.back().m_deltaPowerStr = displayScaledF( - power - m_histogramMarkers.at(0).m_power, + power - power0, m_linear ? 'e' : 'f', m_linear ? 3 : 1, false); @@ -2221,7 +2314,7 @@ void GLSpectrum::mousePressEvent(QMouseEvent* event) if ((pWat.x() >= 0) && (pWat.x() <= 1) && (pWat.y() >= 0) && (pWat.y() <= 1)) { - if (m_waterfallMarkers.size() < 2) + if (m_waterfallMarkers.size() < SpectrumWaterfallMarker::m_maxNbOfMarkers) { m_waterfallMarkers.push_back(SpectrumWaterfallMarker()); m_waterfallMarkers.back().m_point = pWat; diff --git a/sdrgui/gui/glspectrum.h b/sdrgui/gui/glspectrum.h index e8b547963..6318001ec 100644 --- a/sdrgui/gui/glspectrum.h +++ b/sdrgui/gui/glspectrum.h @@ -113,6 +113,8 @@ public: virtual ~GLSpectrum(); void setCenterFrequency(qint64 frequency); + qint64 getCenterFrequency() const { return m_centerFrequency; } + float getPowerMax() const; void setSampleRate(qint32 sampleRate); void setTimingRate(qint32 timingRate); void setFFTOverlap(int overlap); @@ -151,6 +153,10 @@ public: m_displayStreamIndex = streamIndex; } void setSpectrumVis(SpectrumVis *spectrumVis) { m_spectrumVis = spectrumVis; } + const QList& getHistogramMarkers() const { return m_histogramMarkers; } + void setHistogramMarkers(const QList& histogramMarkers); + const QList& getWaterfallMarkers() const { return m_waterfallMarkers; } + void setWaterfallMarkers(const QList& waterfallMarkers); private: struct ChannelMarkerState { @@ -321,6 +327,8 @@ private: bool topHalf, const QRectF& glRect); void formatTextInfo(QString& info); + void updateHistogramMarkers(); + void updateWaterfallMarkers(); private slots: void cleanup(); diff --git a/sdrgui/gui/glspectrumgui.cpp b/sdrgui/gui/glspectrumgui.cpp index ebf781ac2..c007b653c 100644 --- a/sdrgui/gui/glspectrumgui.cpp +++ b/sdrgui/gui/glspectrumgui.cpp @@ -28,6 +28,7 @@ #include "gui/glspectrum.h" #include "gui/crightclickenabler.h" #include "gui/wsspectrumsettingsdialog.h" +#include "gui/spectrummarkersdialog.h" #include "util/simpleserializer.h" #include "util/db.h" #include "ui_glspectrumgui.h" @@ -331,6 +332,32 @@ void GLSpectrumGUI::on_wsSpectrum_toggled(bool checked) } } +void GLSpectrumGUI::on_markers_clicked(bool checked) +{ + (void) checked; + + if (!m_glSpectrum) { + return; + } + + QList histogramMarkers = m_glSpectrum->getHistogramMarkers(); + QList waterfallMarkers = m_glSpectrum->getWaterfallMarkers(); + SpectrumMarkersDialog markersDialog(histogramMarkers, waterfallMarkers, this); + markersDialog.setCenterFrequency(m_glSpectrum->getCenterFrequency()); + markersDialog.setPower(m_glSpectrum->getPowerMax() / 2.0f); + + if (markersDialog.exec() == QDialog::Accepted) + { + if (markersDialog.histogramMarkersChanged()) { + m_glSpectrum->setHistogramMarkers(histogramMarkers); + } + + if (markersDialog.waterfallMarkersChanged()) { + m_glSpectrum->setWaterfallMarkers(waterfallMarkers); + } + } +} + void GLSpectrumGUI::on_refLevel_valueChanged(int value) { m_settings.m_refLevel = value; diff --git a/sdrgui/gui/glspectrumgui.h b/sdrgui/gui/glspectrumgui.h index 5291d1f12..f8e0aba26 100644 --- a/sdrgui/gui/glspectrumgui.h +++ b/sdrgui/gui/glspectrumgui.h @@ -98,6 +98,7 @@ private slots: void on_averaging_currentIndexChanged(int index); void on_linscale_toggled(bool checked); void on_wsSpectrum_toggled(bool checked); + void on_markers_clicked(bool checked); void on_waterfall_toggled(bool checked); void on_histogram_toggled(bool checked); diff --git a/sdrgui/gui/glspectrumgui.ui b/sdrgui/gui/glspectrumgui.ui index 53f03277c..9c2de1ddc 100644 --- a/sdrgui/gui/glspectrumgui.ui +++ b/sdrgui/gui/glspectrumgui.ui @@ -553,6 +553,21 @@ + + + + Open spectrum markers dialog + + + + :/gridpolar.png + + + + true + + + diff --git a/sdrgui/gui/spectrummarkers.h b/sdrgui/gui/spectrummarkers.h index bd35621a6..a7f5118b1 100644 --- a/sdrgui/gui/spectrummarkers.h +++ b/sdrgui/gui/spectrummarkers.h @@ -40,6 +40,7 @@ struct SpectrumHistogramMarker QString m_powerStr; QString m_deltaFrequencyStr; QString m_deltaPowerStr; + static const int m_maxNbOfMarkers = 4; SpectrumHistogramMarker() : m_point(0, 0), @@ -88,6 +89,7 @@ struct SpectrumWaterfallMarker QString m_timeStr; QString m_deltaFrequencyStr; QString m_deltaTimeStr; + static const int m_maxNbOfMarkers = 4; SpectrumWaterfallMarker() : m_point(0, 0), diff --git a/sdrgui/gui/spectrummarkersdialog.cpp b/sdrgui/gui/spectrummarkersdialog.cpp new file mode 100644 index 000000000..52f896c1a --- /dev/null +++ b/sdrgui/gui/spectrummarkersdialog.cpp @@ -0,0 +1,148 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2021 F4EXB // +// written by Edouard Griffiths // +// // +// This program is free software; you can redistribute it and/or modify // +// it under the terms of the GNU General Public License as published by // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "util/db.h" +#include "spectrummarkersdialog.h" + +#include "ui_spectrummarkersdialog.h" + + +SpectrumMarkersDialog::SpectrumMarkersDialog( + QList& histogramMarkers, + QList& waterfallMarkers, + QWidget* parent) : + QDialog(parent), + ui(new Ui::SpectrumMarkersDialog), + m_histogramMarkers(histogramMarkers), + m_waterfallMarkers(waterfallMarkers), + m_histogramMarkersChanged(false), + m_waterfallMarkersChanged(false), + m_histogramMarkerIndex(0), + m_centerFrequency(0), + m_power(0.5f) +{ + ui->setupUi(this); + ui->markerFrequency->setColorMapper(ColorMapper(ColorMapper::GrayGold)); + ui->markerFrequency->setValueRange(false, 10, -9999999999L, 9999999999L); + ui->marker->setMaximum(m_histogramMarkers.size() - 1); + displayHistogramMarker(); +} + +SpectrumMarkersDialog::~SpectrumMarkersDialog() +{} + +void SpectrumMarkersDialog::displayHistogramMarker() +{ + if (m_histogramMarkers.size() == 0) + { + ui->markerText->setText("-"); + ui->marker->setEnabled(false); + ui->markerFrequency->setEnabled(false); + ui->fixedPower->setEnabled(false); + ui->fixedPower->setValue(0); + ui->fixedPowerText->setText(tr("0.0")); + } + else + { + ui->marker->setEnabled(true); + ui->markerFrequency->setEnabled(true); + ui->markerText->setText(tr("%1").arg(m_histogramMarkerIndex)); + ui->markerFrequency->setValue(m_histogramMarkers[m_histogramMarkerIndex].m_frequency); + float powerDB = CalcDb::dbPower(m_histogramMarkers[m_histogramMarkerIndex].m_power); + ui->fixedPower->setEnabled(true); + ui->fixedPower->setValue(powerDB*10); + ui->fixedPowerText->setText(QString::number(powerDB, 'f', 1)); + } +} + +void SpectrumMarkersDialog::accept() +{ + QDialog::accept(); +} + +void SpectrumMarkersDialog::reject() +{ + m_histogramMarkersChanged = false; + m_waterfallMarkersChanged = false; + QDialog::reject(); +} + +void SpectrumMarkersDialog::on_markerFrequency_changed(qint64 value) +{ + if (m_histogramMarkers.size() == 0) { + return; + } + + m_histogramMarkers[m_histogramMarkerIndex].m_frequency = value; + m_histogramMarkersChanged = true; +} + +void SpectrumMarkersDialog::on_fixedPower_valueChanged(int value) +{ + if (m_histogramMarkers.size() == 0) { + return; + } + + float powerDB = value / 10.0f; + ui->fixedPowerText->setText(QString::number(powerDB, 'f', 1)); + m_histogramMarkers[m_histogramMarkerIndex].m_power = CalcDb::powerFromdB(powerDB); + m_histogramMarkersChanged = true; +} + +void SpectrumMarkersDialog::on_marker_valueChanged(int value) +{ + if (m_histogramMarkers.size() == 0) { + return; + } + + m_histogramMarkerIndex = value; + displayHistogramMarker(); +} + +void SpectrumMarkersDialog::on_markerAdd_clicked(bool checked) +{ + (void) checked; + + if (m_histogramMarkers.size() == SpectrumHistogramMarker::m_maxNbOfMarkers) { + return; + } + + m_histogramMarkers.append(SpectrumHistogramMarker()); + m_histogramMarkers.back().m_frequency = m_centerFrequency; + m_histogramMarkers.back().m_power = m_power; + m_histogramMarkerIndex = m_histogramMarkers.size() - 1; + ui->marker->setMaximum(m_histogramMarkers.size() - 1); + displayHistogramMarker(); + m_histogramMarkersChanged = true; +} + +void SpectrumMarkersDialog::on_markerDel_clicked(bool checked) +{ + (void) checked; + + if (m_histogramMarkers.size() == 0) { + return; + } + + m_histogramMarkers.removeAt(m_histogramMarkerIndex); + m_histogramMarkerIndex = m_histogramMarkerIndex < m_histogramMarkers.size() ? + m_histogramMarkerIndex : m_histogramMarkerIndex - 1; + ui->marker->setMaximum(m_histogramMarkers.size() - 1); + displayHistogramMarker(); + m_histogramMarkersChanged = true; +} diff --git a/sdrgui/gui/spectrummarkersdialog.h b/sdrgui/gui/spectrummarkersdialog.h new file mode 100644 index 000000000..8a0e5150f --- /dev/null +++ b/sdrgui/gui/spectrummarkersdialog.h @@ -0,0 +1,69 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2021 F4EXB // +// written by Edouard Griffiths // +// // +// This program is free software; you can redistribute it and/or modify // +// it under the terms of the GNU General Public License as published by // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#ifndef SDRBASE_GUI_SPECTRUMMARKERSDIALOG_H_ +#define SDRBASE_GUI_SPECTRUMMARKERSDIALOG_H_ + +#include +#include + +#include "gui/spectrummarkers.h" +#include "export.h" + +namespace Ui { + class SpectrumMarkersDialog; +} + +class SDRGUI_API SpectrumMarkersDialog : public QDialog { + Q_OBJECT + +public: + explicit SpectrumMarkersDialog( + QList& histogramMarkers, + QList& waterfallMarkers, + QWidget* parent = nullptr + ); + ~SpectrumMarkersDialog(); + bool histogramMarkersChanged() const { return m_histogramMarkersChanged; } + bool waterfallMarkersChanged() const { return m_waterfallMarkersChanged; } + void setCenterFrequency(qint64 centerFrequency) { m_centerFrequency = centerFrequency; } + void setPower(float power) { m_power = power; } + +private: + Ui::SpectrumMarkersDialog* ui; + QList& m_histogramMarkers; + QList& m_waterfallMarkers; + bool m_histogramMarkersChanged; + bool m_waterfallMarkersChanged; + int m_histogramMarkerIndex; + qint64 m_centerFrequency; + float m_power; + + void displayHistogramMarker(); + +private slots: + void on_markerFrequency_changed(qint64 value); + void on_fixedPower_valueChanged(int value); + void on_marker_valueChanged(int value); + void on_markerAdd_clicked(bool checked); + void on_markerDel_clicked(bool checked); + void accept(); + void reject(); +}; + +#endif // SDRBASE_GUI_SPECTRUMMARKERSDIALOG_H_ diff --git a/sdrgui/gui/spectrummarkersdialog.ui b/sdrgui/gui/spectrummarkersdialog.ui new file mode 100644 index 000000000..f19440aed --- /dev/null +++ b/sdrgui/gui/spectrummarkersdialog.ui @@ -0,0 +1,434 @@ + + + SpectrumMarkersDialog + + + + 0 + 0 + 324 + 125 + + + + + Liberation Sans + 9 + + + + Spectrum Markers + + + + + + + + + + F + + + + + + + + 0 + 0 + + + + + 32 + 16 + + + + + DejaVu Sans Mono + 12 + + + + PointingHandCursor + + + Qt::StrongFocus + + + Transverter delta frequency (Hz) + + + + + + + + 0 + 0 + + + + + 32 + 16 + + + + PointingHandCursor + + + Qt::StrongFocus + + + Marker frequency (Hz) + + + Hz + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + 24 + 0 + + + + Mk + + + + + + + + 15 + 0 + + + + 0 + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + + + 24 + 24 + + + + Marker index (0 is reference) + + + 0 + + + 1 + + + + + + + 0 + + + + + + 18 + 18 + + + + + + + + + 255 + 255 + 255 + + + + + + + + + 255 + 255 + 255 + + + + + + + + + 190 + 190 + 190 + + + + + + + + + Liberation Sans + 10 + + + + Add a new Y trace + + + + + + + + + + + + 18 + 18 + + + + + + + + + 255 + 255 + 255 + + + + + + + + + 255 + 255 + 255 + + + + + + + + + 190 + 190 + 190 + + + + + + + + + Liberation Sans + 10 + + + + Remove current Y trace + + + - + + + + + + + + + + 15 + 0 + + + + P + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + + + 60 + 16777215 + + + + + Man + + + + + Pow + + + + + + + + + 24 + 24 + + + + Fixed power (dB) + + + -1500 + + + 1500 + + + 1 + + + + + + + + 32 + 0 + + + + -100.0 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + ValueDialZ + QWidget +
gui/valuedialz.h
+ 1 +
+
+ + buttonBox + + + + + + + buttonBox + accepted() + SpectrumMarkersDialog + accept() + + + 257 + 194 + + + 157 + 203 + + + + + buttonBox + rejected() + SpectrumMarkersDialog + reject() + + + 314 + 194 + + + 286 + 203 + + + + +