diff --git a/src/plotmanager.h b/src/plotmanager.h new file mode 100644 --- /dev/null +++ b/src/plotmanager.h @@ -0,0 +1,102 @@ +/* + Copyright © 2016 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 PLOTMANAGER_H +#define PLOTMANAGER_H + +#include +#include +#include +#include +#include + +#include +#include "plot.h" +#include "framebufferseries.h" + +class PlotManager : public QObject +{ + Q_OBJECT + +public: + explicit PlotManager(QWidget* plotArea, QObject *parent = 0); + ~PlotManager(); + /// Add a new curve with title and buffer. A color is + /// automatically chosen for curve. + void addCurve(QString title, FrameBuffer* buffer); + /// Alternative of `addCurve` for static curve data (snapshots). + void addCurve(QString title, QVector data); + /// Set the displayed title for a curve + void setTitle(unsigned index, QString title); + /// Removes curves from the end + void removeCurves(unsigned number); + /// Returns current number of curves known by plot manager + unsigned numOfCurves(); + /// Returns the list of actions to be inserted into the `View` menu + QList menuActions(); + +public slots: + /// Enable/Disable multiple plot display + void setMulti(bool enabled); + /// Update all plot widgets + void replot(); + /// Enable display of a "DEMO" label on each plot + void showDemoIndicator(bool show = true); + /// Set the Y axis + void setAxis(bool autoScaled, double yMin = 0, double yMax = 1); + /// Display an animation for snapshot + void flashSnapshotOverlay(); + +private: + bool isMulti; + QWidget* _plotArea; + QVBoxLayout* layout; ///< layout of the `plotArea` + QScrollArea* scrollArea; + QList curves; + QList plotWidgets; + bool isDemoShown; + bool _autoScaled; + double _yMin; + double _yMax; + + // menu actions + QAction showGridAction; + QAction showMinorGridAction; + QAction unzoomAction; + QAction darkBackgroundAction; + QAction showLegendAction; + QAction showMultiAction; + + void setupLayout(bool multiPlot); + /// Inserts a new plot widget to the current layout. + Plot* addPlotWidget(); + /// Returns the plot widget that given curve is attached to + Plot* plotWidget(unsigned curveIndex); + /// Common part of overloaded `addCurve` functions + void _addCurve(QwtPlotCurve* curve); + +private slots: + void showGrid(bool show = true); + void showMinorGrid(bool show = true); + void showLegend(bool show = true); + void unzoom(); + void darkBackground(bool enabled = true); +}; + +#endif // PLOTMANAGER_H