| 1 | /*
 | 
|---|
| 2 |  * QSeisPlot.hpp
 | 
|---|
| 3 |  *
 | 
|---|
| 4 |  *  Created on: Jan 30, 2011
 | 
|---|
| 5 |  *      Author: landvogt
 | 
|---|
| 6 |  */
 | 
|---|
| 7 | 
 | 
|---|
| 8 | #ifndef QSEISPLOT_HPP
 | 
|---|
| 9 | #define QSEISPLOT_HPP
 | 
|---|
| 10 | 
 | 
|---|
| 11 | // include config.h
 | 
|---|
| 12 | #ifdef HAVE_CONFIG_H
 | 
|---|
| 13 | #include <config.h>
 | 
|---|
| 14 | #endif
 | 
|---|
| 15 | 
 | 
|---|
| 16 | //uncomment the define below to use the QwtPlotPanner instead
 | 
|---|
| 17 | //of my manual implementation
 | 
|---|
| 18 | //#define QWTPANNER
 | 
|---|
| 19 | 
 | 
|---|
| 20 | #include <qwt_global.h>
 | 
|---|
| 21 | #include <qwt_plot.h>
 | 
|---|
| 22 | #ifdef QWTPANNER
 | 
|---|
| 23 | #include <qwt_plot_panner.h>
 | 
|---|
| 24 | #endif
 | 
|---|
| 25 | #include "UIElements/Views/Qt4/Plotting/QScrollZoomer/ScrollZoomer.hpp"
 | 
|---|
| 26 | #include <QtGui/QMouseEvent>
 | 
|---|
| 27 | #include <QtCore/QList>
 | 
|---|
| 28 | #include <map>
 | 
|---|
| 29 | #include <string>
 | 
|---|
| 30 | 
 | 
|---|
| 31 | /**
 | 
|---|
| 32 |  * \class QSeisPlot
 | 
|---|
| 33 |  *
 | 
|---|
| 34 |  * This class is derived from QwtPlot.
 | 
|---|
| 35 |  * It implements the ScrollZoomer class
 | 
|---|
| 36 |  * from the Qwt Realtime example.
 | 
|---|
| 37 |  * The zoomer implementation has some flaws
 | 
|---|
| 38 |  * because the zoomer class needs to know
 | 
|---|
| 39 |  * what QRectF is the "unzoomed" view.
 | 
|---|
| 40 |  * Not all actions where this rect is changed
 | 
|---|
| 41 |  * are correctly handled at the moment!
 | 
|---|
| 42 |  *
 | 
|---|
| 43 |  * It is possible to pan around the plot canvas
 | 
|---|
| 44 |  * using the middle mouse button.
 | 
|---|
| 45 |  * The original QwtPanner implementation (available
 | 
|---|
| 46 |  * by defining "QWTPANNER") is less CPU intensive
 | 
|---|
| 47 |  * but does not pan while dragging around.
 | 
|---|
| 48 |  *
 | 
|---|
| 49 |  * This class also holds a QList of available
 | 
|---|
| 50 |  * curve colours. The list is initialised in the
 | 
|---|
| 51 |  * constructor. The QSeisPlotCurve class is
 | 
|---|
| 52 |  * implemented to fetch a colour from plot it is
 | 
|---|
| 53 |  * about to get attached to and "free the colour"
 | 
|---|
| 54 |  * if it gets detached.
 | 
|---|
| 55 |  **/
 | 
|---|
| 56 | 
 | 
|---|
| 57 | class QSeisPlot : public QwtPlot
 | 
|---|
| 58 | {
 | 
|---|
| 59 |     Q_OBJECT
 | 
|---|
| 60 | 
 | 
|---|
| 61 | public:
 | 
|---|
| 62 |     QSeisPlot(QWidget *parent,QString type);
 | 
|---|
| 63 |     ~QSeisPlot();
 | 
|---|
| 64 |     void loadSettingsFromXML(QString fileName);
 | 
|---|
| 65 |     QColor getCurveColor(std::string);
 | 
|---|
| 66 |     void freeCurveColor(QColor color);
 | 
|---|
| 67 | 
 | 
|---|
| 68 | private:
 | 
|---|
| 69 |     QList<QColor> availableColors;
 | 
|---|
| 70 |     ScrollZoomer *zoomer;
 | 
|---|
| 71 |     std::map<std::string,QColor> color_map;
 | 
|---|
| 72 | #ifdef QWTPANNER
 | 
|---|
| 73 |     QwtPlotPanner *panner;
 | 
|---|
| 74 | #else
 | 
|---|
| 75 |     QPointF startPan;
 | 
|---|
| 76 |     bool panning;
 | 
|---|
| 77 |     void mouseMoveEvent(QMouseEvent *event);
 | 
|---|
| 78 |     void mousePressEvent(QMouseEvent *event);
 | 
|---|
| 79 |     void mouseReleaseEvent(QMouseEvent *event);
 | 
|---|
| 80 | #endif
 | 
|---|
| 81 | 
 | 
|---|
| 82 | signals:
 | 
|---|
| 83 | 
 | 
|---|
| 84 | public slots:
 | 
|---|
| 85 |     void resetPlot();
 | 
|---|
| 86 |     void resetZoomer();
 | 
|---|
| 87 | };
 | 
|---|
| 88 | 
 | 
|---|
| 89 | #endif // QSEISPLOT_HPP
 | 
|---|