Skip to content
Snippets Groups Projects
Select Git revision
  • old-master
  • master default protected
  • ballinvoher protected
3 results

plotter.hh

Blame
  • user avatar
    Phil Gillaspy authored
    32d4616d
    History
    plotter.hh 2.15 KiB
    // **************************************************************************
    // File: plotter.hh
    //
    // Author:    Phil Gillaspy
    //
    // Last Modified: 04/18/2012
    //
    // Description:
    //   This is the class which plots the GQ GMC's CPM data.
    //
    //   This code is virtually copied verbatim from the book "C++ GUI
    //   Programming with Qt4.
    //
    //
    // *************************************************************************
    
    #ifndef PLOTTER_HH
    #define PLOTTER_HH
    
    #include <QMap>
    #include <QPixmap>
    #include <QVector>
    #include <QWidget>
    
    class QToolButton;
    class PlotSettings;
    
    class Plotter : public QWidget
    {
        Q_OBJECT
    
    public:
        Plotter(QWidget *parent = 0);
    
        void startSample(void);
        void setPlotSettings(const PlotSettings &settings);
        void setCurveData(int id, const QVector<QPointF> &data);
        void clearCurve(int id);
        QSize minimumSizeHint() const;
        QSize sizeHint() const;
    
        bool bScroll;
    
    public slots:
        void zoomIn();
        void zoomOut();
        void timerEvent(QTimerEvent * event);
    
    protected:
        void paintEvent(QPaintEvent *event);
        void resizeEvent(QResizeEvent *event);
        void mousePressEvent(QMouseEvent *event);
        void mouseMoveEvent(QMouseEvent *event);
        void mouseReleaseEvent(QMouseEvent *event);
        void keyPressEvent(QKeyEvent *event);
        void wheelEvent(QWheelEvent *event);
    
    private:
        void updateRubberBandRegion();
        void refreshPixmap();
        void drawGrid(QPainter *painter);
        void drawCurves(QPainter *painter);
    
        enum { Margin = 50 };
    
        QToolButton *zoomInButton;
        QToolButton *zoomOutButton;
        QMap<int, QVector<QPointF> > curveMap;
        QVector<PlotSettings> zoomStack;
        int curZoom;
        bool rubberBandIsShown;
        QRect rubberBandRect;
        QPixmap pixmap;
    
        int myTimerID;
        int sampleCnt;
    };
    
    class PlotSettings
    {
    public:
        PlotSettings();
    
        void scroll(int dx, int dy);
        void adjust();
        double spanX() const { return maxX - minX; }
        double spanY() const { return maxY - minY; }
    
        double minX;
        double maxX;
        int numXTicks;
        double minY;
        double maxY;
        int numYTicks;
    
    private:
        static void adjustAxis(double &min, double &max, int &numTicks);
    };
    
    #endif  // PLOTTER_HH