diff --git a/src/plot.cpp b/src/plot.cpp --- a/src/plot.cpp +++ b/src/plot.cpp @@ -73,6 +73,16 @@ Plot::Plot(QWidget* parent) : demoIndicator.setText(demoText); demoIndicator.hide(); demoIndicator.attach(this); + + // init no channels are visible indicator + QwtText noChannelText(" No Visible Channels "); + noChannelText.setColor(QColor("white")); + noChannelText.setBackgroundBrush(Qt::darkBlue); + noChannelText.setBorderRadius(4); + noChannelText.setRenderFlags(Qt::AlignHCenter | Qt::AlignVCenter); + noChannelIndicator.setText(noChannelText); + noChannelIndicator.hide(); + noChannelIndicator.attach(this); } Plot::~Plot() @@ -163,6 +173,12 @@ void Plot::showDemoIndicator(bool show) replot(); } +void Plot::showNoChannel(bool show) +{ + noChannelIndicator.setVisible(show); + replot(); +} + void Plot::unzoom() { zoomer.zoom(0); diff --git a/src/plot.h b/src/plot.h --- a/src/plot.h +++ b/src/plot.h @@ -57,6 +57,7 @@ public slots: void showMinorGrid(bool show = true); void showLegend(bool show = true); void showDemoIndicator(bool show = true); + void showNoChannel(bool show = true); void unzoom(); void darkBackground(bool enabled = true); void setYAxis(bool autoScaled, double yMin = 0, double yMax = 1); @@ -88,6 +89,7 @@ private: PlotSnapshotOverlay* snapshotOverlay; QwtPlotLegendItem legend; QwtPlotTextLabel demoIndicator; + QwtPlotTextLabel noChannelIndicator; ShowSymbols showSymbols; void resetAxes(); diff --git a/src/plotmanager.cpp b/src/plotmanager.cpp --- a/src/plotmanager.cpp +++ b/src/plotmanager.cpp @@ -17,6 +17,7 @@ along with serialplot. If not, see . */ +#include #include #include #include @@ -46,6 +47,7 @@ PlotManager::PlotManager(QWidget* plotAr _infoModel = infoModel; _numOfSamples = 1; showSymbols = Plot::ShowSymbolsAuto; + emptyPlot = NULL; // initalize layout and single widget isMulti = false; @@ -156,6 +158,7 @@ PlotManager::~PlotManager() } if (scrollArea != NULL) delete scrollArea; + if (emptyPlot != NULL) delete emptyPlot; } void PlotManager::onChannelInfoChanged(const QModelIndex &topLeft, @@ -189,6 +192,8 @@ void PlotManager::onChannelInfoChanged(c } } + checkNoVisChannels(); + // replot single widget if (!isMulti) { @@ -198,6 +203,20 @@ void PlotManager::onChannelInfoChanged(c } } +void PlotManager::checkNoVisChannels() +{ + // if all channels are hidden show indicator + bool allhidden = std::none_of(curves.cbegin(), curves.cend(), + [](QwtPlotCurve* c) {return c->isVisible();}); + + plotWidgets[0]->showNoChannel(allhidden); + if (isMulti) + { + plotWidgets[0]->showNoChannel(allhidden); + plotWidgets[0]->setVisible(true); + } +} + void PlotManager::setMulti(bool enabled) { if (enabled == isMulti) return; @@ -240,6 +259,8 @@ void PlotManager::setMulti(bool enabled) curve->attach(plot); } } + + checkNoVisChannels(); } void PlotManager::setupLayout(bool multiPlot) diff --git a/src/plotmanager.h b/src/plotmanager.h --- a/src/plotmanager.h +++ b/src/plotmanager.h @@ -96,6 +96,7 @@ private: QScrollArea* scrollArea; QList curves; QList plotWidgets; + Plot* emptyPlot; ///< for displaying when all channels are hidden ChannelInfoModel* _infoModel; bool isDemoShown; bool _autoScaled; @@ -128,6 +129,8 @@ private: /// Common part of overloaded `addCurve` functions void _addCurve(QwtPlotCurve* curve); void setSymbols(Plot::ShowSymbols shown); + /// Check and make sure "no visible channels" text is shown + void checkNoVisChannels(); private slots: void showGrid(bool show = true);