# HG changeset patch # User Hasan Yavuz ÖZDERYA # Date 2017-12-19 14:46:59 # Node ID b29ee53957530139da5ae77b710865f090c9da16 # Parent 46213689acd3a1869f9261e3d74d0ef86461c71f adding unfinished stream class diff --git a/src/stream.h b/src/stream.h new file mode 100644 --- /dev/null +++ b/src/stream.h @@ -0,0 +1,82 @@ +/* + 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 STREAM_H +#define STREAM_H + +#include +#include +#include +#include + +#include "sink.h" +#include "source.h" +#include "channelinfomodel.h" +#include "streamchannel.h" + +/** + * Main waveform storage class. It consists of channels. Channels are + * synchronized with each other. + * + * Implements `Sink` class for data entry. It's expected to be + * connected to a `Device` source. Also implements a `Source` class + * for data that exists the buffers. + */ +class Stream : public Sink, public Source, public QObject +{ +public: + /** + * @param nc number of channels + * @param ns number of samples + */ + Stream(unsigned ns); + ~Stream(); + + // implementations for `Source` + virtual bool hasX() const; + virtual unsigned numChannels(); + + // implementations for `Sink` + virtual void setNumChannels(unsigned nc, bool x); + + unsigned numSamples() const; + const StreamChannel* channel(unsigned index) const; + /// Saves channel information + void saveSettings(QSettings* settings) const; + /// Load channel information + void loadSettings(QSettings* settings); + +signals: + void numChannelsChanged(unsigned value); + void numSamplesChanged(unsigned value); + void channelAdded(const StreamChannel* chan); + void channelNameChanged(unsigned channel, QString name); // TODO: does it stay? + void dataAdded(); ///< emitted when data added to channel man. + +public slots: + // TODO: these won't be public + void setNumChannels(unsigned number); + void setNumSamples(unsigned number); + + /// When paused `addData` does nothing. + void pause(bool paused); +}; + + +#endif // STREAM_H diff --git a/src/streamchannel.cpp b/src/streamchannel.cpp new file mode 100644 --- /dev/null +++ b/src/streamchannel.cpp @@ -0,0 +1,43 @@ +/* + 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 "streamchannel.h" + +StreamChannel::StreamChannel(unsigned i, const FrameBuffer* x, + FrameBuffer* y, ChannelInfoModel* info) +{ + _index = i; + _x = x; + _y = y; + _info = info; +} + +StreamChannel::~StreamChannel() +{ + delete _y; +} + +unsigned StreamChannel::index() const {return _index;} +QString StreamChannel::name() const {return _info->name(_index)}; +QColor StreamChannel::color() const {return _info->color(_index)}; +bool StreamChannel::visible() const {return _info->isVisible(_index)}; +const FrameBuffer* StreamChannel::xData() const {return _x;} +const FrameBuffer* StreamChannel::yData() const {return _y;} +FrameBuffer* StreamChannel::yData() {return _y;} +const ChannelInfoModel* StreamChannel::info() const {return _info;} diff --git a/src/streamchannel.h b/src/streamchannel.h new file mode 100644 --- /dev/null +++ b/src/streamchannel.h @@ -0,0 +1,62 @@ +/* + 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 STREAMCHANNEL_H +#define STREAMCHANNEL_H + +// IMPORTANT TODO: rename to "framebuffer.h" when stream work is done. +#include "framebuffer2.h" + +#include "channelinfomodel.h" + +class StreamChannel +{ +public: + /** + * Creates a stream channel. + * + * @param i index of the channel + * @param x x axis buffer + * @param y data buffer of this channel, takes ownership + * @param info channel info model + */ + StreamChannel(unsigned i, + const FrameBuffer* x, + FrameBuffer* y, + ChannelInfoModel* info); + ~StreamChannel(); + + unsigned index() const; + QString name() const; + QColor color() const; + bool visible() const; + const FrameBuffer* xData() const; + FrameBuffer* yData(); + const FrameBuffer* yData() const; + const ChannelInfoModel* info() const; + + +private: + unsigned _index; + const FrameBuffer* _x; + FrameBuffer* _y; + ChannelInfoModel* _info; +}; + +#endif // STREAMCHANNEL_H