00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <vector>
00022 #include <qwidget.h>
00023 #include <qpainter.h>
00024
00025 class SplineInterpolator {
00026 public:
00027 vector<float> xpts,ypts;
00028 virtual float operator()(float) = 0;
00029 virtual void recalculate() = 0;
00030 };
00031
00032 class SplineGraph : public QWidget {
00033 Q_OBJECT
00034 public:
00035 SplineGraph(SplineInterpolator *, float _xmin, float _xmax, float _ymin, float _ymax);
00036 void setXRange(float,float);
00037 void setYRange(float,float);
00038 void setPoints(vector<float> &_xpts, vector<float> &_ypts);
00039
00040 protected:
00041 virtual void paintEvent( QPaintEvent*);
00042 void mousePressEvent(QMouseEvent *);
00043 void mouseReleaseEvent ( QMouseEvent *);
00044 void mouseMoveEvent ( QMouseEvent * );
00045
00046 private:
00047 SplineInterpolator *interp;
00048 float xmin,xmax,ymin,ymax,xright,xleft;
00049 QSize graphSize;
00050 int borderwidth;
00051 int gtop,gbottom,gright,gleft;
00052 QPixmap* _buffer;
00053 bool draggingPoint;
00054 int draggedPoint;
00055 float XScaleUnit,YScaleUnit;
00056
00057 int xPoint(float x);
00058 int yPoint(float y);
00059 float xPointInv(int x);
00060 float yPointInv(int y);
00061 void drawGraph();
00062 void drawScale(QPainter &p,
00063 Orientation scaleDir,
00064 int pos, int tickDir);
00065
00066 };
00067