@@ -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
updateSymbols();
replot();
void Plot::onXScaleChanged()
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);
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;
@@ -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();
@@ -17,6 +17,7 @@
along with serialplot. If not, see <http://www.gnu.org/licenses/>.
#include <QActionGroup>
#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;
// 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<bool>::OVERLOAD_OF(&QAction::triggered),
[this](bool checked)
if (checked) setSymbols(ShowSymbolsAuto);
auto setSymbolAlwaysAct = setSymbolsMenu.addAction("Always Show");
setSymbolAlwaysAct->setCheckable(true);
connect(setSymbolAlwaysAct, SELECT<bool>::OVERLOAD_OF(&QAction::triggered),
if (checked) setSymbols(ShowSymbolsAlways);
auto setSymbolHideAct = setSymbolsMenu.addAction("Always Hide");
setSymbolHideAct->setCheckable(true);
connect(setSymbolHideAct, SELECT<bool>::OVERLOAD_OF(&QAction::triggered),
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<bool>::OVERLOAD_OF(&QAction::triggered),
this, &PlotManager::showGrid);
@@ -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<QAction*> 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)
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;
plot->onNumOfSamplesChanged(value);
plot->setNumOfSamples(value);
if (_xAxisAsIndex) plot->setXAxis(0, value);
@@ -26,6 +26,8 @@
#include <QVBoxLayout>
#include <QList>
#include <QSettings>
#include <QAction>
#include <QMenu>
#include <qwt_plot_curve.h>
@@ -89,6 +91,7 @@ private:
double _xMin;
double _xMax;
unsigned _numOfSamples;
// 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 showGrid(bool show = true);
Status change: