summaryrefslogtreecommitdiffstats
path: root/libkdchart/KDChartPainter.h
diff options
context:
space:
mode:
authortpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2011-07-04 22:38:03 +0000
committertpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2011-07-04 22:38:03 +0000
commitdadc34655c3ab961b0b0b94a10eaaba710f0b5e8 (patch)
tree99e72842fe687baea16376a147619b6048d7e441 /libkdchart/KDChartPainter.h
downloadkmymoney-dadc34655c3ab961b0b0b94a10eaaba710f0b5e8.tar.gz
kmymoney-dadc34655c3ab961b0b0b94a10eaaba710f0b5e8.zip
Added kmymoney
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/kmymoney@1239792 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'libkdchart/KDChartPainter.h')
-rw-r--r--libkdchart/KDChartPainter.h296
1 files changed, 296 insertions, 0 deletions
diff --git a/libkdchart/KDChartPainter.h b/libkdchart/KDChartPainter.h
new file mode 100644
index 0000000..a93ef7d
--- /dev/null
+++ b/libkdchart/KDChartPainter.h
@@ -0,0 +1,296 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+ */
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+#ifndef __KDCHARTPAINTER_H__
+#define __KDCHARTPAINTER_H__
+
+#include <qmap.h>
+#include <qrect.h>
+#include <qdatetime.h>
+#include <qregion.h>
+#include <qstring.h>
+
+#include "KDChartGlobal.h"
+#include "KDChartUnknownTypeException.h"
+#include "KDChartNotEnoughSpaceException.h"
+#include "KDChartTable.h"
+#include "KDChartDataRegion.h"
+#include "KDChartParams.h"
+
+class KDChartTableDataBase;
+class KDChartCustomBox;
+class KDChartTextPiece;
+class KDChartPropertySet;
+class KDChartAxisParams;
+class QPainter;
+
+
+struct internal__KDChart__CalcValues {
+ bool processThisAxis;
+ bool bSteadyCalc;
+ bool bLogarithmic;
+ bool bDecreasing;
+ KDChartAxisParams::AxisPos basicPos;
+ QPoint orig;
+ QPoint dest;
+ double pXDeltaFactor;
+ double pYDeltaFactor;
+ double pXDelimDeltaFaktor;
+ double pYDelimDeltaFaktor;
+ double nSubDelimFactor;
+ double pDelimDelta;
+ double nTxtHeight;
+ double pTextsX;
+ double pTextsY;
+ double pTextsW;
+ double pTextsH;
+ int textAlign;
+ bool isDateTime;
+ bool autoDtLabels;
+ QDateTime dtLow;
+ QDateTime dtHigh;
+ KDChartAxisParams::ValueScale dtDeltaScale;
+ double nLow;
+ double nHigh;
+ double nDelta;
+ double nDeltaPix;
+ double pLastX;
+ double pLastY;
+};
+
+
+class KDCHART_EXPORT KDChartPainter
+{
+ public:
+ static KDChartPainter* create( KDChartParams* params,
+ bool make2nd = false );
+
+ virtual ~KDChartPainter();
+
+ static void registerPainter( const QString& painterName,
+ KDChartPainter* painter );
+ static void unregisterPainter( const QString& painterName );
+
+ virtual void setupGeometry ( QPainter* painter,
+ KDChartTableDataBase* data,
+ const QRect& rect );
+
+ virtual void paint( QPainter* painter, KDChartTableDataBase* data,
+ bool paintFirst,
+ bool paintLast,
+ KDChartDataRegionList* regions = 0,
+ const QRect* rect = 0,
+ bool mustCalculateGeometry = true );
+
+ virtual QRect outermostRect() const { return _outermostRect; }
+
+ static void drawMarker( QPainter* painter,
+ int style,
+ const QColor& color,
+ const QPoint& p,
+ const QSize& size,
+ uint align = Qt::AlignCenter );
+
+ protected:
+ KDChartPainter( KDChartParams* );
+
+ // Note: dataRow, dataCol (and data3rd, resp.)
+ // must only be set if area == KDChartEnums::AreaChartDataRegion
+ virtual void paintArea( QPainter* painter,
+ uint area,
+ KDChartDataRegionList* regions = 0,
+ uint dataRow = 0,
+ uint dataCol = 0,
+ uint data3rd = 0 );
+
+ virtual void paintDataRegionAreas( QPainter* painter,
+ KDChartDataRegionList* regions );
+
+ virtual void paintAreaWithGap( QPainter* painter,
+ QRect rect,
+ const KDChartParams::KDChartFrameSettings& settings );
+ virtual void paintCustomBoxes( QPainter* painter,
+ KDChartDataRegionList* regions );
+
+ virtual void paintData( QPainter* painter, KDChartTableDataBase* data,
+ bool paint2nd,
+ KDChartDataRegionList* regions = 0 ) = 0;
+ virtual void paintDataValues( QPainter* painter,
+ KDChartTableDataBase* data,
+ KDChartDataRegionList* regions );
+ virtual void paintAxes( QPainter* painter,
+ KDChartTableDataBase* data );
+ virtual void paintLegend( QPainter* painter,
+ KDChartTableDataBase* data );
+ virtual void paintHeaderFooter( QPainter* painter,
+ KDChartTableDataBase* data );
+ virtual bool axesOverlapping( int axis1, int axis2 );
+
+ virtual void findChartDatasets( KDChartTableDataBase* data,
+ bool paint2nd,
+ uint chart,
+ uint& chartDatasetStart,
+ uint& chartDatasetEnd );
+
+ virtual void calculateAllAxesRects( QPainter* painter,
+ bool finalPrecision,
+ KDChartTableDataBase* data );
+
+ virtual QPoint calculateAnchor( const KDChartCustomBox & box,
+ KDChartDataRegionList* regions = 0 ) const;
+ virtual QRect calculateAreaRect( bool & allCustomBoxes,
+ uint area,
+ uint dataRow,
+ uint dataCol,
+ uint data3rd,
+ KDChartDataRegionList* regions ) const;
+
+ virtual QString fallbackLegendText( uint dataset ) const;
+ virtual uint numLegendFallbackTexts( KDChartTableDataBase* data ) const;
+
+ static QPoint pointOnCircle( const QRect& rect, double angle );
+ static void makeArc( QPointArray& points,
+ const QRect& rect,
+ double startAngle, double angles );
+
+ const KDChartParams* params() const
+ {
+ return _params;
+ }
+
+ QRect _outermostRect; /* The Outermost rect covers the complete
+ area of the painter. */
+
+ QRect _innermostRect; /* The Innermost rect covers the area of
+ the painter MINUS the the global
+ left/top/right/bottom leading.
+ ALL following ones are INSIDE the Innermost.
+ */
+
+ QRect _dataRect;
+
+ QRect _axesRect; /* The Axes rect contains the Data rect. Up to 4
+ axes might be at the left and bottom as well
+ as at the right and/or at the to top of the
+ chart.
+ */
+
+ QRect _legendRect; /* The legend position depends on the parameter
+ settings. If it is not directly to the left or
+ to the right of the data display, it will be
+ below the headers and on top of the footers.
+ */
+ int _legendEMSpace; // an em space in the legend font
+ int _legendSpacing; // the line spacing in the legend font
+ int _legendHeight; // the font height in the legend font
+ int _legendLeading; // the font leading in the legend font
+ // int _legendTitleSpacing; // the line spacing in the legend title font
+ // int _legendTitleLeading; // the font leading in the legend title font
+ KDChartTextPiece* _legendTitle;
+
+ int _numLegendTexts; // the number of legend items to show
+
+ int _logicalWidth;
+ int _logicalHeight;
+ double _areaWidthP1000;
+ double _areaHeightP1000;
+
+ QMap < int, QString > _legendTexts; // precomputed legend texts
+
+ internal__KDChart__CalcValues calcVal[ KDCHART_MAX_AXES ];
+ virtual bool calculateAllAxesLabelTextsAndCalcValues(
+ QPainter* painter,
+ KDChartTableDataBase* data,
+ double areaWidthP1000,
+ double areaHeightP1000,
+ double& delimLen );
+
+ virtual void drawExtraLinesAndMarkers(
+ KDChartPropertySet& propSet,
+ const QPen& defaultPen,
+ const KDChartParams::LineMarkerStyle& defaultMarkerStyle,
+ int myPointX,
+ int myPointY,
+ QPainter* painter,
+ const KDChartAxisParams* abscissaPara,
+ const KDChartAxisParams* ordinatePara,
+ const double areaWidthP1000,
+ const double areaHeightP1000,
+ bool bDrawInFront = FALSE );
+
+ static KDChartDataRegion* drawMarker( QPainter* painter,
+ const KDChartParams* params,
+ double areaWidthP1000,
+ double areaHeightP1000,
+ int deltaX,
+ int deltaY,
+ int style,
+ const QColor& color,
+ const QPoint& p,
+ uint dataset, uint value, uint chart,
+ KDChartDataRegionList* regions = 0,
+ int* width = 0,
+ int* height = 0,
+ uint align = Qt::AlignCenter );
+
+ private:
+ // disallow copy-construction and assignment
+ KDChartPainter( const KDChartPainter& );
+ KDChartPainter& operator=( const KDChartPainter& );
+
+
+ QMap < QString, KDChartPainter* > _customPainters;
+ KDChartParams* _params;
+
+ QRect trueFrameRect( const QRect& orgRect,
+ const KDChartParams::KDChartFrameSettings* settings ) const;
+
+ int legendTitleVertGap() const;
+ QFont trueLegendTitleFont() const;
+ QFont trueLegendFont() const;
+ void calculateHorizontalLegendSize( QPainter* painter,
+ QSize& size,
+ bool& legendNewLinesStartAtLeft ) const;
+ bool mustDrawVerticalLegend() const;
+ void findLegendTexts( KDChartTableDataBase* );
+ int calculateHdFtRects( QPainter* painter,
+ double averageValueP1000,
+ int xposLeft,
+ int xposRight,
+ bool bHeader,
+ int& yposTop,
+ int& yposBottom );
+ bool _legendNewLinesStartAtLeft;
+ int _legendTitleHeight;
+ int _legendTitleWidth;
+ int _legendTitleMetricsHeight; // the font height in the legend title font
+ int _hdLeading;
+ int _ftLeading;
+};
+
+#endif