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 KDCHARTABSTRACTDIAGRAM_H
00027 #define KDCHARTABSTRACTDIAGRAM_H
00028
00029 #include <QList>
00030 #include <QRectF>
00031 #include <QAbstractItemView>
00032
00033 #include "KDChartGlobal.h"
00034 #include "KDChartMarkerAttributes.h"
00035
00036
00037 namespace KDChart {
00038
00039 class AbstractCoordinatePlane;
00040 class AttributesModel;
00041 class DataValueAttributes;
00042 class PaintContext;
00043
00053 class KDCHART_EXPORT AbstractDiagram : public QAbstractItemView
00054 {
00055 Q_OBJECT
00056 Q_DISABLE_COPY( AbstractDiagram )
00057 KDCHART_DECLARE_PRIVATE_BASE_POLYMORPHIC( AbstractDiagram )
00058
00059 friend class AbstractCoordinatePlane;
00060 friend class CartesianCoordinatePlane;
00061 friend class PolarCoordinatePlane;
00062
00063 protected:
00064 explicit inline AbstractDiagram(
00065 Private *p, QWidget* parent, AbstractCoordinatePlane* plane );
00066 explicit AbstractDiagram (
00067 QWidget* parent = 0, AbstractCoordinatePlane* plane = 0 );
00068 public:
00069 virtual ~AbstractDiagram();
00070
00071
00075 bool compare( const AbstractDiagram* other )const;
00076
00077
00092 const QPair<QPointF, QPointF> dataBoundaries() const;
00093
00094
00101 virtual void paint ( PaintContext* paintContext ) = 0;
00102
00103 public:
00110 virtual void resize ( const QSizeF& area ) = 0;
00111
00113 virtual void setModel ( QAbstractItemModel * model );
00114
00143 virtual void setAttributesModel( AttributesModel* model );
00144
00151 virtual bool usesExternalAttributesModel()const;
00152
00163 virtual AttributesModel* attributesModel() const;
00164
00167 virtual void setRootIndex ( const QModelIndex& idx );
00168
00170 virtual QRect visualRect(const QModelIndex &index) const;
00172 virtual void scrollTo(const QModelIndex &index, ScrollHint hint = EnsureVisible);
00174 virtual QModelIndex indexAt(const QPoint &point) const;
00176 virtual QModelIndex moveCursor(CursorAction cursorAction, Qt::KeyboardModifiers modifiers);
00178 virtual int horizontalOffset() const;
00180 virtual int verticalOffset() const;
00182 virtual bool isIndexHidden(const QModelIndex &index) const;
00184 virtual void setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags command);
00186 virtual QRegion visualRegionForSelection(const QItemSelection &selection) const;
00188 virtual void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight);
00190 virtual void doItemsLayout();
00191
00198 AbstractCoordinatePlane* coordinatePlane() const;
00199
00206 virtual void setCoordinatePlane( AbstractCoordinatePlane* plane );
00207
00208
00221 void setHidden( const QModelIndex & index, bool hidden );
00222
00235 void setHidden( int column, bool hidden );
00236
00248 void setHidden( bool hidden );
00249
00256 bool isHidden() const;
00257
00265 bool isHidden( int column ) const;
00266
00274 bool isHidden( const QModelIndex & index ) const;
00275
00276
00282 void setDataValueAttributes( const QModelIndex & index,
00283 const DataValueAttributes & a );
00284
00290 void setDataValueAttributes( int dataset, const DataValueAttributes & a );
00291
00296 void setDataValueAttributes( const DataValueAttributes & a );
00297
00304 DataValueAttributes dataValueAttributes() const;
00305
00313 DataValueAttributes dataValueAttributes( int column ) const;
00314
00322 DataValueAttributes dataValueAttributes( const QModelIndex & index ) const;
00323
00329 void setPen( const QModelIndex& index, const QPen& pen );
00330
00336 void setPen( int dataset, const QPen& pen );
00337
00342 void setPen( const QPen& pen );
00343
00350 QPen pen() const;
00358 QPen pen( int dataset ) const;
00365 QPen pen( const QModelIndex& index ) const;
00366
00372 void setBrush( const QModelIndex& index, const QBrush& brush);
00373
00379 void setBrush( int dataset, const QBrush& brush );
00380
00385 void setBrush( const QBrush& brush);
00386
00393 QBrush brush() const;
00401 QBrush brush( int dataset ) const;
00408 QBrush brush( const QModelIndex& index ) const;
00409
00414 void setAllowOverlappingDataValueTexts( bool allow );
00415
00419 bool allowOverlappingDataValueTexts() const;
00420
00426 void setAntiAliasing( bool enabled );
00427
00432 bool antiAliasing() const;
00433
00440 void useDefaultColors();
00441
00447 void useRainbowColors();
00448
00454 void useSubduedColors();
00455
00460 QStringList itemRowLabels() const;
00461
00466 QStringList datasetLabels() const;
00467
00477 QList<QBrush> datasetBrushes() const;
00478
00488 QList<QPen> datasetPens() const;
00489
00499 QList<MarkerAttributes> datasetMarkers() const;
00500
00501
00502
00503 void setPercentMode( bool percent );
00504 bool percentMode() const;
00505
00506 virtual void paintMarker( QPainter* painter,
00507 const MarkerAttributes& markerAttributes,
00508 const QBrush& brush, const QPen&,
00509 const QPointF& point, const QSizeF& size );
00510
00525 int datasetDimension() const;
00526
00532 void setDatasetDimension( int dimension );
00533
00534 void update() const;
00535
00536 void paintMarker( QPainter* painter, const QModelIndex& index,
00537 const QPointF& pos );
00538 void paintDataValueText( QPainter* painter, const QModelIndex& index,
00539 const QPointF& pos, double value );
00540
00541 protected:
00542 virtual bool checkInvariants( bool justReturnTheStatus=false ) const;
00543 virtual const QPair<QPointF, QPointF> calculateDataBoundaries() const = 0;
00544 void setDataBoundariesDirty() const;
00545 virtual void paintDataValueTexts( QPainter* painter );
00546 virtual void paintMarkers( QPainter* painter );
00547 void setAttributesModelRootIndex( const QModelIndex& );
00548 QModelIndex attributesModelRootIndex() const;
00549 QModelIndex columnToIndex( int column ) const;
00556 double valueForCell( int row, int column ) const;
00557
00558 Q_SIGNALS:
00567 void layoutChanged( AbstractDiagram* );
00568
00570 void modelsChanged();
00571
00573 void dataHidden();
00574
00576 void propertiesChanged();
00577
00578 private:
00579 QString roundValues( double value, const int decimalPos,
00580 const int decimalDigits ) const;
00581
00582 };
00583
00584 typedef QList<AbstractDiagram*> AbstractDiagramList;
00585 typedef QList<const AbstractDiagram*> ConstAbstractDiagramList;
00586
00587 }
00588
00589 #endif