summaryrefslogtreecommitdiffstats
path: root/libkdchart/KDChartCustomBox.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/KDChartCustomBox.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/KDChartCustomBox.h')
-rw-r--r--libkdchart/KDChartCustomBox.h1043
1 files changed, 1043 insertions, 0 deletions
diff --git a/libkdchart/KDChartCustomBox.h b/libkdchart/KDChartCustomBox.h
new file mode 100644
index 0000000..f4f8694
--- /dev/null
+++ b/libkdchart/KDChartCustomBox.h
@@ -0,0 +1,1043 @@
+/* -*- 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 __KDCHARTCUSTOMBOX_H__
+#define __KDCHARTCUSTOMBOX_H__
+
+#include <qobject.h>
+#include <qtextstream.h>
+#include <qfont.h>
+#include <qdom.h>
+#include "KDChartGlobal.h"
+#include "KDChartEnums.h"
+#include "KDChartTextPiece.h"
+
+
+class KDFrame;
+
+// needed because there was no AlignAuto before Qt 3.0
+#define KDCHART_AlignAuto 0
+
+
+/** \file KDChartCustomBox.h
+ \brief Definition of a class for specifying and drawing custom boxes.
+ */
+
+/**
+ Class for specifying and drawing custom boxes.
+ */
+class KDCHART_EXPORT KDChartCustomBox :public QObject
+{
+ Q_OBJECT
+ friend class KDChartPainter;
+ friend class KDChartParams;
+
+public:
+
+ /**
+ Constructor.
+ Set default values.
+ */
+ KDChartCustomBox() :
+ _rotation( 0 ),
+ _fontSize( -10 ),
+ _fontScaleGlobal( true ),
+ _deltaX( 0 ),
+ _deltaY( 0 ),
+ _width( 0 ),
+ _height( 0 ),
+ _color( Qt::black ),
+ _paper( Qt::NoBrush ),
+ _anchorArea( KDChartEnums::AreaInnermost ),
+ _anchorPos( KDChartEnums::PosTopLeft ),
+ _anchorAlign( Qt::AlignTop + Qt::AlignLeft ),
+ _dataRow( 0 ),
+ _dataCol( 0 ),
+ _data3rd( 0 ),
+ _deltaAlign( KDCHART_AlignAuto ),
+ _deltaScaleGlobal( true ),
+ _anchorBeingCalculated( false ),
+ _parentAxisArea( -1 )
+ {
+ const KDChartTextPiece piece( 0, "", QFont( "helvetica", 8, QFont::Normal, false ) );
+ _content.deepCopy( &piece );
+ }
+
+ /**
+ Constructor.
+ Set content and font size but no position/size parameters.
+
+ \note If \c fontScaleGlobal is set to true it is not necessary to
+ specify the size of the box: if both \c width and \c height are zero
+ and \c fontScaleGlobal is true the size of the box will be calculated
+ automatically based upon the content size. In this case the content
+ size is interpreted as rich text string - even if the text is NOT
+ framed by <tt><qt></tt> and <tt></qt></tt>.
+
+ \param content The string or rich text string to be written into the box.
+ \param fontSize The size of the font to be used, see explanation above.
+ \param fontScaleGlobal If true the font size will be calculated based
+ upon the the size of the drawing area, otherwise it will be calculated
+ based upon the height of the box.
+ */
+ KDChartCustomBox( const KDChartTextPiece & content,
+ int fontSize,
+ bool fontScaleGlobal = true ) :
+ _rotation( 0 ),
+ _fontSize( fontSize ),
+ _fontScaleGlobal( fontScaleGlobal ),
+ _deltaX( 0 ),
+ _deltaY( 0 ),
+ _width( 0 ),
+ _height( 0 ),
+ _color( Qt::black ),
+ _paper( Qt::NoBrush ),
+ _anchorArea( KDChartEnums::AreaInnermost ),
+ _anchorPos( KDChartEnums::PosTopLeft ),
+ _anchorAlign( Qt::AlignTop + Qt::AlignLeft ),
+ _dataRow( 0 ),
+ _dataCol( 0 ),
+ _data3rd( 0 ),
+ _deltaAlign( KDCHART_AlignAuto ),
+ _deltaScaleGlobal( true ),
+ _anchorBeingCalculated( false ),
+ _parentAxisArea( -1 )
+ {
+ _content.deepCopy( &content );
+ }
+
+
+ /**
+ Constructor.
+ Set content and position/size parameters and the color and brush to be used.
+
+ \note If \c fontScaleGlobal is set to true it is not necessary to
+ specify the size of the box: if both \c width and \c height are zero
+ and \c fontScaleGlobal is true the size of the box will be calculated
+ automatically based upon the content size. In this case the content
+ size is interpreted as rich text string - even if the text is NOT
+ framed by <tt><qt></tt> and <tt></qt></tt>.
+
+ \param content The text piece to be displayed.
+ \param fontSize If \c fontSize value is greater 0, the value is taken as exact size,
+ if \c fontSize is less than 0 it is interpreted as being a per-mille value
+ of the size of the drawing area (or of the height of the box in case
+ \c fontScaleGlobal is set to false, resp.).
+ Normally the actual font size is calculated dynamically in methode paint.
+ <b>However</b> if fontSize is zero no calculating will take place but the
+ size of the content font is used.
+ \param fontScaleGlobal If true the font size will be calculated based
+ upon the the size of the drawing area, otherwise it will be calculated
+ based upon the height of the box.
+ \param deltaX The X distance between the box and its anchor.
+ <b>Note: </b> If greater 0, the value is taken as exact offset,
+ if less than 0, it is interpreted as being a per-mille value of the
+ size of the drawing area (or as percent value of the actual font size
+ (as returned by QFontMetrics::lineSpacing() ) if deltaScaleGlobal is FALSE, resp.).
+ Actual drawing position/size is calculated dynamically in methode trueRect.
+ \param deltaY The Y distance between the box and its anchor.
+ \param width The width of the box.
+ \param height The height of the box.
+ \param color The text color.
+ \param paper The brush to be used for the background.
+ \param area The area to which the box is to be aligned.
+ \param position The anchor position. This is the edge (or
+ the corner, resp.) of the area to which
+ the box is to be aligned.
+ \param align The way how the box is to be aligned to its anchor.
+ \param dataRow The row number of the KDChart data region that is to be used
+ as anchor area. This parameter is ignored if \c area is not \c AreaChartDataRegion.
+ \param dataCol The column number of the KDChart data region that is to be used
+ as anchor area. This parameter is ignored if \c area is not \c AreaChartDataRegion.
+ \param data3rd The third dimensions number of the KDChart data region that is to be used
+ as anchor area. This parameter is ignored if \c area is not \c AreaChartDataRegion
+ or if there is no 3-dimensional data structure.
+ \param deltaAlign The way how \c deltaX and \deltaY affect the position of the box.
+ Leave this parameter to its default value KDCHART_AlignAuto to have the delta values
+ used according to the box's main \c align settings, otherwise specify your own
+ alignment settings: e.g. right means there will be a gap between the right side of
+ the box and its anchor point - if the main \c align parameter is set to right too
+ the anchor point will to be outside of the box / if \c align is set to left
+ (but the \c deltaAlign to right) the anchor point will be inside the box.
+ Possible values for \c deltaAlign are:
+ \li \c KDCHART_AlignAuto
+ \li \c Qt::AlignLeft | Qt::AlignTop
+ \li \c Qt::AlignLeft | Qt::AlignBottom
+ \li \c Qt::AlignRight | Qt::AlignTop
+ \li \c Qt::AlignRight | Qt::AlignBottom
+ Using AlignVCenter or AlignHCenter or AlignCenter does not make sense here:
+ center delta alignment will cause KDChart to ignore the respective delta
+ settings: deltaX or deltaY or both will become ineffective.
+ \param deltaScaleGlobal If true the actual delta X and delta Y values will
+ be calculated by \c deltaX and \c deltaY based upon the size of the
+ drawing area, otherwise they will be calculated based upon the actual
+ font size.
+ */
+ KDChartCustomBox( const KDChartTextPiece & content,
+ int fontSize,
+ bool fontScaleGlobal,
+ int deltaX,
+ int deltaY,
+ int width,
+ int height,
+ const QColor & color = QColor( Qt::black ),
+ const QBrush & paper = QBrush( Qt::NoBrush ),
+ uint area = KDChartEnums::AreaInnermost,
+ KDChartEnums::PositionFlag position = KDChartEnums::PosTopLeft,
+ uint align = Qt::AlignTop + Qt::AlignLeft,
+ uint dataRow = 0,
+ uint dataCol = 0,
+ uint data3rd = 0,
+ uint deltaAlign = KDCHART_AlignAuto,
+ bool deltaScaleGlobal = true,
+ int parentAxis = -1 )
+ : _rotation( 0 ),
+ _fontSize( fontSize ),
+ _fontScaleGlobal( fontScaleGlobal ),
+ _deltaX( deltaX ),
+ _deltaY( deltaY ),
+ _width( width ),
+ _height( height ),
+ _color( color ),
+ _paper( paper ),
+ _anchorArea( area ),
+ _anchorPos( position ),
+ _anchorAlign( align ),
+ _dataRow( dataRow ),
+ _dataCol( dataCol ),
+ _data3rd( data3rd ),
+ _deltaAlign( deltaAlign ),
+ _deltaScaleGlobal( deltaScaleGlobal ),
+ _anchorBeingCalculated( false ),
+ _parentAxisArea( parentAxis )
+ {
+ _content.deepCopy( &content );
+ }
+
+
+ /**
+ Constructor.
+ Use this special constructor to specify a <b>rotated</b> box, reference
+ point of the rotation is the anchor specified by the \c area and the
+ \c position parameters.
+
+ \note If \c fontScaleGlobal is set to true it is not necessary to
+ specify the size of the box: if both \c width and \c height are zero
+ and \c fontScaleGlobal is true the size of the box will be calculated
+ automatically based upon the content size. In this case the content
+ size is interpreted as rich text string - even if the text is NOT
+ framed by <tt><qt></tt> and <tt></qt></tt>.
+
+ \param rotation The box's rotation angle in degrees (0 .. 360).
+ \param content The text piece to be displayed.
+ \param fontSize If \c fontSize value is greater 0, the value is taken as exact size,
+ if \c fontSize is less than 0 it is interpreted as being a per-mille value
+ of the size of the drawing area (or of the height of the box in case
+ \c fontScaleGlobal is set to false, resp.).
+ Normally the actual font size is calculated dynamically in methode paint.
+ <b>However</b> if fontSize is zero no calculating will take place but the
+ size of the content font is used.
+ \param fontScaleGlobal If true the font size will be calculated based
+ upon the the size of the drawing area, otherwise it will be calculated
+ based upon the height of the box.
+ \param deltaX The X distance between the box and its anchor.
+ <b>Note: </b> If greater 0, the value is taken as exact offset,
+ if less than 0, it is interpreted as being a per-mille value of the
+ width of the drawing area (or as percent value of the actual font size
+ (as returned by QFontMetrics::lineSpacing() ) if deltaScaleGlobal is FALSE, resp.).
+ Actual drawing position/size is calculated dynamically in method trueRect.
+ \param deltaY The Y distance between the box and its anchor.
+ <b>Note: </b> If greater 0, the value is taken as exact offset,
+ if less than 0, it is interpreted as being a per-mille value of the
+ height of the drawing area (or as percent value of the actual font size
+ (as returned by QFontMetrics::lineSpacing() ) if deltaScaleGlobal is FALSE, resp.).
+ Actual drawing position/size is calculated dynamically in method trueRect.
+ \param width The width of the box.
+ \param height The height of the box.
+ \param color The text color.
+ \param paper The brush to be used for the background.
+ \param area The area to which the box is to be aligned.
+ \param position The anchor position. This is the edge (or
+ the corner, resp.) of the area to which the box is to be aligned
+ and it is also used as the reference point of the rotation.
+ \param align The way how the box is to be aligned to its anchor.
+ \param dataRow The row number of the KDChart data region that is to be used
+ as anchor area. This parameter is ignored if \c area is not \c AreaChartDataRegion.
+ \param dataCol The column number of the KDChart data region that is to be used
+ as anchor area. This parameter is ignored if \c area is not \c AreaChartDataRegion.
+ \param data3rd The third dimensions number of the KDChart data region that is to be used
+ as anchor area. This parameter is ignored if \c area is not \c AreaChartDataRegion
+ or if there is no 3-dimensional data structure.
+ \param deltaAlign The way how \c deltaX and \deltaY affect the position of the box.
+ Leave this parameter to its default value KDCHART_AlignAuto to have the delta values
+ used according to the box's main \c align settings, otherwise specify your own
+ alignment settings: e.g. Qt::AlignRight means the box will be moved to the left
+ (by the amount calculated using the \c deltaX value), so there will be a gap
+ between the right side of the box and its anchor point IF the main \c align flag
+ is set to Qt::AlignRight too, so the anchor point will to be outside of the
+ box then. However if the main \c align flag is set to Qt::AlignLeft the anchor
+ point will be inside the box.
+ Possible values for \c deltaAlign are:
+ \li \c KDCHART_AlignAuto
+ \li \c Qt::AlignLeft | Qt::AlignTop
+ \li \c Qt::AlignLeft | Qt::AlignBottom
+ \li \c Qt::AlignRight | Qt::AlignTop
+ \li \c Qt::AlignRight | Qt::AlignBottom
+ Using AlignVCenter or AlignHCenter or AlignCenter does not make sense here:
+ center delta alignment will cause KDChart to ignore the respective delta
+ settings: deltaX or deltaY or both will become ineffective.
+ \note Moving of the box due to \c deltaAlign settings is applied after
+ the box is rotated: e.g. this means a gap specified by \c deltaAlign = Qt::AlignTop
+ gap will actually result in a left gap if the box is rotated by 90 degrees.
+ \param deltaScaleGlobal If true the actual delta X and delta Y values will
+ be calculated by \c deltaX and \c deltaY based upon the size of the
+ drawing area, otherwise they will be calculated based upon the actual
+ font size.
+ */
+ KDChartCustomBox( int rotation,
+ const KDChartTextPiece & content,
+ int fontSize,
+ bool fontScaleGlobal,
+ int deltaX,
+ int deltaY,
+ int width,
+ int height,
+ const QColor & color = QColor( Qt::black ),
+ const QBrush & paper = QBrush( Qt::NoBrush ),
+ uint area = KDChartEnums::AreaInnermost,
+ KDChartEnums::PositionFlag position = KDChartEnums::PosTopLeft,
+ uint align = Qt::AlignTop + Qt::AlignLeft,
+ uint dataRow = 0,
+ uint dataCol = 0,
+ uint data3rd = 0,
+ uint deltaAlign = KDCHART_AlignAuto,
+ bool deltaScaleGlobal = true,
+ int parentAxis = -1 )
+ : _rotation( rotation ),
+ _fontSize( fontSize ),
+ _fontScaleGlobal( fontScaleGlobal ),
+ _deltaX( deltaX ),
+ _deltaY( deltaY ),
+ _width( width ),
+ _height( height ),
+ _color( color ),
+ _paper( paper ),
+ _anchorArea( area ),
+ _anchorPos( position ),
+ _anchorAlign( align ),
+ _dataRow( dataRow ),
+ _dataCol( dataCol ),
+ _data3rd( data3rd ),
+ _deltaAlign( deltaAlign ),
+ _deltaScaleGlobal( deltaScaleGlobal ),
+ _anchorBeingCalculated( false ),
+ _parentAxisArea( parentAxis )
+ {
+ _content.deepCopy( &content );
+ }
+
+
+ /**
+ Creates a DOM element node that represents a custom box for use
+ in a DOM document.
+
+ \param document the DOM document to which the node will belong
+ \param parent the parent node to which the new node will be appended
+ \param elementName the name of the new node
+ \param custombox the custom box to be represented
+ */
+ static void createCustomBoxNode( QDomDocument& document,
+ QDomNode& parent,
+ const QString& elementName,
+ const KDChartCustomBox* custombox );
+
+ /**
+ Reads data from a DOM element node that represents a custom box
+ object and fills a KDChartCustomBox object with the data.
+
+ \param element the DOM element to read from
+ \param settings the custom box object to read the data into
+ */
+ static bool readCustomBoxNode( const QDomElement& element,
+ KDChartCustomBox& custombox );
+
+public slots: // PENDING(blackie) merge slots sections.
+
+ float trueFontSize( double areaWidthP1000,
+ double areaHeightP1000,
+ int rectHeight ) const;
+ int trueFontLineSpacing( double areaWidthP1000,
+ double areaHeightP1000,
+ int rectHeight ) const;
+ int trueRectAlignX(const QRect& rect) const;
+ int trueRectAlignY(const QRect& rect) const;
+ void getTrueShift( double areaWidthP1000,
+ double areaHeightP1000,
+ int rectHeight,
+ int& dX,
+ int& dY )const;
+
+
+ /**
+ Return the actual rectangle which to draw box into.
+
+ \note When ever possible, use this method, instead of the other trueRect(), that
+ has no \c QPainter parameter. Passing a QPainter will give you more exact results.
+
+ \param painter The QPainter to be used.
+ \param anchor The anchor point which the box is to be aligned to.
+ This can be any point within the painter drawing area but you
+ will probably compute a point using anchorArea(), anchorPosition(), anchorAlign()
+ (and dataRow(), dataCol(), data3rd() when dealing with KDChart data regions, resp.)
+ \param areaWidthP1000 The thousands part of the logical width
+ of the area to be used for drawing.
+ \param areaHeightP1000 The thousands part of the logical height
+ of the area to be used for drawing.
+ */
+ QRect trueRect( QPainter * painter,
+ QPoint anchor, double areaWidthP1000, double areaHeightP1000 ) const ;
+
+ /**
+ Return the actual rectangle which to draw box into.
+
+ \param anchor The anchor point which the box is to be aligned to.
+ This can be any point within the painter drawing area but you
+ will probably compute a point using anchorArea(), anchorPosition(), anchorAlign()
+ (and dataRow(), dataCol(), data3rd() when dealing with KDChart data regions, resp.)
+ \param areaWidthP1000 The thousands part of the logical width
+ of the area to be used for drawing.
+ \param areaHeightP1000 The thousands part of the logical height
+ of the area to be used for drawing.
+ */
+ virtual QRect trueRect( QPoint anchor,
+ double areaWidthP1000,
+ double areaHeightP1000 ) const ;
+
+ /**
+ Paints the box.
+
+ \param painter The QPainter to be used for drawing.
+ \param anchor The anchor point which the box is to be aligned to.
+ This can be any point within the painter drawing area but you
+ will probably compute a point using anchorArea(), anchorPosition(), anchorAlign()
+ (and dataRow(), dataCol(), data3rd() when dealing with KDChart data regions, resp.)
+ \param areaWidthP1000 The thousands part of the drawing area width.
+ \param areaHeightP1000 The thousands part of the drawing area height.
+ \param color The text color to be used.
+ \param paper The brush to be used for the background.
+ \param rect The rectangle to be drawn into. If empty the rectangle will be
+ calculated dynamically based upon the \c x, \c y, \c width, \c height values
+ (that were set via Constructor or via setPosAndSize) and based upon the
+ logical height (or width, resp.) of the painters drawing area.
+ */
+ virtual void paint( QPainter* painter,
+ QPoint anchor,
+ double areaWidthP1000,
+ double areaHeightP1000,
+ const KDFrame* frame = 0,
+ const QRect& frameRect = QRect(),
+ const QColor * color = 0,
+ const QBrush * paper = 0 ) const ;
+
+ /**
+ Specifies the rotation angle of the box in degrees (0..360).
+ */
+ void setRotation( int rotation )
+ {
+ _rotation = rotation;
+ }
+
+ /**
+ Specifies the text piece content to be drawn.
+ */
+ void setContent( const KDChartTextPiece & content )
+ {
+ _content.deepCopy( &content );
+ }
+
+ /**
+ Specifies the font size to be used.
+
+ \note If \c fontScaleGlobal is set to true it is not necessary to
+ specify the size of the box: if both \c width and \c height are zero
+ and \c fontScaleGlobal is true the size of the box will be calculated
+ automatically based upon the content size. In this case the content
+ size is interpreted as rich text string - even if the text is NOT
+ framed by <tt><qt></tt> and <tt></qt></tt>.
+
+ \param fontSize If \c fontSize value is greater 0, the value is taken as exact size,
+ if \c fontSize is less than 0 it is interpreted as being a per-mille value
+ of the size of the drawing area (or of the height of the box in case
+ \c fontScaleGlobal is set to false, resp.).
+ Normally the actual font size is calculated dynamically in methode paint.
+ <b>However</b> if fontSize is zero no calculating will take place but the
+ size of the content font is used.
+ \param fontScaleGlobal If true the font size will be calculated based
+ upon the the size of the drawing area, otherwise it will be calculated
+ based upon the height of the box.
+ */
+ void setFontSize( int fontSize, bool fontScaleGlobal )
+ {
+ _fontSize = fontSize;
+ _fontScaleGlobal = fontScaleGlobal;
+ }
+
+ /**
+ Specifies the area to which the box is to be aligned.
+ */
+ void setAnchorArea( uint area )
+ {
+ _anchorArea = area;
+ }
+
+ /**
+ Specifies the anchor position.
+ This is the edge (or the corner, resp.) of the area
+ to which the box is to be aligned.
+ */
+ void setAnchorPosition( KDChartEnums::PositionFlag position )
+ {
+ // Note if you change the parameters here, then you must also change them in wrappers/KDChartCustomBoxWrapper.h
+ _anchorPos = position;
+ }
+
+ /**
+ Specifies the way how the box is to be aligned to its anchor.
+ */
+ void setAnchorAlign( uint align )
+ {
+ _anchorAlign = align;
+ }
+
+ /**
+ Specifies the row number of the KDChart data region that is to be used
+ as anchor area. This value is ignored if anchorArea is not \c AreaChartDataRegion.
+ */
+ void setDataRow( uint dataRow )
+ {
+ _dataRow = dataRow;
+ }
+
+ /**
+ Specifies the column number of the KDChart data region that is to be used
+ as anchor area. This value is ignored if anchorArea is not \c AreaChartDataRegion.
+ */
+ void setDataCol( uint dataCol )
+ {
+ _dataCol = dataCol;
+ }
+
+ /**
+ Specifies the third dimensions number of the KDChart data region that is to be used
+ as anchor area. This value is ignored if anchorArea is not \c AreaChartDataRegion
+ or if there is no 3-dimensional data structure.
+ */
+ void setData3rd( uint data3rd )
+ {
+ _data3rd = data3rd;
+ }
+
+ /**
+ Specifies the distance between the box and the anchor point and
+ specifies the size of the box.
+
+ \param deltaX The X distance between the box and its anchor.
+ <b>Note: </b> If greater 0, the value is taken as exact offset,
+ if less than 0, it is interpreted as being a per-mille value of the
+ size of the drawing area (or as percent value of the actual font size
+ (as returned by QFontMetrics::lineSpacing() ) if deltaScaleGlobal is FALSE, resp.).
+ Actual drawing position/size is calculated dynamically in methode trueRect.
+ \param deltaY The Y distance between the box and its anchor.
+ \param width The width of the drawing region.
+ \param height The height of the drawing region.
+ \param deltaAlign the way how the values specified for deltaX and/or deltaY
+ affect the position of the box.
+ \param deltaScaleGlobal If true the actual delta X and delta Y values will
+ be calculated by \c deltaX and \c deltaY based upon the size of the
+ drawing area, otherwise they will be calculated based upon the actual
+ font size.
+
+ \sa setDistance, setSize, setDeltaAlign, setDeltaScale
+ */
+ void setDistanceAndSize( int deltaX,
+ int deltaY,
+ int width,
+ int height,
+ uint deltaAlign = KDCHART_AlignAuto,
+ bool deltaScaleGlobal = true )
+ {
+ _deltaX = deltaX;
+ _deltaY = deltaY;
+ _width = width;
+ _height = height;
+ _deltaAlign = deltaAlign;
+ _deltaScaleGlobal = deltaScaleGlobal;
+ }
+
+ /**
+ Specifies the distance between the box and the anchor point.
+
+ \note If \c fontScaleGlobal is set to true it is not necessary to
+ specify the size of the box: if both \c width and \c height are zero
+ and \c fontScaleGlobal is true the size of the box will be calculated
+ automatically based upon the content size. In this case the content
+ size is interpreted as rich text string - even if the text is NOT
+ framed by <tt><qt></tt> and <tt></qt></tt>.
+
+ \param deltaX The X distance between the box and its anchor.
+ <b>Note: </b> If greater 0, the value is taken as exact offset,
+ if less than 0, it is interpreted as being a per-mille value of the
+ size of the drawing area (or as percent value of the actual font size
+ (as returned by QFontMetrics::lineSpacing() ) if deltaScaleGlobal is FALSE, resp.).
+ Actual drawing position/size is calculated dynamically in methode trueRect.
+ \param deltaY The Y distance between the box and its anchor.
+ \param align the way how the values specified for deltaX and/or deltaY
+ affect the position of the box.
+ \param deltaScaleGlobal If true the actual delta X and delta Y values will
+ be calculated by \c deltaX and \c deltaY based upon the size of the
+ drawing area, otherwise they will be calculated based upon the actual
+ font size.
+
+ \sa setDistanceAndSize, setSize, setDeltaAlign, setDeltaScale
+ */
+ void setDistance( int deltaX,
+ int deltaY,
+ uint align = KDCHART_AlignAuto,
+ bool deltaScaleGlobal = true )
+ {
+ _deltaX = deltaX;
+ _deltaY = deltaY;
+ _deltaAlign = align;
+ _deltaScaleGlobal = deltaScaleGlobal;
+ }
+
+ /**
+ Specifies the way how the values specified for deltaX and/or deltaY
+ affect the position of the box.
+
+ Set this to KDHART_KDCHART_AlignAuto to have the delta values
+ used according to the box's main \c align settings, otherwise specify your own
+ alignment settings: e.g. right means there will be a gap between the right side of
+ the box and its anchor point - if the main \c align parameter is set to right too
+ the anchor point will to be outside of the box / if \c align is set to left
+ (but the \c deltaAlign to right) the anchor point will be inside the box.
+ Possible values for \c deltaAlign are:
+ \li \c KDCHART_AlignAuto
+ \li \c Qt::AlignLeft | Qt::AlignTop
+ \li \c Qt::AlignLeft | Qt::AlignBottom
+ \li \c Qt::AlignRight | Qt::AlignTop
+ \li \c Qt::AlignRight | Qt::AlignBottom
+ Using AlignVCenter or AlignHCenter or AlignCenter does not make sense here:
+ center delta alignment will cause KDChart to ignore the respective delta
+ settings: deltaX or deltaY or both will become ineffective.
+ \note Moving of the box due to \c deltaAlign settings is applied after
+ the box is rotated: e.g. this means a gap specified by \c deltaAlign = Qt::AlignTop
+ gap will actually result in a left gap if the box is rotated by 90 degrees.
+ \param deltaScaleGlobal If true the actual delta X and delta Y values will
+ be calculated by \c deltaX and \c deltaY based upon the size of the
+ drawing area, otherwise they will be calculated based upon the actual
+ font size.
+
+ \sa setDeltaScale, setDistance, setDistanceAndSize, deltaAlign
+ */
+ void setDeltaAlign( uint align,
+ bool deltaScaleGlobal = true )
+ {
+ _deltaAlign = align;
+ _deltaScaleGlobal = deltaScaleGlobal;
+ }
+
+ /**
+ Specifies the way how the distance between the box and its anchor
+ will be calculated.
+
+ \param deltaScaleGlobal If true the actual delta X and delta Y values will
+ be calculated by \c deltaX and \c deltaY based upon the size of the
+ drawing area, otherwise they will be calculated based upon the actual
+ font size.
+
+ \sa setDeltaAlign, setDistance, setDistanceAndSize, deltaAlign
+ */
+ void setDeltaScale( bool deltaScaleGlobal )
+ {
+ _deltaScaleGlobal = deltaScaleGlobal;
+ }
+
+ /**
+ Specifies the size of the box.
+
+ \note If \c fontScaleGlobal is set to true it is not necessary to
+ specify the size of the box: if both \c width and \c height are zero
+ and \c fontScaleGlobal is true the size of the box will be calculated
+ automatically based upon the content size. In this case the content
+ size is interpreted as rich text string - even if the text is NOT
+ framed by <tt><qt></tt> and <tt></qt></tt>.
+
+ \param width The width of the box.
+ <b>Note:</b> If greater 0, the value is taken as exact offset,
+ if less than 0, it is interpreted as being a per-mille value
+ of the logical height (or width, resp.) of the area to be used for drawing.
+ Actual drawing position/size is calculated dynamically in methode trueRect.
+ \param height The height of the box.
+
+ \sa setDistance, setDistanceAndSize, setDeltaAlign
+ */
+ void setSize( int width, int height )
+ {
+ _width = width;
+ _height = height;
+ }
+
+ /**
+ Specifies the text color to be used.
+
+ \param color The text color.
+ */
+ void setColor( QColor color )
+ {
+ _color = color;
+ }
+
+ /**
+ Specifies the brush to be used for the background.
+
+ \param paper The brush to be used for the background.
+ */
+ void setPaper( const QBrush & paper )
+ {
+ _paper = paper;
+ }
+
+ /**
+ Returns the rotation angle of the box in degrees (0..360).
+ */
+ int rotation() const
+ {
+ return _rotation;
+ }
+
+ /**
+ Returns the text piece content that is to be drawn.
+ */
+ const KDChartTextPiece & content() const
+ {
+ return _content;
+ }
+
+ /**
+ Returns the font size to be used.
+
+ \note If fontSize value is greater 0, the value is taken as exact size,
+ if less than 0, it is interpreted as being a per-mille value of the logical
+ height (or width, resp.) of the area to be used for drawing.
+ Normally the actual font size is calculated dynamically in methode paint.
+ <b>However</b> if fontSize is zero no calculating will take place but the
+ size of the content font is used.
+ */
+ int fontSize() const
+ {
+ return _fontSize;
+ }
+
+ /**
+ Returns the way how the font size is calculated <b>if</b> fontSize() is negative.
+
+ If true the font size will be calculated based upon the the size of the drawing
+ area, otherwise it will be calculated based upon the height of the box.
+ */
+ bool fontScaleGlobal() const
+ {
+ return _fontScaleGlobal;
+ }
+
+ /**
+ Returns the area to which the box is to be aligned.
+ */
+ uint anchorArea() const
+ {
+ return _anchorArea;
+ }
+
+ /**
+ Returns the anchor position.
+ This is the edge (or the corner, resp.) of the area
+ to which the box is to be aligned.
+ */
+ KDChartEnums::PositionFlag anchorPosition() const
+ {
+ return _anchorPos;
+ }
+
+ /**
+ Returns the way how the box is to be aligned to its anchor.
+ */
+ uint anchorAlign() const
+ {
+ return _anchorAlign;
+ }
+
+ /**
+ Returns the row number of the KDChart data region that is to be used
+ as anchor area. You should use this if anchorArea is \c AreaChartDataRegion
+ to find out the data region which the box is to be aligned to.
+ */
+ uint dataRow() const
+ {
+ return _dataRow;
+ }
+
+ /**
+ Returns the column number of the KDChart data region that is to be used
+ as anchor area. You should use this if anchorArea is \c AreaChartDataRegion
+ to find out the data region which the box is to be aligned to.
+ */
+ uint dataCol() const
+ {
+ return _dataCol;
+ }
+
+ /**
+ Returns the third dimensions number of the KDChart data region that is to be used
+ as anchor area. You should use this if anchorArea is \c AreaChartDataRegion
+ and if there is a 3-dimensional data structure
+ to find out the data region which the box is to be aligned to.
+ */
+ uint data3rd() const
+ {
+ return _data3rd;
+ }
+
+ /**
+ Returns the X distance between the box and its anchor.
+ <b>Note: </b> If greater 0, the value is taken as exact offset,
+ if less than 0, it is interpreted as being a per-mille value of the
+ size of the drawing area (or as percent value of the actual font size
+ (as returned by QFontMetrics::lineSpacing() ) if deltaScaleGlobal is FALSE, resp.).
+ Actual drawing position/size is calculated dynamically in methode trueRect.
+
+ \sa deltaY, deltaAlign, deltaScaleGlobal
+ */
+ int deltaX() const
+ {
+ return _deltaX;
+ }
+
+ /**
+ Returns the Y distance between the box and its anchor.
+ <b>Note: </b> If greater 0, the value is taken as exact offset,
+ if less than 0, it is interpreted as being a per-mille value of the
+ size of the drawing area (or as percent value of the actual font size
+ (as returned by QFontMetrics::lineSpacing() ) if deltaScaleGlobal is FALSE, resp.).
+ Actual drawing position/size is calculated dynamically in methode trueRect.
+
+ \sa deltaX, deltaAlign, deltaScaleGlobal
+ */
+ int deltaY() const
+ {
+ return _deltaY;
+ }
+
+ /**
+ Returns the way how the values specified for deltaX and/or deltaY
+ affect the position of the box.
+
+ \sa setDeltaAlign, deltaX, deltaY, deltaScaleGlobal
+ */
+ uint deltaAlign() const
+ {
+ return _deltaAlign;
+ }
+
+ /**
+ Returns the way how the distance between the box and its anchor
+ is calculated.
+
+ \sa setDeltaScaleGlobal, deltaX, deltaY, deltaAlign
+ */
+ bool deltaScaleGlobal() const
+ {
+ return _deltaScaleGlobal;
+ }
+
+ /**
+ Returns the width of the region where
+ to draw the box. <b>Note:</b> If greater 0, the value is the exact offset,
+ if less than 0, it is interpreted as being a per-mille value
+ of the logical height (or width, resp.) of the area to be used for drawing.
+ Actual drawing position/size is calculated dynamically in methode trueRect.
+ */
+ int width() const
+ {
+ return _width;
+ }
+
+ /**
+ Returns the height of the region where
+ to draw the box. <b>Note:</b> If greater 0, the value is the exact offset,
+ if less than 0, it is interpreted as being a per-mille value
+ of the logical height (or width, resp.) of the area to be used for drawing.
+ Actual drawing position/size is calculated dynamically in methode trueRect.
+ */
+ int height() const
+ {
+ return _height;
+ }
+
+ /**
+ Returns the text color.
+ */
+ QColor color() const
+ {
+ return _color;
+ }
+
+ /**
+ Returns the background brush.
+ */
+ const QBrush & paper() const
+ {
+ return _paper;
+ }
+
+public:
+ /**
+ Destructor. Only defined to have it virtual.
+ */
+ virtual ~KDChartCustomBox();
+
+ /**
+ Copy the settings of box \c source into this box.
+
+ \note Use this method instead of using the assignment operator.
+
+ \sa clone
+ */
+ void deepCopy( const KDChartCustomBox* source );
+
+
+ /**
+ Create a new box on the heap, copy the settings stored by
+ this box into the newly created box and return
+ the pointer to the new box.
+
+ \note Use this method instead of using the copy constructor.
+
+ \sa deepCopy
+ */
+ const KDChartCustomBox* clone() const;
+
+private:
+ KDChartCustomBox( const KDChartCustomBox& ) : QObject(0) {}
+
+protected:
+ /**
+ Internal routine for recursion handling.
+ Note: This is a const methode changing NO VITAL information
+ of the box but setting an internal, temporary flag.
+ */
+ void setInternalFlagAnchorBeingCalculated( bool flag ) const
+ {
+ KDChartCustomBox* that = const_cast<KDChartCustomBox*>(this);
+ that->_anchorBeingCalculated = flag;
+ }
+ /**
+ Internal routine for recursion handling.
+ */
+ bool anchorBeingCalculated() const
+ {
+ return _anchorBeingCalculated;
+ }
+
+ void setParentAxisArea( int parentAxis ) const
+ {
+ KDChartCustomBox* that = const_cast<KDChartCustomBox*>(this);
+ that->_parentAxisArea = parentAxis;
+ }
+
+ int parentAxisArea() const
+ {
+ return _parentAxisArea;
+ }
+
+private:
+ int _rotation;
+ KDChartTextPiece _content;
+ int _fontSize;
+ bool _fontScaleGlobal;
+ // Values to be transformed into a real rect at painting time.
+ // If greater 0, values are exact, if less than 0, values are in per-mille
+ // of the size of the drawing area.
+ int _deltaX;
+ int _deltaY;
+ int _width;
+ int _height;
+
+ QColor _color;
+ QBrush _paper;
+
+ uint _anchorArea;
+ KDChartEnums::PositionFlag _anchorPos;
+ uint _anchorAlign;
+ uint _dataRow;
+ uint _dataCol;
+ uint _data3rd;
+ uint _deltaAlign;
+ bool _deltaScaleGlobal;
+ //
+ // The following flag is NOT to be saved/restored in a file.
+ //
+ // Being a TEMPORARY flag preventing circular recursion
+ // it must be set to f a l s e
+ // after loading a KDChartCustomBox from a file.
+ bool _anchorBeingCalculated;
+ int _parentAxisArea;
+};
+
+
+/**
+ Writes the KDChartCustomBox object p as an XML document to the text stream s.
+
+ \param s the text stream to write to
+ \param p the KDChartCustomBox object to write
+ \return the text stream after the write operation
+ */
+//QTextStream& operator<<( QTextStream& s, const KDChartCustomBox& p );
+
+
+/**
+ Reads the an XML document from the text stream s into the
+ KDChartCustomBox object p
+
+ \param s the text stream to read from
+ \param p the KDChartCustomBox object to read into
+ \return the text stream after the read operation
+ */
+//QTextStream& operator>>( QTextStream& s, KDChartCustomBox& p );
+
+
+#endif