00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef KDCHARTABSTRCOORDINATEPLANE_H
00027 #define KDCHARTABSTRCOORDINATEPLANE_H
00028
00029 #include <QObject>
00030 #include <QList>
00031
00032 #include "KDChartAbstractArea.h"
00033 #include "KDChartAbstractDiagram.h"
00034 #include "KDChartEnums.h"
00035
00036 namespace KDChart {
00037
00038 class Chart;
00039 class GridAttributes;
00040 class DataDimension;
00041
00042 typedef QList<DataDimension> DataDimensionsList;
00043
00044
00045 class KDCHART_EXPORT AbstractCoordinatePlane : public AbstractArea
00046 {
00047 Q_OBJECT
00048
00049 Q_DISABLE_COPY( AbstractCoordinatePlane )
00050 KDCHART_DECLARE_PRIVATE_DERIVED_PARENT( AbstractCoordinatePlane, Chart* )
00051
00052 friend class AbstractGrid;
00053
00054 public:
00055 enum AxesCalcMode { Linear, Logarithmic };
00056
00057 protected:
00058 explicit AbstractCoordinatePlane ( Chart* parent = 0 );
00059
00060 public:
00061 virtual ~AbstractCoordinatePlane();
00062
00069 virtual void addDiagram ( AbstractDiagram* diagram );
00070
00088 virtual void replaceDiagram ( AbstractDiagram* diagram, AbstractDiagram* oldDiagram = 0 );
00089
00098 virtual void takeDiagram( AbstractDiagram* diagram );
00099
00103 AbstractDiagram* diagram();
00104
00108 AbstractDiagramList diagrams();
00109
00113 ConstAbstractDiagramList diagrams() const;
00114
00118 virtual void layoutDiagrams() = 0;
00119
00126 virtual const QPointF translate ( const QPointF& diagramPoint ) const = 0;
00127
00129 virtual QSize minimumSizeHint() const;
00131 virtual QSizePolicy sizePolicy() const;
00132
00137 virtual double zoomFactorX() const { return 1.0; }
00138
00143 virtual double zoomFactorY() const { return 1.0; }
00144
00149 virtual void setZoomFactorX( double ) {}
00150
00155 virtual void setZoomFactorY( double ) {}
00156
00161 virtual QPointF zoomCenter() const { return QPointF(0.0, 0.0); }
00162
00168 virtual void setZoomCenter( QPointF ) {}
00169
00181 void setGlobalGridAttributes( const GridAttributes & );
00182
00188 GridAttributes globalGridAttributes() const;
00189
00208 DataDimensionsList gridDimensionsList();
00209
00217 void setReferenceCoordinatePlane( AbstractCoordinatePlane * plane );
00218
00234 AbstractCoordinatePlane * referenceCoordinatePlane() const;
00235
00237 virtual bool isEmpty() const;
00239 virtual Qt::Orientations expandingDirections() const;
00241 virtual QSize maximumSize() const;
00243 virtual QSize minimumSize() const;
00245 virtual QSize sizeHint() const;
00252 virtual void setGeometry( const QRect& r );
00254 virtual QRect geometry() const;
00255
00257 void mousePressEvent( QMouseEvent* event );
00258
00262 void setParent( Chart* parent );
00263 Chart* parent();
00264 const Chart* parent() const;
00265
00271 const bool isVisiblePoint( const QPointF& point ) const;
00272
00273 public Q_SLOTS:
00277 void update();
00281 void relayout();
00285 void layoutPlanes();
00289 void setGridNeedsRecalculate();
00290
00291 Q_SIGNALS:
00293 void destroyedCoordinatePlane( AbstractCoordinatePlane* );
00294
00296 void needUpdate();
00297
00299 void needRelayout();
00300
00302 void needLayoutPlanes();
00303
00305 void propertiesChanged();
00306
00307 protected:
00308 virtual DataDimensionsList getDataDimensionsList() const = 0;
00309
00310
00311 };
00312
00329 class DataDimension{
00330 public:
00331 DataDimension()
00332 : start( 1.0 )
00333 , end( 10.0 )
00334 , isCalculated( false )
00335 , calcMode( AbstractCoordinatePlane::Linear )
00336 , sequence( KDChartEnums::GranularitySequence_10_20 )
00337 , stepWidth( 1.0 )
00338 , subStepWidth( 0.0 )
00339 {}
00340 DataDimension( qreal start_,
00341 qreal end_,
00342 bool isCalculated_,
00343 AbstractCoordinatePlane::AxesCalcMode calcMode_,
00344 KDChartEnums::GranularitySequence sequence_,
00345 qreal stepWidth_=0.0,
00346 qreal subStepWidth_=0.0 )
00347 : start( start_ )
00348 , end( end_ )
00349 , isCalculated( isCalculated_ )
00350 , calcMode( calcMode_ )
00351 , sequence( sequence_ )
00352 , stepWidth( stepWidth_ )
00353 , subStepWidth( subStepWidth_ )
00354 {}
00362 qreal distance() const
00363 {
00364 return end-start;
00365 }
00366
00367 bool operator==( const DataDimension& r ) const
00368 {
00369 return
00370 (start == r.start) &&
00371 (end == r.end) &&
00372 (sequence == r.sequence) &&
00373 (isCalculated == r.isCalculated) &&
00374 (calcMode == r.calcMode) &&
00375 (stepWidth == r.stepWidth) &&
00376 (subStepWidth == r.subStepWidth);
00377 }
00378
00379 bool operator!=( const DataDimension& other ) const
00380 { return !operator==( other ); }
00381
00382 qreal start;
00383 qreal end;
00384 bool isCalculated;
00385 AbstractCoordinatePlane::AxesCalcMode calcMode;
00386 KDChartEnums::GranularitySequence sequence;
00387 qreal stepWidth;
00388 qreal subStepWidth;
00389 };
00390
00391 }
00392
00393 #endif