// ************************************************************************** // 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 #include #include #include 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 &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 > curveMap; QVector 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