KD Chart 2 [rev.2.4]
|
00001 /**************************************************************************** 00002 ** Copyright (C) 2001-2012 Klaralvdalens Datakonsult AB. All rights reserved. 00003 ** 00004 ** This file is part of the KD Chart library. 00005 ** 00006 ** Licensees holding valid commercial KD Chart licenses may use this file in 00007 ** accordance with the KD Chart Commercial License Agreement provided with 00008 ** the Software. 00009 ** 00010 ** 00011 ** This file may be distributed and/or modified under the terms of the 00012 ** GNU General Public License version 2 and version 3 as published by the 00013 ** Free Software Foundation and appearing in the file LICENSE.GPL.txt included. 00014 ** 00015 ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 00016 ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 00017 ** 00018 ** Contact info@kdab.com if any conditions of this licensing are not 00019 ** clear to you. 00020 ** 00021 **********************************************************************/ 00022 00023 #ifndef KDCHARTABSTRACTDIAGRAM_H 00024 #define KDCHARTABSTRACTDIAGRAM_H 00025 00026 #include <QList> 00027 #include <QRectF> 00028 #include <QAbstractItemView> 00029 00030 #include "KDChartGlobal.h" 00031 #include "KDChartMarkerAttributes.h" 00032 #include "KDChartAttributesModel.h" 00033 00034 namespace KDChart { 00035 00036 class AbstractCoordinatePlane; 00037 class AttributesModel; 00038 class DataValueAttributes; 00039 class PaintContext; 00040 00050 class KDCHART_EXPORT AbstractDiagram : public QAbstractItemView 00051 { 00052 Q_OBJECT 00053 Q_DISABLE_COPY( AbstractDiagram ) 00054 KDCHART_DECLARE_PRIVATE_BASE_POLYMORPHIC( AbstractDiagram ) 00055 00056 friend class AbstractCoordinatePlane; 00057 friend class CartesianCoordinatePlane; 00058 friend class PolarCoordinatePlane; 00059 00060 protected: 00061 explicit inline AbstractDiagram( 00062 Private *p, QWidget* parent, AbstractCoordinatePlane* plane ); 00063 explicit AbstractDiagram ( 00064 QWidget* parent = 0, AbstractCoordinatePlane* plane = 0 ); 00065 public: 00066 virtual ~AbstractDiagram(); 00067 00068 00072 bool compare( const AbstractDiagram* other )const; 00073 00074 00089 const QPair<QPointF, QPointF> dataBoundaries() const; 00090 00091 // protected: // FIXME: why should that be private? (Mirko) 00098 virtual void paint ( PaintContext* paintContext ) = 0; 00099 00106 virtual void resize ( const QSizeF& area ) = 0; 00107 00109 virtual void setModel ( QAbstractItemModel * model ); 00110 00112 virtual void setSelectionModel( QItemSelectionModel* selectionModel ); 00113 00142 virtual void setAttributesModel( AttributesModel* model ); 00143 00150 virtual bool usesExternalAttributesModel()const; 00151 00162 virtual AttributesModel* attributesModel() const; 00163 00166 virtual void setRootIndex ( const QModelIndex& idx ); 00167 00169 virtual QRect visualRect(const QModelIndex &index) const; 00171 virtual void scrollTo(const QModelIndex &index, ScrollHint hint = EnsureVisible); 00173 virtual QModelIndex indexAt(const QPoint &point) const; 00175 virtual QModelIndex moveCursor(CursorAction cursorAction, Qt::KeyboardModifiers modifiers); 00177 virtual int horizontalOffset() const; 00179 virtual int verticalOffset() const; 00181 virtual bool isIndexHidden(const QModelIndex &index) const; 00183 virtual void setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags command); 00185 virtual QRegion visualRegionForSelection(const QItemSelection &selection) const; 00186 virtual QRegion visualRegion(const QModelIndex &index) 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 00222 void setHidden( const QModelIndex & index, bool hidden ); 00223 00236 void setHidden( int dataset, bool hidden ); 00237 00249 void setHidden( bool hidden ); 00250 00257 bool isHidden() const; 00258 00266 bool isHidden( int dataset ) const; 00267 00275 bool isHidden( const QModelIndex & index ) const; 00276 00277 00284 void setDataValueAttributes( const QModelIndex & index, 00285 const DataValueAttributes & a ); 00286 00292 void setDataValueAttributes( int dataset, const DataValueAttributes & a ); 00293 00298 void setDataValueAttributes( const DataValueAttributes & a ); 00299 00306 DataValueAttributes dataValueAttributes() const; 00307 00315 DataValueAttributes dataValueAttributes( int dataset ) const; 00316 00325 DataValueAttributes dataValueAttributes( const QModelIndex & index ) const; 00326 00333 void setPen( const QModelIndex& index, const QPen& pen ); 00334 00340 void setPen( int dataset, const QPen& pen ); 00341 00346 void setPen( const QPen& pen ); 00347 00354 QPen pen() const; 00362 QPen pen( int dataset ) const; 00370 QPen pen( const QModelIndex& index ) const; 00371 00378 void setBrush( const QModelIndex& index, const QBrush& brush); 00379 00385 void setBrush( int dataset, const QBrush& brush ); 00386 00391 void setBrush( const QBrush& brush); 00392 00399 QBrush brush() const; 00407 QBrush brush( int dataset ) const; 00415 QBrush brush( const QModelIndex& index ) const; 00416 00423 void setUnitPrefix( const QString& prefix, int column, Qt::Orientation orientation ); 00429 void setUnitPrefix( const QString& prefix, Qt::Orientation orientation ); 00430 00437 void setUnitSuffix( const QString& suffix, int column, Qt::Orientation orientation ); 00443 void setUnitSuffix( const QString& suffix, Qt::Orientation orientation ); 00444 00453 QString unitPrefix( int column, Qt::Orientation orientation, bool fallback = false ) const; 00459 QString unitPrefix( Qt::Orientation orientation ) const; 00460 00469 QString unitSuffix( int column, Qt::Orientation orientation, bool fallback = false ) const; 00475 QString unitSuffix( Qt::Orientation orientation ) const; 00476 00481 void setAllowOverlappingDataValueTexts( bool allow ); 00482 00486 bool allowOverlappingDataValueTexts() const; 00487 00493 void setAntiAliasing( bool enabled ); 00494 00499 bool antiAliasing() const; 00500 00507 void useDefaultColors(); 00508 00514 void useRainbowColors(); 00515 00521 void useSubduedColors(); 00522 00527 QStringList itemRowLabels() const; 00528 00533 QStringList datasetLabels() const; 00534 00544 QList<QBrush> datasetBrushes() const; 00545 00555 QList<QPen> datasetPens() const; 00556 00566 QList<MarkerAttributes> datasetMarkers() const; 00567 00568 00579 void setPercentMode( bool percent ); 00580 00581 00593 bool percentMode() const; 00594 00595 virtual void paintMarker( QPainter* painter, 00596 const MarkerAttributes& markerAttributes, 00597 const QBrush& brush, const QPen&, 00598 const QPointF& point, const QSizeF& size ); 00599 00614 int datasetDimension() const; 00615 00622 void setDatasetDimension( int dimension ); 00623 00624 protected: 00625 void setDatasetDimensionInternal( int dimension ); 00626 00627 public: 00628 void update() const; 00629 00630 void paintMarker( QPainter* painter, const DataValueAttributes& a, 00631 const QModelIndex& index, 00632 const QPointF& pos ); 00633 void paintMarker( QPainter* painter, 00634 const QModelIndex& index, 00635 const QPointF& pos ); 00636 void paintDataValueText( QPainter* painter, const QModelIndex& index, 00637 const QPointF& pos, double value ); 00638 00639 // reverse mapping: 00643 QModelIndexList indexesAt( const QPoint& point ) const; 00644 00645 protected: 00646 virtual bool checkInvariants( bool justReturnTheStatus=false ) const; 00647 virtual const QPair<QPointF, QPointF> calculateDataBoundaries() const = 0; 00648 00649 protected Q_SLOTS: 00650 void setDataBoundariesDirty() const; 00651 00652 protected: 00660 virtual void paintDataValueTexts( QPainter* painter ); 00668 virtual void paintMarkers( QPainter* painter ); 00669 void setAttributesModelRootIndex( const QModelIndex& ); 00670 QModelIndex attributesModelRootIndex() const; 00671 00679 double valueForCell( int row, int column ) const; 00680 00681 Q_SIGNALS: 00690 void layoutChanged( AbstractDiagram* ); 00691 00696 void aboutToBeDestroyed(); 00697 00699 void modelsChanged(); 00700 00702 void modelDataChanged(); 00703 00705 void dataHidden(); 00706 00708 void propertiesChanged(); 00710 void viewportCoordinateSystemChanged(); 00711 00712 private: 00713 QModelIndex conditionallyMapFromSource( const QModelIndex & sourceIndex ) const; 00714 QString roundValues( double value, const int decimalPos, 00715 const int decimalDigits ) const; 00716 00717 }; 00718 00719 typedef QList<AbstractDiagram*> AbstractDiagramList; 00720 typedef QList<const AbstractDiagram*> ConstAbstractDiagramList; 00721 00725 class PrivateAttributesModel : public AttributesModel { 00726 Q_OBJECT 00727 public: 00728 explicit PrivateAttributesModel( QAbstractItemModel* model, QObject * parent = 0 ) 00729 : AttributesModel(model,parent) {} 00730 }; 00731 } 00732 00733 #endif