VTK
|
00001 /*========================================================================= 00002 00003 Program: Visualization Toolkit 00004 Module: vtkQtChartAxis.h 00005 00006 Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen 00007 All rights reserved. 00008 See Copyright.txt or http://www.kitware.com/Copyright.htm for details. 00009 00010 This software is distributed WITHOUT ANY WARRANTY; without even 00011 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 00012 PURPOSE. See the above copyright notice for more information. 00013 00014 =========================================================================*/ 00015 /*------------------------------------------------------------------------- 00016 Copyright 2008 Sandia Corporation. 00017 Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, 00018 the U.S. Government retains certain rights in this software. 00019 -------------------------------------------------------------------------*/ 00020 00023 00024 #ifndef _vtkQtChartAxis_h 00025 #define _vtkQtChartAxis_h 00026 00027 #include "vtkQtChartExport.h" 00028 #include <QObject> 00029 #include <QGraphicsItem> 00030 00031 #include "vtkQtChartGraphicsItemTypes.h" // needed for enum 00032 00033 class vtkQtChartAxisInternal; 00034 class vtkQtChartAxisModel; 00035 class vtkQtChartAxisOptions; 00036 class vtkQtChartContentsArea; 00037 class vtkQtChartContentsSpace; 00038 class QGraphicsLineItem; 00039 class QVariant; 00040 00041 00045 class VTKQTCHART_EXPORT vtkQtChartAxis : public QObject, public QGraphicsItem 00046 { 00047 Q_OBJECT 00048 00049 public: 00050 enum AxisLocation 00051 { 00052 Left = 0, 00053 Bottom, 00054 Right, 00055 Top 00056 }; 00057 00058 enum AxisDomain 00059 { 00060 UnsupportedDomain = -1, 00061 Number = 0, 00062 Date, 00063 Time, 00064 String 00065 }; 00066 00067 enum {Type = vtkQtChart_AxisType}; 00068 00069 public: 00074 vtkQtChartAxis(AxisLocation location, QGraphicsItem *parent=0); 00075 virtual ~vtkQtChartAxis(); 00076 00077 virtual int type() const {return vtkQtChartAxis::Type;} 00078 00080 00081 00082 00083 00084 00085 AxisLocation getLocation() const {return this->Location;} 00086 00091 vtkQtChartAxisModel *getModel() const {return this->Model;} 00092 00096 void setModel(vtkQtChartAxisModel *model); 00097 00107 void setNeigbors(const vtkQtChartAxis *atMin, const vtkQtChartAxis *atMax); 00108 00112 void setParallelAxis(const vtkQtChartAxis *across); 00113 00117 void setContentsSpace(const vtkQtChartContentsSpace *contents); 00118 00128 void setDataAvailable(bool available); 00129 00135 bool isBestFitGenerated() const; 00136 00141 void setBestFitGenerated(bool on); 00142 00147 void getBestFitRange(QVariant &min, QVariant &max) const; 00148 00153 void setBestFitRange(const QVariant &min, const QVariant &max); 00154 00164 bool isRangePaddingUsed() const; 00165 00169 void setRangePaddingUsed(bool padRange); 00170 00181 bool isExpansionToZeroUsed() const; 00182 00186 void setExpansionToZeroUsed(bool expand); 00187 00199 bool isExtraSpaceUsed() const; 00200 00206 void setExtraSpaceUsed(bool addSpace); 00207 00212 bool isSpaceTooSmall() const; 00213 00217 void setSpaceTooSmall(bool tooSmall); 00219 00221 00222 00223 00224 00225 00226 vtkQtChartAxisOptions *getOptions() const {return this->Options;} 00227 00235 void setOptions(const vtkQtChartAxisOptions &options); 00237 00239 00240 00241 00242 00243 00244 00245 00246 void layoutAxis(const QRectF &area); 00247 00254 void adjustAxisLayout(); 00255 00266 float getPreferredSpace() const; 00267 00272 float getFontHeight() const; 00273 00281 float getMaxLabelWidth() const; 00282 00287 float getTickLength() const; 00288 00293 float getSmallTickLength() const; 00294 00299 float getTickLabelSpacing() const; 00300 00305 bool isLogScaleAvailable() const; 00306 00312 virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, 00313 QWidget *widget=0); 00315 00317 00318 virtual QRectF boundingRect() const; 00319 00328 QRectF getBounds() const; 00329 00335 bool isLabelTickVisible(int index) const; 00336 00342 float getLabelLocation(int index) const; 00343 00348 AxisDomain getAxisDomain() const; 00349 00355 bool isValueInDomain(const QVariant &value) const; 00356 00365 float getPixel(const QVariant &value) const; 00366 00376 float getZeroPixel() const; 00378 00386 static bool isLogScaleValid(const QVariant &min, const QVariant &max); 00387 00388 signals: 00390 void layoutNeeded(); 00391 00399 void pixelScaleChanged(); 00400 00401 public slots: 00403 void reset(); 00404 00408 void setOffset(float offset); 00409 00410 private slots: 00412 void handleFontChange(); 00413 00415 void handlePresentationChange(); 00416 00418 void handleColorChange(); 00419 00421 void handleAxisScaleChange(); 00422 00426 void insertLabel(int index); 00427 00431 void startLabelRemoval(int index); 00432 00436 void finishLabelRemoval(int index); 00437 00438 private: 00449 float getLabelWidthGuess(const QVariant &minimum, 00450 const QVariant &maximum) const; 00451 00455 void generateLabels(const QRectF &contents); 00456 00460 void generateLogLabels(const QRectF &contents); 00461 00462 public: 00463 static const double MinLogValue; 00464 00465 private: 00466 vtkQtChartAxisInternal *Internal; 00467 vtkQtChartAxisOptions *Options; 00468 vtkQtChartAxisModel *Model; 00469 const vtkQtChartAxis *AtMin; 00470 const vtkQtChartAxis *AtMax; 00471 const vtkQtChartAxis *Across; 00472 const vtkQtChartContentsSpace *Zoom; 00473 AxisLocation Location; 00474 }; 00475 00476 #endif