# HG changeset patch # User Mehmet ASLAN # Date 2018-06-24 02:48:40 # Node ID 65256d18c617393446b6a3eed961a5b1a122ddb4 # Parent 5a2bc927a411d8c918544bc109427f1f4b37f741 enable common in all readers, abstracted diff --git a/src/abstractreader.cpp b/src/abstractreader.cpp --- a/src/abstractreader.cpp +++ b/src/abstractreader.cpp @@ -36,3 +36,19 @@ unsigned AbstractReader::numChannels() c // do not allow '0' return _numChannels == 0 ? 1 : _numChannels; } + +void AbstractReader::enable(bool enabled) +{ + if (enabled) + { + firstReadAfterEnable = true; + QObject::connect(_device, &QIODevice::readyRead, + this, &AbstractReader::onDataReady); + } + else + { + firstReadAfterEnable = false; + QObject::disconnect(_device, 0, this, 0); + disconnectSinks(); + } +} diff --git a/src/abstractreader.h b/src/abstractreader.h --- a/src/abstractreader.h +++ b/src/abstractreader.h @@ -44,7 +44,7 @@ public: /// Reader should only read when enabled. Default state should be /// 'disabled'. - virtual void enable(bool enabled = true) = 0; + void enable(bool enabled = true); /// None of the current readers support X channel at the moment bool hasX() const final { return false; }; @@ -68,6 +68,11 @@ protected: QIODevice* _device; bool paused; unsigned _numChannels; + bool firstReadAfterEnable = false; + +protected slots: + /// all derived readers has to override this function + virtual void onDataReady() = 0; }; #endif // ABSTRACTREADER_H diff --git a/src/asciireader.cpp b/src/asciireader.cpp --- a/src/asciireader.cpp +++ b/src/asciireader.cpp @@ -28,7 +28,6 @@ AsciiReader::AsciiReader(QIODevice* devi AbstractReader(device, parent) { paused = false; - discardFirstLine = true; _numChannels = _settingsWidget.numOfChannels(); autoNumOfChannels = (_numChannels == NUMOFCHANNELS_AUTO); @@ -52,8 +51,6 @@ AsciiReader::AsciiReader(QIODevice* devi { delimiter = d; }); - - connect(device, &QIODevice::aboutToClose, [this](){discardFirstLine=true;}); } QWidget* AsciiReader::settingsWidget() @@ -61,22 +58,6 @@ QWidget* AsciiReader::settingsWidget() return &_settingsWidget; } -// TODO: this could be a part of AbstractReader -void AsciiReader::enable(bool enabled) -{ - if (enabled) - { - discardFirstLine = true; - QObject::connect(_device, &QIODevice::readyRead, - this, &AsciiReader::onDataReady); - } - else - { - QObject::disconnect(_device, 0, this, 0); - disconnectSinks(); - } -} - void AsciiReader::onDataReady() { while(_device->canReadLine()) @@ -84,9 +65,9 @@ void AsciiReader::onDataReady() QString line = QString(_device->readLine()); // discard only once when we just started reading - if (discardFirstLine) + if (firstReadAfterEnable) { - discardFirstLine = false; + firstReadAfterEnable = false; continue; } diff --git a/src/asciireader.h b/src/asciireader.h --- a/src/asciireader.h +++ b/src/asciireader.h @@ -32,7 +32,6 @@ class AsciiReader : public AbstractReade public: explicit AsciiReader(QIODevice* device, QObject *parent = 0); QWidget* settingsWidget(); - void enable(bool enabled = true); /// Stores settings into a `QSettings` void saveSettings(QSettings* settings); /// Loads settings from a `QSettings`. @@ -44,12 +43,8 @@ private: unsigned autoNumOfChannels; QChar delimiter; ///< selected column delimiter - // We may have (usually true) started reading in the middle of a - // line, so its a better idea to just discard first line. - bool discardFirstLine; - private slots: - void onDataReady(); + void onDataReady() override; }; #endif // ASCIIREADER_H diff --git a/src/binarystreamreader.cpp b/src/binarystreamreader.cpp --- a/src/binarystreamreader.cpp +++ b/src/binarystreamreader.cpp @@ -57,20 +57,6 @@ QWidget* BinaryStreamReader::settingsWid return &_settingsWidget; } -void BinaryStreamReader::enable(bool enabled) -{ - if (enabled) - { - QObject::connect(_device, &QIODevice::readyRead, - this, &BinaryStreamReader::onDataReady); - } - else - { - QObject::disconnect(_device, 0, this, 0); - disconnectSinks(); - } -} - void BinaryStreamReader::onNumberFormatChanged(NumberFormat numberFormat) { switch(numberFormat) diff --git a/src/binarystreamreader.h b/src/binarystreamreader.h --- a/src/binarystreamreader.h +++ b/src/binarystreamreader.h @@ -36,7 +36,6 @@ class BinaryStreamReader : public Abstra public: explicit BinaryStreamReader(QIODevice* device, QObject *parent = 0); QWidget* settingsWidget(); - void enable(bool enabled = true); /// Stores settings into a `QSettings` void saveSettings(QSettings* settings); /// Loads settings from a `QSettings`. @@ -62,7 +61,7 @@ private: private slots: void onNumberFormatChanged(NumberFormat numberFormat); void onNumOfChannelsChanged(unsigned value); - void onDataReady(); + void onDataReady() override; }; #endif // BINARYSTREAMREADER_H diff --git a/src/demoreader.cpp b/src/demoreader.cpp --- a/src/demoreader.cpp +++ b/src/demoreader.cpp @@ -85,3 +85,8 @@ void DemoReader::onNumChannelsChanged(un _numChannels = value; updateNumChannels(); } + +void DemoReader::onDataReady() +{ + // intentionally empty, required by AbstractReader +} diff --git a/src/demoreader.h b/src/demoreader.h --- a/src/demoreader.h +++ b/src/demoreader.h @@ -56,6 +56,7 @@ private: private slots: void demoTimerTimeout(); void onNumChannelsChanged(unsigned value); + void onDataReady() override; }; #endif // DEMOREADER_H diff --git a/src/framedreader.cpp b/src/framedreader.cpp --- a/src/framedreader.cpp +++ b/src/framedreader.cpp @@ -62,20 +62,6 @@ FramedReader::FramedReader(QIODevice* de reset(); } -void FramedReader::enable(bool enabled) -{ - if (enabled) - { - connect(_device, &QIODevice::readyRead, - this, &FramedReader::onDataReady); - } - else - { - QObject::disconnect(_device, 0, this, 0); - disconnectSinks(); - } -} - QWidget* FramedReader::settingsWidget() { return &_settingsWidget; diff --git a/src/framedreader.h b/src/framedreader.h --- a/src/framedreader.h +++ b/src/framedreader.h @@ -35,7 +35,6 @@ class FramedReader : public AbstractRead public: explicit FramedReader(QIODevice* device, QObject *parent = 0); QWidget* settingsWidget(); - void enable(bool enabled = true); /// Stores settings into a `QSettings` void saveSettings(QSettings* settings); /// Loads settings from a `QSettings`. @@ -79,7 +78,7 @@ private: void readFrameDataAndCheck(); private slots: - void onDataReady(); + void onDataReady() override; void onNumberFormatChanged(NumberFormat numberFormat); void onNumOfChannelsChanged(unsigned value);