diff --git a/CMakeLists.txt b/CMakeLists.txt --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -135,6 +135,7 @@ add_executable(${PROGRAM_NAME} WIN32 src/framedreadersettings.cpp src/plotmanager.cpp src/barplot.cpp + src/barchart.cpp src/numberformat.cpp src/updatechecker.cpp src/versionnumber.cpp diff --git a/src/barchart.cpp b/src/barchart.cpp new file mode 100644 --- /dev/null +++ b/src/barchart.cpp @@ -0,0 +1,63 @@ +/* + 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 "barchart.h" + +BarChart::BarChart(ChannelManager* channelMan) +{ + _channelMan = channelMan; +} + +void BarChart::resample() +{ + setSamples(chartData()); +} + +QVector BarChart::chartData() const +{ + unsigned numChannels = _channelMan->numOfChannels(); + unsigned numOfSamples = _channelMan->numOfSamples(); + QVector data(numChannels); + for (unsigned i = 0; i < numChannels; i++) + { + data[i] = _channelMan->channelBuffer(i)->sample(numOfSamples-1); + } + return data; +} + +QwtColumnSymbol* BarChart::specialSymbol(int sampleIndex, const QPointF& sample) const +{ + unsigned numChannels = _channelMan->numOfChannels(); + if (sampleIndex < 0 || sampleIndex > (int) numChannels) + { + return NULL; + } + + auto info = _channelMan->infoModel(); + auto color = info->color(sampleIndex); + + QwtColumnSymbol* symbol = new QwtColumnSymbol(QwtColumnSymbol::Box); + symbol->setLineWidth(1); + symbol->setFrameStyle(QwtColumnSymbol::Plain); + symbol->setPalette(QPalette(color)); + + return symbol; +} diff --git a/src/barchart.h b/src/barchart.h new file mode 100644 --- /dev/null +++ b/src/barchart.h @@ -0,0 +1,42 @@ +/* + 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 BARCHART_H +#define BARCHART_H + +#include +#include +#include "channelmanager.h" + +class BarChart : public QwtPlotBarChart +{ +public: + explicit BarChart(ChannelManager* channelMan); + + void resample(); + QwtColumnSymbol* specialSymbol(int sampleIndex, const QPointF&) const; + +private: + ChannelManager* _channelMan; + + QVector chartData() const; +}; + + +#endif // BARCHART_H diff --git a/src/barplot.cpp b/src/barplot.cpp --- a/src/barplot.cpp +++ b/src/barplot.cpp @@ -20,26 +20,14 @@ #include "barplot.h" BarPlot::BarPlot(ChannelManager* channelMan, QWidget* parent) : - QwtPlot(parent) + QwtPlot(parent), barChart(channelMan) { _channelMan = channelMan; barChart.attach(this); connect(_channelMan, &ChannelManager::dataAdded, [this]() { - barChart.setSamples(chartData()); + barChart.resample(); replot(); }); } - -QVector BarPlot::chartData() const -{ - unsigned numChannels = _channelMan->numOfChannels(); - unsigned numOfSamples = _channelMan->numOfSamples(); - QVector data(numChannels); - for (int i = 0; i < numChannels; i++) - { - data[i] = _channelMan->channelBuffer(i)->sample(numOfSamples-1); - } - return data; -} diff --git a/src/barplot.h b/src/barplot.h --- a/src/barplot.h +++ b/src/barplot.h @@ -21,9 +21,9 @@ #define BARPLOT_H #include -#include #include "channelmanager.h" +#include "barchart.h" class BarPlot : public QwtPlot { @@ -33,8 +33,8 @@ public: explicit BarPlot(ChannelManager* channelMan, QWidget* parent = 0); private: - QwtPlotBarChart barChart; ChannelManager* _channelMan; + BarChart barChart; QVector chartData() const; }; diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -60,10 +60,10 @@ MainWindow::MainWindow(QWidget *parent) aboutDialog(this), portControl(&serialPort), channelMan(1, 1, this), + barPlot(&channelMan), snapshotMan(this, &channelMan), commandPanel(&serialPort), dataFormatPanel(&serialPort, &channelMan, &recorder), - barPlot(&channelMan), recordPanel(&recorder, &channelMan), updateCheckDialog(this) {