diff options
-rw-r--r-- | clients/tde/src/part/scope/layout.ui | 8 | ||||
-rw-r--r-- | clients/tde/src/part/scope/part.cpp | 25 | ||||
-rw-r--r-- | clients/tde/src/part/scope/part.h | 1 |
3 files changed, 34 insertions, 0 deletions
diff --git a/clients/tde/src/part/scope/layout.ui b/clients/tde/src/part/scope/layout.ui index 16b0d0c..43a0be8 100644 --- a/clients/tde/src/part/scope/layout.ui +++ b/clients/tde/src/part/scope/layout.ui @@ -150,6 +150,14 @@ <cstring>mathTraceControlLayoutWidget</cstring> </property> </widget> + <widget class="TQPushButton" row="2" column="0" colspan="1"> + <property name="name"> + <cstring>dumpSamples</cstring> + </property> + <property name="text"> + <string>Export Selected Data</string> + </property> + </widget> </grid> </widget> <widget class="TQGroupBox" row="2" column="0"> diff --git a/clients/tde/src/part/scope/part.cpp b/clients/tde/src/part/scope/part.cpp index 401fd66..efa05a0 100644 --- a/clients/tde/src/part/scope/part.cpp +++ b/clients/tde/src/part/scope/part.cpp @@ -638,6 +638,7 @@ ScopePart::ScopePart( TQWidget *parentWidget, const char *widgetName, TQObject * connect(m_traceWidget, SIGNAL(zoomBoxChanged(const TQRectF&)), this, SLOT(updateZoomWidgetLimits(const TQRectF&))); connect(m_traceWidget, SIGNAL(offsetChanged(uint, double)), m_base->traceZoomWidget, SLOT(setTraceOffset(uint, double))); + connect(m_base->dumpSamples, SIGNAL(clicked()), this, SLOT(dumpSamples())); connect(m_base->acqStart, SIGNAL(clicked()), this, SLOT(startDAQ())); connect(m_base->acqStop, SIGNAL(clicked()), this, SLOT(stopDAQ())); connect(m_base->runControlStartButton, SIGNAL(clicked()), this, SLOT(startScope())); @@ -2133,6 +2134,30 @@ void ScopePart::startDAQ() { EXEC_NEXT_STATE_IMMEDIATELY } +void ScopePart::dumpSamples() { + // Calculate left and right extent of zoom area + TQRectF currentZoomBox = m_traceWidget->zoomBox(); + + TQString csvData = ""; + for (int traceno=1; traceno<=m_maxNumberOfTraces; traceno++) { + if (m_channelActive[traceno]) { + TQString saveFileName = TQString("/tmp/trace%1.csv").arg(traceno); + TQFile file(saveFileName); + file.open(IO_WriteOnly); + csvData = ""; + int start_sample = ((m_samplesInTrace[traceno] * currentZoomBox.x()) / 100.0); + int end_sample = ((m_samplesInTrace[traceno] * currentZoomBox.width()) / 100.0) + start_sample; + TQDoubleArray positions = m_traceWidget->positions(traceno-1); + TQDoubleArray values = m_traceWidget->samples(traceno-1); + for (int sample=start_sample; sample<end_sample; sample++) { + csvData += TQString("%1,%2\n").arg(positions[sample]).arg(values[sample]); + } + csvData += "\n"; + file.writeBlock(csvData.ascii(), strlen(csvData.ascii())); + } + } +} + void ScopePart::stopDAQ() { if (m_commHandlerMode < 2) { m_stopTraceUpdate = true; diff --git a/clients/tde/src/part/scope/part.h b/clients/tde/src/part/scope/part.h index 46e2f5d..dbe4066 100644 --- a/clients/tde/src/part/scope/part.h +++ b/clients/tde/src/part/scope/part.h @@ -223,6 +223,7 @@ namespace RemoteLab void connectionStatusChangedCallback(); void setTickerMessage(TQString message); void mainEventLoop(); + void dumpSamples(); void startDAQ(); void stopDAQ(); void updateTraceControlWidgets(); |