diff --git a/CMakeLists.txt b/CMakeLists.txt --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -85,6 +85,7 @@ qt5_wrap_ui(UI_FILES src/binarystreamreadersettings.ui src/asciireadersettings.ui src/framedreadersettings.ui + src/demoreadersettings.ui src/updatecheckdialog.ui ) @@ -134,6 +135,7 @@ add_executable(${PROGRAM_NAME} WIN32 src/asciireader.cpp src/asciireadersettings.cpp src/demoreader.cpp + src/demoreadersettings.cpp src/framedreader.cpp src/framedreadersettings.cpp src/plotmanager.cpp diff --git a/serialplot.pro b/serialplot.pro --- a/serialplot.pro +++ b/serialplot.pro @@ -70,7 +70,8 @@ SOURCES += \ src/numberformat.cpp \ src/recordpanel.cpp \ src/updatechecker.cpp \ - src/updatecheckdialog.cpp + src/updatecheckdialog.cpp \ + src/demoreadersettings.cpp HEADERS += \ src/mainwindow.h \ @@ -112,7 +113,8 @@ HEADERS += \ src/numberformat.h \ src/recordpanel.h \ src/updatechecker.h \ - src/updatecheckdialog.h + src/updatecheckdialog.h \ + src/demoreadersettings.h FORMS += \ src/mainwindow.ui \ @@ -129,7 +131,8 @@ FORMS += \ src/binarystreamreadersettings.ui \ src/asciireadersettings.ui \ src/recordpanel.ui \ - src/updatecheckdialog.ui + src/updatecheckdialog.ui \ + src/demoreadersettings.ui INCLUDEPATH += qmake/ src/ diff --git a/src/dataformatpanel.cpp b/src/dataformatpanel.cpp --- a/src/dataformatpanel.cpp +++ b/src/dataformatpanel.cpp @@ -39,6 +39,7 @@ DataFormatPanel::DataFormatPanel(QSerial serialPort = port; paused = false; demoEnabled = false; + readerBeforeDemo = nullptr; // initalize default reader currentReader = &bsReader; @@ -63,10 +64,6 @@ DataFormatPanel::DataFormatPanel(QSerial { if (checked) selectReader(&framedReader); }); - - // re-purpose numofchannels settings from actual reader settings to demo reader - connect(this, &DataFormatPanel::numOfChannelsChanged, - &demoReader, &DemoReader::setNumOfChannels); } DataFormatPanel::~DataFormatPanel() @@ -95,14 +92,13 @@ void DataFormatPanel::enableDemo(bool en { if (enabled) { - demoReader.enable(); - emit sourceChanged(&demoReader); + readerBeforeDemo = currentReader; + selectReader(&demoReader); } else { - demoReader.enable(false); - disconnect(&demoReader, 0, this, 0); - emit sourceChanged(currentReader); + Q_ASSERT(readerBeforeDemo != nullptr); + selectReader(readerBeforeDemo); } demoEnabled = enabled; } diff --git a/src/dataformatpanel.h b/src/dataformatpanel.h --- a/src/dataformatpanel.h +++ b/src/dataformatpanel.h @@ -81,6 +81,7 @@ private: bool demoEnabled; DemoReader demoReader; + AbstractReader* readerBeforeDemo; }; #endif // DATAFORMATPANEL_H diff --git a/src/demoreader.cpp b/src/demoreader.cpp --- a/src/demoreader.cpp +++ b/src/demoreader.cpp @@ -29,16 +29,19 @@ DemoReader::DemoReader(QIODevice* device AbstractReader(device, parent) { paused = false; - _numChannels = 1; + _numChannels = _settingsWidget.numChannels(); + connect(&_settingsWidget, &DemoReaderSettings::numChannelsChanged, + this, &DemoReader::onNumChannelsChanged); + count = 0; timer.setInterval(100); - QObject::connect(&timer, &QTimer::timeout, - this, &DemoReader::demoTimerTimeout); + connect(&timer, &QTimer::timeout, + this, &DemoReader::demoTimerTimeout); } QWidget* DemoReader::settingsWidget() { - return NULL; + return &_settingsWidget; } void DemoReader::enable(bool enabled) @@ -59,10 +62,9 @@ unsigned DemoReader::numChannels() const return _numChannels; } -void DemoReader::setNumOfChannels(unsigned value) +void DemoReader::setNumChannels(unsigned value) { - _numChannels = value; - updateNumChannels(); + _settingsWidget.setNumChannels(value); } void DemoReader::pause(bool enabled) @@ -87,3 +89,9 @@ void DemoReader::demoTimerTimeout() feedOut(samples); } } + +void DemoReader::onNumChannelsChanged(unsigned value) +{ + _numChannels = value; + updateNumChannels(); +} diff --git a/src/demoreader.h b/src/demoreader.h --- a/src/demoreader.h +++ b/src/demoreader.h @@ -23,6 +23,7 @@ #include #include "abstractreader.h" +#include "demoreadersettings.h" /** * This is a special case of reader implementation and should be used @@ -40,20 +41,17 @@ class DemoReader : public AbstractReader public: explicit DemoReader(QIODevice* device, QObject* parent = 0); - /// Demo reader is an exception so this function returns NULL QWidget* settingsWidget(); - unsigned numChannels() const; - void enable(bool enabled = true); public slots: void pause(bool); - - /// Sets the number of channels, this doesn't trigger a `numOfChannelsChanged` signal. - void setNumOfChannels(unsigned value); + void setNumChannels(unsigned value); private: + DemoReaderSettings _settingsWidget; + bool paused; unsigned _numChannels; QTimer timer; @@ -61,6 +59,7 @@ private: private slots: void demoTimerTimeout(); + void onNumChannelsChanged(unsigned value); }; #endif // DEMOREADER_H diff --git a/src/demoreadersettings.cpp b/src/demoreadersettings.cpp new file mode 100644 --- /dev/null +++ b/src/demoreadersettings.cpp @@ -0,0 +1,51 @@ +/* + Copyright © 2018 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 "demoreadersettings.h" +#include "ui_demoreadersettings.h" + +#include "utils.h" + +DemoReaderSettings::DemoReaderSettings(QWidget *parent) : + QWidget(parent), + ui(new Ui::DemoReaderSettings) +{ + ui->setupUi(this); + + connect(ui->spNumChannels, SELECT::OVERLOAD_OF(&QSpinBox::valueChanged), + [this](int value) + { + emit numChannelsChanged(value); + }); +} + +DemoReaderSettings::~DemoReaderSettings() +{ + delete ui; +} + +unsigned DemoReaderSettings::numChannels() const +{ + return ui->spNumChannels->value(); +} + +void DemoReaderSettings::setNumChannels(unsigned value) +{ + ui->spNumChannels->setValue(value); +} diff --git a/src/demoreadersettings.h b/src/demoreadersettings.h new file mode 100644 --- /dev/null +++ b/src/demoreadersettings.h @@ -0,0 +1,48 @@ +/* + Copyright © 2018 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 DEMOREADERSETTINGS_H +#define DEMOREADERSETTINGS_H + +#include + +namespace Ui { +class DemoReaderSettings; +} + +class DemoReaderSettings : public QWidget +{ + Q_OBJECT + +public: + explicit DemoReaderSettings(QWidget *parent = 0); + ~DemoReaderSettings(); + + unsigned numChannels() const; + /// Doesn't signal `numChannelsChanged`. + void setNumChannels(unsigned value); + +private: + Ui::DemoReaderSettings *ui; + +signals: + void numChannelsChanged(unsigned); +}; + +#endif // DEMOREADERSETTINGS_H diff --git a/src/demoreadersettings.ui b/src/demoreadersettings.ui new file mode 100644 --- /dev/null +++ b/src/demoreadersettings.ui @@ -0,0 +1,59 @@ + + + DemoReaderSettings + + + + 0 + 0 + 444 + 141 + + + + Form + + + + QFormLayout::ExpandingFieldsGrow + + + + + Number Of Channels: + + + + + + + + 60 + 0 + + + + Select number of channels or set to 0 for Auto (determined from incoming data) + + + + + + false + + + 1 + + + 32 + + + 5 + + + + + + + +