diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -468,33 +468,9 @@ void MainWindow::onExportCsv() } else { - QFile file(fileName); - if (file.open(QIODevice::WriteOnly | QIODevice::Text)) - { - QTextStream fileStream(&file); - - unsigned numOfChannels = channelMan.numOfChannels(); - for (unsigned int ci = 0; ci < numOfChannels; ci++) - { - fileStream << "Channel " << ci; - if (ci != numOfChannels-1) fileStream << ","; - } - fileStream << '\n'; - - for (unsigned int i = 0; i < numOfSamples; i++) - { - for (unsigned int ci = 0; ci < numOfChannels; ci++) - { - fileStream << channelMan.channelBuffer(ci)->sample(i); - if (ci != numOfChannels-1) fileStream << ","; - } - fileStream << '\n'; - } - } - else - { - qCritical() << "File open error during export: " << file.error(); - } + Snapshot* snapshot = snapshotMan.makeSnapshot(); + snapshot->save(fileName); + delete snapshot; } } diff --git a/src/snapshotmanager.cpp b/src/snapshotmanager.cpp --- a/src/snapshotmanager.cpp +++ b/src/snapshotmanager.cpp @@ -60,7 +60,7 @@ SnapshotManager::~SnapshotManager() } } -void SnapshotManager::takeSnapshot() +Snapshot* SnapshotManager::makeSnapshot() { QString name = QTime::currentTime().toString("'Snapshot ['HH:mm:ss']'"); auto snapshot = new Snapshot(_mainWindow, name); @@ -78,7 +78,12 @@ void SnapshotManager::takeSnapshot() } snapshot->setChannelNames(_channelMan->channelNames()->stringList()); - addSnapshot(snapshot); + return snapshot; +} + +void SnapshotManager::takeSnapshot() +{ + addSnapshot(makeSnapshot()); } void SnapshotManager::addSnapshot(Snapshot* snapshot, bool update_menu) diff --git a/src/snapshotmanager.h b/src/snapshotmanager.h --- a/src/snapshotmanager.h +++ b/src/snapshotmanager.h @@ -39,6 +39,10 @@ public: QMenu* menu(); QAction* takeSnapshotAction(); + /// Creates a dynamically allocated snapshot object but doesn't record it in snapshots list. + /// @note Caller is responsible for deletion of the returned `Snapshot` object. + Snapshot* makeSnapshot(); + private: QMainWindow* _mainWindow; ChannelManager* _channelMan;