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.