diff --git a/sdrbase/dsp/scopevisng.cpp b/sdrbase/dsp/scopevisng.cpp index e210bf55a..0308fd9d9 100644 --- a/sdrbase/dsp/scopevisng.cpp +++ b/sdrbase/dsp/scopevisng.cpp @@ -88,7 +88,8 @@ void ScopeVisNG::changeTrace(const TraceData& traceData, uint32_t traceIndex) qDebug() << "ScopeVisNG::changeTrace:" << " trace: " << traceIndex << " m_amp: " << traceData.m_amp - << " m_ofs: " << traceData.m_ofs; + << " m_ofs: " << traceData.m_ofs + << " m_traceDelay: " << traceData.m_traceDelay; Message* cmd = MsgScopeVisNGChangeTrace::create(traceData, traceIndex); getInputMessageQueue()->push(cmd); } diff --git a/sdrbase/dsp/scopevisng.h b/sdrbase/dsp/scopevisng.h index 20d0280d2..81d031934 100644 --- a/sdrbase/dsp/scopevisng.h +++ b/sdrbase/dsp/scopevisng.h @@ -57,7 +57,8 @@ public: int m_ofsCoarse; //!< Coarse offset slider value int m_ofsFine; //!< Fine offset slider value int m_traceDelay; //!< Trace delay in number of samples - int m_traceDelayValue; //!< Trace delay slider value + int m_traceDelayCoarse; //!< Coarse delay slider value + int m_traceDelayFine; //!< Fine delay slider value float m_triggerDisplayLevel; //!< Displayable trigger display level in -1:+1 scale. Off scale if not displayable. QColor m_traceColor; //!< Trace display color float m_traceColorR; //!< Trace display color - red shortcut @@ -73,7 +74,8 @@ public: m_ofsCoarse(0), m_ofsFine(0), m_traceDelay(0), - m_traceDelayValue(0), + m_traceDelayCoarse(0), + m_traceDelayFine(0), m_triggerDisplayLevel(2.0), // OVer scale by default (2.0) m_traceColor(255,255,64) { diff --git a/sdrbase/gui/glscopenggui.cpp b/sdrbase/gui/glscopenggui.cpp index 874f9c11a..f95120c17 100644 --- a/sdrbase/gui/glscopenggui.cpp +++ b/sdrbase/gui/glscopenggui.cpp @@ -113,6 +113,7 @@ void GLScopeNGGUI::setBuddies(MessageQueue* messageQueue, ScopeVisNG* scopeVis, setTimeOfsDisplay(); setAmpScaleDisplay(); setAmpOfsDisplay(); + setTraceDelayDisplay(); } void GLScopeNGGUI::setSampleRate(int sampleRate) @@ -128,6 +129,7 @@ void GLScopeNGGUI::on_scope_sampleRateChanged(int sampleRate) setTraceLenDisplay(); setTimeScaleDisplay(); setTimeOfsDisplay(); + setTraceDelayDisplay(); } void GLScopeNGGUI::resetToDefaults() @@ -236,6 +238,7 @@ void GLScopeNGGUI::on_time_valueChanged(int value) { m_timeBase = value; setTimeScaleDisplay(); + setTraceDelayDisplay(); m_glScope->setTimeBase(m_timeBase); } @@ -395,9 +398,16 @@ void GLScopeNGGUI::on_ofsFine_valueChanged(int value) changeCurrentTrace(); } -void GLScopeNGGUI::on_traceDelay_valueChanged(int value) +void GLScopeNGGUI::on_traceDelayCoarse_valueChanged(int value) { - // TODO + setTraceDelayDisplay(); + changeCurrentTrace(); +} + +void GLScopeNGGUI::on_traceDelayFine_valueChanged(int value) +{ + setTraceDelayDisplay(); + changeCurrentTrace(); } void GLScopeNGGUI::on_traceColor_clicked() @@ -671,6 +681,29 @@ void GLScopeNGGUI::setAmpOfsDisplay() } } +void GLScopeNGGUI::setTraceDelayDisplay() +{ + int n_samples = ui->traceDelayCoarse->value()*100 + ui->traceDelayFine->value(); + double t = ((double) n_samples) / m_sampleRate; + + if (n_samples < 1000) { + ui->traceDelayText->setToolTip(tr("%1 S").arg(n_samples)); + } else if (n_samples < 1000000) { + ui->traceDelayText->setToolTip(tr("%1 kS").arg(n_samples/1000.0)); + } else { + ui->traceDelayText->setToolTip(tr("%1 MS").arg(n_samples/1000000.0)); + } + + if(t < 0.000001) + ui->traceDelayText->setText(tr("%1\nns").arg(t * 1000000000.0, 0, 'f', 2)); + else if(t < 0.001) + ui->traceDelayText->setText(tr("%1\nµs").arg(t * 1000000.0, 0, 'f', 2)); + else if(t < 1.0) + ui->traceDelayText->setText(tr("%1\nms").arg(t * 1000.0, 0, 'f', 2)); + else + ui->traceDelayText->setText(tr("%1\ns").arg(t * 1.0, 0, 'f', 2)); +} + void GLScopeNGGUI::setTrigIndexDisplay() { ui->trigText->setText(tr("%1").arg(ui->trig->value())); @@ -782,8 +815,6 @@ void GLScopeNGGUI::fillTraceData(ScopeVisNG::TraceData& traceData) traceData.m_inputIndex = 0; traceData.m_amp = 0.2 / amps[ui->amp->value()]; traceData.m_ampIndex = ui->amp->value(); - traceData.m_traceDelay = 0; // TODO - traceData.m_traceDelayValue = 0; // TODO traceData.m_ofsCoarse = ui->ofsCoarse->value(); traceData.m_ofsFine = ui->ofsFine->value(); @@ -794,6 +825,10 @@ void GLScopeNGGUI::fillTraceData(ScopeVisNG::TraceData& traceData) traceData.m_ofs = ((10.0 * ui->ofsCoarse->value()) + (ui->ofsFine->value() / 20.0)) / 1000.0f; } + traceData.m_traceDelayCoarse = ui->traceDelayCoarse->value(); + traceData.m_traceDelayFine = ui->traceDelayFine->value(); + traceData.m_traceDelay = traceData.m_traceDelayCoarse * 100 + traceData.m_traceDelayFine; + traceData.setColor(m_focusedTraceColor); } @@ -816,14 +851,15 @@ void GLScopeNGGUI::fillTriggerData(ScopeVisNG::TriggerData& triggerData) void GLScopeNGGUI::setTraceUI(ScopeVisNG::TraceData& traceData) { - bool oldStateTraceMode = ui->traceMode->blockSignals(true); - bool oldStateAmp = ui->amp->blockSignals(true); - bool oldStateOfsCoarse = ui->ofsCoarse->blockSignals(true); - bool oldStateOfsFine = ui->ofsFine->blockSignals(true); - bool oldStateTraceDelay = ui->traceDelay->blockSignals(true); - bool oldStateZSelect = ui->zSelect->blockSignals(true); - bool oldStateZTraceMode = ui->zTraceMode->blockSignals(true); - bool oldStateTraceColor = ui->traceColor->blockSignals(true); + bool oldStateTraceMode = ui->traceMode->blockSignals(true); + bool oldStateAmp = ui->amp->blockSignals(true); + bool oldStateOfsCoarse = ui->ofsCoarse->blockSignals(true); + bool oldStateOfsFine = ui->ofsFine->blockSignals(true); + bool oldStateTraceDelayCoarse = ui->traceDelayCoarse->blockSignals(true); + bool oldStateTraceDelayFine = ui->traceDelayFine->blockSignals(true); + bool oldStateZSelect = ui->zSelect->blockSignals(true); + bool oldStateZTraceMode = ui->zTraceMode->blockSignals(true); + bool oldStateTraceColor = ui->traceColor->blockSignals(true); ui->traceMode->setCurrentIndex((int) traceData.m_projectionType); ui->amp->setValue(traceData.m_ampIndex); @@ -833,8 +869,9 @@ void GLScopeNGGUI::setTraceUI(ScopeVisNG::TraceData& traceData) ui->ofsFine->setValue(traceData.m_ofsFine); setAmpOfsDisplay(); - ui->traceDelay->setValue(traceData.m_traceDelayValue); - // TODO: set trace delay display + ui->traceDelayCoarse->setValue(traceData.m_traceDelayCoarse); + ui->traceDelayFine->setValue(traceData.m_traceDelayFine); + setTraceDelayDisplay(); m_focusedTraceColor = traceData.m_traceColor; int r, g, b, a; @@ -845,7 +882,8 @@ void GLScopeNGGUI::setTraceUI(ScopeVisNG::TraceData& traceData) ui->amp->blockSignals(oldStateAmp); ui->ofsCoarse->blockSignals(oldStateOfsCoarse); ui->ofsFine->blockSignals(oldStateOfsFine); - ui->traceDelay->blockSignals(oldStateTraceDelay); + ui->traceDelayCoarse->blockSignals(oldStateTraceDelayCoarse); + ui->traceDelayFine->blockSignals(oldStateTraceDelayFine); ui->zSelect->blockSignals(oldStateZSelect); ui->zTraceMode->blockSignals(oldStateZTraceMode); ui->traceColor->blockSignals(oldStateTraceColor); diff --git a/sdrbase/gui/glscopenggui.h b/sdrbase/gui/glscopenggui.h index fae6a219d..3a51c9048 100644 --- a/sdrbase/gui/glscopenggui.h +++ b/sdrbase/gui/glscopenggui.h @@ -74,6 +74,7 @@ private: // Second row void setAmpScaleDisplay(); void setAmpOfsDisplay(); + void setTraceDelayDisplay(); // Third row void setTrigIndexDisplay(); void setTrigCountDisplay(); @@ -112,7 +113,8 @@ private slots: void on_amp_valueChanged(int value); void on_ofsCoarse_valueChanged(int value); void on_ofsFine_valueChanged(int value); - void on_traceDelay_valueChanged(int value); + void on_traceDelayCoarse_valueChanged(int value); + void on_traceDelayFine_valueChanged(int value); void on_traceColor_clicked(); // Third row void on_trig_valueChanged(int value); diff --git a/sdrbase/gui/glscopenggui.ui b/sdrbase/gui/glscopenggui.ui index 379bd67ec..3d0f01c2d 100644 --- a/sdrbase/gui/glscopenggui.ui +++ b/sdrbase/gui/glscopenggui.ui @@ -407,7 +407,7 @@ 1 - 100 + 20 1 @@ -833,7 +833,7 @@ kS/s - 32 + 40 0 @@ -846,17 +846,49 @@ kS/s - - - 100 + + + 2 - - 1 + + 0 - - Qt::Horizontal + + 0 - + + 0 + + + 0 + + + + + 48 + + + 1 + + + Qt::Horizontal + + + + + + + 100 + + + 1 + + + Qt::Horizontal + + + +