diff --git a/src/plotmanager.cpp b/src/plotmanager.cpp --- a/src/plotmanager.cpp +++ b/src/plotmanager.cpp @@ -17,6 +17,9 @@ along with serialplot. If not, see . */ +#include +#include +#include #include "qwt_symbol.h" #include "plot.h" @@ -32,14 +35,17 @@ PlotManager::PlotManager(QWidget* plotAr unzoomAction("&Unzoom", this), darkBackgroundAction("&Dark Background", this), showLegendAction("&Legend", this), - showMultiAction("Multi &Plot", this) + showMultiAction("Multi &Plot", this), + setSymbolsAction("Symbols", this) { _autoScaled = true; _yMin = 0; _yMax = 1; + _xAxisAsIndex = true; isDemoShown = false; _infoModel = infoModel; _numOfSamples = 1; + showSymbols = Plot::ShowSymbolsAuto; // initalize layout and single widget isMulti = false; @@ -54,6 +60,7 @@ PlotManager::PlotManager(QWidget* plotAr darkBackgroundAction.setToolTip("Enable Dark Plot Background"); showLegendAction.setToolTip("Display the Legend on Plot"); showMultiAction.setToolTip("Display All Channels Separately"); + setSymbolsAction.setToolTip("Show/Hide symbols"); showGridAction.setShortcut(QKeySequence("G")); showMinorGridAction.setShortcut(QKeySequence("M")); @@ -72,6 +79,37 @@ PlotManager::PlotManager(QWidget* plotAr showMinorGridAction.setEnabled(false); + // setup symbols menu + setSymbolsAutoAct = setSymbolsMenu.addAction("Show When Zoomed"); + setSymbolsAutoAct->setCheckable(true); + setSymbolsAutoAct->setChecked(true); + connect(setSymbolsAutoAct, SELECT::OVERLOAD_OF(&QAction::triggered), + [this](bool checked) + { + if (checked) setSymbols(Plot::ShowSymbolsAuto); + }); + setSymbolsShowAct = setSymbolsMenu.addAction("Always Show"); + setSymbolsShowAct->setCheckable(true); + connect(setSymbolsShowAct, SELECT::OVERLOAD_OF(&QAction::triggered), + [this](bool checked) + { + if (checked) setSymbols(Plot::ShowSymbolsShow); + }); + setSymbolsHideAct = setSymbolsMenu.addAction("Always Hide"); + setSymbolsHideAct->setCheckable(true); + connect(setSymbolsHideAct, SELECT::OVERLOAD_OF(&QAction::triggered), + [this](bool checked) + { + if (checked) setSymbols(Plot::ShowSymbolsHide); + }); + setSymbolsAction.setMenu(&setSymbolsMenu); + + // add symbol actions to same group so that they appear as radio buttons + auto group = new QActionGroup(this); + group->addAction(setSymbolsAutoAct); + group->addAction(setSymbolsShowAct); + group->addAction(setSymbolsHideAct); + connect(&showGridAction, SELECT::OVERLOAD_OF(&QAction::triggered), this, &PlotManager::showGrid); connect(&showGridAction, SELECT::OVERLOAD_OF(&QAction::triggered), @@ -252,6 +290,8 @@ Plot* PlotManager::addPlotWidget() plot->showLegend(showLegendAction.isChecked()); plot->showDemoIndicator(isDemoShown); plot->setYAxis(_autoScaled, _yMin, _yMax); + plot->setNumOfSamples(_numOfSamples); + plot->setSymbols(showSymbols); if (_xAxisAsIndex) { @@ -363,6 +403,7 @@ QList PlotManager::menuActions actions << &darkBackgroundAction; actions << &showLegendAction; actions << &showMultiAction; + actions << &setSymbolsAction; return actions; } @@ -415,6 +456,15 @@ void PlotManager::darkBackground(bool en } } +void PlotManager::setSymbols(Plot::ShowSymbols shown) +{ + showSymbols = shown; + for (auto plot : plotWidgets) + { + plot->setSymbols(shown); + } +} + void PlotManager::setYAxis(bool autoScaled, double yAxisMin, double yAxisMax) { _autoScaled = autoScaled; @@ -459,16 +509,57 @@ void PlotManager::flashSnapshotOverlay() } } -void PlotManager::onNumOfSamplesChanged(unsigned value) +void PlotManager::setNumOfSamples(unsigned value) { _numOfSamples = value; for (auto plot : plotWidgets) { - plot->onNumOfSamplesChanged(value); + plot->setNumOfSamples(value); if (_xAxisAsIndex) plot->setXAxis(0, value); } } +PlotViewSettings PlotManager::viewSettings() const +{ + return PlotViewSettings( + { + showGridAction.isChecked(), + showMinorGridAction.isChecked(), + darkBackgroundAction.isChecked(), + showLegendAction.isChecked(), + showMultiAction.isChecked(), + showSymbols + }); +} + +void PlotManager::setViewSettings(const PlotViewSettings& settings) +{ + showGridAction.setChecked(settings.showGrid); + showGrid(settings.showGrid); + showMinorGridAction.setChecked(settings.showMinorGrid); + showMinorGrid(settings.showMinorGrid); + darkBackgroundAction.setChecked(settings.darkBackground); + darkBackground(settings.darkBackground); + showLegendAction.setChecked(settings.showLegend); + showLegend(settings.showLegend); + showMultiAction.setChecked(settings.showMulti); + setMulti(settings.showMulti); + + setSymbols(settings.showSymbols); + if (showSymbols == Plot::ShowSymbolsAuto) + { + setSymbolsAutoAct->setChecked(true); + } + else if (showSymbols == Plot::ShowSymbolsShow) + { + setSymbolsShowAct->setChecked(true); + } + else + { + setSymbolsHideAct->setChecked(true); + } +} + void PlotManager::saveSettings(QSettings* settings) { settings->beginGroup(SettingGroup_Plot); @@ -477,6 +568,22 @@ void PlotManager::saveSettings(QSettings settings->setValue(SG_Plot_MinorGrid, showMinorGridAction.isChecked()); settings->setValue(SG_Plot_Legend, showLegendAction.isChecked()); settings->setValue(SG_Plot_MultiPlot, showMultiAction.isChecked()); + + QString showSymbolsStr; + if (showSymbols == Plot::ShowSymbolsAuto) + { + showSymbolsStr = "auto"; + } + else if (showSymbols == Plot::ShowSymbolsShow) + { + showSymbolsStr = "show"; + } + else + { + showSymbolsStr = "hide"; + } + settings->setValue(SG_Plot_Symbols, showSymbolsStr); + settings->endGroup(); } @@ -499,5 +606,27 @@ void PlotManager::loadSettings(QSettings showMultiAction.setChecked( settings->value(SG_Plot_MultiPlot, showMultiAction.isChecked()).toBool()); setMulti(showMultiAction.isChecked()); + + QString showSymbolsStr = settings->value(SG_Plot_Symbols, QString()).toString(); + if (showSymbolsStr == "auto") + { + setSymbols(Plot::ShowSymbolsAuto); + setSymbolsAutoAct->setChecked(true); + } + else if (showSymbolsStr == "show") + { + setSymbols(Plot::ShowSymbolsShow); + setSymbolsShowAct->setChecked(true); + } + else if (showSymbolsStr == "hide") + { + setSymbols(Plot::ShowSymbolsHide); + setSymbolsHideAct->setChecked(true); + } + else + { + qCritical() << "Invalid symbol setting:" << showSymbolsStr; + } + settings->endGroup(); }