diff --git a/src/snapshotmanager.cpp b/src/snapshotmanager.cpp --- a/src/snapshotmanager.cpp +++ b/src/snapshotmanager.cpp @@ -32,14 +32,14 @@ #include "snapshotmanager.h" SnapshotManager::SnapshotManager(MainWindow* mainWindow, - ChannelManager* channelMan) : + Stream* stream) : _menu("&Snapshots"), _takeSnapshotAction("&Take Snapshot", this), loadSnapshotAction("&Load Snapshots", this), clearAction("&Clear Snapshots", this) { _mainWindow = mainWindow; - _channelMan = channelMan; + _stream = stream; _takeSnapshotAction.setToolTip("Take a snapshot of current plot"); _takeSnapshotAction.setShortcut(QKeySequence("F5")); @@ -64,21 +64,14 @@ SnapshotManager::~SnapshotManager() } } -Snapshot* SnapshotManager::makeSnapshot() +Snapshot* SnapshotManager::makeSnapshot() const { QString name = QTime::currentTime().toString("'Snapshot ['HH:mm:ss']'"); - auto snapshot = new Snapshot(_mainWindow, name, *(_channelMan->infoModel())); - - unsigned numOfChannels = _channelMan->numOfChannels(); - unsigned numOfSamples = _channelMan->numOfSamples(); + auto snapshot = new Snapshot(_mainWindow, name, *(_stream->infoModel())); - for (unsigned ci = 0; ci < numOfChannels; ci++) + for (unsigned ci = 0; ci < _stream->numChannels(); ci++) { - snapshot->data.append(QVector(numOfSamples)); - for (unsigned i = 0; i < numOfSamples; i++) - { - snapshot->data[ci][i] = QPointF(i, _channelMan->channelBuffer(ci)->sample(i)); - } + snapshot->yData.append(new ReadOnlyBuffer(_stream->channel(ci)->yData())); } return snapshot; @@ -159,7 +152,7 @@ void SnapshotManager::loadSnapshotFromFi unsigned numOfChannels = channelNames.size(); // read data - QVector> data(numOfChannels); + QVector> data(numOfChannels); QTextStream ts(&file); QString line; unsigned lineNum = 1; @@ -189,15 +182,20 @@ void SnapshotManager::loadSnapshotFromFi << "\" to double."; return; } - data[ci].append(QPointF(lineNum-1, y)); + data[ci].append(y); } lineNum++; } + // create snapshot auto snapshot = new Snapshot( _mainWindow, QFileInfo(fileName).baseName(), ChannelInfoModel(channelNames), true); - snapshot->data = data; + + for (unsigned ci = 0; ci < numOfChannels; ci++) + { + snapshot->yData.append(new ReadOnlyBuffer(data[ci].data(), data[ci].size())); + } addSnapshot(snapshot, false); }