# HG changeset patch # User Hasan Yavuz ÖZDERYA # Date 2018-06-20 01:40:38 # Node ID 20c9c08a01812da49c4dddcb1320f4fa0f9d5361 # Parent cee0c7d3e6c68620821db9ad8c32f144d3ba5207 remove now unused files diff --git a/src/channelmanager.cpp b/src/channelmanager.cpp deleted file mode 100644 --- a/src/channelmanager.cpp +++ /dev/null @@ -1,183 +0,0 @@ -/* - Copyright © 2017 Hasan Yavuz Özderya - - This file is part of serialplot. - - serialplot is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - serialplot is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with serialplot. If not, see . -*/ - -#include - -#include - -#include "channelmanager.h" -#include "setting_defines.h" - -ChannelManager::ChannelManager(unsigned numberOfChannels, unsigned numberOfSamples, QObject *parent) : - QObject(parent), - _infoModel(numberOfChannels) -{ - _numOfChannels = numberOfChannels; - _numOfSamples = numberOfSamples; - _paused = false; - - for (unsigned int i = 0; i < numberOfChannels; i++) - { - channelBuffers.append(new FrameBuffer(numberOfSamples)); - } - - connect(&_infoModel, &ChannelInfoModel::dataChanged, - this, &ChannelManager::onChannelInfoChanged); -} - -ChannelManager::~ChannelManager() -{ - for (auto buffer : channelBuffers) - { - delete buffer; - } -} - -unsigned ChannelManager::numOfChannels() -{ - return channelBuffers.size(); -} - -unsigned ChannelManager::numOfSamples() -{ - return _numOfSamples; -} - -void ChannelManager::setNumOfChannels(unsigned number) -{ - unsigned int oldNum = channelBuffers.size(); - - if (number > oldNum) - { - // add new channels - for (unsigned int i = 0; i < number - oldNum; i++) - { - channelBuffers.append(new FrameBuffer(_numOfSamples)); - } - } - else if(number < oldNum) - { - // remove channels - for (unsigned int i = oldNum-1; i > number-1; i--) - { - delete channelBuffers.takeLast(); - } - } - - _numOfChannels = number; - _infoModel.setNumOfChannels(number); - - emit numOfChannelsChanged(number); -} - -void ChannelManager::setNumOfSamples(unsigned number) -{ - _numOfSamples = number; - - for (int ci = 0; ci < channelBuffers.size(); ci++) - { - channelBuffers[ci]->resize(_numOfSamples); - } - - emit numOfSamplesChanged(number); -} - -void ChannelManager::pause(bool paused) -{ - _paused = paused; -} - -FrameBuffer* ChannelManager::channelBuffer(unsigned channel) -{ - return channelBuffers[channel]; -} - -ChannelInfoModel* ChannelManager::infoModel() -{ - return &_infoModel; -} - -QString ChannelManager::channelName(unsigned channel) -{ - return _infoModel.data(_infoModel.index(channel, ChannelInfoModel::COLUMN_NAME), - Qt::DisplayRole).toString(); -} - -void ChannelManager::onChannelInfoChanged(const QModelIndex & topLeft, - const QModelIndex & bottomRight, - const QVector & roles) -{ - int start = topLeft.row(); - int end = bottomRight.row(); - int col = topLeft.column(); - - for (int ci = start; ci <= end; ci++) - { - for (auto role : roles) - { - switch (role) - { - case Qt::EditRole: - if (col == ChannelInfoModel::COLUMN_NAME) - { - emit channelNameChanged(ci, channelName(ci)); - } - break; - case Qt::ForegroundRole: - if (col == ChannelInfoModel::COLUMN_NAME) - { - // TODO: emit channel color changed - } - break; - case Qt::CheckStateRole: - if (col == ChannelInfoModel::COLUMN_VISIBILITY) - { - // TODO: emit visibility - } - break; - } - } - // emit channelNameChanged(i, channelName(i)); - } -} - -void ChannelManager::addData(double* data, unsigned size) -{ - Q_ASSERT(size % _numOfChannels == 0); - - if (_paused) return; - - int n = size / _numOfChannels; - for (unsigned ci = 0; ci < _numOfChannels; ci++) - { - channelBuffers[ci]->addSamples(&data[ci*n], n); - } - - emit dataAdded(); -} - -void ChannelManager::saveSettings(QSettings* settings) -{ - _infoModel.saveSettings(settings); -} - -void ChannelManager::loadSettings(QSettings* settings) -{ - _infoModel.loadSettings(settings); -} diff --git a/src/channelmanager.h b/src/channelmanager.h deleted file mode 100644 --- a/src/channelmanager.h +++ /dev/null @@ -1,89 +0,0 @@ -/* - Copyright © 2017 Hasan Yavuz Özderya - - This file is part of serialplot. - - serialplot is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - serialplot is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with serialplot. If not, see . -*/ - -#ifndef CHANNELMANAGER_H -#define CHANNELMANAGER_H - -#include -#include -#include -#include -#include - -#include "framebuffer.h" -#include "channelinfomodel.h" - -class ChannelManager : public QObject -{ - Q_OBJECT -public: - explicit ChannelManager(unsigned numberOfChannels, unsigned numberOfSamples, QObject *parent = 0); - ~ChannelManager(); - - unsigned numOfChannels(); - unsigned numOfSamples(); - FrameBuffer* channelBuffer(unsigned channel); - QString channelName(unsigned channel); - /// Stores channel names into a `QSettings` - void saveSettings(QSettings* settings); - /// Loads channel names from a `QSettings`. - void loadSettings(QSettings* settings); - /// Returns a model that manages channel information (name, color etc) - ChannelInfoModel* infoModel(); - -signals: - void numOfChannelsChanged(unsigned value); - void numOfSamplesChanged(unsigned value); - void channelNameChanged(unsigned channel, QString name); - void dataAdded(); ///< emitted when data added to channel man. - -public slots: - void setNumOfChannels(unsigned number); - void setNumOfSamples(unsigned number); - /** - * Add data for all channels. - * - * All channels data is provided in a single array which contains equal - * number of samples for all channels. Structure is as shown below: - * - * [CH0_SMP0, CH0_SMP1 ... CH0_SMPN, CH1_SMP0, CH1_SMP1, ... , CHN_SMPN] - * - * @param data samples for all channels - * @param size size of `data`, must be multiple of `numOfChannels` - */ - void addData(double* data, unsigned size); - - /// When paused `addData` does nothing. - void pause(bool paused); - -private: - unsigned _numOfChannels; - unsigned _numOfSamples; - bool _paused; - QList channelBuffers; - // QStringListModel _channelNames; - ChannelInfoModel _infoModel; - -private slots: - void onChannelInfoChanged(const QModelIndex & topLeft, - const QModelIndex & bottomRight, - const QVector & roles = QVector ()); -}; - -#endif // CHANNELMANAGER_H diff --git a/src/framebuffer.cpp b/src/framebuffer.cpp deleted file mode 100644 --- a/src/framebuffer.cpp +++ /dev/null @@ -1,165 +0,0 @@ -/* - Copyright © 2017 Hasan Yavuz Özderya - - This file is part of serialplot. - - serialplot is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - serialplot is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with serialplot. If not, see . -*/ - -#include "framebuffer.h" - -FrameBuffer::FrameBuffer(size_t size) -{ - _size = size; - data = new double[_size](); - headIndex = 0; - - brInvalid = false; - _brCache.setCoords(0, 0, size, 0); -} - -FrameBuffer::~FrameBuffer() -{ - delete[] data; -} - -void FrameBuffer::resize(size_t size) -{ - int offset = size - _size; - if (offset == 0) return; - - double* newData = new double[size]; - - // move data to new array - int fill_start = offset > 0 ? offset : 0; - - for (int i = fill_start; i < int(size); i++) - { - newData[i] = sample(i - offset); - } - - // fill the beginning of the new data - if (fill_start > 0) - { - for (int i = 0; i < fill_start; i++) - { - newData[i] = 0; - } - } - - // data is ready, clean and re-point - delete data; - data = newData; - headIndex = 0; - _size = size; - - // invalidate bounding rectangle - brInvalid = true; -} - -void FrameBuffer::addSamples(double* samples, size_t size) -{ - unsigned shift = size; - if (shift < _size) - { - unsigned x = _size - headIndex; // distance of `head` to end - - if (shift <= x) // there is enough room at the end of array - { - for (size_t i = 0; i < shift; i++) - { - data[i+headIndex] = samples[i]; - } - - if (shift == x) // we used all the room at the end - { - headIndex = 0; - } - else - { - headIndex += shift; - } - } - else // there isn't enough room - { - for (size_t i = 0; i < x; i++) // fill the end part - { - data[i+headIndex] = samples[i]; - } - for (size_t i = 0; i < (shift-x); i++) // continue from the beginning - { - data[i] = samples[i+x]; - } - headIndex = shift-x; - } - } - else // number of new samples equal or bigger than current size - { - int x = shift - _size; - for (size_t i = 0; i < _size; i++) - { - data[i] = samples[i+x]; - } - headIndex = 0; - } - - // invalidate cache - brInvalid = true; -} - -void FrameBuffer::clear() -{ - for (size_t i=0; i < _size; i++) data[i] = 0.; - - _brCache.setCoords(0, 0, _size, 0); -} - -size_t FrameBuffer::size() const -{ - return _size; -} - -QRectF FrameBuffer::boundingRect() const -{ - if (brInvalid) updateBoundingRect(); - return _brCache; -} - -void FrameBuffer::updateBoundingRect() const -{ - double minValue = data[0]; - double maxValue = data[0]; - for (size_t i = 0; i < _size; i++) - { - if (data[i] > maxValue) - { - maxValue = data[i]; - } - else if (data[i] < minValue) - { - minValue = data[i]; - } - } - _brCache.setTop(minValue); - _brCache.setBottom(maxValue); - - brInvalid = false; -} - -double FrameBuffer::sample(size_t i) const -{ - size_t index = headIndex + i; - if (index >= _size) index -= _size; - return data[index]; -} diff --git a/src/framebuffer.h b/src/framebuffer.h deleted file mode 100644 --- a/src/framebuffer.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - Copyright © 2017 Hasan Yavuz Özderya - - This file is part of serialplot. - - serialplot is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - serialplot is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with serialplot. If not, see . -*/ - -#ifndef FRAMEBUFFER_H -#define FRAMEBUFFER_H - -#include -#include - -class FrameBuffer -{ -public: - FrameBuffer(size_t size); - ~FrameBuffer(); - - void resize(size_t size); - void addSamples(double* samples, size_t size); - void clear(); // fill 0 - - // QwtSeriesData related implementations - size_t size() const; - QRectF boundingRect() const; - double sample(size_t i) const; - -private: - size_t _size; // size of `data` - double* data; - size_t headIndex; // indicates the actual `0` index of the ring buffer - - mutable bool brInvalid; ///< Indicates that bounding rectangle needs to be re-calculated - mutable QRectF _brCache; ///< Cache for boundingRect() - void updateBoundingRect() const; ///< Updates bounding rectangle cache -}; - -#endif // FRAMEBUFFER_H