diff --git a/sdrbase/dsp/scopevisng.cpp b/sdrbase/dsp/scopevisng.cpp index 25189c9f2..41a75d3db 100644 --- a/sdrbase/dsp/scopevisng.cpp +++ b/sdrbase/dsp/scopevisng.cpp @@ -538,6 +538,10 @@ bool ScopeVisNG::handleMessage(const Message& message) << " m_preTriggerDelay: " << m_preTriggerDelay << " m_freeRun: " << m_freeRun; + if ((m_glScope) && (m_currentTraceMemoryIndex > 0)) { + processMemoryTrace(); + } + return true; } else if (MsgScopeVisNGAddTrigger::match(message)) @@ -562,7 +566,7 @@ bool ScopeVisNG::handleMessage(const Message& message) { computeDisplayTriggerLevels(); m_glScope->setFocusedTriggerData(m_triggerConditions[m_focusedTriggerIndex].m_triggerData); - m_glScope->updateDisplay(); + updateGLScopeDisplay(); } } @@ -590,7 +594,7 @@ bool ScopeVisNG::handleMessage(const Message& message) m_focusedTriggerIndex = triggerIndex; computeDisplayTriggerLevels(); m_glScope->setFocusedTriggerData(m_triggerConditions[m_focusedTriggerIndex].m_triggerData); - m_glScope->updateDisplay(); + updateGLScopeDisplay(); } return true; @@ -603,7 +607,7 @@ bool ScopeVisNG::handleMessage(const Message& message) initTraceBuffers(); updateMaxTraceDelay(); computeDisplayTriggerLevels(); - m_glScope->updateDisplay(); + updateGLScopeDisplay(); return true; } else if (MsgScopeVisNGChangeTrace::match(message)) @@ -614,7 +618,7 @@ bool ScopeVisNG::handleMessage(const Message& message) m_traces.changeTrace(conf.getTraceData(), conf.getTraceIndex()); updateMaxTraceDelay(); if (doComputeTriggerLevelsOnDisplay) computeDisplayTriggerLevels(); - m_glScope->updateDisplay(); + updateGLScopeDisplay(); return true; } else if (MsgScopeVisNGRemoveTrace::match(message)) @@ -624,7 +628,7 @@ bool ScopeVisNG::handleMessage(const Message& message) m_traces.removeTrace(conf.getTraceIndex()); updateMaxTraceDelay(); computeDisplayTriggerLevels(); - m_glScope->updateDisplay(); + updateGLScopeDisplay(); return true; } else if (MsgScopeVisNGFocusOnTrace::match(message)) @@ -637,7 +641,7 @@ bool ScopeVisNG::handleMessage(const Message& message) m_focusedTraceIndex = traceIndex; computeDisplayTriggerLevels(); m_glScope->setFocusedTraceIndex(m_focusedTraceIndex); - m_glScope->updateDisplay(); + updateGLScopeDisplay(); } return true; @@ -773,3 +777,13 @@ void ScopeVisNG::computeDisplayTriggerLevels() } } } + +void ScopeVisNG::updateGLScopeDisplay() +{ + if (m_currentTraceMemoryIndex > 0) { + m_glScope->setConfigChanged(); + processMemoryTrace(); + } else { + m_glScope->updateDisplay(); + } +} diff --git a/sdrbase/dsp/scopevisng.h b/sdrbase/dsp/scopevisng.h index a1502ee67..70ac1771d 100644 --- a/sdrbase/dsp/scopevisng.h +++ b/sdrbase/dsp/scopevisng.h @@ -978,6 +978,13 @@ private: * - every time a trace data is added or removed */ void computeDisplayTriggerLevels(); + + /** + * Update glScope display + * - Live trace: call glScipe update method + * - Trace in memory: call process memory trace + */ + void updateGLScopeDisplay(); }; diff --git a/sdrbase/gui/glscopeng.h b/sdrbase/gui/glscopeng.h index dd934f40c..ce6d66df4 100644 --- a/sdrbase/gui/glscopeng.h +++ b/sdrbase/gui/glscopeng.h @@ -68,6 +68,7 @@ public: void setDisplayGridIntensity(int intensity); void setDisplayTraceIntensity(int intensity); void setFocusedTriggerData(ScopeVisNG::TriggerData& triggerData) { m_focusedTriggerData = triggerData; } + void setConfigChanged() { m_configChanged = true; } //void incrementTraceCounter() { m_traceCounter++; } bool getDataChanged() const { return m_dataChanged; }