Main Page   Class Hierarchy   Compound List   File List   Compound Members   File Members  

Txq2dCanvas.h

Go to the documentation of this file.
00001 //--------------------------------------------------------------------
00002 //
00003 // File:    Txq2dCanvas.h
00004 //
00005 // Purpose: Implementation of a QWidget to draw objects
00006 //          for scientific plotting.
00007 //
00008 // Version: $Id: Txq2dCanvas.h,v 1.8 2002/01/04 20:13:39 kgl Exp $
00009 //
00010 // Copyright (c) 2000 by Tech-X Corporation.  All rights reserved.
00011 //
00012 // Author:  Kelly G. Luetkemeyer
00013 //
00014 //--------------------------------------------------------------------
00015 
00016 #ifndef TXQ2D_CANVAS_H
00017 #define TXQ2D_CANVAS_H
00018 
00019 // STL includes
00020 #include <algorithm>
00021 #include <cassert>
00022 
00023 #ifndef QT_ALTERNATE_QTSMANIP
00024 #define QT_ALTERNATE_QTSMANIP
00025 #endif
00026 
00027 // Qt includes
00028 #include <qwidget.h>
00029 #include <qobject.h>
00030 #include <qpixmap.h>
00031 #include <qpainter.h>
00032 #include <qapplication.h>
00033 #include <qcursor.h>
00034 #include <qfontmetrics.h>
00035 #include <qtextstream.h>
00036 
00037 // Txq Includes
00038 #include <TxqColorMap.h>
00039 #include <TxqClickListener.h>
00040 #include <TxqViewPort.h>
00041 #include <TxqLinViewPort.h>
00042 #include <TxqLogViewPort.h>
00043 #include <TxqLinLogViewPort.h>
00044 #include <TxqLogLinViewPort.h>
00045 #include <TxqPlotAttribs.h>
00046 #include <TxqCanvas.h>
00047 #include "TxqZoom.h"
00048 
00049 // the Drawables
00050 #include "Txq2dDrawable.h"
00051 #include "Txq2dLineSeg.h"
00052 #include "Txq2dPolygon.h"
00053 #include "Txq2dAxis.h"
00054 
00065 class Txq2dCanvas: public QWidget, public TxqCanvas
00066 {
00067   Q_OBJECT
00068 
00069 public:
00070 
00076   Txq2dCanvas(QWidget *parent=0, const char *nm=0);
00077 
00081   virtual ~Txq2dCanvas();
00082 
00087    TxqViewPort* getView() { return view; }
00088 
00094   double getXmin() { return view->getXmin();}
00095 
00101   double getXmax() { return view->getXmax();}
00102 
00108   double getYmin() { return view->getYmin();}
00109 
00115   double getYmax() { return view->getYmax();}
00116 
00123   double pixelToX( const QPoint & p) {return view->pixelToX(p);}
00124 
00131   double pixelToY( const QPoint & p) {return view->pixelToY(p);}
00132 
00140   QPoint xyToPixel( double x, double y ) {return view->xyToPixel(x,y);}
00141 
00149   short xToPixel( double x ){ return view->xToPixel(x);}
00150 
00158   short yToPixel( double y ) {return view->yToPixel(y);}
00159 
00163   void drawPixmap();
00164 
00169   void drawPixmap(QPixmap* pm);
00170 
00175   void setXmin(double val) { view->setXmin(val);}
00176  
00181   void setXmax(double val) { view->setXmax(val) ;}
00182  
00187   void setYmin(double val) { view->setYmin(val);}
00188  
00193   void setYmax(double val) { view->setYmax(val);}
00194 
00195 
00205   void setRange(double plxmin, double plymin, double plxmax, double plymax) {
00206       view->setBounds(plxmin,plymin,plxmax,plymax, width(), height());
00207       noRange=false;
00208   }
00209 
00222   void setPlotRegion(int x, int y, int width, int height);
00223 
00229   void setPlotBorder(double percent);
00230 
00245   void setPlotBorder(int left=0,  int bottom=0, 
00246                      int right=0, int top=0);
00251    void setPixmapColor(QColor qcolor) {
00252      color = qcolor;
00253      pixmap->fill( color );
00254    }
00255 
00260   void setColor(QColor color) {
00261     setPixmapColor(color);
00262   }
00263 
00268    void setPixmapColor(int i) {
00269      currentColor = i;
00270    }
00271 
00276    QColor getPixmapColor() {
00277      return color; 
00278    }
00279 
00284    QColor getColor() {
00285      return getPixmapColor();
00286    }
00287 
00291   void clearPixmap();       
00292 
00297   void setPixmap(QPixmap* newPixmap) {
00298     pixmap = newPixmap;
00299     pixmap->resize(width(), height());
00300   }
00301 
00306   QPixmap* getPixmap() {return pixmap;}
00307 
00312   QSize getPixmapSize() {return pixmap->size();}
00313 
00319   void setCache(bool isCache);
00320 
00324   void addMouseClickListener();
00325 
00330   void add(TxqDrawable *drawAble);
00331 
00336   void add(Txq2dAxis *axis); 
00343   void add(TxqAxis *axis) {TxqCanvas::add(axis);}
00344  
00349   void remove(TxqAxis *axis);
00350 
00355   void remove(TxqDrawable *d) {TxqCanvas::remove(d);}
00356 
00360   void remove() {TxqCanvas::remove();}
00361 
00367   void setCrossHairCursor(bool cross); 
00368 
00376   void setScale(int xscale, int yscale);
00377 
00382   Txq2dAxis* getXaxis() {return xAxis; }
00383 
00388   Txq2dAxis* getYaxis() {return yAxis; }
00389 
00394   bool hasXaxis();
00395 
00400   bool hasYaxis();
00401 
00406   void setTitleLabel(QString lablel);
00407  
00414   void setTitleLabel(QString lablel, double xpos, double ypos);
00415 
00420   QString getTitleLabel();
00421  
00426   void setTitleLabelFont(QFont f);
00427  
00432   QFont getTitleLabelFont();
00433  
00438   void setTitleLabelColor(QColor c);
00439  
00444   QColor getTitleLabelColor();
00445 
00450   void setZoom(int z); 
00451 
00456   void dump(QTextStream *ts);
00457 
00461    TxqViewPort* view;
00462 
00467   Txq2dLabel titleLabel;
00468  
00472   int titleHalfW;
00473  
00477   double titleHeight;
00478 
00482   bool hasTitleLabel;
00483 
00484 signals:
00485 
00494   void mouseClick(double , double );
00495 
00506   void mouseSelectPoint( double, double);
00507 
00512   void mouseClick();
00513 
00521   void mouseClick(QMouseEvent *);
00522 
00530   void mouseClick(QPoint);
00531 
00536   void mouseRightClick();
00537 
00544   void mouseMiddleClick(int x, int y);
00545   void mouseMiddleClick(QPoint);
00546 
00551   void newData();
00552 
00556   void resizeCanvasSignal();
00557 
00561   void zoomOutSignal();
00562 
00566   void clearPixmapSignal();
00567 
00568 public slots:
00569 
00576   void zoomIn(QPoint p);
00577 
00582   void zoomOut();
00583 
00588   void setSize(QSize s);
00589 
00594   void resizeCanvas(QSize newSize);
00595 
00600   void setPlotAttribs(TxqPlotAttribs *p);
00601 
00606   void updatePlotAttribs(TxqPlotAttribs *p);
00607 
00608 protected:
00609 
00613    QSize sizeHint() const;
00614 
00620   void paintEvent( QPaintEvent *g );
00621 
00625   void resizeEvent( QResizeEvent * );
00626   
00630   void closeEvent( QCloseEvent * );
00631 
00635   QPixmap* pixmap;
00639   QPixmap* clearpm;
00640 
00644   QPixmap* cachepm;
00645 
00646 
00654   void mousePressEvent(QMouseEvent *);
00655 
00663   void mouseMoveEvent(QMouseEvent *);
00664 
00671   void mouseReleaseEvent(QMouseEvent *);
00672 
00673 private:
00674 
00682   void setAxes(double xmin, double ymin, double xmax, double ymax);
00683 
00687   QColor color;
00688 
00692   int numColors;
00693 
00697   std::vector<QColor> colors;
00698 
00702   int currentColor;
00703 
00707   TxqClickListener l;
00708 
00712    TxqLogViewPort *logView;
00713 
00717    TxqLinLogViewPort *linlogView;
00718 
00722    TxqLogLinViewPort *loglinView;
00723 
00727    TxqLinViewPort *linView;
00728 
00732    TxqLinViewPort *titleView;
00733 
00737   bool noRange;
00738 
00743   double widthPercent;
00744 
00749   double heightPercent;
00750 
00754   int plotBorderLeft;
00758   int plotBorderRight;
00762   int plotBorderTop;
00766   int plotBorderBottom;
00767 
00771   bool plotBorderPercent;
00772 
00776   bool plotBorderPixel;
00777 
00781   bool plotBorderRegion;
00782 
00786   bool caching;
00787 
00791   bool newCache;
00792 
00796   bool isXaxis;
00797 
00801   bool isYaxis;
00802 
00808   Txq2dAxis *xAxis;
00809 
00815   Txq2dAxis *yAxis;
00816 
00820   bool hasTitleLocation;
00821 
00825   QFont titleLabelFont;
00826 
00830   QColor titleLabelColor;
00831 
00835   bool mouseDown;
00836 
00840   int mx, my;
00841 
00845   double xmin;
00849   double xmax;
00853   double ymin;
00857   double ymax;
00858 
00862   int zoom;
00863 
00868   bool crossHair;
00869 
00873   std::vector<double> vxmin;
00877   std::vector<double> vxmax;
00881   std::vector<double> vymin;
00885   std::vector<double> vymax;
00886 
00890   int vIndex;
00891 
00895   int myWidth;
00899   int myHeight;
00900 
00904   bool painted;
00905 
00906 };
00907 
00908 #endif
Copyright Tech-X Corporation, all rights reserved.