diff --git a/src/plot.cpp b/src/plot.cpp
--- a/src/plot.cpp
+++ b/src/plot.cpp
@@ -39,6 +39,7 @@ Plot::Plot(QWidget* parent) :
isAutoScaled = true;
symbolSize = 0;
numOfSamples = 1;
+ showSymbols = ShowSymbolsAuto;
QObject::connect(&zoomer, &Zoomer::unzoomed, this, &Plot::unzoomed);
@@ -247,8 +248,38 @@ void Plot::flashSnapshotOverlay(bool lig
});
}
+void Plot::setSymbols(ShowSymbols shown)
+{
+ showSymbols = shown;
+
+ if (showSymbols == ShowSymbolsAuto)
+ {
+ calcSymbolSize();
+ }
+ else if (showSymbols == ShowSymbolsAlways)
+ {
+ symbolSize = SYMBOL_SIZE_MAX;
+ }
+ else
+ {
+ symbolSize = 0;
+ }
+
+ updateSymbols();
+ replot();
+}
+
void Plot::onXScaleChanged()
{
+ if (showSymbols == ShowSymbolsAuto)
+ {
+ calcSymbolSize();
+ updateSymbols();
+ }
+}
+
+void Plot::calcSymbolSize()
+{
auto sw = axisWidget(QwtPlot::xBottom);
auto paintDist = sw->scaleDraw()->scaleMap().pDist();
auto scaleDist = sw->scaleDraw()->scaleMap().sDist();
@@ -265,8 +296,6 @@ void Plot::onXScaleChanged()
{
symbolSize = std::min(SYMBOL_SIZE_MAX, symDisPx-SYMBOL_SHOW_AT_WIDTH+1);
}
-
- updateSymbols();
}
void Plot::updateSymbols()
@@ -297,7 +326,7 @@ void Plot::resizeEvent(QResizeEvent * ev
onXScaleChanged();
}
-void Plot::onNumOfSamplesChanged(unsigned value)
+void Plot::setNumOfSamples(unsigned value)
{
numOfSamples = value;
onXScaleChanged();
diff --git a/src/plot.h b/src/plot.h
--- a/src/plot.h
+++ b/src/plot.h
@@ -33,6 +33,13 @@
#include "scalezoomer.h"
#include "plotsnapshotoverlay.h"
+enum ShowSymbols
+{
+ ShowSymbolsAuto,
+ ShowSymbolsAlways,
+ ShowSymbolsNever
+};
+
class Plot : public QwtPlot
{
Q_OBJECT
@@ -54,6 +61,7 @@ public slots:
void darkBackground(bool enabled = true);
void setYAxis(bool autoScaled, double yMin = 0, double yMax = 1);
void setXAxis(double xMin, double xMax);
+ void setSymbols(ShowSymbols shown);
/**
* Displays an animation for snapshot.
@@ -62,7 +70,7 @@ public slots:
*/
void flashSnapshotOverlay(bool light);
- void onNumOfSamplesChanged(unsigned value);
+ void setNumOfSamples(unsigned value);
protected:
/// update the display of symbols depending on `symbolSize`
@@ -80,9 +88,11 @@ private:
PlotSnapshotOverlay* snapshotOverlay;
QwtPlotLegendItem legend;
QwtPlotTextLabel demoIndicator;
+ ShowSymbols showSymbols;
void resetAxes();
void resizeEvent(QResizeEvent * event);
+ void calcSymbolSize();
private slots:
void unzoomed();
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 "qwt_symbol.h"
#include "plot.h"
@@ -32,7 +33,8 @@ 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;
@@ -40,6 +42,7 @@ PlotManager::PlotManager(QWidget* plotAr
isDemoShown = false;
_infoModel = infoModel;
_numOfSamples = 1;
+ showSymbols = ShowSymbolsAuto;
// initalize layout and single widget
isMulti = false;
@@ -54,6 +57,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 +76,37 @@ PlotManager::PlotManager(QWidget* plotAr
showMinorGridAction.setEnabled(false);
+ // setup symbols menu
+ auto setSymbolAutoAct = setSymbolsMenu.addAction("Show When Zoomed");
+ setSymbolAutoAct->setCheckable(true);
+ setSymbolAutoAct->setChecked(true);
+ connect(setSymbolAutoAct, SELECT::OVERLOAD_OF(&QAction::triggered),
+ [this](bool checked)
+ {
+ if (checked) setSymbols(ShowSymbolsAuto);
+ });
+ auto setSymbolAlwaysAct = setSymbolsMenu.addAction("Always Show");
+ setSymbolAlwaysAct->setCheckable(true);
+ connect(setSymbolAlwaysAct, SELECT::OVERLOAD_OF(&QAction::triggered),
+ [this](bool checked)
+ {
+ if (checked) setSymbols(ShowSymbolsAlways);
+ });
+ auto setSymbolHideAct = setSymbolsMenu.addAction("Always Hide");
+ setSymbolHideAct->setCheckable(true);
+ connect(setSymbolHideAct, SELECT::OVERLOAD_OF(&QAction::triggered),
+ [this](bool checked)
+ {
+ if (checked) setSymbols(ShowSymbolsNever);
+ });
+ setSymbolsAction.setMenu(&setSymbolsMenu);
+
+ // add symbol actions to same group so that they appear as radio buttons
+ auto group = new QActionGroup(this);
+ group->addAction(setSymbolAutoAct);
+ group->addAction(setSymbolAlwaysAct);
+ group->addAction(setSymbolHideAct);
+
connect(&showGridAction, SELECT::OVERLOAD_OF(&QAction::triggered),
this, &PlotManager::showGrid);
connect(&showGridAction, SELECT::OVERLOAD_OF(&QAction::triggered),
@@ -252,6 +287,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 +400,7 @@ QList PlotManager::menuActions
actions << &darkBackgroundAction;
actions << &showLegendAction;
actions << &showMultiAction;
+ actions << &setSymbolsAction;
return actions;
}
@@ -415,6 +453,15 @@ void PlotManager::darkBackground(bool en
}
}
+void PlotManager::setSymbols(ShowSymbols shown)
+{
+ showSymbols = shown;
+ for (auto plot : plotWidgets)
+ {
+ plot->setSymbols(shown);
+ }
+}
+
void PlotManager::setYAxis(bool autoScaled, double yAxisMin, double yAxisMax)
{
_autoScaled = autoScaled;
@@ -464,7 +511,7 @@ void PlotManager::onNumOfSamplesChanged(
_numOfSamples = value;
for (auto plot : plotWidgets)
{
- plot->onNumOfSamplesChanged(value);
+ plot->setNumOfSamples(value);
if (_xAxisAsIndex) plot->setXAxis(0, value);
}
}
diff --git a/src/plotmanager.h b/src/plotmanager.h
--- a/src/plotmanager.h
+++ b/src/plotmanager.h
@@ -26,6 +26,8 @@
#include
#include
#include
+#include
+#include
#include
#include "plot.h"
@@ -89,6 +91,7 @@ private:
double _xMin;
double _xMax;
unsigned _numOfSamples;
+ ShowSymbols showSymbols;
// menu actions
QAction showGridAction;
@@ -97,6 +100,8 @@ private:
QAction darkBackgroundAction;
QAction showLegendAction;
QAction showMultiAction;
+ QAction setSymbolsAction;
+ QMenu setSymbolsMenu;
void setupLayout(bool multiPlot);
/// Inserts a new plot widget to the current layout.
@@ -105,6 +110,7 @@ private:
Plot* plotWidget(unsigned curveIndex);
/// Common part of overloaded `addCurve` functions
void _addCurve(QwtPlotCurve* curve);
+ void setSymbols(ShowSymbols shown);
private slots:
void showGrid(bool show = true);