You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
koffice/kchart/kdchart/KDChartParams.cpp

9565 lines
312 KiB

/* -*- 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.
**
**********************************************************************/
#include <KDChartParams.h>
#include <KDChartAxisParams.h>
#include <KDChartEnums.h>
#include <KDFrame.h>
#include <KDChartCustomBox.h>
#include <KDChartTextPiece.h>
#include <KDXMLTools.h>
#ifndef KDCHART_MASTER_CVS
#include "KDChartParams.moc"
#endif
class KDChartData;
//#include <tqdom.h>
/**
\class KDChartParams KDChartParams.h
\brief Bundles the display parameters of a chart.
Bundles all parameters of a chart including the type except the
actual data displayed. Serializing an object of this type plus the
data displayed is enough to be able to recreate the chart later.
*/
//TQColor KDChartParams::_internalPointer_DataValueAutoColor = TQColor( 0,1,0 );
KDChartAutoColor* KDChartAutoColor::mInstance = NULL;
KDChartAutoColor::KDChartAutoColor()
{
}
KDChartAutoColor::KDChartAutoColor( KDChartAutoColor const& )
{
}
KDChartAutoColor::~KDChartAutoColor()
{
}
const KDChartAutoColor* KDChartAutoColor::instance()
{
if( mInstance == 0 )
mInstance = new KDChartAutoColor();
return mInstance;
}
void KDChartAutoColor::freeInstance()
{
if( mInstance )
delete mInstance;
mInstance = 0;
}
/*
static TQColor defaultColor;
QT_STATIC_CONST_IMPL TQColor & KDChartParams_AutoColor = defaultColor;
*/
/**
Constructor. Defines default values.
*/
KDChartParams::KDChartParams()
{
tempPropSetA = new KDChartPropertySet();
tempPropSetB = new KDChartPropertySet();
// GENERAL
// Avoid Purify UMR
_maxDatasetColor = 1;
_maxDatasetSourceMode = 0;
_setChartSourceModeWasUsed = false;
_customBoxDictMayContainHoles = false;
// Set the default font params flag for data value texts
// but do *not* call setPrintDataValues() there since
// this will be called internally by setChartType() below.
setPrintDataValuesWithDefaultFontParams( KDCHART_ALL_CHARTS, false );
_printDataValuesSettings._dataValuesShowInfinite = true;
_printDataValuesSettings2._dataValuesShowInfinite = true;
setAllowOverlappingDataValueTexts( false );
#if COMPAT_TQT_VERSION >= 0x030100
setOptimizeOutputForScreen( false );
#else
setOptimizeOutputForScreen( true );
#endif
setGlobalLeading( 0,0,0,0 );
// Default type is bar charts
setChartType( Bar );
// By default, there is no additional chart type
setAdditionalChartType( NoType );
// Default is to show all values.
setNumValues( static_cast<unsigned int>( -1 ) );
_defaultFont = TQFont( "helvetica", 8, TQFont::Normal, false );
// The default frame settings: no border, no corners, no background
_noFrame.clearAll();
// The default frame settings: no inner gap, no outer gap and use the _noFrame
// *** no need to initialize _noFrameSettings: it is initialized by a default c'tor!
// The default brightness of shadow colors (needs to be set
// before the data colors to avoid an UMR).
setShadowBrightnessFactor( 1.0 );
// The default shadow fill style.
setShadowPattern( Qt::SolidPattern );
// Some default colors for the data.
setDataDefaultColors();
// Default color for data display outlines.
setOutlineDataColor( black );
// Default line width for data display outlines.
setOutlineDataLineWidth( 1 );
// Default line style for data display outlines.
setOutlineDataLineStyle( Qt::SolidLine );
// END GENERAL
setDataArea( TQRect( TQPoint(0,0), TQSize(0,0)) );
setLegendArea(TQRect( TQPoint(0,0), TQSize(0,0)) );
// BAR CHART-SPECIFIC
// Default bar subtype is normal
setBarChartSubType( BarNormal );
// Default is not to draw 3D bars
setThreeDBars( false );
// Default is to used shadowed colors for 3D bar effects
setThreeDBarsShadowColors( true );
// Default angle for 3D bars is 45 degrees.
setThreeDBarAngle( 45 );
// Default depth of 3D bars is 1.0
setThreeDBarDepth( 1.0 );
// Default gap between datasets is 6 per mille of chart data area.
setDatasetGap( 6 );
setDatasetGapIsRelative( true );
// Default gap between value blocks is 24 per mille of chart data area.
setValueBlockGap( 24 );
setValueBlockGapIsRelative( true );
// Default is to have the bar width's calculated indiidually
setBarWidth( KDCHART_AUTO_SIZE );
// reset the special indicator members storing the number
// of bars that were drawn last time / could not be drawn
// due to too less horizontal space
setBarsDisplayed( 0 );
setBarsLeft( 0 );
// By default, excess arrows are drawn in a split fashion
setDrawSolidExcessArrows( false );
// END BAR CHART-SPECIFIC
// LINE/AREA CHART-SPECIFIC
// Normal lines by default
setLineChartSubType( LineNormal );
// No markers by default
setLineMarker( false );
// Lines have a width of 1 pixel by default
setLineWidth( 1 );
// Lines are solid by default
setLineStyle( Qt::SolidLine );
// Lines have the same color as their
// respective data points by default
setLineColor();
// Default line marker styles and size
_maxDatasetLineMarkerStyle = 0; // avoid UMR
setLineMarkerStyle( 0, LineMarkerCircle );
setLineMarkerStyle( 1, LineMarkerSquare );
setLineMarkerStyle( 2, LineMarkerDiamond );
setLineMarkerSize( TQSize( 6, 6 ) );
// 3D line settings
setThreeDLines( false );
setThreeDLineDepth( 10 );
/* temporary disabled:
setThreeDLineXRotation( 30 );
setThreeDLineYRotation( 30 );
*/
setThreeDLineXRotation( 15 );
setThreeDLineYRotation( 15 );
// Normal areas by default
setAreaChartSubType( AreaNormal );
// Areas are filled below the value points by default.
setAreaLocation( AreaBelow );
// END LINE/AREA CHART-SPECIFIC
// POLAR CHART-SPECIFIC
// Normal polar charts by default
setPolarChartSubType( PolarNormal );
// Have markers by default
setPolarMarker( true );
// Polar charts show the zero point at the right side of the circle
setPolarZeroDegreePos( 0 );
// Lines have a width of 3/1000 of the chart's min size
// (either width or height) by default
setPolarLineWidth( -3 );
// Default polar marker styles and size
_maxDatasetPolarMarkerStyle = 0; // avoid UMR
setPolarMarkerStyle( 0, PolarMarkerCircle );
setPolarMarkerStyle( 1, PolarMarkerSquare );
setPolarMarkerStyle( 2, PolarMarkerDiamond );
setPolarMarkerSize( TQSize( -40,-40 ) );
// default circular axes delimiters
setPolarRotateCircularLabels( false );
setPolarDelimsAndLabelsAtPos( KDChartEnums::PosTopLeft, false, false );
setPolarDelimsAndLabelsAtPos( KDChartEnums::PosTopCenter, true, true );
setPolarDelimsAndLabelsAtPos( KDChartEnums::PosTopRight, false, false );
setPolarDelimsAndLabelsAtPos( KDChartEnums::PosCenterLeft, false, false );
setPolarDelimsAndLabelsAtPos( KDChartEnums::PosCenterRight, false, false );
setPolarDelimsAndLabelsAtPos( KDChartEnums::PosBottomLeft, false, false );
setPolarDelimsAndLabelsAtPos( KDChartEnums::PosBottomCenter, true, true );
setPolarDelimsAndLabelsAtPos( KDChartEnums::PosBottomRight, false, false );
/* for test:
setPolarDelimsAndLabelsAtPos( KDChartEnums::PosTopLeft, true, true );
setPolarDelimsAndLabelsAtPos( KDChartEnums::PosTopCenter, true, true );
setPolarDelimsAndLabelsAtPos( KDChartEnums::PosTopRight, true, true );
setPolarDelimsAndLabelsAtPos( KDChartEnums::PosCenterRight, true, true );
setPolarDelimsAndLabelsAtPos( KDChartEnums::PosBottomRight, true, true );
setPolarDelimsAndLabelsAtPos( KDChartEnums::PosBottomCenter, true, true );
setPolarDelimsAndLabelsAtPos( KDChartEnums::PosBottomLeft, true, true );
setPolarDelimsAndLabelsAtPos( KDChartEnums::PosCenterLeft, true, true );
*/
// END POLAR CHART-SPECIFIC
// PIE/RING CHART-SPECIFIC
// Pie/ring charts do not explode by default.
setExplode( false );
// But if they do, the explode factor is 10%
setExplodeFactor( 0.1 );
// setExplodeValues() is not called for initialization, the default
// empty list is the default.
// Flat pies by default
setThreeDPies( false );
// Height of 3D effect
setThreeDPieHeight( 20 );
// Start of pie circle
setPieStart( 0 );
// Start of ring circle
setRingStart( 0 );
// Ring thickness is constant by default
setRelativeRingThickness( false );
// END PIE/RING CHART-SPECIFIC
// HILO CHART-SPECIFIC
// Simple HiLo charts by default
setHiLoChartSubType( KDChartParams::HiLoSimple );
setHiLoChartPrintLowValues( false );
setHiLoChartPrintHighValues( false );
setHiLoChartPrintOpenValues( false );
setHiLoChartPrintCloseValues( false );
// BOX+WHISKER CHART-SPECIFIC
// Simple Box-and-Whisker charts by default
setBWChartSubType( KDChartParams::BWSimple );
setBWChartFences(1.5, 1.5, 3.0, 3.0);
setBWChartOutValMarkerSize( -25 );
setBWChartPrintStatistics( BWStatValALL, false );
setBWChartBrush( TQt::white );
// LEGEND
// Distance between legend and data.
setLegendSpacing( 20 );
// Position of the legend
setLegendPosition( LegendRight );
// Qt::Orientation of the legend
setLegendOrientation( Qt::Vertical );
// Whether the legend shall show lines or just
// show the markers (or squares, resp.)
setLegendShowLines( false );
// Where the legend labels come from
setLegendSource( LegendAutomatic );
// legend texts are drawn in black by default
setLegendTextColor( TQt::black );
// legend font size is calculated dynamically, but ignore the font size
setLegendFont( TQFont( "helvetica", 10, TQFont::Normal, false ), false );
// legend font size is calculated dynamically:
// 40 / 1000 of the minimal value of
// the printable area height and width
setLegendFontRelSize( 40 );
// the default legend title is "Legend"
setLegendTitleText( tr( "Legend" ) );
// legend title is drawn in black by default
setLegendTitleTextColor( TQt::black );
// legend title font size is calculated dynamically, but ignore
// the font size
setLegendTitleFont( TQFont( "helvetica", 12, TQFont::Normal, false ), false );
// legend title font size is calculated dynamically:
// 50 / 1000 of the minimal value of
// the printable area height and width
setLegendTitleFontRelSize( 50 );
// END LEGEND
// AXES
setDefaultAxesTypes();
// activate bottom (ordinate) and left (abcissa) axis
activateDefaultAxes();
// END AXES
// HEADERS/FOOTERS
// Set a default font for all sections not taking the build-in
// defaults from c'tor KDChartParams::HdFtParams::HdFtParams()
TQFont defaultHdFtFont( "helvetica", 14, TQFont::Normal, false );
int relHd0Size = 15;
int relHdSize = 22;
int relHd2Size = 19;
int relFt0Size = 15;
int relFtSize = 19;
int relFt2Size = 12;
setHeaderFooterFont( KDChartParams::HdFtPosHeader0,
defaultHdFtFont, true, relHd0Size );
setHeaderFooterFont( KDChartParams::HdFtPosHeader0L,
defaultHdFtFont, true, relHd0Size );
setHeaderFooterFont( KDChartParams::HdFtPosHeader0R,
defaultHdFtFont, true, relHd0Size );
setHeaderFooterFont( KDChartParams::HdFtPosHeader,
defaultHdFtFont, true, relHdSize );
setHeaderFooterFont( KDChartParams::HdFtPosHeaderL,
defaultHdFtFont, true, relHdSize );
setHeaderFooterFont( KDChartParams::HdFtPosHeaderR,
defaultHdFtFont, true, relHdSize );
setHeaderFooterFont( KDChartParams::HdFtPosHeader2,
defaultHdFtFont, true, relHd2Size );
setHeaderFooterFont( KDChartParams::HdFtPosHeader2L,
defaultHdFtFont, true, relHd2Size );
setHeaderFooterFont( KDChartParams::HdFtPosHeader2R,
defaultHdFtFont, true, relHd2Size );
setHeaderFooterFont( KDChartParams::HdFtPosFooter0,
defaultHdFtFont, true, relFt0Size );
setHeaderFooterFont( KDChartParams::HdFtPosFooter0L,
defaultHdFtFont, true, relFt0Size );
setHeaderFooterFont( KDChartParams::HdFtPosFooter0R,
defaultHdFtFont, true, relFt0Size );
setHeaderFooterFont( KDChartParams::HdFtPosFooter,
defaultHdFtFont, true, relFtSize );
setHeaderFooterFont( KDChartParams::HdFtPosFooterL,
defaultHdFtFont, true, relFtSize );
setHeaderFooterFont( KDChartParams::HdFtPosFooterR,
defaultHdFtFont, true, relFtSize );
setHeaderFooterFont( KDChartParams::HdFtPosFooter2,
defaultHdFtFont, true, relFt2Size );
setHeaderFooterFont( KDChartParams::HdFtPosFooter2L,
defaultHdFtFont, true, relFt2Size );
setHeaderFooterFont( KDChartParams::HdFtPosFooter2R,
defaultHdFtFont, true, relFt2Size );
// END HEADERS/FOOTERS
// PROPERTY SETS
tempPropSetA->fullReset("normal data");
setProperties(KDCHART_PROPSET_NORMAL_DATA, *tempPropSetA);
// don't show the line, don't show the marker
tempPropSetA->setName("transparent data");
tempPropSetA->setLineStyle( KDChartPropertySet::OwnID, Qt::NoPen );
tempPropSetA->setShowMarker( KDChartPropertySet::OwnID, false );
setProperties(KDCHART_PROPSET_TRANSPARENT_DATA, *tempPropSetA);
// don't show line nor marker, but do show the horizontal line
tempPropSetA->setName("horizontal line");
tempPropSetA->setExtraLinesAlign( KDChartPropertySet::OwnID, TQt::AlignLeft | TQt::AlignRight );
setProperties(KDCHART_PROPSET_HORI_LINE, *tempPropSetA);
// don't show line nor marker, but do show the vertical line
tempPropSetA->setName("vertical line");
tempPropSetA->setExtraLinesAlign( KDChartPropertySet::OwnID, TQt::AlignTop | TQt::AlignBottom );
setProperties(KDCHART_PROPSET_VERT_LINE, *tempPropSetA);
// END PROPERTY SETS
}
/**
Destructor. Only defined to have it virtual.
*/
KDChartParams::~KDChartParams()
{
KDChartAutoColor::freeInstance();
delete tempPropSetA;
delete tempPropSetB;
}
// GENERAL
/** @name General parameters.
These methods set general parameters that apply to several or all chart types.
*/
//@{
/**
Stores a new property set: data are stored by value so you may
use your \c rSet instance for other purpose later...
\returns The property set's ID to be used for later retrieving
the property information by calling the properties() function
or for assigning these properties to a data cell - either in the
KDChartData constructor or by calling KDChartData::setPropertySet().
\note The property set's ID may also be retrieved by calling
<b>set.id()</b> after calling registerProperties( set )
\note The predefined (build-in) property ids (like KDCHART_PROPSET_NORMAL_DATA
and KDCHART_PROPSET_TRANSPARENT_DATA) must not be registered
but should be used without further initialization.
\sa KDCHART_PROPSET_NORMAL_DATA, KDCHART_PROPSET_TRANSPARENT_DATA
\sa KDCHART_PROPSET_HORI_LINE, KDCHART_PROPSET_VERT_LINE
\sa KDChartData::setPropertySet
\sa removeProperties
*/
int KDChartParams::registerProperties( KDChartPropertySet& rSet )
{
_propertySetList.setAutoDelete( true );
rSet.mOwnID = _propertySetList.count();
_propertySetList.insert( rSet.mOwnID, rSet.clone() );
return rSet.mOwnID;
}
/**
Overwrites a property set with a new property set.
\note This function might also be used to initialy store
a property set using a specific ID number, but note
that another property set having the same number
would be replaced by this property set automatically. Therefor
in general it is better to use the registerProperties function
to initially obtain a unique ID number for your new property set.
\returns TRUE if the property set had been stored before,
or FALSE if the set was now stored initially.
\sa KDCHART_PROPSET_TRANSPARENT_DATA
\sa KDCHART_PROPSET_HORI_LINE, KDCHART_PROPSET_VERT_LINE
\sa KDChartData::setPropertySet
\sa removeProperties
*/
void KDChartParams::setProperties( int id, KDChartPropertySet& rSet )
{
_propertySetList.setAutoDelete( true );
rSet.mOwnID = id;
_propertySetList.replace( rSet.mOwnID, rSet.clone() );
}
/**
Removes a property set from the registry
that was registered via registerProperties().
\note It is not possible to remove the build-in default property set:
function calls using KDCHART_PROPSET_NORMAL_DATA as ID
will be ignored.
\returns TRUE if the property set was found and removed, or FALSE
if the set was not found or KDCHART_PROPSET_NORMAL_DATA
was specified as ID value.
\sa registerProperties, setProperties
*/
bool KDChartParams::removeProperties( int id )
{
_propertySetList.setAutoDelete( true );
// Removing the default property set is not allowed!
if( KDCHART_PROPSET_NORMAL_DATA == id )
return false;
return _propertySetList.remove( id );
}
/**
Retrieves the values specified for a property set that
was stored by registerProperties().
Use this function to retrieve the exact specification
of a property set.
Don't use this function to retrieve the properties that are
valid for a given data cell but use KDChartParams::calculateProperties()
instead.
\note This function does <b>not</b> return a pointer
to the property set itself but a copy of the data
stored therein. To change a stored property set
you may use the setProperties() function.
\returns TRUE if the property set was found, FALSE
if it no property set was registred with this ID.
\sa registerProperties, KDChartData::setPropertySet
*/
bool KDChartParams::properties( int id, KDChartPropertySet& rSet ) const
{
const KDChartPropertySet* R = _propertySetList.find( id );
const bool bFound = (0 != R);
if( bFound )
rSet.deepCopy( R );
return bFound;
}
/**
Retrieves the internal property set object that
created when you called registerProperties().
Use this function to access a property set for modifying it directly.
Don't use this function to retrieve the properties that are
valid for a given data cell but use KDChartParams::calculateProperties()
instead.
\note This function <b>does</b> return a pointer
to the property set itself, so you can directly modify its contents.
<b>However</b> you have to make sure NOT to delete this pointer,
since KDChartParams is owning it, so it would try to free
the pointer again later, most likely resulting in a program crash.
To delete a stored property set you may use the removeProperties() function.
\returns A pointer to the internally stored property set if the property set was found,
Zero if no property set was registred with this ID.
\sa registerProperties, removeProperties, KDChartData::setPropertySet
*/
KDChartPropertySet* KDChartParams::properties( int id )
{
return _propertySetList.find( id );
}
/**
Retrieves the values that correspond to a property set by
reading this set's properties and obtaining other property
set's values if necessary (according to ID numbers that might
be stored in the property set).
Use this function to retrieve the properties that are
valid for a given data cell.
Don't use this function to retrieve the exact specification
of a property set but use KDChartParams::properties() instead.
\returns TRUE if the property set was found, FALSE
if it no property set was registred with this ID.
\sa registerProperties, KDChartData::setPropertySet
*/
bool KDChartParams::calculateProperties( int startId, KDChartPropertySet& rSet ) const
{
KDChartPropertySet& startSet = *tempPropSetA;
startSet.quickReset("");
rSet.deepCopy( &startSet ); // reset all properties of rSet to the default !!
//qDebug("in KDChartParams::calculateProperties():");
//qDebug(" startId: %i",startId);
//qDebug(" startSet: %s",startSet.name().latin1());
bool bOk = properties(startId, startSet);
if( bOk ){
int lineWidth;
TQColor lineColor;
Qt::PenStyle lineStyle;
bool showMarker;
uint markerAlign;
TQSize markerSize;
TQColor markerColor;
int markerStyle;
uint extraLinesAlign;
bool extraLinesInFront;
int extraLinesLength;
int extraLinesWidth;
TQColor extraLinesColor;
Qt::PenStyle extraLinesStyle;
uint extraMarkersAlign;
TQSize extraMarkersSize;
TQColor extraMarkersColor;
int extraMarkersStyle;
bool showBar;
TQColor barColor;
TQBrush areaBrush;
// c'tor sets all IDs to unknown by default
KDChartPropertySet& propSet = *tempPropSetB;
propSet.quickReset("");
// PENDING(khz) replace the rustic depth counter i by a smart way
// to quickly and safely recognize forbidden circular ID dependencies
// *without* using this artificial maximal tree depth limitation.
const int maxDepth = 1000;
int i;
int id;
// retrieve lineWidth
propSet.deepCopy( &startSet ); i=0;
do{
if( propSet.hasOwnLineWidth( id, lineWidth ) ){
rSet.setLineWidth( KDChartPropertySet::OwnID, lineWidth );
break;
}else if( KDChartPropertySet::UndefinedID == id || maxDepth < i )
break;
++i;
}while( properties(id, propSet) );
// retrieve lineColor
propSet.deepCopy( &startSet ); i=0;
do{
if( propSet.hasOwnLineColor( id, lineColor ) ){
rSet.setLineColor( KDChartPropertySet::OwnID, lineColor );
break;
}else if( KDChartPropertySet::UndefinedID == id || maxDepth < i )
break;
++i;
}while( properties(id, propSet) );
// retrieve lineStyle
propSet.deepCopy( &startSet ); i=0;
do{
if( propSet.hasOwnLineStyle( id, lineStyle ) ){
rSet.setLineStyle( KDChartPropertySet::OwnID, lineStyle );
break;
}else if( KDChartPropertySet::UndefinedID == id || maxDepth < i )
break;
++i;
}while( properties(id, propSet) );
// markers at cell value position:
// retrieve showMarker
propSet.deepCopy( &startSet ); i=0;
do{
if( propSet.hasOwnShowMarker( id, showMarker ) ){
rSet.setShowMarker( KDChartPropertySet::OwnID, showMarker );
break;
}else if( KDChartPropertySet::UndefinedID == id || maxDepth < i )
break;
++i;
}while( properties(id, propSet) );
// retrieve marker alignment
propSet.deepCopy( &startSet ); i=0;
do{
if( propSet.hasOwnMarkerAlign( id, markerAlign ) ){
rSet.setMarkerAlign( KDChartPropertySet::OwnID, markerAlign );
break;
}else if( KDChartPropertySet::UndefinedID == id || maxDepth < i )
break;
++i;
}while( properties(id, propSet) );
// retrieve marker size
propSet.deepCopy( &startSet ); i=0;
do{
if( propSet.hasOwnMarkerSize( id, markerSize ) ){
rSet.setMarkerSize( KDChartPropertySet::OwnID, markerSize );
break;
}else if( KDChartPropertySet::UndefinedID == id || maxDepth < i )
break;
++i;
}while( properties(id, propSet) );
// retrieve marker color
propSet.deepCopy( &startSet ); i=0;
do{
if( propSet.hasOwnMarkerColor( id, markerColor ) ){
rSet.setMarkerColor( KDChartPropertySet::OwnID, markerColor );
break;
}else if( KDChartPropertySet::UndefinedID == id || maxDepth < i )
break;
++i;
}while( properties(id, propSet) );
// retrieve marker style
propSet.deepCopy( &startSet ); i=0;
do{
if( propSet.hasOwnMarkerStyle( id, markerStyle ) ){
rSet.setMarkerStyle( KDChartPropertySet::OwnID, markerStyle );
break;
}else if( KDChartPropertySet::UndefinedID == id || maxDepth < i )
break;
++i;
}while( properties(id, propSet) );
// extra lines:
// retrieve alignment of extra lines
propSet.deepCopy( &startSet ); i=0;
do{
if( propSet.hasOwnExtraLinesAlign( id, extraLinesAlign ) ){
rSet.setExtraLinesAlign( KDChartPropertySet::OwnID, extraLinesAlign );
break;
}else if( KDChartPropertySet::UndefinedID == id || maxDepth < i )
break;
++i;
}while( properties(id, propSet) );
// retrieve whether the extra lines shall be printed in front of the normal lines
propSet.deepCopy( &startSet ); i=0;
do{
if( propSet.hasOwnExtraLinesInFront( id, extraLinesInFront ) ){
rSet.setExtraLinesInFront( KDChartPropertySet::OwnID, extraLinesInFront );
break;
}else if( KDChartPropertySet::UndefinedID == id || maxDepth < i )
break;
++i;
}while( properties(id, propSet) );
// retrieve lineLength
propSet.deepCopy( &startSet ); i=0;
do{
if( propSet.hasOwnExtraLinesLength( id, extraLinesLength ) ){
rSet.setExtraLinesLength( KDChartPropertySet::OwnID, extraLinesLength );
break;
}else if( KDChartPropertySet::UndefinedID == id || maxDepth < i )
break;
++i;
}while( properties(id, propSet) );
// retrieve lineWidth
propSet.deepCopy( &startSet ); i=0;
do{
if( propSet.hasOwnExtraLinesWidth( id, extraLinesWidth ) ){
rSet.setExtraLinesWidth( KDChartPropertySet::OwnID, extraLinesWidth );
break;
}else if( KDChartPropertySet::UndefinedID == id || maxDepth < i )
break;
++i;
}while( properties(id, propSet) );
// retrieve lineColor
propSet.deepCopy( &startSet ); i=0;
do{
if( propSet.hasOwnExtraLinesColor( id, extraLinesColor ) ){
rSet.setExtraLinesColor( KDChartPropertySet::OwnID, extraLinesColor );
break;
}else if( KDChartPropertySet::UndefinedID == id || maxDepth < i )
break;
++i;
}while( properties(id, propSet) );
// retrieve lineStyle
propSet.deepCopy( &startSet ); i=0;
do{
if( propSet.hasOwnExtraLinesStyle( id, extraLinesStyle ) ){
rSet.setExtraLinesStyle( KDChartPropertySet::OwnID, extraLinesStyle );
break;
}else if( KDChartPropertySet::UndefinedID == id || maxDepth < i )
break;
++i;
}while( properties(id, propSet) );
// markers at the ends of the extra lines:
// retrieve marker alignment
propSet.deepCopy( &startSet ); i=0;
do{
if( propSet.hasOwnExtraMarkersAlign( id, extraMarkersAlign ) ){
rSet.setExtraMarkersAlign( KDChartPropertySet::OwnID, extraMarkersAlign );
break;
}else if( KDChartPropertySet::UndefinedID == id || maxDepth < i )
break;
++i;
}while( properties(id, propSet) );
// retrieve marker size
propSet.deepCopy( &startSet ); i=0;
do{
if( propSet.hasOwnExtraMarkersSize( id, extraMarkersSize ) ){
rSet.setExtraMarkersSize( KDChartPropertySet::OwnID, extraMarkersSize );
break;
}else if( KDChartPropertySet::UndefinedID == id || maxDepth < i )
break;
++i;
}while( properties(id, propSet) );
// retrieve marker color
propSet.deepCopy( &startSet ); i=0;
do{
if( propSet.hasOwnExtraMarkersColor( id, extraMarkersColor ) ){
rSet.setExtraMarkersColor( KDChartPropertySet::OwnID, extraMarkersColor );
break;
}else if( KDChartPropertySet::UndefinedID == id || maxDepth < i )
break;
++i;
}while( properties(id, propSet) );
// retrieve marker style
propSet.deepCopy( &startSet ); i=0;
do{
if( propSet.hasOwnExtraMarkersStyle( id, extraMarkersStyle ) ){
rSet.setExtraMarkersStyle( KDChartPropertySet::OwnID, extraMarkersStyle );
break;
}else if( KDChartPropertySet::UndefinedID == id || maxDepth < i )
break;
++i;
}while( properties(id, propSet) );
// retrieve showBar
propSet.deepCopy( &startSet ); i=0;
do{
if( propSet.hasOwnShowBar( id, showBar ) ){
rSet.setShowBar( KDChartPropertySet::OwnID, showBar );
break;
}else if( KDChartPropertySet::UndefinedID == id || maxDepth < i )
break;
++i;
}while( properties(id, propSet) );
// retrieve barColor
propSet.deepCopy( &startSet ); i=0;
do{
if( propSet.hasOwnBarColor( id, barColor ) ){
rSet.setBarColor( KDChartPropertySet::OwnID, barColor );
break;
}else if( KDChartPropertySet::UndefinedID == id || maxDepth < i )
break;
++i;
}while( properties(id, propSet) );
// retrieve areaBrush
propSet.deepCopy( &startSet ); i=0;
do{
if( propSet.hasOwnAreaBrush( id, areaBrush ) ){
rSet.setAreaBrush( KDChartPropertySet::OwnID, areaBrush );
break;
}else if( KDChartPropertySet::UndefinedID == id || maxDepth < i )
break;
++i;
}while( properties(id, propSet) );
}
return bOk;
}
/**
\fn int KDChartParams::roundVal(double)
Returns the parameter \c d rounded to the nearest integer.
*/
/**
Specifies if and how a chart will print the data value texts near
their respective entries.
Data value texts will be printed immediately after drawing all of
the chart data points (or bars, lines,...) but before drawing the
legend and before drawing any custom boxes. If more than one chart
ist to be drawn (sharing the same data area) printing of the data
text values will take place after drawing all of the last charts
data points, this enables us to see the texts even if their
respective data representations are covered by the second charts
drawings. The same covering/colliding problem might occur with Area
charts if one area is (partially) covering another area. In such
cases you might either want to specify an appropriate
TextLayoutPolicy for getting a better looking result or specify an
other text color for data value texts of the second chart since by
default the first chart has black texts while the second chart
shows its data value texts in dark blue color.
\note Only used if chartType() is <b>neither HiLo nor
BoxWhisker</b>. To specify printing of data values in a HiLo chart
please use setHiLoChartPrintLowValues, setHiLoChartPrintHighValues,
setHiLoChartPrintOpenValues, setHiLoChartPrintCloseValues. To
specify printing of data values in a BoxWhisker chart please use
setBWChartPrintStatistics.
Calling <b>setPrintDataValues( false )</b> will <b>deactivate</b>
printing of the values.
Calling setPrintDataValuesWithDefaultFontParams( chart ) will
<b>reset</b> the respective font size and colour and position
parameters (but not the TQFont itself) and <b>activate</b> printing
of the values for the \c chart speficied (or for all charts by
using \c KDCHART_ALL_CHARTS, resp.).
\param active specifies whether the value texts are to be printed or not.
\param chart The number of the chart: 0 for the first chart, 1 for
the second chart in case there are two charts to be drawn sharing the
same data area. Use the special value KDCHART_ALL_CHARTS
to specify that your settings are to be taken for both charts.
\param divPow10 The power of 10 which the data value is to be divided by.
A value of 2 means divide by 100, a value of -3 means multiply by 1000,
and 0 (by definition) would result in multiplying by 1.
\param digitsBehindComma The number of digits to show behind the comma,
to have this calculated automatically just use the default value
KDCHART_DATA_VALUE_AUTO_DIGITS.
\param font a Pointer to the font to be used, if zero the default data value
texts font will be taken (this is a Times font since small Times digits are
clearer than small Helvetica digits).
Changing of one or more of <b>the following parameters</b>
automatically de-activates all future font parameter adjustments
that would otherwise take place after each call of setChartType (or
setAdditionalChartType, resp.). To re-enable this usefull feature
you may call setPrintDataValuesWithDefaultFontParams at any time
afterwards.
\param size (in per mille of the chart width) the dynamic size of
the font to be used. If this parameter is zero the size of the
\c font is used instead - regardless of the size of the chart!
You may use setPrintDataValuesFontRelSize to change this parameter setting
without affecting the other ones.
\param color the color to be used when printing the values.
To have the color calculated automatically - useful when printing
inside the bars (or pie slices, areas, ... resp.) - please use
\c KDCHART_DATA_VALUE_AUTO_COLOR instead of a TQColor*.
You may use setPrintDataValuesColor to change this parameter setting
without affecting the other ones.
The following parameters apply to values less than zero only:
\param negativePosition The anchor position which the text is to be
aligned to.
\param negativeAlign The way how the text is to be aligned to the anchor.
This must be a reasonable combination of TQt::AlignmentFlags.
\param negativeDeltaX The X distance between the <b>anchor
point</b> -- specified by \c negativePosition (or \c
positivePosition, resp.) -- and the internal <b>alignment point</b>
of the text -- specified by \c negativeAlign (or \c positiveAlign,
resp.). <b>Note: </b> For better compatibility to the dynamic font
size this parameter is interpreted as being a per-cent value of the
used font height. If greater 0, the X position is increased, if
less than 0, it is reduced. Actual font size and thus also this
delta value are calculated dynamically before painting based on the
size of the chart and the specification made via parameter \c size.
\param negativeDeltaY The Y distance between the <b>anchor
point</b> -- specified by \c negativePosition (or \c
positivePosition, resp.) -- and the internal <b>alignment point</b>
of the text -- specified by \c negativeAlign (or \c positiveAlign,
resp.). <b>Note: </b> For better compatibility to the dynamic font
size this parameter is interpreted as being a per-cent value of the
used font height. If greater 0, the Y position is increased, if
less than 0, it is reduced. Actual font size and thus also this
delta value are calculated dynamically before painting based on the
size of the chart and the specification made via parameter \c size.
\param negativeRotation The amount of degrees (using a circle of
360 degrees) taken to rotate the text. Positive values rotate
clockwise, negative values rotate counter-clockwise. There are two
special values that you might find usefull for Pie charts or for
Ring charts: \c KDCHART_SAGGITAL_ROTATION and \c
KDCHART_TANGENTIAL_ROTATION both leading to individual
calculation of appropriate rotation for each data value. Rotation
will be performed around the internal <b>alignment point</b> of the
text -- specified by \c negativeAlign (or \c positiveAlign, resp.).
The following parameters apply to values greater than zero or equal zero:
\param positivePosition The anchor position which the text is to be
aligned to.
\param positiveAlign The way how the text is to be aligned to the anchor.
This must be a reasonable combination of TQt::AlignmentFlags.
\param negativeDeltaX The X distance between the <b>anchor
point</b> -- specified by \c negativePosition (or \c
positivePosition, resp.) -- and the internal <b>alignment point</b>
of the text -- specified by \c negativeAlign (or \c positiveAlign,
resp.). <b>Note: </b> For better compatibility to the dynamic font
size this parameter is interpreted as being a per-cent value of the
used font height. If greater 0, the X position is increased, if
less than 0, it is reduced. Actual font size and thus also this
delta value are calculated dynamically before painting based on the
size of the chart and the specification made via parameter \c size.
\param positiveDeltaY The Y distance between the <b>anchor
point</b> -- specified by \c negativePosition (or \c
positivePosition, resp.) -- and the internal <b>alignment point</b>
of the text -- specified by \c negativeAlign (or \c positiveAlign,
resp.). <b>Note: </b> For better compatibility to the dynamic font
size this parameter is interpreted as being a per-cent value of the
used font height. If greater 0, the Y position is increased, if
less than 0, it is reduced. Actual font size and thus also this
delta value are calculated dynamically before painting based on the
size of the chart and the specification made via parameter \c size.
\param positiveRotation The amount of degrees (using a circle of
360 degrees) taken to rotate the text. Positive values rotate
clockwise, negative values rotate counter-clockwise. There are two
special values that you might find usefull for Pie charts or for
Ring charts: \c KDCHART_SAGGITAL_ROTATION and \c
KDCHART_TANGENTIAL_ROTATION both leading to individual
calculation of appropriate rotation for each data value. Rotation
will be performed around the internal <b>alignment point</b> of the
text -- specified by \c negativeAlign (or \c positiveAlign, resp.).
\param layoutPolicy The way to handle too narrow space conflicts:
what to do if a data text covers a neighboring data text (or a
neighboring data area, resp.).
\sa printDataValues
\sa setPrintDataValuesWithDefaultFontParams, printDataValuesWithDefaultFontParams
\sa setPrintDataValuesFontRelSize, setPrintDataValuesColor
\sa dataValuesDivPow10
\sa dataValuesDigitsBehindComma
\sa dataValuesFontUseRelSize
\sa dataValuesFontRelSize
\sa dataValuesFontColor
\sa dataValuesAnchorPosition
\sa dataValuesAnchorAlign
\sa dataValuesAnchorDeltaX
\sa dataValuesAnchorDeltaY
\sa dataValuesRotation
\sa dataValuesLayoutPolicy
*/
void KDChartParams::setPrintDataValues( bool active,
uint chart,
int divPow10,
int digitsBehindComma,
TQFont* font,
uint size,
const TQColor* color,
KDChartEnums::PositionFlag negativePosition,
uint negativeAlign,
int negativeDeltaX,
int negativeDeltaY,
int negativeRotation,
KDChartEnums::PositionFlag positivePosition,
uint positiveAlign,
int positiveDeltaX,
int positiveDeltaY,
int positiveRotation,
KDChartEnums::TextLayoutPolicy policy )
{
uint count = (KDCHART_ALL_CHARTS == chart) ? 2 : 1;
PrintDataValuesSettings * settings = (( 1 < count ) || ( 0 == chart ))
? &_printDataValuesSettings
: &_printDataValuesSettings2;
for ( uint i = 0; i < count; ++i ) {
settings->_printDataValues = active;
settings->_divPow10 = divPow10;
settings->_digitsBehindComma = digitsBehindComma;
const ChartType cType
= ( ( 1 < count && i )
|| ( 1 == count && 0 < chart && chart < 1000 ) )
? additionalChartType()
: chartType();
bool finished( false );
if ( UINT_MAX == size ) {
finished = true;
switch ( cType ) {
case NoType:
case Bar: {
if ( font )
settings->_dataValuesFont = *font;
else
settings->_dataValuesFont = TQFont( "times", 1, TQFont::Bold );
settings->_dataValuesUseFontRelSize = true;
settings->_dataValuesFontRelSize = 16;
settings->_dataValuesAutoColor = false; // !!!
settings->_dataValuesColor = TQColor( TQt::darkBlue );
settings->_dataValuesBrush = TQBrush( TQt::NoBrush );
// for values below zero:
settings->_dataValuesAnchorNegativePosition = KDChartEnums::PosBottomRight;
settings->_dataValuesAnchorNegativeAlign = TQt::AlignBottom + TQt::AlignRight;
settings->_dataValuesAnchorNegativeDeltaX = 20;
settings->_dataValuesAnchorNegativeDeltaY = 55;
settings->_dataValuesNegativeRotation = 300;
// for values greater/equal zero:
settings->_dataValuesAnchorPositivePosition = KDChartEnums::PosTopLeft;
settings->_dataValuesAnchorPositiveAlign = TQt::AlignTop + TQt::AlignLeft;
settings->_dataValuesAnchorPositiveDeltaX = - 20;
settings->_dataValuesAnchorPositiveDeltaY = - 65;
settings->_dataValuesPositiveRotation = 300;
settings->_dataValuesLayoutPolicy = KDChartEnums::LayoutPolicyRotate;
}
break;
case Line: {
if ( font )
settings->_dataValuesFont = *font;
else
settings->_dataValuesFont = TQFont( "times", 1, TQFont::Normal );
settings->_dataValuesUseFontRelSize = true;
settings->_dataValuesFontRelSize = 16;
settings->_dataValuesAutoColor = false; // !!!
settings->_dataValuesColor = TQColor( TQt::darkBlue );
settings->_dataValuesBrush = TQBrush( TQt::NoBrush );
// for values below zero:
settings->_dataValuesAnchorNegativePosition = KDChartEnums::PosBottomCenter;
settings->_dataValuesAnchorNegativeAlign = TQt::AlignTop + TQt::AlignHCenter;
settings->_dataValuesAnchorNegativeDeltaX = 0;
settings->_dataValuesAnchorNegativeDeltaY = 0;
settings->_dataValuesNegativeRotation = 0;
// for values greater/equal zero:
settings->_dataValuesAnchorPositivePosition = KDChartEnums::PosTopCenter;
settings->_dataValuesAnchorPositiveAlign = TQt::AlignBottom + TQt::AlignHCenter;
settings->_dataValuesAnchorPositiveDeltaX = 0;
settings->_dataValuesAnchorPositiveDeltaY = 0;
settings->_dataValuesPositiveRotation = 0;
settings->_dataValuesLayoutPolicy = KDChartEnums::LayoutPolicyRotate;
}
break;
case Area: {
if ( font )
settings->_dataValuesFont = *font;
else
settings->_dataValuesFont = TQFont( "times", 1, TQFont::Bold );
settings->_dataValuesUseFontRelSize = true;
settings->_dataValuesFontRelSize = 21;
settings->_dataValuesAutoColor = true; // !!!
settings->_dataValuesColor = TQColor( TQt::black );
settings->_dataValuesBrush = TQBrush( TQt::white );
bool bShowOutside = areaChartSubType() == AreaNormal;
// for values below zero:
settings->_dataValuesAnchorNegativePosition = KDChartEnums::PosBottomCenter;
settings->_dataValuesAnchorNegativeAlign = TQt::AlignHCenter
+ (bShowOutside ? TQt::AlignTop : TQt::AlignBottom);
settings->_dataValuesAnchorNegativeDeltaX = 0;
settings->_dataValuesAnchorNegativeDeltaY = bShowOutside ? 20 : -35;
settings->_dataValuesNegativeRotation = 0;
// for values greater/equal zero:
settings->_dataValuesAnchorPositivePosition = KDChartEnums::PosTopCenter;
settings->_dataValuesAnchorPositiveAlign = TQt::AlignHCenter
+ (bShowOutside ? TQt::AlignBottom : TQt::AlignTop);
settings->_dataValuesAnchorPositiveDeltaX = 0;
settings->_dataValuesAnchorPositiveDeltaY = bShowOutside ? -20 : 35;
settings->_dataValuesPositiveRotation = 0;
settings->_dataValuesLayoutPolicy = KDChartEnums::LayoutPolicyRotate;
}
break;
case HiLo:
case BoxWhisker:
// settings are not defined here because HiLo and BW charts
// are *not* set up using setPrintDataValues()
// but by using their own methods
break;
case Pie: {
if ( font )
settings->_dataValuesFont = *font;
else
settings->_dataValuesFont = TQFont( "times", 1, TQFont::Bold );
settings->_dataValuesUseFontRelSize = true;
settings->_dataValuesFontRelSize = 25;
settings->_dataValuesAutoColor = true; // !!!
settings->_dataValuesColor = TQColor( TQt::black );
settings->_dataValuesBrush = TQBrush( TQt::NoBrush );
// for values below zero:
settings->_dataValuesAnchorNegativePosition = KDChartEnums::PosTopCenter;
settings->_dataValuesAnchorNegativeAlign = TQt::AlignTop + TQt::AlignHCenter;
settings->_dataValuesAnchorNegativeDeltaX = 0;
settings->_dataValuesAnchorNegativeDeltaY = 50;
settings->_dataValuesNegativeRotation = KDCHART_TANGENTIAL_ROTATION;
// for values greater/equal zero:
settings->_dataValuesAnchorPositivePosition = KDChartEnums::PosTopCenter;
settings->_dataValuesAnchorPositiveAlign = TQt::AlignTop + TQt::AlignHCenter;
settings->_dataValuesAnchorPositiveDeltaX = 0;
settings->_dataValuesAnchorPositiveDeltaY = 50;
settings->_dataValuesPositiveRotation = KDCHART_TANGENTIAL_ROTATION;
settings->_dataValuesLayoutPolicy = KDChartEnums::LayoutPolicyRotate;
}
break;
case Ring: {
if ( font )
settings->_dataValuesFont = *font;
else
settings->_dataValuesFont = TQFont( "times", 1, TQFont::Bold );
settings->_dataValuesUseFontRelSize = true;
settings->_dataValuesFontRelSize = 25;
settings->_dataValuesAutoColor = true; // !!!
settings->_dataValuesColor = TQColor( TQt::black );
settings->_dataValuesBrush = TQBrush( TQt::NoBrush );
// for values below zero:
settings->_dataValuesAnchorNegativePosition = KDChartEnums::PosCenter;
settings->_dataValuesAnchorNegativeAlign = TQt::AlignCenter;
settings->_dataValuesAnchorNegativeDeltaX = 0;
settings->_dataValuesAnchorNegativeDeltaY = 10;
settings->_dataValuesNegativeRotation = KDCHART_TANGENTIAL_ROTATION;
// for values greater/equal zero:
settings->_dataValuesAnchorPositivePosition = KDChartEnums::PosCenter;
settings->_dataValuesAnchorPositiveAlign = TQt::AlignCenter;
settings->_dataValuesAnchorPositiveDeltaX = 0;
settings->_dataValuesAnchorPositiveDeltaY = 10;
settings->_dataValuesPositiveRotation = KDCHART_TANGENTIAL_ROTATION;
settings->_dataValuesLayoutPolicy = KDChartEnums::LayoutPolicyRotate;
}
break;
case Polar: {
settings->_dataValuesFontRelSize = 18;
if ( font )
settings->_dataValuesFont = *font;
else
settings->_dataValuesFont = TQFont( "times", 1, TQFont::Bold );
settings->_dataValuesUseFontRelSize = true;
settings->_dataValuesFontRelSize = 26;
settings->_dataValuesAutoColor = polarMarker(); // !!!
settings->_dataValuesColor = TQColor( TQt::black );
settings->_dataValuesBrush = TQBrush( TQt::NoBrush );
// for values below zero:
settings->_dataValuesAnchorNegativePosition = KDChartEnums::PosCenter;
settings->_dataValuesAnchorNegativeAlign = TQt::AlignCenter;
settings->_dataValuesAnchorNegativeDeltaX = 0;
settings->_dataValuesAnchorNegativeDeltaY = 0;
settings->_dataValuesNegativeRotation = 0;
// for values greater/equal zero:
settings->_dataValuesAnchorNegativePosition = KDChartEnums::PosCenter;
settings->_dataValuesAnchorNegativeAlign = TQt::AlignCenter;
settings->_dataValuesAnchorNegativeDeltaX = 0;
settings->_dataValuesAnchorNegativeDeltaY = 0;
settings->_dataValuesNegativeRotation = 0;
//settings->_dataValuesLayoutPolicy = KDChartEnums::LayoutPolicyShrinkFontSize;
//settings->_dataValuesFontRelSize = 26;
//setDefaultAxesTypes();
//finished = false; // use build-in default params, see KDChartParams.h::setPrintDataValues()
}
break;
default: {
qDebug( "IMPLEMENTATION ERROR: Unknown chartType in setPrintDataValues()" );
finished = false; // use build-in default params, see KDChartParams.h::setPrintDataValues()
}
}
}
if ( !finished ) {
settings->_useDefaultFontParams = false;
if ( font )
settings->_dataValuesFont = *font;
else
settings->_dataValuesFont = TQFont( "times", 1, TQFont::Bold );
uint theSize( UINT_MAX == size ? 14 : size );
settings->_dataValuesUseFontRelSize = ( 0 < theSize );
settings->_dataValuesFontRelSize = theSize;
if ( KDCHART_DATA_VALUE_AUTO_COLOR == color
&& ( Polar != cType || polarMarker() ) ) {
settings->_dataValuesAutoColor = true; // !!!
settings->_dataValuesColor = TQColor( TQt::black );
}
else {
settings->_dataValuesAutoColor = false;
if ( 0 == color )
settings->_dataValuesColor
= TQColor( i ? TQt::darkBlue : TQt::black );
else
settings->_dataValuesColor = *color;
}
settings->_dataValuesBrush = TQBrush(Qt::NoBrush);
// for values below zero:
settings->_dataValuesAnchorNegativePosition = negativePosition;
settings->_dataValuesAnchorNegativeAlign = negativeAlign;
settings->_dataValuesAnchorNegativeDeltaX = negativeDeltaX;
settings->_dataValuesAnchorNegativeDeltaY = negativeDeltaY;
settings->_dataValuesNegativeRotation = negativeRotation;
// for values greater/equal zero:
settings->_dataValuesAnchorPositivePosition = positivePosition;
settings->_dataValuesAnchorPositiveAlign = positiveAlign;
settings->_dataValuesAnchorPositiveDeltaX = positiveDeltaX;
settings->_dataValuesAnchorPositiveDeltaY = positiveDeltaY;
settings->_dataValuesPositiveRotation = positiveRotation;
settings->_dataValuesLayoutPolicy = policy;
}
if ( 0 < chart )
settings = &_printDataValuesSettings2;
}
emit changed();
}
/**
\enum KDChartParams::SourceMode
The chart source mode.
Use \c setChartSourceMode to specify if and how any data
should be taken into account for a given chart.
\sa setChartSourceMode, chartSourceMode, setAdditionalChartType
*/
/**
Specifies the chart source mode of one or more datasets.
Use this to specify if and how any data should be taken
into account for a given chart. You may call this function
multiple times to specify how the different datasets are to
be used. Number of datasets is only limited by the data that
you actually provide to the chart widget. Usage of this method
is mandatory when specifying combinations of more than one
chart (e.g. via \c setAdditionalChartType() ).
\note If specifying <b>more than one dataset</b> for the very
same chart and the same source mode make sure they form
a contiguous <b>series</b>.<br>
It is not possible to use dataset 0..3 as DataEntry, dataset
4 as AxisLabel and again dataset 5..6 as DataEntry for the
very same chart!<br>
Of course you could specify 0..3 as DataEntry for chart 0
while 5..6 would contain the data entries for chart 1
when specifying a widget showing two charts.
<b>Also note:</b><br>
Whenever you use \c setChartSourceMode() make sure not to
forget any of the datasets which you want to define: not
specifying a dataset would result in it being ignored.<br>
So the rule is: either don't call setChartSourceMode() at all
or call it for each dataset!
To quickly clear all such settings just might want to call
<b>setChartSourceMode( UnknownMode, KDCHART_ALL_DATASETS );</b>
without specifying a dataset number and without specifying
a chart number.<br>
However this KDCHART_ALL_DATASETS may only be used to
<b>clear</b> SourceMode settings - but not for defining the
SourceMode for all datasets - the above mentioned combination
with <b>UnknownMode</b> is the only way how to use
<b>KDCHART_ALL_DATASETS</b> here!
<b>Examples:</b>
\verbatim
setChartSourceMode( DataEntry, 2 );
\endverbatim
This would specify a simple chart obtaining its values from dataset 2.
\verbatim
setChartSourceMode( DataEntry, 0, 0, 0 );
setChartSourceMode( DataEntry, 3, 3, 1 );
\endverbatim
This would specify a two chart widget - the 1st obtaining its values
from dataset 0 and the 2nd taking the values from dataset 3.
\verbatim
setChartSourceMode( LegendText, 1, 1, 0 );
setChartSourceMode( AxisLabel, 2, 2, 0 );
setChartSourceMode( DataEntry, 3, 6, 0 );
setChartSourceMode( ExtraLinesAnchor, 7, 7, 0 );
setChartSourceMode( LegendText, 8, 8, 1 );
setChartSourceMode( AxisLabel, 9, 9, 1 );
setChartSourceMode( DataEntry, 10, 13, 1 );
\endverbatim
This would specify a two chart widget - the 1st obtaining its values
from datasets 3..6 and the 2nd taking the values from datasets 10..13.
Their respective legends and axes would take their values from
datasets 1 and 2 (or 8 and 9, resp.).
Additionally the 1st chart would use dataset 7 to determine the
horizontal (or vertical, resp.) position of any extra lines
that might be specified by KDChartPropertySet IDs assigned to
the cells in dataset 7.
\note If source mode is ExtraLinesAnchor all cells
of the respective datset will be ignored when the normal
cell representations (e.g. Bars or Lines) are drawn - these
cells will <em>only</em> be used as anchor points for any
extra lines that are specified with these cell's property sets.
When specifying \c ExtraLinesAnchor for more than one dataset
of the same chart make sure they form a contiguous row
<b>together</b> with the \c DataEntry dataset(s): e.g
you may use datasets 3..8 for DataEntry cells and datasets
9..10 for ExtraLinesAnchor cells.
All datasets with mode DataEntry or ExtraLinesAnchor are taken
into account for calculation of the axes ranges and delimiters.
<P>
\param mode the way how to use information stored in this dataset.
\param dataset the dataset number to be used (or ignored, resp.).
Use \c KDCHART_ALL_DATASETS to indicate that information given
applies to all of the datasets.
\param dataset2 a second dataset number to be taken into account
(or ignored, resp.). Use this one together with the \dataset
param to specify a range of datasets.
\param chart the chart taking into account this dataset.
Use this parameter only if more than one chart is to be displayed.
By using KDCHART_ALL_CHARTS here you may specify that the dataset
(or the range of datasets, resp.) is to be taken into account for
all of the charts displayed.
\sa SourceMode, chartSourceMode, findDataset
\sa maxDatasetSourceMode, setAdditionalChartType
*/
void KDChartParams::setChartSourceMode( SourceMode mode,
uint dataset,
uint dataset2,
uint chart )
{
if ( KDCHART_NO_DATASET != dataset
&& KDCHART_ALL_DATASETS != dataset
&& KDCHART_ALL_DATASETS != dataset2 ) {
uint i;
uint last = ( KDCHART_NO_DATASET == dataset2 ) ? dataset : dataset2;
for ( i = dataset; i <= last; ++i )
_dataSourceModeAndChart[ i ] = ModeAndChart( mode, chart );
_maxDatasetSourceMode = TQMAX( _maxDatasetSourceMode, --i );
_setChartSourceModeWasUsed = true;
} else if ( UnknownMode == mode && dataset == KDCHART_ALL_DATASETS ) {
_dataSourceModeAndChart.clear();
_setChartSourceModeWasUsed = false;
}
emit changed();
}
/**
Retrieves usage information of a given dataset or a range of
datasets.
\note If you specify a range of datasets and not all of them
share the same SourceMode the return value will be \c UnknownMode
whereas in case of the dataset(s) not being used it will be \c DontUse.
Accordingly if you provide a chart pointer and not all the
datasets share the same chart the chart pointer will receive
the value KDCHART_UNKNOWN_CHART.<br>
<b>Also note:</b>
If \c setChartSourceMode() was not used at all
chartSourceMode() will return <b>DataEntry</b> no matter what
dataset number is specified.
<p>
\param dataset the dataset number to be looked at.
Use \c KDCHART_ALL_DATASETS to find out if all of the datasets share
the very same SourceMode.
\param dataset2 a second dataset number.
Use this one together with the \dataset param to look at a range of
datasets and find out if all of them share the very same SourceMode.
\param chart If this parameter points to an int the method will
provide you with the chart number that this dataset (or this range
of datasets, resp.) is taken into account for.
\sa SourceMode, setChartSourceMode, setAdditionalChartType
\sa maxDatasetSourceMode, findDataset
*/
KDChartParams::SourceMode KDChartParams::chartSourceMode( uint dataset,
uint dataset2,
uint* pChart ) const
{
uint chart = KDCHART_UNKNOWN_CHART;
SourceMode mode = UnknownMode;
if ( _setChartSourceModeWasUsed ) {
if ( dataset <= _maxDatasetSourceMode
&& ( KDCHART_NO_DATASET == dataset2
|| dataset2 <= _maxDatasetSourceMode ) ) {
uint a, b;
if ( KDCHART_ALL_DATASETS == dataset ) {
a = 0;
b = UINT_MAX;
} else {
a = dataset;
b = KDCHART_NO_DATASET == dataset2 ? a : dataset2;
}
bool bStart = true;
ModeAndChartMap::ConstIterator it;
for( it = _dataSourceModeAndChart.find( a );
( it != _dataSourceModeAndChart.end() ) && ( it.key() <= b );
++it ){
if ( bStart ) {
mode = it.data().mode();
chart = it.data().chart();
bStart = false;
} else {
if ( mode != it.data().mode() )
mode = UnknownMode;
if ( chart != it.data().chart() )
chart = KDCHART_UNKNOWN_CHART;
}
}
}
} else {
mode = DataEntry;
chart = 0;
}
if ( pChart )
* pChart = chart;
return mode;
}
/**
Retrieves the dataset number or a range of datasets
being used with a given SourceMode for a given chart
or KDCHART_NO_DATASET if no dataset was specified for
that mode and that chart.
\note If \c setChartSourceMode() was not used at all
findDataset() will return true and set the dataset
to KDCHART_ALL_DATASETS when called for SourceMode
<b>DataEntry</b>. All other SourceModes will return false then.
\return True if at least one dataset was found.
\param mode the SourceMode to search for.
\param dataset the dataset number found (or the first
dataset number in case a series of datasets was found, resp.)
\param dataset2 the dataset number found (or the last
dataset number in case a series of datasets was found, resp.)
<b>Hint:</b> You may give the same variable both for
dataset and for dataset2, e.g. this makes sense in case you
are sure that findDataset will find only one dataset anyway.
\param chart the chart number that the dataset (or this range
of datasets, resp.) must have been defined for. If this is missing
findDataset assumes you are looking for datasets of the first chart.
\sa findDatasets, SourceMode, setChartSourceMode, chartSourceMode
\sa maxDatasetSourceMode, setAdditionalChartType
*/
bool KDChartParams::findDataset( SourceMode mode,
uint& dataset,
uint& dataset2,
uint chart ) const
{
bool res = false;
dataset = KDCHART_NO_DATASET;
dataset2 = KDCHART_NO_DATASET;
if ( _setChartSourceModeWasUsed ) {
bool bStart = true;
ModeAndChartMap::ConstIterator it;
for ( it = _dataSourceModeAndChart.begin();
it != _dataSourceModeAndChart.end(); ++it ) {
if ( ( it.data().mode() == mode )
&& ( ( KDCHART_ALL_CHARTS == chart )
|| ( it.data().chart() == chart ) ) ) {
if ( bStart ) {
dataset = it.key();
bStart = false;
}
dataset2 = it.key();
res = true;
} else if ( !bStart )
return res;
}
} else if ( DataEntry == mode ) {
dataset = KDCHART_ALL_DATASETS;
dataset2 = KDCHART_ALL_DATASETS;
res = true;
}
return res;
}
/**
Retrieves the dataset number or a range of datasets
being used with one of two given SourceModes
for a given chart or KDCHART_NO_DATASET
if no dataset was specified for that mode and that chart.
If \c setChartSourceMode() was not used at all
findDataset() will return true and set the dataset
to KDCHART_ALL_DATASETS when either \c modeA or \c modeB
is <b>DataEntry</b>. All other SourceModes will return
false then.
\note If the found datasets do <em>not</em> form a
<b>contiguous series</b> the return value will be false
and the value of \c dataset will be KDCHART_NO_DATASET
and a comment will be written to stderr
(if KDChart was compiled in debug mode).
\return True if at least one dataset was found.
\param modeA one of the SourceModes to search for.
\param modeB the other one of the two SourceModes to search for.
\param dataset the dataset number found (or the first
dataset number in case a series of datasets was found, resp.)
\param dataset2 the dataset number found (or the last
dataset number in case a series of datasets was found, resp.)
<b>Hint:</b> You may give the same variable both for
dataset and for dataset2, e.g. this makes sense in case you
are sure that findDataset will find only one dataset anyway.
\param chart the chart number that the dataset (or this range
of datasets, resp.) must have been defined for. If this is missing
findDataset assumes you are looking for datasets of the first chart.
\sa findDataset, SourceMode, setChartSourceMode, chartSourceMode
\sa maxDatasetSourceMode, setAdditionalChartType
*/
bool KDChartParams::findDatasets( SourceMode modeA,
SourceMode modeB,
uint& dataset,
uint& dataset2,
uint chart ) const
{
bool res = false;
dataset = KDCHART_NO_DATASET;
dataset2 = KDCHART_NO_DATASET;
uint dsA1, dsA2, dsB1, dsB2;
bool foundA = findDataset( modeA, dsA1, dsA2, chart );
bool foundB = findDataset( modeB, dsB1, dsB2, chart );
if( foundA || foundB ){
if( dsA1 == KDCHART_ALL_DATASETS || dsB1 == KDCHART_ALL_DATASETS ){
dataset = KDCHART_ALL_DATASETS;
dataset2 = KDCHART_ALL_DATASETS;
res = true;
}else{
if( foundA && foundB ){
if( TQMIN(dsA2, dsB2) + 1 == TQMAX(dsA1, dsB1) ){
dataset = TQMIN(dsA1, dsB1);
dataset2 = TQMAX(dsA2, dsB2);
res = true;
}else{
qDebug("ERROR in KDChartParams::findDatasets(): Datasets found are *not* a contiguous series.");
}
}else{
dataset = foundA ? dsA1 : dsB1;
dataset2 = foundA ? dsA2 : dsB2;
res = true;
}
}
}
return res;
}
/**
Specifies a color for a dataset. Note that if you define a color for a
dataset but not for a dataset with a lower number (and there is neither
a default value), the color for that dataset with the lower number will
be undefined. If you do not want any color, pass an invalid color
(i.e. a default-constructed TQColor object). This is only useful
for chart types that have an outline (like bars or pies),
because you would not see anything otherwise.<br>
In charts that can only display one dataset (like pies), the specified
colors are used for the different values instead.
\param dataset the number of the dataset (or value for pies and similar
charts) for which the color is specified
\param color the color to use for this dataset/value
\sa setDataDefaultColors, setDataRainbowColors, setDataSubduedColors
\sa dataColor, maxDataColor
*/
void KDChartParams::setDataColor( uint dataset, TQColor color )
{
TQColor shadow1;
TQColor shadow2;
calculateShadowColors( color, shadow1, shadow2 );
_dataColors[ dataset ] = color;
_dataColorsShadow1[ dataset ] = shadow1;
_dataColorsShadow2[ dataset ] = shadow2;
_maxDatasetColor = TQMAX( _maxDatasetColor, dataset );
emit changed();
}
/**
Specifies KD Chart's default colors for the datasets 0..11.
This method may be usefull to re-set the colors after changing the
colors of the datasets.
\sa setDataColor, setDataRainbowColors, setDataSubduedColors
\sa dataColor, maxDataColor
*/
void KDChartParams::setDataDefaultColors()
{
setDataColor( 0, red );
setDataColor( 1, green );
setDataColor( 2, blue );
setDataColor( 3, cyan );
setDataColor( 4, magenta );
setDataColor( 5, yellow );
setDataColor( 6, darkRed );
setDataColor( 7, darkGreen );
setDataColor( 8, darkBlue );
setDataColor( 9, darkCyan );
setDataColor( 10, darkMagenta );
setDataColor( 11, darkYellow );
}
/**
Specifies a set of eight rainbow-like colors for the datasets 0..7
and sets the lighter versions of this colors to datasets 8..15.
This is a convenience method setting colors that look best on
a dark gray or black background.
\sa setDataColor, setDataDefaultColors, setDataSubduedColors
\sa dataColor, maxDataColor
*/
void KDChartParams::setDataRainbowColors()
{
setDataColor( 0, TQColor(255, 0,196) );
setDataColor( 1, TQColor(255, 0, 96) );
setDataColor( 2, TQColor(255, 128,64) );
setDataColor( 3, TQt::yellow );
setDataColor( 4, TQt::green );
setDataColor( 5, TQt::cyan );
setDataColor( 6, TQColor( 96, 96,255) );
setDataColor( 7, TQColor(160, 0,255) );
for( int i=8; i<16; ++i )
setDataColor( i, dataColor(i-8).light() );
}
/**
Specifies a set of eighteen subdued colors for the datasets 0..17.
This is a convenience method setting colors that is ideal for
area charts since the dark data value texts can be easily
read when printed onto such background colors.
\param ordered if true all eighteen colors will be set according
to their appearance in the color circle, if false they will be
arranged in a logical order making it very easy ti distinguish
two neighboring colors. Set this parameter to true if you want
your neighboring colors look quite similiar, the default is false.
\sa setDataColor, setDataDefaultColors, setDataRainbowColors
\sa dataColor, maxDataColor
*/
void KDChartParams::setDataSubduedColors( bool ordered )
{
static const int NUM_SUBDUEDCOLORS = 18;
static const TQColor SUBDUEDCOLORS[ NUM_SUBDUEDCOLORS ] = {
TQColor( 0xe0,0x7f,0x70 ),
TQColor( 0xe2,0xa5,0x6f ),
TQColor( 0xe0,0xc9,0x70 ),
TQColor( 0xd1,0xe0,0x70 ),
TQColor( 0xac,0xe0,0x70 ),
TQColor( 0x86,0xe0,0x70 ),
TQColor( 0x70,0xe0,0x7f ),
TQColor( 0x70,0xe0,0xa4 ),
TQColor( 0x70,0xe0,0xc9 ),
TQColor( 0x70,0xd1,0xe0 ),
TQColor( 0x70,0xac,0xe0 ),
TQColor( 0x70,0x86,0xe0 ),
TQColor( 0x7f,0x70,0xe0 ),
TQColor( 0xa4,0x70,0xe0 ),
TQColor( 0xc9,0x70,0xe0 ),
TQColor( 0xe0,0x70,0xd1 ),
TQColor( 0xe0,0x70,0xac ),
TQColor( 0xe0,0x70,0x86 ),
};
if( ordered )
for(int i=0; i<NUM_SUBDUEDCOLORS; ++i)
setDataColor( i, SUBDUEDCOLORS[i] );
else{
setDataColor( 0, SUBDUEDCOLORS[ 0] );
setDataColor( 1, SUBDUEDCOLORS[ 5] );
setDataColor( 2, SUBDUEDCOLORS[10] );
setDataColor( 3, SUBDUEDCOLORS[15] );
setDataColor( 4, SUBDUEDCOLORS[ 2] );
setDataColor( 5, SUBDUEDCOLORS[ 7] );
setDataColor( 6, SUBDUEDCOLORS[12] );
setDataColor( 7, SUBDUEDCOLORS[17] );
setDataColor( 8, SUBDUEDCOLORS[ 4] );
setDataColor( 9, SUBDUEDCOLORS[ 9] );
setDataColor(10, SUBDUEDCOLORS[14] );
setDataColor(11, SUBDUEDCOLORS[ 1] );
setDataColor(12, SUBDUEDCOLORS[ 6] );
setDataColor(13, SUBDUEDCOLORS[11] );
setDataColor(14, SUBDUEDCOLORS[16] );
setDataColor(15, SUBDUEDCOLORS[ 3] );
setDataColor(16, SUBDUEDCOLORS[ 8] );
setDataColor(17, SUBDUEDCOLORS[13] );
}
}
void KDChartParams::calculateShadowColors( TQColor color,
TQColor& shadow1,
TQColor& shadow2 ) const
{
if ( !color.isValid() ) { // no fill color
shadow1 = TQColor();
shadow2 = TQColor();
} else {
int hue, saturation, value;
color.hsv( &hue, &saturation, &value );
double v = value;
v = v * 2.0 / 3.0 * shadowBrightnessFactor();
if ( 255.0 < v )
v = 255.0;
else if ( 1.0 > v )
v = 0.0;
shadow1.setHsv( hue, saturation, static_cast < int > ( v ) );
v = value;
v = v / 3.0 * shadowBrightnessFactor();
if ( 255.0 < v )
v = 255.0;
else if ( 1.0 > v )
v = 0.0;
shadow2.setHsv( hue, saturation, static_cast < int > ( v ) );
}
}
/**
Returns the color for a dataset. If no color has been defined for this
dataset and none for a higher dataset either, the number will be mapped
to the range of defined colors. If no color has been defined for this
dataset, but at least one for a higher dataset, the return value of
this method is undefined.
\param dataset the number of the dataset for which to return the color
\return the color for this dataset
\sa setDataColor, maxDataColor
*/
TQColor KDChartParams::dataColor( uint dataset ) const
{
uint index = dataset % (_maxDatasetColor+1);
if( _dataColors.find( index ) != _dataColors.end() )
return _dataColors[ index ];
else
return TQColor(); // documentation says undefined
}
TQString KDChartParams::dataRegionFrameAreaName( uint dataRow,
uint dataCol,
uint data3rd )
{
return TQString( "%1/%2/%3/%4" )
.arg( KDChartEnums::AreaChartDataRegion, 5 )
.arg( dataRow, 5 )
.arg( dataCol, 5 )
.arg( data3rd, 5 );
}
/**
Recomputes the shadow colors by iterating over all configured
data colors and reassigning the data colors with exactly the
same values which in turn triggers computation of the shadow
colors. Expensive if many data colors are set, but performance
is OK for typical cases.
*/
void KDChartParams::recomputeShadowColors()
{
// Simply reassign the available colors; this will trigger
// recomputation of the shadow colors.
for( TQMap<uint,TQColor>::Iterator it = _dataColors.begin();
it != _dataColors.end(); ++it ) {
setDataColor( it.key(), it.data() );
}
}
/**
Returns the first shadow color for a dataset. This is the color that
is used to draw the top bars with 3D effects. It is somewhat
darker than the original data color. If no color has been defined for this
dataset and none for a higher dataset either, the number will be mapped
to the range of defined colors. If no color has been defined for this
dataset, but at least one for a higher dataset, the return value of
this method is undefined.
\param dataset the number of the dataset for which to return the color
\return the color for this dataset
\sa setDataColor, maxDataColor, dataShadow2Color
*/
TQColor KDChartParams::dataShadow1Color( uint dataset ) const
{
uint index = dataset % _maxDatasetColor;
if ( _threeDShadowColors )
if( _dataColorsShadow1.find( index ) != _dataColorsShadow1.end() )
return _dataColorsShadow1[ index ];
else
return TQColor(); // documentation says undefined
else
if( _dataColors.find( index ) != _dataColors.end() )
return _dataColors[ index ];
else
return TQColor(); // documentation says undefined
}
/**
Returns the second shadow color for a dataset. This is the color that
is used to draw the sides of bars with 3D effects. It is
darker than the original data color. If no color has been defined for this
dataset and none for a higher dataset either, the number will be mapped
to the range of defined colors. If no color has been defined for this
dataset, but at least one for a higher dataset, the return value of
this method is undefined.
\param dataset the number of the dataset for which to return the color
\return the color for this dataset
\sa setDataColor, maxDataColor, dataShadow1Color
*/
TQColor KDChartParams::dataShadow2Color( uint dataset ) const
{
uint index = dataset % _maxDatasetColor;
if ( _threeDShadowColors )
if( _dataColorsShadow2.find( index ) != _dataColorsShadow2.end() )
return _dataColorsShadow2[ index ];
else
return TQColor(); // documentation says undefined
else
if( _dataColors.find( index ) != _dataColors.end() )
return _dataColors[ index ];
else
return TQColor(); // documentation says undefined
}
/**
Set the default axis types for all the axes the user might activate for this chart:
\li Pie charts by default have no axes at all
\li Bar/Line/Area charts may have up to 8 axes (up to 2 at each side of the chart)
\li charts representing 3-dimensional data may have up to 12 axes
\note This function also specifies the default way how to calculate
the axis labels: abscissa starts with zero and counts by 1, ordinate
is calculating the labels automatically based upon the values found in
the associated dataset(s).
*/
void KDChartParams::setDefaultAxesTypes()
{
// reset types of all axes
uint i = 0;
for ( i = 0; i < KDCHART_MAX_AXES; ++i )
setAxisType( i, KDChartAxisParams::AxisTypeUnknown );
// Note that abscissa axes should start labeling at the very
// first position and end at the last position when drawing
// area charts.
// Bar charts and line charts look better with their abscissa labels
// in the respective middle positions below each bar (or point, resp.)
for ( i = KDChartAxisParams::AxisPosSTART;
i <= KDChartAxisParams::AxisPosEND; ++i )
switch ( i ) {
// abscissa axes:
case KDChartAxisParams::AxisPosBottom:
case KDChartAxisParams::AxisPosTop:
case KDChartAxisParams::AxisPosBottom2:
case KDChartAxisParams::AxisPosTop2:
setAxisLabelsTouchEdges( i, Area == chartType() );
break;
// ordinate axes:
case KDChartAxisParams::AxisPosLeft:
case KDChartAxisParams::AxisPosRight:
case KDChartAxisParams::AxisPosLeft2:
case KDChartAxisParams::AxisPosRight2:
setAxisLabelsTouchEdges( i, true ); //Polar != chartType() );
break;
// additional axes for charts representing 3-dimensional data:
case KDChartAxisParams::AxisPosLowerRightEdge:
case KDChartAxisParams::AxisPosLowerLeftEdge:
case KDChartAxisParams::AxisPosLowerRightEdge2:
case KDChartAxisParams::AxisPosLowerLeftEdge2:
setAxisLabelsTouchEdges( i, false );
break;
default: {
qDebug( "IMPLEMENTATION ERROR: axis type missing in KDChartParams::setDefaultAxesTypes()" );
Q_ASSERT( !this );
}
}
// set default axis types according to chart type
switch ( chartType() ) {
case NoType:
break;
case Bar:
case Line:
case Area:
// default axes
setAxisType( KDChartAxisParams::AxisPosBottom,
KDChartAxisParams::AxisTypeEAST );
setAxisShowGrid( KDChartAxisParams::AxisPosBottom,
true );
setAxisType( KDChartAxisParams::AxisPosLeft,
KDChartAxisParams::AxisTypeNORTH );
setAxisShowGrid( KDChartAxisParams::AxisPosLeft,
true );
// 'other side' axes
setAxisType( KDChartAxisParams::AxisPosTop,
KDChartAxisParams::AxisTypeEAST );
setAxisType( KDChartAxisParams::AxisPosRight,
KDChartAxisParams::AxisTypeNORTH );
// additional, 2nd axes
setAxisType( KDChartAxisParams::AxisPosBottom2,
KDChartAxisParams::AxisTypeEAST );
setAxisType( KDChartAxisParams::AxisPosLeft2,
KDChartAxisParams::AxisTypeNORTH );
// additional, 2nd axes for 'other' sides
setAxisType( KDChartAxisParams::AxisPosTop2,
KDChartAxisParams::AxisTypeEAST );
setAxisType( KDChartAxisParams::AxisPosRight2,
KDChartAxisParams::AxisTypeNORTH );
// Specify default numbering information
// for all 'non-ordinate' axes (this are the X axes):
//
// axisSteadyValueCalc flag is set to false
// Start value 1
// End value following the number of entries
// in the associated dataset(s)
// Delta value 1.0
// and dont show any Digits behind the comma.
setAxisLabelTextParams( KDChartAxisParams::AxisPosBottom, false,
1.0,
KDCHART_AXIS_LABELS_AUTO_LIMIT,
1.0, 0 );
setAxisLabelTextParams( KDChartAxisParams::AxisPosTop, false,
1.0,
KDCHART_AXIS_LABELS_AUTO_LIMIT,
1.0, 0 );
setAxisLabelTextParams( KDChartAxisParams::AxisPosBottom2, false,
1.0,
KDCHART_AXIS_LABELS_AUTO_LIMIT,
1.0, 0 );
setAxisLabelTextParams( KDChartAxisParams::AxisPosTop2, false,
1.0,
KDCHART_AXIS_LABELS_AUTO_LIMIT,
1.0, 0 );
// no need to specify numbering information for
// the ordinate-axes since the default auto-calc
// feature is fine for here.
break;
// Code for charts representing 3-dimensional data.
/*
// ( not active since there are no such charts yet )
case KDChartParams::BarMatrix:
// default axes
setAxisType( KDChartAxisParams::AxisPosBottom,
KDChartAxisParams::AxisTypeEAST );
setAxisType( KDChartAxisParams::AxisPosLowerRightEdge,
KDChartAxisParams::AxisTypeNORTH );
setAxisType( KDChartAxisParams::AxisPosLeft,
KDChartAxisParams::AxisTypeUP );
// 'other side' axes
setAxisType( KDChartAxisParams::AxisPosTop,
KDChartAxisParams::AxisTypeEAST );
setAxisType( KDChartAxisParams::AxisPosLowerLeftEdge,
KDChartAxisParams::AxisTypeNORTH );
setAxisType( KDChartAxisParams::AxisPosRight,
KDChartAxisParams::AxisTypeUP );
// additional, 2nd axes
setAxisType( KDChartAxisParams::AxisPosBottom2,
KDChartAxisParams::AxisTypeEAST );
setAxisType( KDChartAxisParams::AxisPosLowerRightEdge2,
KDChartAxisParams::AxisTypeNORTH );
setAxisType( KDChartAxisParams::AxisPosLeft2,
KDChartAxisParams::AxisTypeUP );
// additional, 2nd axes for 'other' sides
setAxisType( KDChartAxisParams::AxisPosTop2,
KDChartAxisParams::AxisTypeEAST );
setAxisType( KDChartAxisParams::AxisPosLowerLeftEdge2,
KDChartAxisParams::AxisTypeNORTH );
setAxisType( KDChartAxisParams::AxisPosRight2,
KDChartAxisParams::AxisTypeUP );
// Specify default numbering information
// for all 'non-ordinate' axes (this are the X and the Y axes):
// Start vaule 1
// End value following the number of entries
// in the associated dataset(s)
// Delta value 1.0
// and don't show any Digits behind the comma.
setAxisLabelTextParams( KDChartAxisParams::AxisPosBottom, false,
1.0, KDCHART_AXIS_LABELS_AUTO_LIMIT, 1.0, 0 );
setAxisLabelTextParams( KDChartAxisParams::AxisPosTop, false,
1.0, KDCHART_AXIS_LABELS_AUTO_LIMIT, 1.0, 0 );
setAxisLabelTextParams( KDChartAxisParams::AxisPosLowerRightEdge,
false,
1.0, KDCHART_AXIS_LABELS_AUTO_LIMIT, 1.0, 0 );
setAxisLabelTextParams( KDChartAxisParams::AxisPosLowerLeftEdge,
false,
1.0, KDCHART_AXIS_LABELS_AUTO_LIMIT, 1.0, 0 );
setAxisLabelTextParams( KDChartAxisParams::AxisPosBottom2, false,
1.0, KDCHART_AXIS_LABELS_AUTO_LIMIT, 1.0, 0 );
setAxisLabelTextParams( KDChartAxisParams::AxisPosTop2, false,
1.0, KDCHART_AXIS_LABELS_AUTO_LIMIT, 1.0, 0 );
setAxisLabelTextParams(KDChartAxisParams::AxisPosLowerRightEdge2,
false,
1.0, KDCHART_AXIS_LABELS_AUTO_LIMIT, 1.0, 0 );
setAxisLabelTextParams( KDChartAxisParams::AxisPosLowerLeftEdge2,
false,
1.0, KDCHART_AXIS_LABELS_AUTO_LIMIT, 1.0, 0 );
false,
1.0, KDCHART_AXIS_LABELS_AUTO_LIMIT, 1.0, 0 );
// no need to specify numbering information for
// the ordinate-axes since the default auto-calc
// feature is fine for here.
break;
*/
case KDChartParams::Pie:
case KDChartParams::Ring:
// by default there are no axes defined for pie and ring charts
break;
case KDChartParams::Polar:
setAxisType( KDChartAxisParams::AxisPosSaggital,
KDChartAxisParams::AxisTypeEAST );
setAxisType( KDChartAxisParams::AxisPosCircular,
KDChartAxisParams::AxisTypeNORTH );
setAxisLabelsVisible( KDChartAxisParams::AxisPosSaggital, true );
setAxisLabelsFont( KDChartAxisParams::AxisPosSaggital,
TQFont( "helvetica", 1, TQFont::Bold ),
-30,
TQt::darkBlue );
setAxisLabelsVisible( KDChartAxisParams::AxisPosCircular, true );
setAxisLabelsFont( KDChartAxisParams::AxisPosCircular,
TQFont( "helvetica", 1, TQFont::Bold ),
-22,
TQt::darkBlue );
setPolarRotateCircularLabels( false );
break;
default: {
qDebug( "IMPLEMENTATION ERROR: type missing in KDChartParams::setDefaultAxesTypes()" );
Q_ASSERT( !this );
}
}
emit changed();
}
/**
activate the default axis types for this chart:
\li Pie charts by default have no axes at all
\li Bar/Line/Area by default have 2 axes: the abscissa and the ordinate
\li charts representing 3-dimensional data by default have 3 axes
*/
void KDChartParams::activateDefaultAxes()
{
// deactivate all axes: specifying KDCHART_NO_DATASET will
// also remove their visability flag
for ( uint i = 0; i < KDCHART_MAX_AXES; ++i )
setAxisDatasets( i, KDCHART_NO_DATASET );
switch ( chartType() ) {
case NoType:
break;
case Bar:
case Line:
case Area:
setAxisVisible( KDChartAxisParams::AxisPosBottom, true );
setAxisDatasets( KDChartAxisParams::AxisPosBottom, KDCHART_ALL_DATASETS );
setAxisVisible( KDChartAxisParams::AxisPosLeft, true );
setAxisDatasets( KDChartAxisParams::AxisPosLeft, KDCHART_ALL_DATASETS );
/* test:
setAxisVisible( KDChartAxisParams::AxisPosTop, true );
setAxisDatasets(KDChartAxisParams::AxisPosTop, KDCHART_ALL_DATASETS );
setAxisVisible( KDChartAxisParams::AxisPosRight, true );
setAxisDatasets(KDChartAxisParams::AxisPosRight, KDCHART_ALL_DATASETS );
setAxisVisible( KDChartAxisParams::AxisPosBottom2, true );
setAxisDatasets(KDChartAxisParams::AxisPosBottom2, KDCHART_ALL_DATASETS );
setAxisVisible( KDChartAxisParams::AxisPosLeft2, true );
setAxisDatasets(KDChartAxisParams::AxisPosLeft2, KDCHART_ALL_DATASETS );
setAxisVisible( KDChartAxisParams::AxisPosTop2, true );
setAxisDatasets(KDChartAxisParams::AxisPosTop2, KDCHART_ALL_DATASETS );
setAxisVisible( KDChartAxisParams::AxisPosRight2, true );
setAxisDatasets(KDChartAxisParams::AxisPosRight2, KDCHART_ALL_DATASETS );
*/
break;
// Code for charts representing 3-dimensional data.
/*
// ( not active since there are no such charts yet )
case KDChartParams::BarMatrix:
setAxisVisible( KDChartAxisParams::AxisPosBottom, true );
setAxisDatasets(KDChartAxisParams::AxisPosBottom, KDCHART_ALL_DATASETS );
setAxisVisible( KDChartAxisParams::AxisPosLeft, true );
setAxisDatasets(KDChartAxisParams::AxisPosLeft, KDCHART_ALL_DATASETS );
setAxisVisible( KDChartAxisParams::AxisPosLowerRightEdge, true );
setAxisDatasets(KDChartAxisParams::AxisPosLowerRightEdge,
KDCHART_ALL_DATASETS);
break;
*/
case KDChartParams::Pie:
case KDChartParams::Ring:
case KDChartParams::Polar:
// by default there are no axes defined for pie, ring, and polar charts
break;
default: {
qDebug( "IMPLEMENTATION ERROR: type missing in KDChartParams::activateDefaultAxes()" );
Q_ASSERT( !this );
}
}
}
/**
\fn KDChartParams::setOptimizeOutputForScreen(bool)
Specify whether drawing should be optimized for (low resolution)
screen output or whether other routines should be used to obtain
best quality when using a printer.
\note The default of this flag is TRUE, so make sure to deactivate
it before painting your KDChart onto a TQPrinter device!
\note This setting is NOT stored together with the other parameters,
it is recommended to set the flag each time when the drawing targed
(printer or screen, resp) is changed.
\sa optimizeOutputForScreen
*/
/**
\fn bool KDChartParams::optimizeOutputForScreen() const
Returns whether drawing is optimized for (low resolution)
screen output (this is the default) or whether other routines
are used to obtain best quality when using a printer.
\sa setOptimizeOutputForScreen
*/
/**
Specifies the distance between the chart and the left border of the
painter area. If \c leading is a negative value it is interpreted
as per-mille value of the painter area, the true offset will then
be calculated dynamically at drawing time.
\sa setGlobalLeading, setGlobalLeadingTop, setGlobalLeadingRight,
setGlobalLeadingBottom
\sa globalLeadingLeft, globalLeadingTop, globalLeadingRight,
globalLeadingBottom
*/
void KDChartParams::setGlobalLeading( int left, int top, int right, int bottom )
{
_globalLeadingLeft = left;
_globalLeadingTop = top;
_globalLeadingRight = right;
_globalLeadingBottom = bottom;
emit changed();
}
/**
\fn void KDChartParams::setGlobalLeadingLeft( int )
Specifies the distance between the chart and the left border of the
painter area. If \c leading is a negative value it is interpreted
as per-mille value of the painter area, the true offset will then
be calculated dynamically at drawing time.
\sa setGlobalLeading, setGlobalLeadingTop, setGlobalLeadingRight,
setGlobalLeadingBottom
\sa globalLeadingLeft, globalLeadingTop, globalLeadingRight,
globalLeadingBottom
*/
/**
\fn void KDChartParams::setGlobalLeadingTop( int )
Specifies the distance between the chart and the upper border of
the painter area. If \c leading is a negative value it is
interpreted as per-mille value of the painter area, the true offset
will then be calculated dynamically at drawing time.
\sa setGlobalLeading, setGlobalLeadingLeft, setGlobalLeadingRight,
setGlobalLeadingBottom
\sa globalLeadingLeft, globalLeadingTop, globalLeadingRight,
globalLeadingBottom
*/
/**
\fn void KDChartParams::setGlobalLeadingRight( int )
Specifies the distance between the chart and the right border
of the painter area. If \c leading is a negative value it is
interpreted as per-mille value of the painter area, the true
offset will then be calculated dynamically at drawing time.
\sa setGlobalLeading, setGlobalLeadingLeft, setGlobalLeadingTop,
setGlobalLeadingBottom
\sa globalLeadingLeft, globalLeadingTop, globalLeadingRight,
globalLeadingBottom
*/
/**
\fn void KDChartParams::setGlobalLeadingBottom( int )
Specifies the distance between the chart and the lower border of
the painter area. If \c leading is a negative value it is
interpreted as per-mille value of the painter area, the true offset
will then be calculated dynamically at drawing time.
\sa setGlobalLeading, setGlobalLeadingLeft, setGlobalLeadingTop,
setGlobalLeadingRight
\sa globalLeadingLeft, globalLeadingTop, globalLeadingRight,
globalLeadingBottom
*/
/**
\fn int KDChartParams::globalLeadingLeft() const
Return the distance between the chart and the left border of the
painter area. If \c leading is a negative value it is interpreted
as per-mille value of the painter area, the true offset will then
be calculated dynamically at drawing time.
\sa setGlobalLeading, setGlobalLeadingLeft, setGlobalLeadingTop,
setGlobalLeadingRight, setGlobalLeadingBottom
\sa globalLeadingTop, globalLeadingRight, globalLeadingBottom
*/
/**
\fn KDChartParams::globalLeadingTop() const
Return the distance between the chart and the upper border of the
painter area. If \c leading is a negative value it is interpreted
as per-mille value of the painter area, the true offset will then
be calculated dynamically at drawing time.
\sa setGlobalLeading, setGlobalLeadingLeft, setGlobalLeadingTop,
setGlobalLeadingRight, setGlobalLeadingBottom
\sa globalLeadingLeft, globalLeadingRight, globalLeadingBottom
*/
/**
\fn KDChartParams::globalLeadingRight() const
Return the distance between the chart and the right border of the
painter area. If \c leading is a negative value it is interpreted
as per-mille value of the painter area, the true offset will then
be calculated dynamically at drawing time.
\sa setGlobalLeading, setGlobalLeadingLeft, setGlobalLeadingTop,
setGlobalLeadingRight, setGlobalLeadingBottom
\sa globalLeadingLeft, globalLeadingTop, globalLeadingBottom
*/
/**
\fn int KDChartParams::globalLeadingBottom() const
Return the distance between the chart and the lower border of the
painter area. If \c leading is a negative value it is interpreted
as per-mille value of the painter area, the true offset will then
be calculated dynamically at drawing time.
\sa setGlobalLeading, setGlobalLeadingLeft, setGlobalLeadingTop,
setGlobalLeadingRight, setGlobalLeadingBottom
\sa globalLeadingLeft, globalLeadingTop, globalLeadingRight
*/
/**
\fn void KDChartParams::setFrame( uint, const KDFrame&, int, int,
int, int, bool, bool )
\ifnot v200
\deprecated Feature scheduled for future release, at present not implemented.
\else
Specify the frame settings to be used for one of the chart areas.
The names and the meaning of the areas are explained with the enum
AreaName. The KDFrame class is explained in detail here: KDFrame
<b>Note however:</b> The \c innerRect settings of this KDFrame will
be ignored since position and size of this frame will be calculated
dynamically based upon the AreaName!
\param area The area to be surrounded by a frame.
\param outerGap The distance between the frame and the surrounding
parts of the chart.
\param innerGap The distance between the frame and the inner area.
\param addFrameWidthToLayout Specifies whether the inner area will
shrink the area AND its frame will occupy the same space of the
chart as the area would occupy if no frame were drawn. If false,
the frame is drawn around the area without taking care not to
override other content of the chart.
\note An easier way to specify a frame setting is selecting a pre-defined
setting using the setSimpleFrame methode.
\sa setSimpleFrame, frameSettings, removeFrame
\endif
*/
/**
\fn void KDChartParams::setSimpleFrame( uint, int, int, int, int,
bool, bool, KDFrame::SimpleFrame, int, int, TQPen, TQBrush, const
TQPixmap*, KDFrame::BackPixmapMode, int, KDFrame::CornerName )
Select a pre-defined frame setting to be used for one of the chart areas.
\param area The area to be surrounded by a frame.
\param outerGap The distance between the frame and the surrounding
parts of the chart.
\param innerGap The distance between the frame and the inner area.
\if v200
\param addFrameWidthToLayout Specifies whether the inner area will
shrink the area AND its frame will occupy the same space of the
chart as the area would occupy if no frame were drawn. If false,
the frame is drawn around the area without taking care not to
override other content of the chart.
The parameters specifying the pre-defined frame settings are
defined here: KDFrame::setSimpleFrame.
\sa setFrame, frameSettings
\else
\param addFrameWidthToLayout For internal use - must be \c true.
\param addFrameHeightToLayout For internal use - must be \c true.
\param simpleFrame For internal use - must be \c KDFrame::FrameFlat.
\param lineWidth For internal use - must be \c 1.
\param midLineWidth For internal use - must be \c 0.
\param pen The pen to be used for drawing the four frame border lines.
\param background The brush to be used for painting the frame background.
\param backPixmap The picture to be displayed as background image
of the frame.
\param backPixmapMode The way how backPixmap is to be modified to
fill the frame, these are possible:
\li \c KDFrame::PixCentered Image will not be scaled nor stretched
but shown in original size.
\li \c KDFrame::PixScaled Image will be scaled until it's height or
it's width match the frame's height (or width, resp.) - whichever
comes first - but image proportions will be preserved.
\li \c KDFrame::PixStretched Image will be stretched to have the
same height and the same width as the frame - normally this results
in changing the original image proportions.
\param shadowWidth For internal use - do not set this parameter or
set it to \c 0.
\param sunPos For internal use - do not set this parameter or set
it to \c KDFrame::CornerTopLeft.
\endif
\sa removeFrame
*/
/**
\fn void KDChartParams::setDataRegionFrame( uint, uint, uint, int, int, int, int,
bool, bool, KDFrame::SimpleFrame, int, int, TQPen, TQBrush, const
TQPixmap*, KDFrame::BackPixmapMode, int, KDFrame::CornerName )
Select a pre-defined frame setting to be used for one of the data representations
(e.g. to have the frame surrounding one of the bars in a Bar chart).
\note KDChart currently supports specifying data frames without background only,
it is not possible to draw a special background behind a data representation.
\param dataRow The table row of the cell to be surrounded by a frame.
\param dataCol The table column of the cell.
\param data3rd The third table coordinate of the cell (parameter not used, its value will be ignored, set to 0, reserved for future use).
\param innerGap The distance between the frame and the inner area.
\if v200
\param addFrameWidthToLayout Specifies whether the inner area will
shrink the area AND its frame will occupy the same space of the
chart as the area would occupy if no frame were drawn. If false,
the frame is drawn around the area without taking care not to
override other content of the chart.
The parameters specifying the pre-defined frame settings are
defined here: KDFrame::setSimpleFrame.
\sa setFrame, frameSettings
\else
\param addFrameWidthToLayout For internal use - must be \c true.
\param addFrameHeightToLayout For internal use - must be \c true.
\param simpleFrame For internal use - must be \c KDFrame::FrameFlat.
\param lineWidth For internal use - must be \c 1.
\param midLineWidth For internal use - must be \c 0.
\param pen The pen to be used for drawing the four frame border lines.
\param shadowWidth For internal use - do not set this parameter or
set it to \c 0.
\param sunPos For internal use - do not set this parameter or set
it to \c KDFrame::CornerTopLeft.
\endif
*/
/**
\fn bool KDChartParams::moveDataRegionFrame( uint, uint, uint, uint, uint, uint )
Move a frame that was previously specified using setDataRegionFrame
to another location: moves the frame from cell[ oldDataRow, oldDataCol ]
to cell[ newDataRow, newDataCol ] without changing looking of the frame,
or just removes the frame entirely.
\param oldDataRow The table row of the frame to be removed.
\param oldDataCol The table column of the frame to be removed.
\param oldData3rd The third table coordinate of the old cell (parameter not used, its value will be ignored, set to 0, reserved for future use).
\param newDataRow The table row of the cell to be framed instead, or KDCHART_NO_DATASET if the frame is to be removed
without framing another cell then.
\param newDataCol The table column of the cell to be framed instead.
\param newData3rd The third table coordinate of the new cell (parameter not used, its value will be ignored, set to 0, reserved for future use).
\note Using KDCHART_NO_DATASET for the newDataRow parameter will not
result in returning FALSE because it is an allowed action: the frame is just removed then.
\return TRUE if the frame could be moved or was removed; FALSE if either there was no frame around the old cell or the target cell does not exist.
*/
bool KDChartParams::moveDataRegionFrame( uint oldDataRow,
uint oldDataCol,
uint, // important: we ignore the data3rd parameter for now!
uint newDataRow,
uint newDataCol,
uint// important: we ignore the data3rd parameter for now!
)
{
const TQString oldKey( dataRegionFrameAreaName( oldDataRow, oldDataCol, 0 ) ); // oldData3rd ) );
KDChartFrameSettings* it = _areaDict.find( oldKey );
bool bFound = ( it != 0 );
if( bFound ){
if( KDCHART_NO_DATASET != newDataRow ){
KDChartFrameSettings* frame = new KDChartFrameSettings;
KDChartFrameSettings::deepCopy( *frame, *it );
frame->setDataRow( newDataRow );
frame->setDataCol( newDataCol );
frame->setData3rd( 0 ); // newData3rd );
_areaDict.setAutoDelete( TRUE );
_areaDict.replace(
dataRegionFrameAreaName( newDataRow, newDataCol, 0 ), //data3rd 5 ),
frame );
}
_areaDict.remove( oldKey );
emit changed();
}
return bFound;
}
/**
\var KDChartParams::CustomBoxDict
The type that stores the custom boxes in a chart.
*/
/**
Return the frame settings of one of the chart areas.
\sa nextFrameSettings, setSimpleFrame, setFrame, removeFrame
*/
const KDChartParams::KDChartFrameSettings* KDChartParams::frameSettings( uint area,
bool& bFound,
int* pIterIdx ) const
{
if( pIterIdx )
*pIterIdx = 0;
const TQString key( TQString( "%1/-----/-----/-----" ).arg( area, 5 ) );
KDChartFrameSettings* it = _areaDict.find( key );
bFound = ( it != 0 );
if( bFound )
return it;
else if( pIterIdx ){
TQString keyStart( key.left(6) );
TQDictIterator<KDChartFrameSettings> it2( _areaDict );
for( ; it2.current(); ++it2 ){
if( it2.currentKey().startsWith( keyStart ) ){
bFound = true;
return it2.current();
}
++*pIterIdx;
}
}
return &_noFrameSettings;
}
/**
Remove the last frame, that was specified for this chart area.
If you have more than one frame attached to the same area,
make sure to call this method repeatedly, if you want
to remove all of them.
\note This method can be used to remove frames, that were specified
via setFrame (or via setSimpleFrame, resp.), but if can not be used
to remove frames, that were specified using setDataRegionFrame.
\sa nextFrameSettings, setSimpleFrame, setFrame
*/
bool KDChartParams::removeFrame( uint area )
{
return _areaDict.remove( TQString( "%1/-----/-----/-----" ).arg( area, 5 ) );
}
/**
Return the next frame settings specified for the same area type
as the frame that was retrieved by previous calls of \c frameSettings()
or \c nextFrameSettings().
\sa setDataRegionFrame, frameSettings
*/
const KDChartParams::KDChartFrameSettings* KDChartParams::nextFrameSettings( bool& bFound,
int* pIterIdx ) const
{
bFound = false;
if( pIterIdx ){
int i=0;
TQDictIterator<KDChartFrameSettings> it( _areaDict );
for( ; it.current(); ++it ){
if( *pIterIdx == i )
break;
++i;
}
if( *pIterIdx == i ){
TQString keyStart( it.currentKey().left(6) );
++it;
for( ; it.current(); ++it ){
++*pIterIdx;
if( it.currentKey().startsWith( keyStart ) ){
bFound = true;
return it.current();
}
}
}
}
return &_noFrameSettings;
}
/**
Add a new custom box to the list of boxes.
To remove this box from the list lateron just call removeCustomBox
with the index that was returned by insertCustomBox.
\sa removeCustomBox, removeAllCustomBoxes, customBox, maxCustomBoxIdx
*/
uint KDChartParams::insertCustomBox( const KDChartCustomBox & box )
{
_customBoxDict.setAutoDelete( true );
uint newIdx;
if( _customBoxDictMayContainHoles ){
_customBoxDictMayContainHoles = false;
const uint maxIndex = maxCustomBoxIdx();
newIdx = 1 + maxIndex;
for( uint idx = 0; idx <= maxIndex; ++idx ) {
if( ! _customBoxDict.find( idx ) ) {
newIdx = idx;
_customBoxDictMayContainHoles = true; // we found a hole, so there might be more of them
break;
}
}
}else{
newIdx = _customBoxDict.count();
}
_customBoxDict.insert( newIdx, box.clone() );
emit changed();
return newIdx;
}
/**
Remove a custom box from the list of boxes.
Please fill in the index parameter with the value
that was returned by insertCustomBox.
\note This method also removes the last frame, that was attached to this
box (if any), so the only reason for calling removeFrame() manually would
be, that you have specified more than one frame for this box.
\sa removeAllCustomBoxes, insertCustomBox, customBox, maxCustomBoxIdx
*/
bool KDChartParams::removeCustomBox( const uint & idx )
{
const bool bFound = _customBoxDict.remove( idx );
if( bFound ){
// also remove any frame, that was attached to this box
removeFrame( KDChartEnums::AreaCustomBoxesBASE + idx );
}
_customBoxDictMayContainHoles = true;
emit changed();
return bFound;
}
/**
\fn void KDChartParams::removeAllCustomBoxes()
Remove all custom boxes from the list of boxes.
\sa removeCustomBox, insertCustomBox, customBox, maxCustomBoxIdx
*/
/**
Retrieve a const pointer to a custom box from the list.
You may fill in the index parameter with the value
that was returned by insertCustomBox, or you may use a numerical value,
e.g. when iterating from zero up to maxCustomBoxIdx().
\return Zero if the custom box has been removed by calling removeCustomBox.
\sa insertCustomBox customBoxRef, removeCustomBox, removeAllCustomBoxes, maxCustomBoxIdx
*/
const KDChartCustomBox* KDChartParams::customBox( uint box ) const
{
return _customBoxDict.find( box );
}
/**
Retrieve a non-const pointer to a custom box from the list.
You may fill in the index parameter with the value
that was returned by insertCustomBox, or you may use a numerical value,
e.g. when iterating from zero up to maxCustomBoxIdx().
\note The reference returned by this method may be used to directly
modify the properties of the respective box.
\return Zero if the custom box has been removed by calling removeCustomBox.
\sa insertCustomBox customBox, removeCustomBox, removeAllCustomBoxes, maxCustomBoxIdx
*/
KDChartCustomBox* KDChartParams::customBoxRef( uint box )
{
return _customBoxDict.find( box );
}
/**
Retrieve the biggest custom boxes ID used.
\sa insertCustomBox, removeCustomBox, removeAllCustomBoxes, customBox
*/
uint KDChartParams::maxCustomBoxIdx() const
{
uint cnt( _customBoxDict.count() );
if( cnt ) {
int maxIndex = cnt-1;
TQIntDictIterator<KDChartCustomBox> it( _customBoxDict );
for( ; it.current(); ++it )
if( it.currentKey() > maxIndex )
maxIndex = it.currentKey();
return maxIndex;
}
return 0;
}
/**
\enum KDChartParams::ChartType
The chart type. Covers only built-in chart types.
\sa setChartType, chartType
\sa setAdditionalChartType, additionalChartType,
\sa setChartSourceMode
*/
/**
Specifies the chart type. The default is bar charts (Bar).
\note Allways call this <b>before</b> specifying other
axis properties and before calling \c setAdditionalChartType().<br>
\c setChartType() deactivates the right axis and also sets the
axisLabelsTouchEdges back to their default for all bottom and
top axes.
\note Calling setChartType() results in changing the default data value
texts font settings (i.e. the font size, colour, position, but not the
TQFont itself) <b>if</b> these parameters were not changed by
setPrintDataValues().
In order to re-activate this automatical adjustment of font settings
even after you have changed them manually you may call
setPrintDataValuesWithDefaultFontParams().
\li When calling setPrintDataValuesWithDefaultFontParams()
<b>before</b> calling setChartType() make sure you set the
\c callSetPrintDataValues parameter to \c false.
\li When calling setPrintDataValuesWithDefaultFontParams()
<b>after</b> calling setChartType() you may set the \c
callSetPrintDataValues parameter to \c true <b>or</b> you may call
setPrintDataValues() yourself after calling
setPrintDataValuesWithDefaultFontParams() to specify additional
parameters.
\param chartType the chart type to use
\sa chartType, ChartType
\sa setAdditionalChartType, additionalChartType,
\sa setBarChartSubType, barChartSubType
\sa setLineChartSubType, lineChartSubType
\sa setPolarChartSubType, polarChartSubType
\sa setChartSourceMode, chartSourceMode
\sa setAxisLabelsTouchEdges
*/
void KDChartParams::setChartType( ChartType chartType )
{
_chartType = chartType;
// de-activate 2nd axis that might have been set automatically
// by a previous call of \c setAdditionalChartType()
setAxisVisible( KDChartAxisParams::AxisPosRight, false );
// Make sure abscissa axes start their labeling at the very
// first position and end at the last position when drawing
// area charts.
// Bar charts and line charts look better with their abscissa labels
// in the respective middle positions below each bar (or point, resp.)
bool bAbscissaAxisLabelsTouchEdges = ( Area == chartType );
setAxisLabelsTouchEdges( KDChartAxisParams::AxisPosBottom,
bAbscissaAxisLabelsTouchEdges );
setAxisLabelsTouchEdges( KDChartAxisParams::AxisPosTop,
bAbscissaAxisLabelsTouchEdges );
setAxisLabelsTouchEdges( KDChartAxisParams::AxisPosBottom2,
bAbscissaAxisLabelsTouchEdges );
setAxisLabelsTouchEdges( KDChartAxisParams::AxisPosTop2,
bAbscissaAxisLabelsTouchEdges );
// activate default data value text settings for this chart type
if ( printDataValues( 0 )
&& printDataValuesWithDefaultFontParams( 0 ) )
setPrintDataValues( true, 0 );
emit changed();
}
/**
\fn KDChartParams::ChartType KDChartParams::chartType() const
Returns the chart type configured in this params object.
\return the chart type configured in this params object.
\sa setChartType, ChartType
\sa setAdditionalChartType, additionalChartType,
\sa setBarChartSubType, barChartSubType
\sa setLineChartSubType, lineChartSubType
\sa setPolarChartSubType, polarChartSubType
\sa setChartSourceMode, chartSourceMode
*/
/**
Specifies the additional chart type.
The default is no additional chart (NoType).
The additional chart will have <b>no grid</b> so either make sure you
specify the chart that should have a grid via \c setChartType() and
the other one as additional chart or specify the grid manually if you
need one for the additional chart too.
The additional chart uses the same abscissa axis as the main chart,
but cannot change the abscissa settings: the abscissa range and step width
is determined according to the main chart's values.
You may combine all different types of cartesian charts
(== Bar, Line, HiLo, ..., but not Polar, Pie, ...)
so e.g. the following combinations are possible:<br>
\verbatim
setChartType( KDChartParams::Bar );
setAdditionalChartType( KDChartParams::Line );
\endverbatim
or
\verbatim
setChartType( KDChartParams::Line );
setAdditionalChartType( KDChartParams::HiLo );
\endverbatim
or
\verbatim
setChartType( KDChartParams::Bar );
setAdditionalChartType( KDChartParams::Bar );
...
\endverbatim
\note When defining multiple charts it is mandatory to
call \c setChartSourceMode() for specifying the dataset(s)
and their respective charts after calling \c setAdditionalChartType(),
also it is recommended to call \c setAxisDatasets() for all
axes to be used by the different datasets - otherwise the
default setting will be used (all datasets except the last
one match the left axis, the last dataset matches the right axis),
so e.g. your code to have a bar chart for datasets 0..2 (using the
left axis) and a line chart for datasets 3..4 (using the right axis)
could look like this:
\verbatim
setChartType( KDChartParams::Bar );
setAdditionalChartType( KDChartParams::Line );
setChartSourceMode( KDChartParams::DataEntry, 0,2, 0 );
setChartSourceMode( KDChartParams::DataEntry, 3,4, 1 );
setAxisDatasets( KDChartAxisParams::AxisPosLeft, 0,2, 0 );
setAxisDatasets( KDChartAxisParams::AxisPosRight, 3,4, 1 );
\endverbatim
\note In case you DON'T want to use the right axis but the left axis #2
make sure to reset the dataset assignment that is automatically done for
the right axis. Doing this will also clear the visibility flag of the
right axis that is automatically set by setAdditionalChartType()
implicitely assuming that the additional chart will use the right axis,
so there is no need to explicitely call setAxisVisible( false ) for
the right axis: specifying KDCHART_NO_DATASET is enough to disable it.
e.g. in the example shown above you would replace the
last line by these ones:
\verbatim
setAxisDatasets( KDChartAxisParams::AxisPosLeft2, 3,4, 1 );
setAxisDatasets( KDChartAxisParams::AxisPosRight,
KDCHART_NO_DATASET );
\endverbatim
Often your additional chart will look better when not overlapping with
the first chart, specifying different y-positions for the charts
is possible by \c KDChartAxisParams::setAxisUseAvailableSpace(),
e.g. like this:
\verbatim
// specify which amount of the available space
// is to be used by the first y-axis:
KDChartAxisParams pa(
_p->axisParams( KDChartAxisParams::AxisPosLeft ) );
pa.setAxisUseAvailableSpace( 0, -499 );
_p->setAxisParams( KDChartAxisParams::AxisPosLeft, pa );
// specify which amount of the available space
// is to be used by the second y-axis:
pa = _p->axisParams( KDChartAxisParams::AxisPosLeft2 );
pa.setAxisUseAvailableSpace( -750, -1000 );
_p->setAxisParams( KDChartAxisParams::AxisPosLeft2, pa );
\endverbatim
\param chartType the additional chart type to use
\sa additionalChartType, setChartSourceMode, setAxisDatasets
\sa <br>chartType, ChartType
\sa setBarChartSubType, barChartSubType
\sa setLineChartSubType, lineChartSubType
*/
void KDChartParams::setAdditionalChartType( ChartType chartType )
{
_additionalChartType = chartType;
if ( KDChartParams::NoType == chartType ) {
setAxisDatasets( KDChartAxisParams::AxisPosRight,
KDCHART_NO_DATASET );
} else {
setAxisDatasets( KDChartAxisParams::AxisPosRight,
KDCHART_ALL_DATASETS,
KDCHART_ALL_DATASETS,
1 );
if( printDataValues( 1 )
&& printDataValuesWithDefaultFontParams( 1 ) )
setPrintDataValues( true, 1 );
}
emit changed();
}
/**
\fn void KDChartParams::ChartType KDChartParams::additionalChartType() const
Returns the additional chart type configured in this params object.
\return the additional chart type configured in this params object.
\sa setAdditionalChartType, setChartSourceMode, chartSourceMode
\sa <br>setChartType, ChartType
\sa setBarChartSubType, barChartSubType
\sa setLineChartSubType, lineChartSubType
*/
/**
\fn bool KDChartParams::neverUsedSetChartSourceMode() const
Retrieves whether setChartSourceMode() was called or not
*/
/**
\fn uint KDChartParams::maxDatasetSourceMode() const
Returns the number of the highest dataset for which a SourceMode has been
defined.
\return the number of the highest dataset for which a SourceMode has been
defined.
\sa setChartSourceMode, chartSourceMode, findDataset
*/
/**
\fn void KDChartParams::setNumValues( uint )
Specifies how many of the values should be shown. -1 means all
available values.
\param numValues the number of values to be shown
\sa numValues
*/
/**
\fn int KDChartParams::numValues() const
Returns how many of the values should be shown. -1 means all
available values.
\return the number of values to be shown
\sa setNumValues
*/
/**
\fn void KDChartParams::setShadowBrightnessFactor( double factor )
Specifies a factor to be used to adjust the
built-in brightness of shadow colors in
3-dimensional drawings like e.g. 3D Bar charts.
\param factor a factor that is to be taken into account for internal
calculation of shadow colors. By specifying values greater 1.0 you
may lighten the shadows until the most intensive brightness is
reached, while values smaller than 1.0 will darken the shadows until
the respective colors are black.
\sa shadowBrightnessFactor
*/
/**
\fn double KDChartParams::shadowBrightnessFactor() const
Returns a factor to be used to adjust the
built-in brightness of shadow colors in
3-dimensional drawings like e.g. 3D Bar charts.
\return a factor that is to be taken into account for internal
calculation of shadow colors.
\sa setShadowBrightnessFactor
*/
/**
\fn void KDChartParams::setShadowPattern( Qt::BrushStyle style )
Specifies a filling style for filling the shadow areas in
3-dimensional drawings like 3D bar charts. The default is to
fill with a solid color, the color is determined with \a
setThreeDShadowColors.
\param style the fill style to use
\sa shadowPattern(), setThreeDShadowColors(),
threeDShadowColors()
*/
/**
\fn Qt::BrushStyle KDChartParams::shadowPattern() const
Returns the filling style used for filling the shadow areas in
3-dimensional drawings like 3D bar charts. The default is to
fill with a solid color, the fill color can be queried with \a
threeDShadowColors().
\return the fill style used
\sa setShadowPattern(), setThreeDShadowColors(),
threeDShadowColors()
*/
/**
\fn void KDChartParams::setOutlineDataColor( TQColor color )
Specifies a color for the outlines of data displays. The default is
black.
\note Use setOutlineDataLineStyle( TQt::NoPen ) to hide the line.
\param color the color to use for the outlines
\sa outlineDataColor, setOutlineDataLineStyle, setOutlineDataLineWidth
*/
/**
\fn TQColor KDChartParams::outlineDataColor() const
Returns the color for the outlines of data displays.
\return the outline color
\sa setOutlineDataColor
*/
/**
\fn void KDChartParams::setOutlineDataLineWidth( uint width )
Specifies the width of the outlines of data displays. The default is 1
pixel.
\note Use setOutlineDataLineStyle( TQt::NoPen ) to hide the line.
\param width the line width to use for the outlines
\sa outlineDataLineWidth, setOutlineDataLineStyle, setOutlineDataColor
*/
/**
\fn uint KDChartParams::outlineDataLineWidth() const
Returns the width of the outlines of data displays.
\param style the line width that is used for outlines
\sa setOutlineDataLineWidth
*/
/**
\fn void KDChartParams::setOutlineDataLineStyle( PenStyle style )
Specifies the line style of the outlines of data displays. The default
is a solid line. Warning: On Windows 95/98, the style setting (other
than NoPen and SolidLine) has no effect for lines with width greater
than 1, due to a bug in the operating system.
\param width the line style to use for the outlines
\sa outlineDataLineStyle, setOutlineDataColor, setOutlineDataLineWidth
*/
/**
\fn PenStyle KDChartParams::outlineDataLineStyle() const
Returns the style of the outlines of data displays.
\param style the line style that is used for outlines
\sa setOutlineDataLineStyle
*/
/**
\fn uint KDChartParams::maxDataColor() const
Returns the number of the highest dataset for which a color has been
defined.
\return the number of the highest dataset for which a color has been
defined.
\sa setDataColor, dataColor
*/
/**
\fn void KDChartParams::setThreeDShadowColors( bool shadow )
Specifies whether the engine should draw the sides and tops of
3D effects in shadowed versions of the data colors (the
default) or in the data colors themselves. Only used with 3D
effects in charts that support these.
\param shadow true for shadowed colors, false for original colors
\sa threeDShadowColors
*/
/**
\fn bool KDChartParams::threeDShadowColors() const
Returns whether the engine should draw the sides and tops of 3D effects in
shadowed versions of the data colors or in the data colors
themselves. Only used with 3D effects in charts that
support these. The default is true.
\return true if shadowed colors are used for 3D effects
\sa setThreeDShadowColors
*/
/**
\fn void KDChartParams::setAllowOverlappingDataValueTexts( bool allow )
Specifies whether a data value text may be drawn even if it's
region intersects with another data value text's region.
By default this is FALSE to prevent ugly mutual overwriting of
data value texts and to speed up drawing of cahrts containing
thousands of data points.
*/
/**
\fn bool KDChartParams::allowOverlappingDataValueTexts() const
Returns whether a data value text may be drawn even if it's region
intersects with another data value text's region.
By default this is FALSE to prevent ugly mutual overwriting of data
value texts and to speed up drawing of cahrts containing thousands
of data points.
*/
/**
Specifies how the data value text figures are modified before printing.
This methode is provided for your convenience, to learn how to set the
other text parameters please have a look at setPrintDataValues.
\sa printDataValuesWithDefaultFontParams, setPrintDataValues
\sa dataValuesColor
\sa setPrintDataValuesFontRelSize setPrintDataValuesBackground
*/
void KDChartParams::setDataValuesCalc( int divPow10,
int digitsBehindComma,
uint chart )
{
uint count = (KDCHART_ALL_CHARTS == chart) ? 2 : 1;
PrintDataValuesSettings * settings = (( 1 < count ) || ( 0 == chart ))
? &_printDataValuesSettings
: &_printDataValuesSettings2;
for ( uint i = 0; i < count; ++i ) {
settings->_divPow10 = divPow10;
settings->_digitsBehindComma = digitsBehindComma;
if ( 0 < chart )
settings = &_printDataValuesSettings2;
}
emit changed();
}
/**
Specifies the font to be used for printing the data value texts.
This methode is provided for your convenience, to learn how to set the
other text parameters please have a look at setPrintDataValues.
\sa printDataValuesWithDefaultFontParams, setPrintDataValues
\sa dataValuesColor
\sa setPrintDataValuesFontRelSize setPrintDataValuesBackground
*/
void KDChartParams::setDataValuesFont( TQFont* font,
uint size,
uint chart )
{
uint count = (KDCHART_ALL_CHARTS == chart) ? 2 : 1;
PrintDataValuesSettings * settings = (( 1 < count ) || ( 0 == chart ))
? &_printDataValuesSettings
: &_printDataValuesSettings2;
for ( uint i = 0; i < count; ++i ) {
settings->_useDefaultFontParams = false;
if( font )
settings->_dataValuesFont = *font;
if( UINT_MAX != size ){
settings->_dataValuesUseFontRelSize = ( 0 < size );
settings->_dataValuesFontRelSize = size;
}
if ( 0 < chart )
settings = &_printDataValuesSettings2;
}
emit changed();
}
/**
Specifies the position and rotation of the data value texts to be printed.
This methode is provided for your convenience, to learn how to set the
other text parameters please have a look at setPrintDataValues.
\sa printDataValuesWithDefaultFontParams, setPrintDataValues
\sa dataValuesColor
\sa setPrintDataValuesFontRelSize setPrintDataValuesBackground
*/
void KDChartParams::setDataValuesPlacing( KDChartEnums::PositionFlag position,
uint align,
int deltaX,
int deltaY,
int rotation,
bool specifyingPositiveValues,
uint chart )
{
uint count = (KDCHART_ALL_CHARTS == chart) ? 2 : 1;
PrintDataValuesSettings * settings = (( 1 < count ) || ( 0 == chart ))
? &_printDataValuesSettings
: &_printDataValuesSettings2;
for ( uint i = 0; i < count; ++i ) {
if( specifyingPositiveValues ){
// for values greater/equal zero:
settings->_dataValuesAnchorPositivePosition = position;
settings->_dataValuesAnchorPositiveAlign = align;
settings->_dataValuesAnchorPositiveDeltaX = deltaX;
settings->_dataValuesAnchorPositiveDeltaY = deltaY;
settings->_dataValuesPositiveRotation = rotation;
}else{
// for values below zero:
settings->_dataValuesAnchorNegativePosition = position;
settings->_dataValuesAnchorNegativeAlign = align;
settings->_dataValuesAnchorNegativeDeltaX = deltaX;
settings->_dataValuesAnchorNegativeDeltaY = deltaY;
settings->_dataValuesNegativeRotation = rotation;
}
if ( 0 < chart )
settings = &_printDataValuesSettings2;
}
emit changed();
}
/**
Specifies the text color and background brush to be used for
printing the data value texts.
To have the color calculated automatically - useful when printing
inside the bars (or pie slices, areas, ... resp.) - please use
\c KDCHART_DATA_VALUE_AUTO_COLOR instead of a TQColor*.
Setting the background is normally not needed since reasonable
settings are done by default: Area charts have a white background
behind the data value texts while all other chart types use no
special background (the value is TQt::NoBrush then).
In case you want to use it to remove the extra background from
your Area chart's data value texts you should consider changing
the dataset colors as well: an idea might be trying the subdued
colorset by calling \c setSubduedColors().
\sa printDataValuesWithDefaultFontParams
\sa setPrintDataValues
\sa dataValuesColor
\sa setPrintDataValuesFontRelSize
*/
void KDChartParams::setDataValuesColors( const TQColor* color,
const TQBrush& background,
uint chart )
{
// first store the color
if( color )
setPrintDataValuesColor( chart, color );
// now store the background
uint count = (KDCHART_ALL_CHARTS == chart) ? 2 : 1;
PrintDataValuesSettings * settings = (( 1 < count ) || ( 0 == chart ))
? &_printDataValuesSettings
: &_printDataValuesSettings2;
for ( uint i = 0; i < count; ++i ) {
settings->_dataValuesBrush = background;
if ( 0 < chart )
settings = &_printDataValuesSettings2;
}
emit changed();
}
/* sorry, but policy handling is not implemnted yet: */
void KDChartParams::setDataValuesPolicy(
KDChartEnums::TextLayoutPolicy policy,
uint chart )
{
uint count = (KDCHART_ALL_CHARTS == chart) ? 2 : 1;
PrintDataValuesSettings * settings = (( 1 < count ) || ( 0 == chart ))
? &_printDataValuesSettings
: &_printDataValuesSettings2;
for ( uint i = 0; i < count; ++i ) {
settings->_dataValuesLayoutPolicy = policy;
if ( 0 < chart )
settings = &_printDataValuesSettings2;
}
emit changed();
}
/**
Specifies whether data value texts should be printed even if the
value is KDCHART_POS_INFINITE (or KDCHART_NEG_INFINITE).
Printing of an infinite symbol (lemniskate) is done by default,
ou may use this function to disable it.
\sa printDataValuesWithDefaultFontParams
\sa setPrintDataValues
\sa dataValuesColor
\sa setPrintDataValuesFontRelSize
*/
void KDChartParams::setDataValuesShowInfinite( bool dataValuesShowInfinite,
uint chart)
{
uint count = (KDCHART_ALL_CHARTS == chart) ? 2 : 1;
PrintDataValuesSettings * settings = (( 1 < count ) || ( 0 == chart ))
? &_printDataValuesSettings
: &_printDataValuesSettings2;
for ( uint i = 0; i < count; ++i ) {
settings->_dataValuesShowInfinite = dataValuesShowInfinite;
if ( 0 < chart )
settings = &_printDataValuesSettings2;
}
emit changed();
}
/* function only there for backward compatibility */
void KDChartParams::setPrintDataValuesColor( uint chart, const TQColor* color )
{
uint count = (KDCHART_ALL_CHARTS == chart) ? 2 : 1;
PrintDataValuesSettings * settings = (( 1 < count ) || ( 0 == chart ))
? &_printDataValuesSettings
: &_printDataValuesSettings2;
for ( uint i = 0; i < count; ++i ) {
if ( KDCHART_DATA_VALUE_AUTO_COLOR == color ) {
settings->_dataValuesAutoColor = true; // !!!
settings->_dataValuesColor = TQColor( TQt::black );
}
else {
settings->_dataValuesAutoColor = false;
if ( 0 == color )
settings->_dataValuesColor
= TQColor( i ? TQt::darkBlue : TQt::black );
else
settings->_dataValuesColor = *color;
}
if ( 0 < chart )
settings = &_printDataValuesSettings2;
}
emit changed();
}
/**
Specifies the dynamic font size to be used for printing the data
value texts. To change settings for all charts specify \c
KDCHART_ALL_CHARTS as \chart parameter.
This methode is provided for your convenience, to learn how to set the
other text parameters please have a look at setPrintDataValues.
\sa printDataValuesWithDefaultFontParams, setPrintDataValues
\sa setPrintdataValuesColor, dataValuesFontRelSize
*/
void KDChartParams::setPrintDataValuesFontRelSize( uint chart, uint size )
{
uint count = (KDCHART_ALL_CHARTS == chart) ? 2 : 1;
PrintDataValuesSettings * settings = (( 1 < count ) || ( 0 == chart ))
? &_printDataValuesSettings
: &_printDataValuesSettings2;
uint theSize( UINT_MAX == size ? 16 : size );
for ( uint i = 0; i < count; ++i ) {
settings->_dataValuesUseFontRelSize = ( 0 < theSize );
settings->_dataValuesFontRelSize = theSize;
if ( 0 < chart )
settings = &_printDataValuesSettings2;
}
emit changed();
}
/**
Specifies that data value texts are to be printed with default font
parameters. Calling this methode results in resetting the
respective font size and colour and position parameters but not the
TQFont itself. By setting \c callSetPrintDataValues to true you
select general enabling of text printing, when doing so it is
<b>not</b> neccessary to call setPrintDataValues() after calling
setPrintDataValuesWithDefaultFontParams().
\note If you want to call setChartType() after calling
setPrintDataValuesWithDefaultFontParams() you should set the \c
callSetPrintDataValues parameter to false to prevent
setPrintDataValues() from being called twice since it is called
internally each time you call setChartType() <b>if</b> the default
font params are to be set.
\sa printDataValuesWithDefaultFontParams, setPrintDataValues
*/
void KDChartParams::setPrintDataValuesWithDefaultFontParams( uint chart,
bool callSetPrintDataValues )
{
uint count = (KDCHART_ALL_CHARTS == chart) ? 2 : 1;
PrintDataValuesSettings * settings = (( 1 < count ) || ( 0 == chart ))
? &_printDataValuesSettings
: &_printDataValuesSettings2;
for ( uint i = 0; i < count; ++i ) {
settings->_printDataValues = true;
settings->_useDefaultFontParams = true;
if ( 0 < chart )
settings = &_printDataValuesSettings2;
}
if ( callSetPrintDataValues )
setPrintDataValues( true, chart );
}
/**
\fn bool KDChartParams::printDataValuesWithDefaultFontParams( uint chart ) const
Retrieves whether data value texts are to be printed with
non-default font parameters or not - <b>when</b> text printing is
active.
\note You might also want to call printDataValues to see if text
printing is active since this default flag remains set in
background even when printing has been de-activated.
\sa setPrintDataValuesWithDefaultFontParams, printDataValues
*/
/**
\fn bool KDChartParams::printDataValues( uint chart ) const
Returns whether the data values will be printed near their
respective entries.
\param chart The number of the chart: 0 for the first chart, 1 for
the second chart in case there are two charts to be drawn sharing the
same data area.
\return whether the data values will be printed near their
respective entries.
\sa setPrintDataValues
*/
/**
\fn TQFont KDChartParams::dataValuesFont( uint chart ) const
Returns the font to be used for printing the data values
\param chart The number of the chart: 0 for the first chart, 1 for
the second chart in case there are two charts to be drawn sharing the
same data area.
\returns the font to be used for printing the data values
\sa setPrintDataValues
*/
/**
\fn bool KDChartParams::dataValuesUseFontRelSize( uint chart ) const
Returns whether the font size to be used for printing the
data values is calculated dynamically.
\param chart The number of the chart: 0 for the first chart, 1 for
the second chart in case there are two charts to be drawn sharing the
same data area.
\return whether the font size to be used for printing the
data values is calculated dynamically.
\sa setPrintDataValues, setPrintDataValuesFontRelSize
*/
/**
\fn int KDChartParams::dataValuesFontRelSize( uint chart ) const
Returns the relative size (in per mille of the chart width)
of font size to be used for printing the
data values.
\param chart The number of the chart: 0 for the first chart, 1 for
the second chart in case there are two charts to be drawn sharing the
same data area.
\return the relative size (in per mille of the chart width)
of font size to be used for printing the
data values.
\sa setPrintDataValues, setPrintDataValuesFontRelSize
*/
/**
\fn TQColor KDChartParams::dataValuesColor( uint chart ) const
Returns the colour of the font to be used for printing the
data values.
\param chart The number of the chart: 0 for the first chart, 1 for
the second chart in case there are two charts to be drawn sharing the
same data area.
\return the colour of the font to be used for printing the
data values.
\sa setPrintDataValues, setPrintDataValuesColor
*/
/**
\fn bool KDChartParams::dataValuesAutoColor( uint chart ) const
Returns whether the font to be used for printing the data values
texts shall have automatically calculated colors fitting to their
respectivs data representations.
\param chart The number of the chart: 0 for the first chart, 1 for
the second chart in case there are two charts to be drawn sharing the
same data area.
\return whether the font to be used for printing the data values texts
shall have automatically calculated colors fitting to their respectivs data representations.
\sa setPrintDataValues
*/
/**
Returns the anchor position which the text is to be aligned to.
\param chart The number of the chart: 0 for the first chart, 1 for
the second chart in case there are two charts to be drawn sharing the
same data area.
\param negative If true the return value is only valid for data
values less than zero, if false it applies to data values greater
or equal to zero.
\returns the anchor position which the text is to be aligned to in case of
the value being less than zero.
\sa setPrintDataValues
*/
KDChartEnums::PositionFlag KDChartParams::dataValuesAnchorPosition( uint chart, bool negative ) const
{
if ( negative )
return chart ? _printDataValuesSettings2._dataValuesAnchorNegativePosition
: _printDataValuesSettings._dataValuesAnchorNegativePosition;
else
return chart ? _printDataValuesSettings2._dataValuesAnchorPositivePosition
: _printDataValuesSettings._dataValuesAnchorPositivePosition;
}
/**
Returns the way how the text is to be aligned to the anchor.
This must be a reasonable combination of TQt::AlignmentFlags.
\param chart The number of the chart: 0 for the first chart, 1 for
the second chart in case there are two charts to be drawn sharing the
same data area.
\param negative If true the return value is only valid for data
values less than zero, if false it applies to data values greater
or equal to zero.
\returns the way how the text is to be aligned to the anchor in case of
the value being less than zero.
\sa setPrintDataValues
*/
uint KDChartParams::dataValuesAnchorAlign( uint chart, bool negative ) const
{
if ( negative )
return chart ? _printDataValuesSettings2._dataValuesAnchorNegativeAlign
: _printDataValuesSettings._dataValuesAnchorNegativeAlign;
else
return chart ? _printDataValuesSettings2._dataValuesAnchorPositiveAlign
: _printDataValuesSettings._dataValuesAnchorPositiveAlign;
}
/**
Returns the X distance between the text and its anchor.
\note For better compatibility to the dynamic font size,
this parameter is <b>always</b> interpreted as being a per-mille
value of the logical width of the drawing area. If greater 0, the X
position is increased, if less than 0, it is reduced, this is
calculated dynamically before painting.
\param chart The number of the chart: 0 for the first chart, 1 for
the second chart in case there are two charts to be drawn sharing the
same data area.
\param negative If true the return value is only valid for data
values less than zero, if false it applies to data values greater
or equal to zero.
\returns the X distance between the text and its anchor.
\sa setPrintDataValues
*/
int KDChartParams::dataValuesAnchorDeltaX( uint chart, bool negative ) const
{
if ( negative )
return chart ? _printDataValuesSettings2._dataValuesAnchorNegativeDeltaX
: _printDataValuesSettings._dataValuesAnchorNegativeDeltaX;
else
return chart ? _printDataValuesSettings2._dataValuesAnchorPositiveDeltaX
: _printDataValuesSettings._dataValuesAnchorPositiveDeltaX;
}
/**
Returns the Y distance between the text and its anchor.
\note For better compatibility to the dynamic font size this
parameter is <b>always</b> interpreted as being a per-mille value
of the logical width of the drawing area. If greater 0, the Y
position is increased, if less than 0, it is reduced, this is
calculated dynamically before painting.
\param chart The number of the chart: 0 for the first chart, 1 for
the second chart in case there are two charts to be drawn sharing the
same data area.
\param negative If true the return value is only valid for data
values less than zero, if false it applies to data values greater
or equal to zero.
\returns the Y distance between the text and its anchor.
\sa setPrintDataValues
*/
int KDChartParams::dataValuesAnchorDeltaY( uint chart, bool negative ) const
{
if ( negative )
return chart ? _printDataValuesSettings2._dataValuesAnchorNegativeDeltaY
: _printDataValuesSettings._dataValuesAnchorNegativeDeltaY;
else
return chart ? _printDataValuesSettings2._dataValuesAnchorPositiveDeltaY
: _printDataValuesSettings._dataValuesAnchorPositiveDeltaY;
}
/**
Returns the amount of degrees (using a circle of 360 degrees) taken to
rotate the text. Positive values rotate clockwise, negative values rotate counter-clockwise.
\param chart The number of the chart: 0 for the first chart, 1 for
the second chart in case there are two charts to be drawn sharing the
same data area.
\param negative If true the return value is only valid for data
values less than zero, if false it applies to data values greater
or equal to zero.
\returns the amount of degrees (using a circle of 360 degrees) taken to
rotate the text.
\sa setPrintDataValues
*/
int KDChartParams::dataValuesRotation( uint chart, bool negative ) const
{
if ( negative )
return chart ? _printDataValuesSettings2._dataValuesNegativeRotation
: _printDataValuesSettings._dataValuesNegativeRotation;
else
return chart ? _printDataValuesSettings2._dataValuesPositiveRotation
: _printDataValuesSettings._dataValuesPositiveRotation;
}
/**
\fn KDChartEnums::TextLayoutPolicy KDChartParams::dataValuesLayoutPolicy( uint chart ) const
Returns the way to handle too narrow space conflicts: what to do if
a data text covers a neighboring data text (or a neighboring data
area, resp.).
\note A layout policy different from LayoutJustOverwrite from does
not mean that this policy is followed in any case. Rather than
giving up when the selected policy does not result in a good layout
the program will automatically try the next policy: if
LayoutPolicyRotate did not succeed LayoutPolicyShiftVertically will
be tried, if this did not succeed either
LayoutPolicyShiftHorizontally will be tried.
\param chart The number of the chart: 0 for the first chart, 1 for
the second chart in case there are two charts to be drawn sharing the
same data area.
\returns the way to handle too narrow space conflicts.
\sa setPrintDataValues
*/
/**
\fn void KDChartParams::changed()
This signal is emitted when any of the chart parameters has changed.
*/
/**
\var const uint KDCHART_MAX_AXES
Charts have up to 12 axes:
up to two axes on both sides for X, Y
and Z (if data is 3-dimensional). This constant is located here and
in KDChartAxisParams, because one KDChartAxisParams object
describes only one axis.
*/
/**
\var static const int KDCHART_PROPSET_NORMAL_DATA;
Default (built-in) property ID, used for data cells
without any special properties.
Use this IDs <b>without</b> previously defining a respective
set of properties via KDChartParams::registerProperties(...).
\note While (in theory) it <b>is</b> possible to assign special
property values to this build-in property set this normally might not
a very good idea since these values would apply to every(!) data cell
that has no other property set assigned. Such general changes
would rather be done calling KDChartParam's main functions, e.g. you
would invoke KDChartParams::setLineMarker(true) instead of changing
the normal-data property set.
\sa KDCHART_PROPSET_TRANSPARENT_DATA
\sa KDCHART_PROPSET_HORI_LINE, KDCHART_PROPSET_VERT_LINE
\sa KDChartData::setPropertySet
\sa KDChartParams::registerProperties, KDChartParams::setProperties, KDChartParams::properties
*/
/**
\var static const int KDCHART_PROPSET_TRANSPARENT_DATA;
Predefined (build-in) property ID. used to specify a cell that should be displayed
using a null pen: neither the data representation nor
the connecting line to the next point will be shown,
but the line will be drawn using line style TQt::NoPen.
Use this IDs <b>without</b> previously defining a respective
set of properties via KDChartParams::registerProperties(...).
\note: Assigning this property to a data cell will result in the
cell being invisible: there will be no marker for this point and
there will be a 'gap' in this dataset's line from the point to the next one.
In case you want to change this default behavior,
use KDChartParams::setProperties(),
e.g. the following piece of code still has an invisible line while now
enabeling showing of the marker - but only if it was set active by
KDChartParams::setLineMarker(true).
\verbatim
KDChartPropertySet transpProps;
bool bDummy;
if( properties(KDCHART_PROPSET_TRANSPARENT_DATA,
transpProps) ){
// build-in property was found, let's modify it a bit:
transpProps.setShowMarker(
KDCHART_PROPSET_NORMAL_DATA, bDummy );
setProperties(KDCHART_PROPSET_TRANSPARENT_DATA,
transpProps);
}else{
// Ooops? The build-in property was NOT found!
// OK, never mind, let's specify it from scratch:
transpProps.setName("transparent data");
transpProps.setLineStyle(KDChartPropertySet::OwnID, TQt::NoPen);
transpProps.setShowMarker(
KDCHART_PROPSET_NORMAL_DATA, bDummy);
setProperties(KDCHART_PROPSET_TRANSPARENT_DATA,
transpProps);
}
\endverbatim
\note The example above uses setProperties (in the last line) to
define a property set. This is the right way for build-in property sets,
but it is not recomended for your additional user-defined property sets:
these should be registered with the registerProperties function
to initially obtain a unique ID number for your new property set,
see the second example given with \c KDCHART_PROPSET_VERT_LINE.
\sa KDCHART_PROPSET_NORMAL_DATA
\sa KDCHART_PROPSET_HORI_LINE, KDCHART_PROPSET_VERT_LINE
\sa KDChartData::setPropertySet
\sa KDChartParams::registerProperties, KDChartParams::setProperties, KDChartParams::properties
*/
/**
\var static const int KDCHART_PROPSET_HORI_LINE;
Predefined (build-in) property ID. may be used to specify a special cell
which is not part of the normal data but to be used for positioning
a separate horizontal line.
Data display will be surpressed for this point: neither the data
representation nor the connecting line to the next point will
be shown, actually the point will remain invisible but a horizontal
line will be drawn instead: using line style TQt::DotLine and the
respective dataset's line color.
Use this IDs <b>without</b> previously defining a respective
set of properties via KDChartParams::registerProperties(...).
In case you want to change this default behavior,
use KDChartParams::setProperties(),
e.g. the following piece of code still has an invisible line and
also does not show the point's marker while now showing two
separate markers at the horizontal line's start and end.
\verbatim
KDChartPropertySet horiProps;
if( properties(KDCHART_PROPSET_HORI_LINE,
horiProps) ){
// build-in property was found, let's modify it a bit:
horiProps.setExtraMarkersAlign(
KDChartPropertySet::OwnID,
TQt::AlignLeft | TQt::AlignRight );
setProperties(KDCHART_PROPSET_HORI_LINE,
horiProps);
}else{
// Ooops? The build-in property was NOT found!
// OK, never mind, let's specify it from scratch:
horiProps.setName("horizontal line");
horiProps.setLineStyle(KDChartPropertySet::OwnID, TQt::NoPen);
horiProps.setShowMarker( KDChartPropertySet::OwnID, false );
horiProps.setExtraMarkersAlign( KDChartPropertySet::OwnID,
TQt::AlignLeft | TQt::AlignRight );
horiProps.setExtraMarkersAlign(
KDChartPropertySet::OwnID,
TQt::AlignLeft | TQt::AlignRight );
setProperties(KDCHART_PROPSET_HORI_LINE,
horiProps);
}
\endverbatim
\note The example above uses setProperties (in the last line) to
define a property set. This is the right way for build-in property sets,
but it is not recomended for your additional user-defined property sets:
these should be registered with the registerProperties function
to initially obtain a unique ID number for your new property set,
see the second example given with \c KDCHART_PROPSET_VERT_LINE.
\sa KDCHART_PROPSET_NORMAL_DATA
\sa KDCHART_PROPSET_VERT_LINE
\sa KDChartData::setPropertySet
\sa KDChartParams::registerProperties, KDChartParams::setProperties, KDChartParams::properties
*/
/**
\var static const int KDCHART_PROPSET_VERT_LINE;
Predefined (build-in) property ID. may be used to specify a special cell
which is not part of the normal data but to be used for positioning
a separate vertical line.
Data display will be surpressed for this point: neither the data
representation nor the connecting line to the next point will
be shown, actually the point will remain invisible but a vertical
line will be drawn instead: using line style TQt::DotLine and the
respective dataset's line color.
Use this IDs <b>without</b> previously defining a respective
set of properties via KDChartParams::registerProperties(...).
In case you want to change this default behavior,
use KDChartParams::setProperties(),
e.g. the following piece of code still has an invisible line and
also does not show the point's marker while now showing a
separate marker at the top end of the vertical line which
will <b>not</b> run across the complete data area but start
on the respective point's Y position and go to the top edge
of the chart's area.
\verbatim
KDChartPropertySet vertProps;
if( properties(KDCHART_PROPSET_VERT_LINE,
vertProps) ){
// build-in property was found, let's modify it a bit:
vertProps.setExtraMarkersAlign(
KDChartPropertySet::OwnID, TQt::AlignTop );
setProperties(KDCHART_PROPSET_VERT_LINE,
vertProps);
}else{
// Ooops? The build-in property was NOT found!
// OK, never mind, let's specify it from scratch:
vertProps.setName("vertical line");
vertProps.setLineStyle(KDChartPropertySet::OwnID, TQt::NoPen);
vertProps.setShowMarker( KDChartPropertySet::OwnID, false );
vertProps.setExtraMarkersAlign( KDChartPropertySet::OwnID,
TQt::AlignTop );
vertProps.setExtraMarkersAlign(
KDChartPropertySet::OwnID,
TQt::AlignTop );
setProperties(KDCHART_PROPSET_VERT_LINE,
vertProps);
}
\endverbatim
\note The example above uses setProperties (in the last line) to
define a property set. This is the right way for build-in property sets,
but it is not recomended for your additional user-defined property sets:
these should be registered with the registerProperties function
to initially obtain a unique ID number for your new property set,
see the following example:
The code shown below demonstrates how to specify a <b>new</b>
property set which then can be used for adding a red vertical
line with marker to some of your normal data points:
\verbatim
// 1. specify and register the new property set
KDChartPropertySet dataWithTopLineProps;
dataWithTopLineProps.setName(
"normal data with red vertical line on top");
dataWithTopLineProps.setExtraLinesAlign(
KDChartPropertySet::OwnID,
TQt::AlignTop );
dataWithTopLineProps.setExtraLinesWidth(
KDChartPropertySet::OwnID,
-2 );
dataWithTopLineProps.setExtraLinesColor(
KDChartPropertySet::OwnID,
TQt::red );
dataWithTopLineProps.setExtraLinesStyle(
KDChartPropertySet::OwnID,
TQt::SolidLine );
dataWithTopLineProps.setExtraMarkersAlign(
KDChartPropertySet::OwnID,
TQt::AlignTop );
dataWithTopLineProps.setExtraMarkersSize(
KDChartPropertySet::OwnID,
TQSize(-10, -10) );
dataWithTopLineProps.setExtraMarkersColor(
KDChartPropertySet::OwnID,
TQt::darkRed );
dataWithTopLineProps.setExtraMarkersStyle(
KDChartPropertySet::OwnID,
KDChartParams::LineMarkerCircle );
int idDataWithTopLineProps
= registerProperties( dataWithTopLineProps );
// 2. assign this property set
// to some of your data cells
d = new KDChartTableData( 5, 10 );
// ...
d->cell( 0, 2 ).setPropertySet( idDataWithTopLineProps );
d->cell( 2, 5 ).setPropertySet( idDataWithTopLineProps );
\endverbatim
\sa KDCHART_PROPSET_NORMAL_DATA
\sa KDCHART_PROPSET_HORI_LINE
\sa KDChartData::setPropertySet
\sa KDChartParams::registerProperties, KDChartParams::setProperties, KDChartParams::properties
*/
//@}
// END GENERAL
// START BARCHART
/** @name Bar chart-specific methods.
These methods query and set barchart-specific parameters.
*/
//@{
/**
\enum KDChartParams::BarChartSubType
The bar subtype. Only used when chartType() == Bar
\sa setBarChartSubType, barChartSubType
*/
/**
\fn void KDChartParams::setBarChartSubType( BarChartSubType barChartSubType )
Specifies the bar chart subtype.
This setting only has an effect in bar charts.
\param barChartSubType the bar chart subtype
\sa barChartSubType, BarChartSubType, setChartType, chartType
*/
/**
\fn KDChartParams::BarChartSubType KDChartParams::barChartSubType() const
Returns the bar chart subtype.
This setting only has an effect in bar charts.
\return the bar chart sub type
\sa setBarChartSubType, BarChartSubType, setChartType, chartType
*/
/**
\fn void KDChartParams::setThreeDBars( bool threeDBars )
Specifies whether the engine should draw the bars in 3D.
This setting only has an effect in bar charts.
\param threeDBars true if bars should be drawn with a 3D effect
\sa threeDBars, setThreeDBarAngle, threeDBarAngle
*/
/**
\fn bool KDChartParams::threeDBars() const
Returns whether the engine should draw any bars in 3D.
This setting only has an effect in bar charts.
\return true if bars should be draws with a 3D effect, false
otherwise
\sa setThreeDBars, threeDBarAngle, setThreeDBarAngle
*/
/**
\fn void KDChartParams::setThreeDBarsShadowColors( bool shadow )
\obsolete
Specifies whether the engine should draw the sides and tops of 3D bars
in shadowed versions of the data colors or in the data colors
themselves. Only used if threeDBars() == true. The default is true.
This setting only has an effect in bar charts.
This method is obsolete; use setThreeDShadowColors instead
\param shadow true for shadowed colors, false for original colors
\sa setThreeDShadowColors
*/
/**
\fn bool KDChartParams::threeDBarsShadowColors() const
\obsolete
Returns whether the engine should draw the sides and tops of 3D bars in
shadowed versions of the data colors or in the data colors
themselves. Only used if threeDBars() == true. The default is true.
This setting only has an effect in bar charts.
This method is obsolete; use threeDShadowColors instead
\return true if bars use shadowed colors for 3D effects
\sa setThreeDBarsShadowColors
*/
/**
Specifies the angle used for 3D bars. Only used if threeDBars() == true.
This setting only has an effect in bar charts.
\param angle the angle in degrees. The default (and most useful
value) is 45. Angle can be between 0 and 90, all other values
are ignored. Values close to 0 or close to 90 may look
strange, depending on the resolution of the output device.
\sa setThreeDBars, threeDBars
\sa threeDBarAngle, cosThreeDBarAngle
\sa setThreeDBarDepth, threeDBarDepth
*/
void KDChartParams::setThreeDBarAngle( uint angle )
{
if ( angle > 90 ) /* since angle is an uint, we do not need to
test for < 0 */
return ;
_threeDBarAngle = angle;
// cache the cosine of this value
_cosThreeDBarAngle = cos( static_cast < double > ( _threeDBarAngle ) * M_PI / 180.0 );
emit changed();
}
/**
\fn uint KDChartParams::threeDBarAngle() const
Returns the angle in degrees used for 3D bars. Only used if threeDBars() == true.
This setting only has an effect in bar charts.
\return the angle in degrees used for 3D bars, always between 0 and 90.
\sa setThreeDBars, threeDBars
\sa setThreeDBarAngle, cosThreeDBarAngle
\sa setThreeDBarDepth, threeDBarDepth
*/
/**
\fn double KDChartParams::cosThreeDBarAngle() const
Returns the cosine in rad of the angle used for 3D bars. Only used
if threeDBars() == true.
This setting only has an effect in bar charts.
\return the cosine in rad of the angle used for 3D bars, always
between 0 and 90. \sa setThreeDBars, threeDBars \sa
setThreeDBarAngle, threeDBarAngle \sa setThreeDBarDepth,
threeDBarDepth
*/
/**
\fn void KDChartParams::setThreeDBarDepth( double depth )
Specifies the depth of the 3D Effect used for 3D bars.
Only used if threeDBars() == true.
This setting only has an effect in bar charts.
\param depth the depth of the 3D Effect in relation to
the bar width. The default (and most useful) value of
1.0 may be used to specify bars with square basis.
\sa threeDBarDepth
\sa setThreeDBars, threeDBars
\sa setThreeDBarAngle, threeDBarAngle, cosThreeDBarAngle
*/
/**
\fn double KDChartParams::threeDBarDepth() const
Returns the depth of the 3D Effect used for 3D bars.
Only used if threeDBars() == true.
This setting only has an effect in bar charts.
\return the depth of the 3D Effect in relation to the bar width.
\sa setThreeDBarDepth
\sa setThreeDBars, threeDBars
\sa setThreeDBarAngle, threeDBarAngle, cosThreeDBarAngle
*/
/**
\fn void KDChartParams::setDatasetGap( int gap )
Specifies the number of pixels between two dataset values.
In addition you might want to use \c setOutlineDataLineStyle( TQt::NoPen ) to hide the line.
Also the method \c setValueBlockGap might be usefull, please read the information given there ...
This setting only has an effect in bar charts: if there is more than one dataset shown by your chart.
\note Use negative values for overlaps, use \c
setDatasetGapIsRelative to specify that the \c gap
value is a per mille value of the chart data area width.
The default is 6 per mille of the data area of the chart.
\param gap the number of pixels between two dataset values.
\sa setValueBlockGap
\sa datasetGap
\sa datasetGapIsRelative, setDatasetGapIsRelative
\sa setOutlineDataLineStyle
*/
/**
\fn int KDChartParams::datasetGap() const
Returns the number of pixels between two dataset values.
This setting only has an effect in bar charts.
\note Negative values signify overlaps, use \c datasetGapIsRelative
to find out if the \datasetGap value is a per mille value of the
chart data area width.
\return the number of pixels between two dataset values.
\sa setDatasetGap
\sa datasetGapIsRelative, setDatasetGapIsRelative
*/
/**
\fn void KDChartParams::setDatasetGapIsRelative( bool gapIsRelative )
Specifies if the value set by \c setDatasetGap is a
per mille value of the chart data area width.
This setting only has an effect in bar charts.
\param gapIsRelative specifies if the value set by \c setDatasetGap
is a per mille value of the chart data area width.
\sa datasetGapIsRelative, datasetGap, setDatasetGap
*/
/**
\fn bool KDChartParams::datasetGapIsRelative() const
Returns if the value set by \c setDatasetGap
is a per mille value of the chart data area width.
This setting only has an effect in bar charts.
\return if the value set by \c setDatasetGap
is a per mille value of the chart data area width.
\sa setDatasetGap, setDatasetGapIsRelative, datasetGap, setDatasetGap
*/
/**
\fn void KDChartParams::setValueBlockGap( int gap )
Specifies the number of pixels between each value block.
If there is only one dataset shown this gap is appearing between each of the bars, otherwise it is appearing between each of the bar blocks.
In addition you might want to use \c setOutlineDataLineStyle( TQt::NoPen ) to hide the line.
Also the method \c setDatasetGap might be usefull, please read the information given there ...
This setting only has an effect in bar charts.
Use negative values for overlaps (which might look strange),
use \c setValueBlockGapIsRelative to specify that the \c gap
value is a per mille value of the chart data area width.
The default is 15 per mille of the data area of the chart.
\note Specifying a value block gap width AND a bar width
may result in KD Chart not being able to display all bars
if the data area is not wide enough. To make your
application notice when this
happens you should consider connecting the
barsDisplayed() signal emitted by your KDChartWidget object
to an appropriate slot function. Additionally (or in case
you are not using the KDChartWidget class, resp.)
you may access the number of actually displayed/not displayed
bars by the KDChartParams functions numBarsDisplayed
and numBarsLeft, the return value of these functions
are not not defined if they are called before drawing is done.
\param gap the number of pixels between each value block.
\sa setDatasetGap
\sa setBarWidth, valueBlockGap
\sa KDChartWidget::barsDisplayed, KDChart::barsDisplayed
\sa numBarsDisplayed, numBarsLeft
\sa valueBlockGapIsRelative, setValueBlockGapIsRelative
\sa setOutlineDataLineStyle
*/
/**
\fn int KDChartParams::valueBlockGap() const
Returns the number of pixels between each value block.
This setting only has an effect in bar charts.
\note Negative values signify overlaps, use \c valueBlockGapIsRelative
to find out if the \valueBlockGap value is a per mille value of the
chart data area width.
\return the number of pixels between each value block.
\sa valueBlockGap
\sa valueBlockGapIsRelative, setValueBlockGapIsRelative
*/
/**
\fn void KDChartParams::setBarWidth( int width )
Specifies the width of one bar: makes sure that all of
the bars have exactly the same width.
This setting only has an effect in bar charts.
\note Use negative values for to specify that the \c width
value is a per mille value of the chart data area width,
use no value or the default KDCHART_AUTO_SIZE
to (re)activate normal calculation mode making sure that all
bars fit into the available space but might not look so nice
if many bars are there.
\note Specifying a bar width AND a value block gap width
may result in KD Chart not being able to display all bars
if the data area is not wide enough. To make your
application notice when this
happens you should consider connecting the
barsDisplayed() signal emitted by your KDChartWidget object
to an appropriate slot function. Additionally (or in case
you are not using the KDChartWidget class)
you may access the number of actually displayed/not displayed
bars by the KDChartParams functions numBarsDisplayed
and numBarsLeft, the return value of these functions
are not not defined if they are called before drawing is done.
\param width the width of one bar.
\sa KDChartWidget::barsDisplayed, KDChart::barsDisplayed
\sa numBarsDisplayed, numBarsLeft
\sa setValueBlockGap
*/
/**
\fn int KDChartParams::barWidth() const
Returns the width of one bar as set by setBarWidth
or KDCHART_AUTO_SIZE if setBarWidth
was never called.
This setting only has an effect in bar charts.
\note Negative values signify that the bar width is
a per mille value of the chart data area width.
\return the width of one bar as set by setBarWidth
or KDCHART_AUTO_SIZE if setBarWidth
was never called.
\sa setBarWidth
*/
/**
\fn int KDChartParams::numBarsDisplayed() const
Returns the number of bars that were displayed last
time your bar chart was drawn.
This setting only has an effect in bar charts.
This can be different from the number of bars you
actually wanted to display: by specifying both
the bar width and the value block gap width you
may controll your chart very well but take the risk
of not getting all bars drawn if there is not enough
horizontal space to display them with the given width
and gap width.
To quickly determine if all bars were drawn just check
if the numBarsLeft() function returns a zero value.
\return the number of bars that were drawn.
\sa KDChartWidget::barsDisplayed, KDChart::barsDisplayed
\sa numBarsLeft
\sa setBarWidth, setValueBlockGap
*/
/**
\fn int KDChartParams::numBarsLeft() const
Returns the number of bars that could NOT be painted
last time your bar chart was drawn.
This setting only has an effect in bar charts.
If this value is greater than zero, the bar chart
shows less bars than you
actually wanted to display: by specifying both
the bar width and the value block gap width you
may controll your chart very well but take the risk
of not getting all bars drawn if there is not enough
horizontal space to display them with the given width
and gap width.
You may call the numBarsDisplayed() function to see
how many bars were drawn.
\return the number of bars that could not be drawn.
\sa KDChartWidget::barsDisplayed, KDChart::barsDisplayed
\sa numBarsDisplayed
\sa setBarWidth, setValueBlockGap
*/
/**
\fn void KDChartParams::setValueBlockGapIsRelative( bool gapIsRelative )
Specifies if the value set by \c setValueBlockGap is a
per mille value of the chart data area width.
This setting only has an effect in bar charts.
\param gapIsRelative specifies if the value set by \c setValueBlockGap
is a per mille value of the chart data area width.
\sa valueBlockGapIsRelative, valueBlockGap, setValueBlockGap
*/
/**
\fn bool KDChartParams::valueBlockGapIsRelative() const
Returns if the value set by \c setValueBlockGap
is a per mille value of the chart data area width.
This setting only has an effect in bar charts.
\return if the value set by \c setValueBlockGap
is a per mille value of the chart data area width.
\sa setValueBlockGapIsRelative, setValueBlockGap, valueBlockGap
\sa setValueBlockGap
*/
/**
\fn void KDChartParams::setDrawSolidExcessArrows( bool solidArrows )
Specifies whether arrows showing excess values in bar charts should
be drawn solidly or split.
This setting only has an effect in bar charts.
If \a solidArrows is true, the bars with excess values (like
infinity, or any other value that exceeds the y-axis labelling) will
have an integrated arrow head. If \a solidArrows is false, they will
still have an integrated arrow head at a lower position, but also
two flat arrows on top of them to better indicate that there could
be a large gap. It is recommended to set this value to false (this
is also the default), as this makes the excess value situation much
more obvious.
This setting only has an effect in bar charts.
\param solidArrows whether excess arrows shown be drawn solidly or
split
\sa drawSolidExcessArrows
*/
/**
\fn bool KDChartParams::drawSolidExcessArrows() const
Returns whether arrows showing excess values in bar charts should
be drawn solidly or split.
This setting only has an effect in bar charts.
\return true if excess arrows are drawn solidly, false if they are
split
\sa setDrawSolidExcessArrows
*/
//@}
// END BARCHART
// START LINECHART
/** @name Line and area chart-specific methods.
These methods query and set line and area chart-specific parameters.
*/
//@{
/**
\enum KDChartParams::LineChartSubType
The line subtype. Only used when chartType == Line
\sa setLineChartSubType, lineChartSubType
*/
/**
\fn void KDChartParams::setLineChartSubType( LineChartSubType lineChartSubType )
Specifies the line chart subtype. Only used if chartType() ==
Line. The default is LineNormal.
\param lineChartSubType the line chart subtype
\sa lineChartSubType, LineChartSubType, setChartType, chartType
*/
/**
\fn KDChartParams::LineChartSubType KDChartParams::lineChartSubType() const
Returns the line chart subtype. Only used if chartType() ==
Line.
\return the line chart sub type
\sa setLineChartSubType, LineChartSubType, setChartType, chartType
*/
/**
\fn void KDChartParams::setLineMarker( bool marker )
Specifies whether there should be a marker at each data
point. Only used if chartType() == Line and if threeDLines() ==
false. The default is not to draw markers.
\note Use the setLineMarkerStyle function to specify the shape
of the markers, use the setLineWidth function to set the
width of the lines connecting the markers (or to surpress
drawing of such lines, resp.)
\param marker true if markers should be drawn
\sa setLineMarker, setLineMarkerSize
\sa setLineMarkerStyle, setLineColor, setLineWidth, setLineStyle
*/
/**
\fn bool KDChartParams::lineMarker() const
Returns whether line markers should be drawn at each data
point. Only used if chartType() == Line and if threeDLines() ==
false.
\return true if markers should be drawn.
*/
/**
\enum KDChartParams::LineMarkerStyle
The available line marker styles.
*/
/**
Specifies the line marker to be used for a dataset. Only used if
chartType() == Line and lineMarker() == true. If you specify a
marker for a dataset, but not for a dataset with a lower
value, then the marker for the dataset with the lower value
will be undefined unless it was previously defined. The default
is a circle for the first dataset, a square for the second, a
diamond for the third and undefined for all subsequent
datasets.
\note Extra marker styles LineMarker1Pixel and LineMarker4Pixels
are intended for drawing charts representing large numbers
of data cells, when using these styles it might be a good
idea to set the line width to zero. This would surpress
drawing of the lines resulting in drawing the markers only.
\param dataset the dataset for which to set the line marker
\param style the style to set for the specified dataset
\sa LineMarkerStyle, lineMarkerStyle, setLineMarkerSize
\sa setLineColor, setLineWidth, setLineStyle
*/
void KDChartParams::setLineMarkerStyle( uint dataset, LineMarkerStyle style )
{
_lineMarkerStyles[ dataset ] = style;
_maxDatasetLineMarkerStyle = TQMAX( dataset,
_maxDatasetLineMarkerStyle );
emit changed();
}
/**
Returns the marker to be used for a dataset. Only used if
chartType() == Line and lineMarker() == true.
\param dataset the dataset for which to return the line marker
\return the line marker for the specified data set
\sa LineMarkerStyle, setLineMarkerStyle
*/
KDChartParams::LineMarkerStyle KDChartParams::lineMarkerStyle( uint dataset ) const
{
if( _lineMarkerStyles.find( dataset ) != _lineMarkerStyles.end() )
return _lineMarkerStyles[ dataset ];
else
return LineMarkerCircle; // default
}
/**
\var KDChartParams::LineMarkerStyleMap;
The type of the storage structure for line marker styles. You
should normally not need to use this.
*/
/**
Sets a whole map of line marker styles. You can use this for
assigning many line marker styles at the same time, but
typically it is better to set them individually with \a
setLineMarkerStyle().
\param map the map of styles
\sa lineMarkerStyles, setLineMarker, setLineMarkerStyle, setLineMarkerSize
\sa setLineColor, setLineWidth, setLineStyle
*/
void KDChartParams::setLineMarkerStyles( LineMarkerStyleMap map ) {
_lineMarkerStyles = map;
// update _maxDatasetLineMarkerStyle
uint maxDataset = 0;
for( LineMarkerStyleMap::ConstIterator it = _lineMarkerStyles.begin();
it != _lineMarkerStyles.end(); ++it )
maxDataset = TQMAX( maxDataset, it.key() );
_maxDatasetLineMarkerStyle = maxDataset;
}
/**
\fn KDChartParams::LineMarkerStyleMap KDChartParams::lineMarkerStyles() const
Returns the whole map of line marker styles. You will typically
not need this. You can query individual line marker styles by
calling \a lineMarkerStyle().
\return the map of styles
\sa lineMarkerStyle, setLineMarkerStyles
*/
/**
\fn uint KDChartParams::maxDatasetLineMarkerStyle() const
Returns the highest dataset for which a line marker style has been
defined. Not all datasets with a lower number necessarily have
a defined line marker.
\return the highest dataset with a defined line marker
\sa LineMarkerStyle, setLineMarkerStyle, lineMarkerStyle
*/
/**
\fn void KDChartParams::setLineMarkerSize( TQSize size )
Specifies the sizes of line markers. Only used if chartType() == Line
and lineMarker() == true. The default is 6x6.
Negative values of \c size.width() and/or \c size.height() will
be interpreted as per-mille value of the chart's drawing area,
the true marker width (or height, resp.) will then be calculated
dynamically depending on the actual chart size.
\param size the size of the line marker in pixels
\sa lineMarkerSize, setLineMarker, setLineMarkerStyle
\sa setLineColor, setLineWidth, setLineStyle
*/
/**
\fn TQSize KDChartParams::lineMarkerSize() const
Returns the sizes of line markers. Only used if chartType() == Line and
lineMarker() == true.
\return the size of the line marker in pixels
\sa setLineMarkerSize
*/
/**
\fn void KDChartParams::setLineWidth( int width )
Specifies the width for lines in line charts. Default is 1.
Only used if threeDLines() == false.
If \c width is negative it is interpreted as per-mille
value of the chart's drawing area, the true line width
will then be calculated dynamically depending on the
actual chart size.
\note Set the line width to zero to surpress drawing of the lines
but do not forget to call setLineMarker( true ) and specify an
appropriate marker style to have the data points drawn.
\param width the new width
\sa lineWidth, setLineColor, setLineStyle
\sa setLineMarker, setLineMarkerSize, setLineMarkerStyle
*/
/**
\fn int KDChartParams::lineWidth() const
Returns the line width of the lines in line charts.
\return the line width of lines in line charts
\sa lineWidth
*/
/**
\fn void KDChartParams::setLineColor( TQColor color = TQColor() )
Specifies the color of the lines in line charts. By default
line chart lines are drawn in the color specified by the
respective setDataColor function, to reset your chart to
this default just call setLineColor() without specifying a
parameter.
\note Setting the line color to a special value is usefull to
visualize gaps in a normally very narrow series of data values.
e.g. You might want to specify setLineMarkerStyle( i, LineMarker4Pixels )
or even setLineMarkerStyle( i, LineMarker1Pixel ) and have your
marker dots normally form a contiguous line without the need of
any connecting lines except at the places where missing data
values would interrupt the 'line'. Using setLineColor( TQt::darkGray)
could make your chart more readable in such cases.
\param color of the lines in line charts
\sa lineColor, setLineWidth, setLineStyle
\sa setLineMarker, setLineMarkerSize, setLineMarkerStyle
*/
/**
\fn TQColor KDChartParams::lineColor() const
Returns the color of the lines in line charts.
\return the color of the lines in line charts
\sa setLineColor
*/
/**
Specifies a line style to be used for line charts.
The dataset parameter is optional, by default saying
KDCHART_GLOBAL_LINE_STYLE, you may use it to
set a dataset specific line style for one the lines.
Global and dataset specific line styles may be used
simultaneously: If no dataset specific style is
defined the global style is used which by default
is TQt::SolidLine.
Warning: On Windows 95/98, the style setting (other
than NoPen and SolidLine) has no effect for lines with width greater
than 1, due to a bug in the operating system.
\param style the line style of the line
\param dataset the number of the dataset controlling the respective line
\sa lineStyle, setLineWidth, setLineColor
\sa setLineMarker, setLineMarkerSize, setLineMarkerStyle
*/
void KDChartParams::setLineStyle( Qt::PenStyle style, uint dataset )
{
if( KDCHART_GLOBAL_LINE_STYLE == dataset )
_lineStyle = style;
else
_datasetLineStyles[ dataset ] = style;
emit changed();
}
/**
Returns the line style of one of the lines in a line chart
or the global line style if no style was specified for the
dataset or if the optional dataset parameter has its default
value KDCHART_GLOBAL_LINE_STYLE.
Warning: On Windows 95/98, the style setting (other than NoPen and
SolidLine) has no effect for lines with width greater than 1, due
to a bug in the operating system.
\param dataset the dataset for which to return the line style
\return the line style for the specified data set
\sa setLineStyle, setLineMarkerStyle
*/
Qt::PenStyle KDChartParams::lineStyle( uint dataset ) const
{
if( KDCHART_GLOBAL_LINE_STYLE == dataset )
// global line style
return _lineStyle;
else if( _datasetLineStyles.find( dataset ) == _datasetLineStyles.end() )
return lineStyle();
else
return _datasetLineStyles[ dataset ];
}
/**
\fn void KDChartParams::setThreeDLines( bool threeD )
Specifies whether lines should be drawn three-dimensionally or
not. The default is to draw two-dimensionally. Only used if
chartType() == Line.
\param threeD if true, draw three-dimensionally, otherwise draw
two-dimensionally.
\sa threeDLines(), setThreeDLineDepth(), threeDLineDepth(),
// setThreeDLineXRotation(), threeDLineXRotation(),
// setThreeDLineYRotation(), threeDLineYRotation()
*/
/**
\fn bool KDChartParams::threeDLines() const
Returns whether lines are drawn three-dimensionally or not. The
default is to draw two-dimensionally. Only used if chartType() ==
Line.
\return true if lines are drawn three-dimensionally, false
otherwise.
\sa setThreeDLines(), setThreeDLineDepth(), threeDLineDepth(),
// setThreeDLineXRotation(), threeDLineXRotation(),
// setThreeDLineYRotation(), threeDLineYRotation()
*/
/**
\fn void KDChartParams::setThreeDLineDepth( int depth )
Specifies the depth of 3D lines (the "width" in Z
direction). Only used if chartType() == Line and threeDLines() ==
true. The default is 20 pixels.
\param depth the depth in pixels
\sa setThreeDLines(), threeDLines(), threeDLineDepth()
*/
/**
\fn int KDChartParams::threeDLineDepth() const
Returns the depth of 3D lines (the "width" in Z direction). Only
used if chartType() == Line and threeDLines() == true. The
default is 20 pixels.
\return the depth in pixels
\sa setThreeDLines(), threeDLines(), setThreeDLineDepth()
*/
/**
\fn void KDChartParams::setThreeDLineXRotation( int degrees )
\deprecated Feature scheduled for future release, at present not implemented.
*/
/*
\fn void KDChartParams::setThreeDLineXRotation( int degrees )
Specifies the rotation around the X axis in degrees. The value
may be between 0 and 90. Only used if chartType() == Line and
threeDLines() == true. The default is 30 degrees. If 0 degrees is
specified for both the X and the Y rotation, the lines will look
like 2D lines.
\param rotation the rotation in degrees. Must be between 0 and
90.
\sa setThreeDLines(), threeDLines(), threeDLineXRotation()
*/
/**
\fn int KDChartParams::threeDLineXRotation() const
\deprecated Feature scheduled for future release, at present not implemented.
*/
/*
\fn int KDChartParams::threeDLineXRotation() const
Returns the rotation around the X axis in degrees. The value may
be between 0 and 90. Only used if chartType() == Line and
threeDLines() == true. The default is 30 degrees.
\return the rotation in degrees. Is always between 0 and 90.
*/
/**
\fn void KDChartParams::setThreeDLineYRotation( int degrees )
\deprecated Feature scheduled for future release, at present not implemented.
*/
/*
\fn void KDChartParams::setThreeDLineYRotation( int degrees )
Specifies the rotation around the Y axis in degrees. The value
may be between 0 and 90. Only used if chartType() == Line and
threeDLines() == true. The default is 30 degrees. If 0 degrees is
specified for both the X and the Y rotation, the lines will look
like 2D lines.
\param rotation the rotation in degrees. Must be between 0 and
90.
\sa setThreeDLines(), threeDLines(), threeDLineYRotation()
*/
/**
\fn int KDChartParams::threeDLineYRotation() const
\deprecated Feature scheduled for future release, at present not implemented.
*/
/*
\fn int KDChartParams::threeDLineYRotation() const
Returns the rotation around the X axis in degrees. The value may
be between 0 and 90. Only used if chartType() == Line and
threeDLines() == true. The default is 30 degrees.
\return the rotation in degrees. Is always between 0 and 90.
*/
/**
\enum KDChartParams::AreaChartSubType
The area subtype. Only used when chartType == Area
\sa setAreaChartSubType, areaChartSubType
*/
/**
\fn void KDChartParams::setAreaChartSubType( AreaChartSubType areaChartSubType )
Specifies the area chart subtype. Only used if chartType() ==
Area. The default is AreaNormal.
\param areaChartSubType the area chart subtype
\sa areaChartSubType, AreaChartSubType, setChartType, chartType
*/
/**
\fn KDChartParams::AreaChartSubType KDChartParams::areaChartSubType() const
Returns the area chart subtype. Only used if chartType() ==
Area.
\return the area chart sub type
\sa setAreaChartSubType, AreaChartSubType, setChartType, chartType
*/
/**
\enum KDChartParams::AreaLocation
Specifies whether the area above the value points or below the
value points should be filled. The default is to fill below the
value points.
\sa setAreaLocation(), areaLocation()
*/
/**
\fn void KDChartParams::setAreaLocation( AreaLocation location )
Specifies whether the area above or below the value points
should be filled. The default is to fill below the value
points.
This setting is <em>not</em> used with percent areas
(i.e. areaChartSubType() == AreaPercent), because these always
cover the whole chart.
\param location whether to fill above or below the value points
\sa AreaLocation, areaLocation()
*/
/**
\fn KDChartParams::AreaLocation KDChartParams::areaLocation() const
Returns whether the area above or below the value points is
filled.
\return whether the area above or below the value points is
filled.
\sa AreaLocation, setAreaLocation()
*/
//@}
// END LINECHART
// START POLARCHART
/** @name Polar chart-specific methods.
These methods query and set polar chart-specific parameters.
*/
//@{
/**
\enum KDChartParams::PolarChartSubType
The polar subtype. Only used when chartType == Polar
\sa setPolarChartSubType, polarChartSubType
*/
/**
\fn void KDChartParams::setPolarChartSubType( PolarChartSubType polarChartSubType )
Specifies the polar chart subtype. Only used if chartType() ==
Polar. The default is PolarNormal.
\param polarChartSubType the polar chart subtype
\sa polarChartSubType, PolarChartSubType, setChartType, chartType
*/
/**
\fn KDChartParams::PolarChartSubType KDChartParams::polarChartSubType() const
Returns the polar chart subtype. Only used if chartType() ==
Polar.
\return the polar chart sub type
\sa setPolarChartSubType, PolarChartSubType, setChartType, chartType
*/
/**
\fn void KDChartParams::setPolarMarker( bool marker )
Specifies whether there should be a marker at each data
point. Only used if chartType() == Polar. The default is not to
draw markers.
\param marker true if markers should be drawn
*/
/**
\fn bool KDChartParams::polarMarker() const
Returns whether polar markers should be drawn at each data
point. Only used if chartType() == Polar.
\return true if markers should be drawn.
*/
/**
\enum KDChartParams::PolarMarkerStyle
The available polar marker styles.
*/
/**
Specifies the polar marker to be used for a dataset. Only used if
chartType() == Polar and polarMarker() == true. If you specify a
marker for a dataset, but not for a dataset with a lower
value, then the marker for the dataset with the lower value
will be undefined unless it was previously defined. The default
is a circle for the first dataset, a square for the second, a
diamond for the third and undefined for all subsequent
datasets.
\param dataset the dataset for which to set the polar marker
\param style the style to set for the specified dataset
\sa PolarMarkerStyle, polarMarkerStyle
*/
void KDChartParams::setPolarMarkerStyle( uint dataset, PolarMarkerStyle style )
{
_polarMarkerStyles[ dataset ] = style;
_maxDatasetPolarMarkerStyle = TQMAX( dataset,
_maxDatasetPolarMarkerStyle );
emit changed();
}
/**
Returns the marker to be used for a dataset. Only used if
chartType() == Polar and polarMarker() == true.
\param dataset the dataset for which to return the polar marker
\return the polar marker for the specified data set
\sa PolarMarkerStyle, setPolarMarkerStyle
*/
KDChartParams::PolarMarkerStyle KDChartParams::polarMarkerStyle( uint dataset ) const
{
if( _polarMarkerStyles.find( dataset ) != _polarMarkerStyles.end() )
return _polarMarkerStyles[ dataset ];
else
return PolarMarkerCircle; // default
}
/**
\var KDChartParams::PolarMarkerStyleMap
The type of the storage structure for polar marker styles. You
should normally not need to use this.
*/
/**
Sets a whole map of polar marker styles. You can use this for
assigning many polar marker styles at the same time, but
typically it is better to set them individually with \a
setPolarMarkerStyle().
\param map the map of styles
\sa polarMarkerStyles(), setPolarMarkerStyle()
*/
void KDChartParams::setPolarMarkerStyles( PolarMarkerStyleMap map ) {
_polarMarkerStyles = map;
// update _maxDatasetPolarMarkerStyle
uint maxDataset = 0;
for( PolarMarkerStyleMap::ConstIterator it = _polarMarkerStyles.begin();
it != _polarMarkerStyles.end(); ++it )
maxDataset = TQMAX( maxDataset, it.key() );
_maxDatasetPolarMarkerStyle = maxDataset;
}
/**
\fn KDChartParams::PolarMarkerStyleMap KDChartParams::polarMarkerStyles() const
Returns the whole map of polar marker styles. You will usually
not need this. You can query individual polar marker styles by
calling \a polarMarkerStyle().
\return the map of styles
\sa polarMarkerStyle(), setPolarMarkerStyles()
*/
/**
\fn uint KDChartParams::maxDatasetPolarMarkerStyle() const
Returns the highest dataset for which a polar marker style has been
defined. Not all datasets with a lower number necessarily have
a defined polar marker.
\return the highest dataset with a defined polar marker
\sa PolarMarkerStyle, setPolarMarkerStyle, polarMarkerStyle
*/
/**
\fn void KDChartParams::setPolarMarkerSize( TQSize )
Specifies the sizes of polar markers. Only used if chartType() == Polar
and polarMarker() == true. The default is -40 x -40.
\param size the size of the polar marker in pixels, if negative this is a
per mille value of the chart min. size (the chart width or height, depending
what is smaller), if positive the value is taken as absolute number of pixels.
\sa polarMarkerSize
*/
/**
\fn TQSize KDChartParams::polarMarkerSize() const
Returns the sizes of polar markers. Only used if chartType() ==
Polar and polarMarker() == true.
\return the size of the polar marker in pixels
\sa setPolarMarkerSize
*/
/**
\fn void KDChartParams::setPolarLineWidth( int width )
Specifies the width for lines in polar charts. Default is -3.
\param width the new width
\sa polarLineWidth
*/
/**
\fn int KDChartParams::polarLineWidth() const
Returns the line width of the lines in polar charts.
\return the line width of lines in polar charts
\sa setPolarLineWidth
*/
/**
\fn void KDChartParams::setPolarZeroDegreePos( int degrees )
Specifies the zero degree position in polar charts.
Use this function to have the zero degree point on a position
different from the right side of the circle. Valid parameters
are -359..359.
\sa polarZeroDegreePos
*/
/**
\fn int KDChartParams::polarZeroDegreePos() const
Returns the zero degree position in polar charts.
\sa setPolarZeroDegreePos
*/
/**
\fn void KDChartParams::setPolarRotateCircularLabels( bool rotateCircularLabels )
Specifies whether to rotate circular labels in polar charts.
\sa polarRotateCircularLabels, setPolarDelimsAndLabelsAtPos
*/
/**
\fn bool KDChartParams::polarRotateCircularLabels() const
Returns whether circular labels will be rotated in polar charts.
\sa setPolarRotateCircularLabels, polarDelimAtPos, polarLabelsAtPos
*/
/**
Specifies whether to show circular delimiters and labels at a given
position in polar charts.
\note Value \c KDChartEnums::PosCenter will be ignored.
\sa setPolarRotateCircularLabels, polarDelimAtPos, polarLabelsAtPos
*/
void KDChartParams::setPolarDelimsAndLabelsAtPos( KDChartEnums::PositionFlag pos,
bool showDelimiters,
bool showLabels )
{
if( KDCHART_MAX_POLAR_DELIMS_AND_LABELS_POS >= pos ) {
_polarDelimsAndLabels[ pos ].showDelimiters = showDelimiters;
_polarDelimsAndLabels[ pos ].showLabels = showLabels;
}
}
/**
Returns whether to show circular delimiters at a given
position in polar charts.
\sa polarRotateCircularLabels, setPolarDelimAndLabelsPos, polarLabelsAtPos
*/
bool KDChartParams::polarDelimAtPos( KDChartEnums::PositionFlag pos ) const
{
if( KDCHART_MAX_POLAR_DELIMS_AND_LABELS_POS >= pos )
return _polarDelimsAndLabels[ pos ].showDelimiters;
else
return false;
}
/**
Returns whether to show circular labels at a given
position in polar charts.
\sa polarRotateCircularLabels, setPolarDelimAndLabelsPos, polarDelimAtPos
*/
bool KDChartParams::polarLabelsAtPos( KDChartEnums::PositionFlag pos ) const
{
if( KDCHART_MAX_POLAR_DELIMS_AND_LABELS_POS >= pos )
return _polarDelimsAndLabels[ pos ].showLabels;
else
return false;
}
//@}
// END LINECHART
// START RING/PIECHART
/** @name Ring and pie chart-specific methods.
These methods query and set ring and pie chart-specific parameters.
*/
//@{
/**
\fn void KDChartParams::setExplode( bool explode )
Specifies whether the pie chart or ring chart should be
exploding (all pies or ring segments are slightly displaced
from the center) or not. The default is not to explode. Only
used if chartType() == Pie or chartType() == Ring.
Note that calling this method by passing true turns on
exploding for all segments. You can turn exploding on and off
for individual segments by calling setExplodeValues() and also
change the explode factors by calling setExplodeFactor() or
setExplodeFactors().
Note that in ring charts, only the outermost ring is
exploded. Also note that exploding rings are only useful if
none of the values in the outermost dataset covers more than
1/4 of the ring, otherwise the exploded ring will look funny.
\param explode true if the pie or ring should be exploding,
false otherwise
\sa exploding(), setExplodeFactor(), explodeFactor(),
setExplodeFactors(), explodeFactors(), setExplodeValues(),
explodeValues()
*/
/**
\fn bool KDChartParams::explode() const
Returns whether the pie or ring chart should be exploding or not
\return true if the pie should be exploding
\sa setExplode, setExplodeFactor(), explodeFactor(),
setExplodeFactors(), explodeFactors(), setExplodeValues(),
explodeValues()
*/
/**
\fn void KDChartParams::setExplodeValues( TQValueList<int> explodeList )
Specifies which values to explode. Explosion of values only
happens if setExplode( true ) has been called. Normally, all
values are exploded (all values on the outer ring in the case of a
ring chart). With this function, you have a finer control about
the explosion. You can specify the values that should be exploded
by their position. Passing an empty list here turns on explosion
for all pies or ring segments (but only if explosion is turned on
in general).
To repeat: Setting anything here has no effect if setExplode( true )
is not called. You can, however, set any values here even if explosion is
not turned on; they will be saved in case explosion will be turned on in
the future and then be valid automatically.
The explode factor, i.e., the amount with which a segment is moved
from the center can either be set for all segments with
\a setExplodeFactor() or for individual segments with
\a setExplodeFactors(). The default is 10%.
\param explodeList the list of positions in the displayed dataset that
should be drawn in an exploded position. Pass an empty list here to
explode all values.
\sa setExplode(), explode(), setExplodeFactor(), explodeFactor(),
explodeValues(), setExplodeFactors(), explodeFactors()
*/
/**
\fn TQValueList<int> KDChartParams::explodeValues() const
Returns which values are exploded in a pie or ring chart. For a detailed
explanation of this feature, please see \a setExplodeValues().
\return the list of values that are exploded
\sa setExplode(), explode(), setExplodeFactor(), explodeFactor(),
setExplodeValues()
*/
/**
\fn void KDChartParams::setExplodeFactors( TQMap<int,double> factors )
Specifies the explode factors for each segment in percent,
i.e. how much an exploded pie or ring segment is displaced from
the center. The factor is given as a double value between 0 and 1;
0.1 means 10%. Only used if chartType() == Pie or chartType() ==
Ring and explode() == true.
Segments that are not contained in the map specified here will
have the default explode factor of 10%, if exploding is turned on
for them at all. This also means that passing an empty list to
this method does not turn off exploding in general; use \a
setExplode( false ) for that.
Note: This method has no immediate effect if setExplode( true )
has not been called. It is, however, possible to preset explode
factors and then turn on exploding later.
Note: Besides giving a segment an explode factor and turning on
exploding in general, you also need to specify to explode a
certain segment by calling \a setExplodeValues(). This gives maximum
flexibility as it allows you to preset explode factors and then
explode or not not explode a segment at leisure - at the expense
of one more method call.
\param factors the list of explode factors
\sa setExplode(), explode(), setExplodeValues(), explodeValues(),
setExplodeFactor(), explodeFactor(), explodeFactors()
*/
/**
\fn TQMap<int,double> KDChartParams::explodeFactors() const {
Returns the list of explode factors. Each explode factor in the
list corresponds to the segment at the same position.
\return the list of explode factors
\sa setExplode(), explode(), setExplodeValues(), explodeValues(),
setExplodeFactor(), explodeFactor(), setExplodeFactors()
*/
/**
\fn void KDChartParams::setExplodeFactor( double factor )
Specifies the explode factor in percent, i.e. how much an
exploded pie or ring segment is displaced from the center. The
factor is given as a double value between 0 and 1; 0.1 means
10% and is the default. Only used if
chartType() == Pie or chartType() == Ring and explode() == true.
Note that this method sets the explode factor for all segments
that are exploded but for which no more specific explode factor
has been set with \a setExplodeFactors(). Thus, to make the value
specified here the default value, you can pass an empty list to
\a setExplodeFactors() (which also is the default).
\param factor the explode factor
\sa setExplode(), explode(), explodeFactor(),
setExplodeValues(), explodeValues(), setExplodeFactors(),
explodeFactors()
*/
/**
\fn double KDChartParams::explodeFactor() const
Returns the default explode factor, i.e., the explode factor
used for those segments which should be exploded but for which
no more specific explode factor has been set. See \a
setExplodeFactor() for an explanation of the value.
\return the explode factor
\sa setExplodeFactor(), setExplode(), explode()
*/
/**
\fn void KDChartParams::setThreeDPies( bool threeDPies )
Specifies whether the engine should draw the pies in 3D. Only
used if chartType() == Pie.
\param threeDPies true if pies should be drawn with a 3D effect
\sa threeDPies(), setThreeDPieHeight(), threeDPieHeight()
*/
/**
\fn bool KDChartParams::threeDPies() const
Returns whether the engine should draw any pies in 3D. Only
used if chartType() == Pie.
\return true if pies should be drawn with a 3D effect, false
otherwise
\sa setThreeDPies(), threeDPieHeight(), setThreeDPieHeight()
*/
/**
\fn void KDChartParams::setThreeDPieHeight( int pixels )
Specifies the height of the 3D effect for pies in pixels. Only used if
chartType() == Pie and threeDPies() == true. Negative values are
interpreted relative to the height of the pie where -100 means
that the 3D effect has the same height as the pie itself; values
smaller than -25 are hardly useful. Positive values are
interpreted as absolute sizes in pixels. The default is an
absolute value of 20 pixels.
\param height the height of the 3D effect in pixels
\sa threeDHeight(), setThreeDPies(), threeDPies()
*/
/**
\fn int KDChartParams::threeDPieHeight() const
Returns the height of the 3D effect for pies in pixels. See \a
setThreeDPieHeight for the interpretation of the value.
\return the height of the 3D effect in pixels
\sa setThreeDPieHeight(), setThreeDPies(), threeDPies()
*/
/**
\fn void KDChartParams::setPieStart( int degrees )
Specifies the starting point of the pie circle. The default is the 3 o'
clock position which equals to 0. Positive values are angles in degrees
counterclockwise, negative values are angles in degrees
clockwise. All values will be normalized to [0;360[.
\param degrees the starting point in degrees
\sa pieStart()
*/
/**
\fn int KDChartParams::pieStart() const
Returns the starting point of the pie circle. See \a setPieStart() for
the interpretation of these values. The return value is
always in the interval [0;360[
\return the starting point of the pie circle in degrees
\sa setPieStart()
*/
/**
\fn void KDChartParams::setRingStart( int degrees )
Specifies the starting point of the ring circle. The default is the 3 o'
clock position which equals to 0. Positive values are angles in degrees
counterclockwise, negative values are angles in degrees
clockwise. All values will be normalized to [0;360[.
\param degrees the starting point in degrees
\sa pieStart()
*/
/**
\fn int KDChartParams::ringStart() const
Returns the starting point of the ring circle. See \a
setRingStart() for the interpretation of these values. The
return value is always in the interval [0;360[
\return the starting point of the ring circle in degrees
\sa setRingStart()
*/
/**
\fn void KDChartParams::setRelativeRingThickness( bool relativeThickness )
Specifies whether the ring thickness should be relative to the sum of the
values in the dataset that the ring represents. The default is to have all
the rings with the same thickness which itself depends on the size of the
chart and the number of rings.
\param relativeThickness if true, ring thickness is relative, if false, it
is constant.
\sa relativeThickness()
*/
/**
\fn bool KDChartParams::relativeRingThickness() const
Returns whether the ring thickness is relative to the sum of values in the
dataset that the ring represents, or whether the ring thickness should be
constant.
\return true if thickness is relative, false if it is constant
\sa setRelativeRingThickness()
*/
//@}
// END RING/PIECHART
// START HILO CHART
/** @name Hi-lo chart-specific methods.
These methods query and set hi-lo chart-specific parameters.
*/
//@{
/**
\enum KDChartParams::HiLoChartSubType
The HiLo subtype. Only used when chartType == HiLo
\sa setHiLoChartSubType, hiLoChartSubType
*/
/**
\fn void KDChartParams::setHiLoChartSubType( HiLoChartSubType hiLoChartSubType )
Specifies the HiLo chart subtype. Only used if chartType() ==
HiLo
\param hiLoChartSubType the HiLo chart subtype
\sa hiLoChartSubType, HiLoChartSubType, setChartType, chartType
*/
/**
\fn KDChartParams::HiLoChartSubType KDChartParams::hiLoChartSubType() const
Returns the HiLo chart subtype. Only used if chartType() ==
HiLo.
\return the HiLo chart sub type
\sa setHiLoChartSubType, HiLoChartSubType, setChartType, chartType
*/
/**
Specifies if and how a HiLo chart will print the Low
values below their respective entries. Only used if chartType() == HiLo
\note <b>setHiLoChartPrintLowValues( false )</b> will
deactivate printing of Low values.
\param active specifies whether the values are to be printed or not.
\param font a Pointer to the font to be used.
\param size (in per mille of the chart width) the dynamic size of
the font to be used. If this parameter is zero the size of the
\c font is used instead - regardless of the size of the chart!
\param color the color to be used when printing the values.
\sa setChartType, chartType
\sa setHiLoChartSubType, hiLoChartSubType
\sa setHiLoChartPrintHighValues
\sa hiLoChartPrintLowValues, hiLoChartPrintLowValues
\sa hiLoChartLowValuesFontColor, hiLoChartLowValuesFontColor
\sa hiLoChartLowValuesFontUseRelSize, hiLoChartLowValuesFontUseRelSize
\sa hiLoChartLowValuesFontRelSize, hiLoChartLowValuesFontRelSize
\sa hiLoChartPrintHighValues, hiLoChartPrintHighValues
\sa hiLoChartHighValuesFontColor, hiLoChartHighValuesFontColor
\sa hiLoChartHighValuesFontUseRelSize, hiLoChartHighValuesFontUseRelSize
\sa hiLoChartHighValuesFontRelSize, hiLoChartHighValuesFontRelSize
*/
void KDChartParams::setHiLoChartPrintLowValues( bool active, TQFont* font,
int size, TQColor* color )
{
_hiLoChartPrintLowValues = active;
if ( font )
_hiLoChartLowValuesFont = *font;
else
_hiLoChartLowValuesFont = _defaultFont;
_hiLoChartLowValuesUseFontRelSize = ( 0 < size );
_hiLoChartLowValuesFontRelSize = size;
if ( 0 == color )
_hiLoChartLowValuesColor = TQColor( 0, 0, 0 );
else
_hiLoChartLowValuesColor = *color;
emit changed();
}
/**
\fn bool KDChartParams::hiLoChartPrintLowValues() const
Returns whether the low values
will be printed under their respective entries.
\return whether the low values
will be printed under their respective entries.
\sa setHiLoChartPrintLowValues, setHiLoChartPrintHighValues
\sa setHiLoChartSubType, hiLoChartSubType
\sa setChartType, chartType
*/
/**
\fn TQFont KDChartParams::hiLoChartLowValuesFont() const
Returns the font to be used for printing the
low values
\returns the font to be used for printing the
low values
\sa setHiLoChartPrintLowValues, setHiLoChartPrintHighValues
\sa setHiLoChartSubType, hiLoChartSubType
\sa setChartType, chartType
*/
/**
\fn bool KDChartParams::hiLoChartLowValuesUseFontRelSize() const
Returns whether the font size to be used for printing the
low values is calculated dynamically.
\return whether the font size to be used for printing the
low values is calculated dynamically.
\sa setHiLoChartPrintLowValues, setHiLoChartPrintHighValues
\sa setHiLoChartSubType, hiLoChartSubType
\sa setChartType, chartType
*/
/**
\fn int KDChartParams::hiLoChartLowValuesFontRelSize() const
Returns the relative size (in per mille of the chart width)
of font size to be used for printing the
low values.
\return the relative size (in per mille of the chart width)
of font size to be used for printing the
low values.
\sa setHiLoChartPrintLowValues, setHiLoChartPrintHighValues
\sa setHiLoChartSubType, hiLoChartSubType
\sa setChartType, chartType
*/
/**
\fn TQColor KDChartParams::hiLoChartLowValuesColor() const
Returns the colour of the font size to be used for printing the
low values.
\return the colour of the font size to be used for printing the
low values.
\sa setHiLoChartPrintLowValues, setHiLoChartPrintHighValues
\sa setHiLoChartSubType, hiLoChartSubType
\sa setChartType, chartType
*/
/**
Specifies if and how a HiLo chart will print the High
values below their respective entries.
Only used if chartType() == HiLo
\note <b>setHiLoChartPrintHighValues( false )</b> will
deactivate printing of High values.
\param active specifies whether the values are to be printed or not.
\param font specifies a Pointer to the font to be used.
\param size (in per mille of the chart width) specifies the
dynamic size of the font to be used. If this parameter is zero
the size of the
\c font is used instead - regardless of the size of the chart!
\param specifies the color the color to be used when printing
the values.
\sa setHiLoChartPrintLowValues
\sa setHiLoChartSubType, hiLoChartSubType
\sa setChartType, chartType
\sa hiLoChartPrintHighValues, hiLoChartPrintHighValues
\sa hiLoChartHighValuesFontColor, hiLoChartHighValuesFontColor
\sa hiLoChartHighValuesFontUseRelSize, hiLoChartHighValuesFontUseRelSize
\sa hiLoChartHighValuesFontRelSize, hiLoChartHighValuesFontRelSize
\sa hiLoChartPrintLowValues, hiLoChartPrintLowValues
\sa hiLoChartLowValuesFontColor, hiLoChartLowValuesFontColor
\sa hiLoChartLowValuesFontUseRelSize, hiLoChartLowValuesFontUseRelSize
\sa hiLoChartLowValuesFontRelSize, hiLoChartLowValuesFontRelSize
*/
void KDChartParams::setHiLoChartPrintHighValues( bool active, TQFont* font,
int size, TQColor* color )
{
_hiLoChartPrintHighValues = active;
if ( font )
_hiLoChartHighValuesFont = *font;
else
_hiLoChartHighValuesFont = _defaultFont;
_hiLoChartHighValuesUseFontRelSize = ( 0 < size );
_hiLoChartHighValuesFontRelSize = size;
if ( 0 == color )
_hiLoChartHighValuesColor = TQColor( 0, 0, 0 );
else
_hiLoChartHighValuesColor = *color;
emit changed();
}
/**
\fn bool KDChartParams::hiLoChartPrintHighValues() const
Returns whether the high values
will be printed under their respective entries.
\return whether the high values
will be printed under their respective entries.
\sa setHiLoChartPrintHighValues, setHiLoChartPrintLowValues
\sa setHiLoChartSubType, hiLoChartSubType
\sa setChartType, chartType
*/
/**
\fn TQFont KDChartParams::hiLoChartHighValuesFont() const
Returns the font to be used for printing the
high values.
\returns the font to be used for printing the
high values.
\sa setHiLoChartPrintHighValues, setHiLoChartPrintLowValues
\sa setHiLoChartSubType, hiLoChartSubType
\sa setChartType, chartType
*/
/**
\fn bool KDChartParams::hiLoChartHighValuesUseFontRelSize() const
Returns whether the font size to be used for printing the
high values is calculated dynamically.
\return whether the font size to be used for printing the
high values is calculated dynamically.
\sa setHiLoChartPrintHighValues, setHiLoChartPrintLowValues
\sa setHiLoChartSubType, hiLoChartSubType
\sa setChartType, chartType
*/
/**
\fn int KDChartParams::hiLoChartHighValuesFontRelSize() const
Returns the relative size (in per mille of the chart width)
of font size to be used for printing the
high values.
\return the relative size (in per mille of the chart width)
of font size to be used for printing the
high values.
\sa setHiLoChartPrintHighValues, setHiLoChartPrintHighValues
\sa setHiLoChartSubType, hiLoChartSubType
\sa setChartType, chartType
*/
/**
\fn TQColor KDChartParams::hiLoChartHighValuesColor() const
Returns the colour of the font size to be used for printing the
high values.
\return the colour of the font size to be used for printing the
high values.
\sa setHiLoChartPrintHighValues, setHiLoChartPrintLowValues
\sa setHiLoChartSubType, hiLoChartSubType
\sa setChartType, chartType
*/
/**
Specifies if and how a HiLo chart will print the Open values
below their respective entries.
Only used if chartType() == HiLo and if the HiLo chart sub type
shows open values.
\note <b>setHiLoChartPrintOpenValues( false )</b> will
deactivate printing of Open values.
\param active specifies whether the values are to be printed or not.
\param font a Pointer to the font to be used.
\param size (in per mille of the chart width) the dynamic size of
the font to be used. If this parameter is zero the size of the
\c font is used instead - regardless of the size of the chart!
\param color the color to be used when printing the values.
\sa setHiLoChartPrintCloseValues
\sa setHiLoChartSubType, hiLoChartSubType
\sa setChartType, chartType
\sa hiLoChartPrintOpenValues, hiLoChartPrintOpenValues
\sa hiLoChartOpenValuesFontColor, hiLoChartOpenValuesFontColor
\sa hiLoChartOpenValuesFontUseRelSize, hiLoChartOpenValuesFontUseRelSize
\sa hiLoChartOpenValuesFontRelSize, hiLoChartOpenValuesFontRelSize
\sa hiLoChartPrintCloseValues, hiLoChartPrintCloseValues
\sa hiLoChartCloseValuesFontColor, hiLoChartCloseValuesFontColor
\sa hiLoChartCloseValuesFontUseRelSize, hiLoChartCloseValuesFontUseRelSize
\sa hiLoChartCloseValuesFontRelSize, hiLoChartCloseValuesFontRelSize
*/
void KDChartParams::setHiLoChartPrintOpenValues( bool active, TQFont* font,
uint size, TQColor* color )
{
_hiLoChartPrintOpenValues = active;
if ( font )
_hiLoChartOpenValuesFont = *font;
else
_hiLoChartOpenValuesFont = _defaultFont;
_hiLoChartOpenValuesUseFontRelSize = ( 0 < size );
_hiLoChartOpenValuesFontRelSize = size;
if ( 0 == color )
_hiLoChartOpenValuesColor = TQColor( 0, 0, 0 );
else
_hiLoChartOpenValuesColor = *color;
emit changed();
}
/**
\fn bool KDChartParams::hiLoChartPrintOpenValues() const
Returns whether the open values will be printed under their
respective entries.
\return whether the open values will be printed under their
respective entries.
\sa setHiLoChartPrintOpenValues, setHiLoChartPrintCloseValues
\sa setHiLoChartSubType, hiLoChartSubType
\sa setChartType, chartType
*/
/**
\fn TQFont KDChartParams::hiLoChartOpenValuesFont() const
Returns the font to be used for printing the
open values.
\returns the font to be used for printing the
open values.
\sa setHiLoChartPrintOpenValues, setHiLoChartPrintCloseValues
\sa setHiLoChartSubType, hiLoChartSubType
\sa setChartType, chartType
*/
/**
\fn bool KDChartParams::hiLoChartOpenValuesUseFontRelSize() const
Returns whether the font size to be used for printing the
open values is calculated dynamically.
\return whether the font size to be used for printing the
open values is calculated dynamically.
\sa setHiLoChartPrintOpenValues, setHiLoChartPrintCloseValues
\sa setHiLoChartSubType, hiLoChartSubType
\sa setChartType, chartType
*/
/**
\fn int KDChartParams::hiLoChartOpenValuesFontRelSize() const
Returns the relative size (in per mille of the chart width)
of font size to be used for printing the open values.
\return the relative size (in per mille of the chart width) of
font size to be used for printing the open values.
\sa setHiLoChartPrintOpenValues, setHiLoChartPrintCloseValues
\sa setHiLoChartSubType, hiLoChartSubType
\sa setChartType, chartType
*/
/**
\fn TQColor KDChartParams::hiLoChartOpenValuesColor() const
Returns the colour of the font size to be used for printing the
open values.
\return the colour of the font size to be used for printing the
open values.
\sa setHiLoChartPrintOpenValues, setHiLoChartPrintCloseValues
\sa setHiLoChartSubType, hiLoChartSubType
\sa setChartType, chartType
*/
/**
Specifies if and how a HiLo chart will print the Close
values next to their respective entries.
Only used if chartType() == HiLo and the HiLo chart sub type
contains Close values.
\note <b>setHiLoChartPrintCloseValues( false )</b> will
deactivate printing of Close values.
\param active specifies whether the values are to be printed or not.
\param font specifies a Pointer to the font to be used.
\param size (in per mille of the chart width) specifies the dynamic size of
the font to be used. If this parameter is zero the size of the
\c font is used instead - regardless of the size of the chart!
\param specifies the color the color to be used when printing the values.
\sa setHiLoChartPrintOpenValues
\sa setHiLoChartSubType, hiLoChartSubType
\sa setChartType, chartType
\sa hiLoChartPrintCloseValues, hiLoChartPrintCloseValues
\sa hiLoChartCloseValuesFontColor, hiLoChartCloseValuesFontColor
\sa hiLoChartCloseValuesFontUseRelSize, hiLoChartCloseValuesFontUseRelSize
\sa hiLoChartCloseValuesFontRelSize, hiLoChartCloseValuesFontRelSize
\sa hiLoChartPrintOpenValues, hiLoChartPrintOpenValues
\sa hiLoChartOpenValuesFontColor, hiLoChartOpenValuesFontColor
\sa hiLoChartOpenValuesFontUseRelSize, hiLoChartOpenValuesFontUseRelSize
\sa hiLoChartOpenValuesFontRelSize, hiLoChartOpenValuesFontRelSize
*/
void KDChartParams::setHiLoChartPrintCloseValues( bool active, TQFont* font,
int size, TQColor* color )
{
_hiLoChartPrintCloseValues = active;
if ( font )
_hiLoChartCloseValuesFont = *font;
else
_hiLoChartCloseValuesFont = _defaultFont;
_hiLoChartCloseValuesUseFontRelSize = ( 0 < size );
_hiLoChartCloseValuesFontRelSize = size;
if ( 0 == color )
_hiLoChartCloseValuesColor = TQColor( 0, 0, 0 );
else
_hiLoChartCloseValuesColor = *color;
emit changed();
}
/**
\fn bool KDChartParams::hiLoChartPrintCloseValues() const
Returns whether the close values will be printed under their
respective entries.
\return whether the close values will be printed under their
respective entries.
\sa setHiLoChartPrintCloseValues, setHiLoChartPrintOpenValues
\sa setHiLoChartSubType, hiLoChartSubType
\sa setChartType, chartType
*/
/**
\fn TQFont KDChartParams::hiLoChartCloseValuesFont() const
Returns the font to be used for printing the close values.
\returns the font to be used for printing the close values.
\sa setHiLoChartPrintCloseValues, setHiLoChartPrintOpenValues
\sa setHiLoChartSubType, hiLoChartSubType
\sa setChartType, chartType
*/
/**
\fn bool KDChartParams::hiLoChartCloseValuesUseFontRelSize() const
Returns whether the font size to be used for printing the close
values is calculated dynamically.
\return whether the font size to be used for printing the close
values is calculated dynamically.
\sa setHiLoChartPrintCloseValues, setHiLoChartPrintOpenValues
\sa setHiLoChartSubType, hiLoChartSubType
\sa setChartType, chartType
*/
/**
\fn int KDChartParams::hiLoChartCloseValuesFontRelSize() const
Returns the relative size (in per mille of the chart width) of
font size to be used for printing the close values.
\return the relative size (in per mille of the chart width) of
font size to be used for printing the close values.
\sa setHiLoChartPrintCloseValues, setHiLoChartPrintOpenValues
\sa setHiLoChartSubType, hiLoChartSubType
\sa setChartType, chartType
*/
/**
\fn TQColor KDChartParams::hiLoChartCloseValuesColor() const
Returns the colour of the font size to be used for printing the
close values.
\return the colour of the font size to be used for printing the
close values.
\sa setHiLoChartPrintCloseValues, setHiLoChartPrintOpenValues
\sa setHiLoChartSubType, hiLoChartSubType
\sa setChartType, chartType
*/
/**
\fn void KDChartParams::setHiLoChartPrintFirstValues( bool, TQFont*, uint, TQColor* )
\obsolete
This method is obsolete; use \a setHiLoChartPrintOpenValues().
*/
/**
\fn bool KDChartParams::hiLoChartPrintFirstValues() const
\obsolete
This method is obsolete; use \a hiLoChartPrintOpenValues()
instead.
*/
/**
\fn TQFont KDChartParams::hiLoChartFirstValuesFont() const
\obsolete
This method is obsolete; use \a hiLoChartOpenValuesFont()
instead.
*/
/**
\fn bool KDChartParams::hiLoChartFirstValuesUseFontRelSize() const
\obsolete
This method is obsolete; use \a
hiLoChartOpenValuesUseFontRelSize() instead.
*/
/**
\fn int KDChartParams::hiLoChartFirstValuesFontRelSize() const
\obsolete
This method is obsolete; use \a
hiLoChartOpenValuesFontRelSize() instead.
*/
/**
\fn TQColor KDChartParams::hiLoChartFirstValuesColor() const
\obsolete
This method is obsolete; use \a hiLoChartOpenValuesColor()
instead.
*/
/**
\fn void KDChartParams::setHiLoChartPrintLastValues( bool, TQFont*, int, TQColor* )
\obsolete
This method is obsolete; use \a setHiLoChartPrintCloseValues()
instead.
*/
/**
\fn bool KDChartParams::hiLoChartPrintLastValues() const
\obsolete
This method is obsolete; use \a hiLoChartPrintCloseValues()
instead.
*/
/**
\fn TQFont KDChartParams::hiLoChartLastValuesFont() const
\obsolete
This method is obsolete; use \a hiLoChartCloseValuesFont()
instead.
*/
/**
\fn bool KDChartParams::hiLoChartLastValuesUseFontRelSize() const
\obsolete
This method is obsolete; use \a hiLoChartCloseValuesUseFontRelSize()
instead.
*/
/**
\fn int KDChartParams::hiLoChartLastValuesFontRelSize() const
\obsolete
This method is obsolete; use \a hiLoChartCloseValuesFontRelSize()
instead.
*/
/**
\fn TQColor KDChartParams::hiLoChartLastValuesColor() const
\obsolete
This method is obsolete; use \a hiLoChartCloseValuesColor()
instead.
*/
//@}
// END HILO CHART
// START BOX/WHISKER CHART
/** @name Box-and-whisker chart-specific methods.
These methods query and set box-and-whisker chart-specific parameters.
*/
//@{
/**
\enum KDChartParams::BWChartSubType
The BoxWhisker subtype. Only used when chartType == BoxWhisker
\sa setBWChartSubType, bWChartSubType
*/
/**
\enum KDChartParams::BWStatVal
The different statistical values that can be printed into or
asked from a Box and Whisker chart. Only used when chartType == BoxWhisker
\sa setBWChartSubType, bWChartSubType
*/ // use the following syntax to avoid warnings:
/**
\fn void KDChartParams::setBWChartSubType( BWChartSubType bWChartSubType )
Specifies the BoxWhisker chart subtype. Only used if chartType() ==
BoxWhisker
\param bWChartSubType the BoxWhisker chart subtype
\sa bWChartSubType, BWChartSubType, setChartType, chartType
*/
/**
\fn KDChartParams::BWChartSubType KDChartParams::bWChartSubType() const
Returns the BoxWhisker chart subtype. Only used if chartType() ==
BoxWhisker.
\return the BoxWhisker chart sub type
\sa setBWChartSubType, BWChartSubType, setChartType, chartType
*/
/**
Specifies the factors to be used to calculate the position of
the inner (or outer, resp.) fences.
Default values for both inner fences are 1.5 times the
interquartile range from the corresponding quartile,
for both outer fences default is 3.0 times the IQR.
\sa bWChartFences
\sa setBWChartOutValMarkerSize, setBWChartPrintStatistics
\sa setBWChartSubType, bWChartSubType
\sa setChartType, chartType
*/
void KDChartParams::setBWChartFences( double upperInner, double lowerInner,
double upperOuter, double lowerOuter )
{
_BWChartFenceUpperInner = upperInner;
_BWChartFenceLowerInner = lowerInner;
_BWChartFenceUpperOuter = upperOuter;
_BWChartFenceLowerOuter = lowerOuter;
}
/**
Retrievs the factors to be used to calculate the position of
the inner (or outer, resp.) fences.
\sa setBWChartFences
\sa setBWChartOutValMarkerSize, setBWChartPrintStatistics
\sa setBWChartSubType, bWChartSubType
\sa setChartType, chartType
*/
void KDChartParams::bWChartFences( double& upperInner, double& lowerInner,
double& upperOuter, double& lowerOuter ) const
{
upperInner = _BWChartFenceUpperInner;
lowerInner = _BWChartFenceLowerInner;
upperOuter = _BWChartFenceUpperOuter;
lowerOuter = _BWChartFenceLowerOuter;
}
/**
\fn void KDChartParams::setBWChartBrush( const TQBrush& bWChartBrush )
Specifies the brush to be used to fill the BoxWhisker charts.
\param bWChartBrush the brush to be used
\sa bWChartBrush, setChartType, chartType
*/
/**
\fn TQBrush KDChartParams::bWChartBrush() const
Returns the brush to be used to fill the BoxWhisker charts.
\return the brush to be used
\sa setBWChartBrush, setChartType, chartType
*/
/**
\fn void KDChartParams::setBWChartOutValMarkerSize( int size )
Specifies how big outlier markers (representing the values outside
the inner fences) will be drawn.
When specifying a value different from 0 the chart will show the outlier
markers in the respective size, use zero to disable showing the outliers,
use negative values to have the marker size calculated dynamically
(in percent of the current boxes' width). Thus marker sizes will be
recalculated after modification of either the number of boxes
or the size of the entire chart.
\note Shapes of the outlier markers depend on their distance to the
respective fence: circles are used to represent near outside values
while asteriscs indicate far outside values (the ones outside the
outer fence), you may use setBWChartFences() to specify the factor
to be used to calculate the value of the inner and outer fence.
\sa bWChartOutValMarkerSize
\sa setBWChartFences, setBWChartPrintStatistics
\sa setBWChartSubType, bWChartSubType
\sa setChartType, chartType
*/
/**
\fn int KDChartParams::bWChartOutValMarkerSize() const
Returns how big outlier markers (representing the values outside
the inner fences) will be drawn.
\return how big outside value markers will be drawn, zero means
they will be invisible, negative values indicate that the size
is calculated dynamically based upon the current boxes' width.
\sa setBWChartOutValMarkerSize
\sa setBWChartFences, setBWChartPrintStatistics
\sa setBWChartSubType, bWChartSubType
\sa setChartType, chartType
*/
/**
Specifies if and how a BoxWhisker chart will print the
respective statistical values near to the drawing.
Only used if chartType() == BoxWhisker
\note <b>setBWChartPrintStatistics( BWStatVal, false )</b> will
deactivate printing of the respective statistical values.
\param statValue specifies the statistical value to be set, use
BWStatValALL to define equal settings for all
of the statistical values.
\param active specifies whether the values are to be printed or not.
\param font a Pointer to the font to be used.
\param size (relative to the boxes' width) the dynamic size of
the font to be used. If this parameter is zero the size of the
\c font is used instead - regardless of the size of the chart
and regardless of the number of boxes!
\param color the color to be used when printing the values.
\param brush the brush to be used to fill the text's area before printing
\sa setChartType
\sa setBWChartSubType
\sa bWChartPrintStatistics
\sa bWChartStatisticsColor,
\sa bWChartStatisticsBrush,
\sa bWChartStatisticsFontUseRelSize
\sa bWChartStatisticsFontRelSize
*/
void KDChartParams::setBWChartPrintStatistics( BWStatVal statValue,
bool active,
TQFont* font,
int size,
TQColor* color,
TQBrush* brush )
{
BWStatVal statValA = (BWStatValALL == statValue) ? BWStatValSTART : statValue;
BWStatVal statValZ = (BWStatValALL == statValue) ? BWStatValEND : statValue;
for( int i = statValA; i <= statValZ; ++i ){
_BWChartStatistics[ i ].active = active;
if ( font )
_BWChartStatistics[ i ].font = *font;
else
_BWChartStatistics[ i ].font = _defaultFont;
_BWChartStatistics[ i ].useRelSize = ( 0 < size );
_BWChartStatistics[ i ].relSize = size;
if ( 0 == color )
_BWChartStatistics[ i ].color = TQColor( 0, 0, 0 );
else
_BWChartStatistics[ i ].color = *color;
if ( 0 == brush )
_BWChartStatistics[ i ].brush = TQBrush( TQt::white );
else
_BWChartStatistics[ i ].brush = *brush;
}
emit changed();
}
/**
\fn bool KDChartParams::bWChartPrintStatistics( BWStatVal statValue ) const
Returns whether the respective statistical values
will be printed near to the drawing.
\return whether the respective statistical values
will be printed near to the drawing.
\sa setBWChartPrintStatistics
\sa setBWChartSubType, bWChartSubType
\sa setChartType, chartType
*/
/**
\fn TQFont KDChartParams::bWChartStatisticsFont( BWStatVal statValue ) const
Returns the font to be used for printing the respective statistical values
\returns the font to be used for printing the respective statistical values
\sa setBWChartPrintStatistics
\sa setBWChartSubType, bWChartSubType
\sa setChartType, chartType
*/
/**
\fn bool KDChartParams::bWChartStatisticsUseRelSize( BWStatVal statValue ) const
Returns whether the font size to be used for printing the respective statistical values
is calculated dynamically.
\returns whether the font size to be used for printing the respective statistical values
is calculated dynamically.
\sa setBWChartPrintStatistics
\sa setBWChartSubType, bWChartSubType
\sa setChartType, chartType
*/
/**
\fn int KDChartParams::bWChartStatisticsFontRelSize( BWStatVal statValue ) const
Returns the relative size (in per mille of the chart width)
of the font to be used for printing the respective statistical values.
\returns the relative size (in per mille of the chart width)
of the font to be used for printing the respective statistical values.
\sa setBWChartPrintStatistics
\sa setBWChartSubType, bWChartSubType
\sa setChartType, chartType
*/
/**
\fn TQColor KDChartParams::bWChartStatisticsColor( BWStatVal statValue ) const
Returns the colour
of the font to be used for printing the respective statistical values.
\returns the colour
of the font to be used for printing the respective statistical values.
\sa setBWChartPrintStatistics
\sa setBWChartSubType, bWChartSubType
\sa setChartType, chartType
*/
/**
\fn TQBrush KDChartParams::bWChartStatisticsBrush( BWStatVal statValue ) const
Returns the brush used
to fill the text's area before printing the respective statistical values.
\returns the brush used
to fill the text's area before printing the respective statistical values.
\sa setBWChartPrintStatistics
\sa setBWChartSubType, bWChartSubType
\sa setChartType, chartType
*/
//@}
// END BOX/WHISKER CHART
// START LEGENDS
/** @name Legend methods.
These methods query and set legend parameters.
*/
//@{
/**
\enum KDChartParams::LegendPosition
The possible positions for a legend. NoLegend turns legend display
off.
\sa setLegendPosition, legendPosition
*/
/**
\fn void KDChartParams::setLegendPosition( LegendPosition position )
Specifies where the legend should be shown. NoLegend turns legend
display off. The default is LegendRight which positions the legend
right to the data display.
\param the position for the legend
\sa LegendPosition, legendPosition, setLegendOrientation, setLegendShowLines
*/
/**
\fn KDChartParams::LegendPosition KDChartParams::legendPosition() const
Returns where the legend will be shown.
\return where the legend will be shown
\sa LegendPosition, setLegendPosition, setLegendShowLines
*/
/**
\fn void KDChartParams::setLegendOrientation( Qt::Orientation orientation )
Specifies how the legend should be printed. Qt::Vertical (the default)
prints the legend entries below each other, Qt::Horizontal prints them
aside each other.
\noteQt::Horizontal orientation is only possible if the chart is NOT making
room in horizontal direction, this means you may specify horizontal
orientation if the legend position in one of the following values
only: LegendTop, LegendBottom, LegendTopLeftTop, LegendTopRightTop,
LegendBottomLeftBottom, LegendBottomRightBottom
\param the orientation for the legend
\sa legendOrientation, setLegendPosition, setLegendShowLines
*/
/**
\fn Qt::Orientation KDChartParams::legendOrientation() const
Returns how the legend will be printed.
\return how the legend will be printed.
\sa setLegendOrientation, setLegendPosition, setLegendShowLines
*/
/**
\fn void KDChartParams::setLegendShowLines( bool legendShowLines )
Specifies whether the legend shall show lines or just
show the markers (or squares, resp.).
\note By default no lines are drawn but just the markers are shown,
for Line charts you might want to set this flag to true.
\param flag whether lines are drawn or only the markers
\sa legendShowLines, setLegendOrientation, setLegendPosition
*/
/**
\fn bool KDChartParams::legendShowLines() const
Returns whether the legend shows lines or just
the markers (or squares, resp.).
\return whether the legend shows lines or just the markers (or squares, resp.).
\sa setLegendShowLines, setLegendOrientation, setLegendPosition
*/
/**
\enum KDChartParams::LegendSource
The possible ways for getting the legend text. Available are:
<ul>
<li>Manual - Uses texts set with setLegendText(); if no text is set for
a dataset, the legend text will be empty.
<li>FirstColumn - Uses values from the first column, no matter what
this contains.
<li>Automatic - Tries first to use values from the first column; if
this does not contain any string values, tries to use values set
manually with setLegendText(). If there are no values set manually
either, resolves to standard texts like Series 1, Series 2, .... This
is the default.
</ul>
\sa setLegendSource, legendSource, setLegendText, legendText
*/
/**
\fn void KDChartParams::setLegendSource( LegendSource source )
Specifies where the legend text is coming from. See LegendSource for an
explanation of the possible values.
\param source the source of the legend texts
\sa legendSource, LegendSource, setLegendText, legendText
*/
/**
\fn LegendSource KDChartParams::legendSource() const
Returns where the legend text is coming from. See LegendSource for an
explanation of the possible return values.
\return where the legend text is coming from
\sa LegendSource, setLegendSource, setLegendText, legendText
*/
/**
\fn void KDChartParams::setLegendText( uint dataset, const TQString& text )
Manually specifies a legend text for a certain dataset. This is only
used if legendSource() == Manual or if legendSource() == Automatic and
it is not possible to retrieve values from the first column.
\param dataset the dataset for which to set the legend text
\param the legend text to be set for a given dataset
\sa LegendSource, setLegendSource, legendSource, legendText
*/
/**
\fn TQString KDChartParams::legendText( uint dataset ) const
Returns the manually specified legend text for a given dataset.
\return the manually specified legend text for the specified dataset
\sa setLegendText, LegendSource, setLegendSource, legendSource
*/
/**
\fn void KDChartParams::setLegendTextColor( const TQColor& color )
Specifies the color to be used for the legend texts. The
default is black.
\param color the color to be used for the legend texts
\sa legendTextColor(), setLegendTitleTextColor()
*/
/**
\fn TQColor KDChartParams::legendTextColor() const
Returns the color in which the legend texts are drawn. The
default is black.
\return the color in which the legend texts are drawn
\sa setLegendTextColor(), legendTitleTextColor()
*/
/**
\fn void KDChartParams::setLegendFont( const TQFont& font, bool useFontSize )
Specifies the font in which the legend texts are drawn. The default is a
10pt helvetica font.
\note The font size will be ignored if \c useFontSize is false,
in this case the font size will be calculated dynamically using
the value stored by you calling setLegendFontRelSize().
\param font the font to draw the legend texts in
\sa setLegendFontUseRelSize, legendFont
*/
/**
\fn TQFont KDChartParams::legendFont() const
Returns the font in which the legend texts are drawn.
\return the font in which the legend texts are drawn
\sa setLegendFont, setLegendFontUseRelSize
*/
/**
\fn void KDChartParams::setLegendFontUseRelSize( bool legendFontUseRelSize )
Specifies whether the legend shall be drawn
using relative font size.
\param legendFontUseRelSize whether legend shall be drawn
using relative font size.
If true the absolute value of the value set by \c
setLegendFontRelSize is per thousand
of of the average value of the printable area height and width.
This will make the legend look nice even if scaled to very
different size.
\sa setLegendFontRelSize, setAxisLabelsFont
*/
/**
\fn bool KDChartParams::legendFontUseRelSize() const
Returns whether the legend font size is used.
\return whether the fix legend font size is used.
\sa setLegendFontRelSize, setLegendFont
*/
/**
\fn void KDChartParams::setLegendFontRelSize( int legendFontRelSize )
Specifies the legend relative font size.
\param legendFontRelSize the relative legend size.
If this value unequals zero the absolute value is per thousand
of of the average value of the printable area height and width.
This will make the legend look nice even if scaled to very
different size.
\sa setLegendFontUseRelSize, setLegendFont
*/
/**
\fn int KDChartParams::legendFontRelSize() const
Returns the relative legend font size.
\return the relative legend font size.
\sa setLegendFontRelSize, setLegendFontUseRelSize
*/
/**
\fn void KDChartParams::setLegendTitleText( const TQString& text )
Specifies a text to be shown as the title of the legend. The
default is "Legend" (possibly localized). To turn off the
legend title completely, pass an empty string.
\param text the text to use as the legend title
\sa legendTitleText(), setLegendTitleFont(),
setLegendTitleFontUseRelSize()
*/
/**
\fn TQString KDChartParams::legendTitleText() const
Returns the text that is shown as the title of the legend.
\return the text that is used as the legend title
\sa setLegendTitleText(), legendTitleFont(),
legendTitleFontUseRelSize()
*/
/**
\fn void KDChartParams::setLegendTitleTextColor( const TQColor& color )
Specifies the color to be used for the legend title. The
default is black. Note that this color is only the default when
rich text is used; tags in the rich text might change the color.
\param color the color to be used for the legend title
\sa legendTitleTextColor(), setLegendTextColor()
*/
/**
\fn TQColor KDChartParams::legendTitleTextColor() const
Returns the color in which the legend title is drawn. The
default is black.
\return the color in which the legend title is drawn
\sa setLegendTitleTextColor(), legendTextColor()
*/
/**
\fn void KDChartParams::setLegendTitleFont( const TQFont& font, bool useFontSize )
Specifies the font in which the legend title (if any) is drawn. The
default is a 12pt helvetica font.
\note The font size will be ignored if \c useFontSize is false,
in this case the font size will be calculated dynamically using
the value stored by you calling setLegendFontRelSize().
\param font the font to draw the legend texts in
\sa setLegendTitleFontUseRelSize, legendTitleFont
*/
/**
\fn TQFont KDChartParams::legendTitleFont() const
Returns the font in which the legend title (if any) is drawn.
\return the font in which the legend texts are drawn
\sa setLegendTitleFont, setLegendTitleFontUseRelSize
*/
/**
\fn void KDChartParams::setLegendTitleFontUseRelSize( bool legendTitleFontUseRelSize )
Specifies whether the legend title (if any) shall be drawn using
relative font size.
\param legendTitleFontUseRelSize whether the legend title shall
be drawn using relative font size.
If true the absolute value of the value set by \c
setLegendTitleFontRelSize is per thousandth of the average
value of the printable area height and width.
This will make the legend title look nice even if scaled to a very
different size.
\sa setLegendTitleFontRelSize, setAxisLabelsFont
*/
/**
\fn bool KDChartParams::legendTitleFontUseRelSize() const
Returns whether the legend title font size is used.
\return whether the fixed legend title font size is used.
\sa setLegendTitleFontRelSize, setLegendTitleFont
*/
/**
\fn void KDChartParams::setLegendTitleFontRelSize( int legendTitleFontRelSize )
Specifies the legend title relative font size.
\param legendTitleFontRelSize the relative legend size.
If this value unequals zero the absolute value is per thousand
of of the average value of the printable area height and width.
This will make the legend title look nice even if scaled to a very
different size.
\sa setLegendTitleFontUseRelSize, setLegendTitleFont
*/
/**
\fn int KDChartParams::legendTitleFontRelSize() const
Returns the relative legend title font size.
\return the relative legend title font size.
\sa setLegendTitleFontRelSize, setLegendTitleFontUseRelSize
*/
/**
\fn void KDChartParams::setLegendSpacing( uint space )
Specifies how much space in pixels there should be between the legend
and the data display. The default is 20 pixels.
\param space the space in pixels between the legend and the data
display
\sa legendSpacing
*/
/**
\fn uint KDChartParams::legendSpacing() const
Returns how much space in pixels there is between the legend and the
data display.
\return the space in pixels between the legend and the data display
\sa setLegendSpacing
*/
//@}
// END LEGENDS
// START AXES
/** @name Axis methods.
These methods query and set axis parameters.
*/
//@{
/**
\fn void KDChartParams::setAxisType( uint n, const KDChartAxisParams::AxisType axisType )
Specifies the axis type.
\param n the number of the axis settings to be modified
\param axisType the type of the axis.
\sa axisVisible
*/
/**
\fn void KDChartParams::setAxisVisible( uint n, const bool axisVisible )
Specifies if the axis will be drawn. The default is false.
\param n the number of the axis settings to be modified
\param axisVisible set true to make visible the respective axis.
\sa axisVisible
*/
/**
\fn bool KDChartParams::axisVisible( uint n ) const
Returns if the axis will be drawn.
\return if the axis is visible or not.
\sa setAxisVisible
*/
/**
Specifies whether a grid should be drawn at the chart data area.
The grid will show a solid line for each delimiter.
(or a line with a pattern defined by \c KDChartAxisParams::setAxisGridStyle(), resp.)
\note If true and axisShowSubDelimiters is also true the grid
will show a thin dotted line for each sub-delimiter.
(or a line with a pattern defined by \c KDChartAxisParams::setAxisGridSubStyle(), resp.)
\param n the number of the axis for which to specify whether a grid should be drawn.
\param axisShowGrid if true a grid will be drawn on the chart data area.
\sa axisShowGrid, setAxisGridStyle, setAxisGridSubStyle
*/
void KDChartParams::setAxisShowGrid( uint n, bool axisShowGrid )
{
if ( n < KDCHART_MAX_AXES ) {
_axisSettings[ n ].params.setAxisShowGrid( axisShowGrid );
emit changed();
}
}
/**
Returns if any grid will be drawn at the data area.
\return if any grid will be drawn at the data area.
\sa KDChartAxisParams::setAxisShowGrid
*/
bool KDChartParams::showGrid() const
{
for ( uint i = 0; i < KDCHART_MAX_AXES; ++i ) {
if ( _axisSettings[ i ].params.axisVisible()
&& _axisSettings[ i ].params.axisShowGrid() )
return true;
}
return false;
}
/**
Specifies which data are to be represented by a given axis.<br>
If you specify a valid dataset-number for parameter dataset
you may use the same number or a greater number for
parameter dataset2 to specify a range of contiguous series
of datasets.<br>
If you specify <b>KDCHART_ALL_DATASETS</b> for dataset
the value of dataset2 does not matter.<br>
By setting the \c chart parameter you may specify which chart is
represented by the axis, you may use this when displaying
more than one chart in the same widget.
Calling setAxisDataset() with a dataset number will automatically set
the visability flag of the respective axis (or axes, resp.) while calling
it with KDCHART_NO_DATASET will clear the visibility flag so there is no
need to explicitely call \c setAxisVisible() after calling setAxisDatasets().
\note If you specify \c KDCHART_ALL_DATASETS the axis will
represent all the datasets with SourceMode DataEntry
(see \c setChartSourceMode for explanation) that have been
specified for this chart.<br>
\param n the number of the axis for which to specify the dataset(s)
\param dataset the dataset represented by axis \c n
\sa axisDatasets, chartAxes, setChartSourceMode, setAdditionalChartType
*/
void KDChartParams::setAxisDatasets( uint n, uint dataset,
uint dataset2,
uint chart )
{
uint a1 = ( KDCHART_ALL_AXES == n )
? 0
: TQMIN( n, KDCHART_MAX_AXES-1 );
uint a2 = ( KDCHART_ALL_AXES == n )
? KDCHART_MAX_AXES-1
: TQMIN( n, KDCHART_MAX_AXES-1 );
for( uint i = a1; i <= a2; ++i ) {
_axisSettings[ i ].params.setAxisVisible( KDCHART_NO_DATASET != dataset );
_axisSettings[ i ].dataset = dataset;
_axisSettings[ i ].dataset2 =
( KDCHART_ALL_DATASETS == dataset
|| KDCHART_NO_DATASET == dataset
|| KDCHART_ALL_DATASETS == dataset2
|| KDCHART_NO_DATASET == dataset2 )
? dataset
: dataset2;
_axisSettings[ i ].chart = chart;
}
emit changed();
}
/**
Returns which data are to be represented by a given axis.
( see explanation given with \c setAxisDatasets() )
\param n the axis for which to return the dataset number(s)
\param dataset the starting number of the series of datasets represented by axis \c n or KDCHART_ALL_DATASETS
\param dataset2 the end number of the series of datasets
\param chart the chart represented by axis \c n
\return true if a valid axis number was specified by parameter n
\sa setAxisDataset, chartAxes
*/
bool KDChartParams::axisDatasets( uint n, uint& dataset,
uint& dataset2, uint& chart ) const
{
bool bOk = ( n < KDCHART_MAX_AXES );
if ( bOk ) {
dataset = _axisSettings[ n ].dataset;
dataset2 = _axisSettings[ n ].dataset2;
chart = _axisSettings[ n ].chart;
}
return bOk;
}
/**
Returns which ORDINATE axis(axes) is(are) representing a given chart.
This will look for the following axes: AxisPosLeft, AxisPosRight,
AxisPosLeft2, AxisPosRight2.
It is allowed to specify the same variable as axis1, axis2, axis3,
axis4 - when doing this you will get the last axis number that was
found for this chart. In case you are sure there is only one axis
per chart you may act that way.
\param chart the chart for which to return the axis number(s)
\param cnt the count of axis numbers returned
\param axes on return, a vector with the numbers of the axes
\return true if at least one axis is representing the chart \c chart
\sa setAxisDataset, axisDataset
*/
bool KDChartParams::chartAxes( uint chart, uint& cnt, AxesArray& axes ) const
{
cnt = 0;
axes.resize( KDCHART_CNT_ORDINATES );
for ( int i2 = 0; i2 < KDCHART_CNT_ORDINATES; ++i2 ) {
axes[ i2 ] = KDCHART_NO_AXIS;
}
for ( uint i = 0; i < KDCHART_MAX_AXES; ++i ) {
if ( chart == _axisSettings[ i ].chart
&& ( KDChartAxisParams::AxisPosLeft == i
|| KDChartAxisParams::AxisPosRight == i
|| KDChartAxisParams::AxisPosLeft2 == i
|| KDChartAxisParams::AxisPosRight2 == i ) ) {
for( int j = 0; j < KDCHART_CNT_ORDINATES; ++j ) {
if( KDCHART_NO_AXIS == axes[ j ] || axes[ j ] == i ) {
if( KDCHART_NO_AXIS == axes[ j ] ) {
++cnt;
axes[ j ] = i;
}
break;
}
}
}
}
return (0 < cnt);
}
/**
\fn TQRect KDChartParams::axisArea( const uint n ) const
Returns the true axis area rectangle as it was was calculate
by KD Chart.
\param n the number of the axis
\note This special function may be called *after* calling
KDChart::setupGeometry(). Normally you don't need to call
it at all, its only purpose is to provide you with a way to
retrieve the true position and size of an axis area.
\sa dataArea
*/
/**
\fn TQRect KDChartParams::legendArea() const
Returns the true legend area rectangle as it was was calculate
by KD Chart.
\note This special function may be called *after* calling
KDChart::setupGeometry(). Normally you don't need to call
it at all, its only purpose is to provide you with a way to
retrieve the true position and size of an legend area.
\sa dataArea
*/
/**
\fn TQRect KDChartParams::dataArea() const
Returns the true data area rectangle as it was was calculate
by KD Chart.
\note This special function may be called *after* calling
KDChart::setupGeometry(). Normally you don't need to call
it at all, its only purpose is to provide you with a way to
retrieve the true position and size of the data area.
\sa axisArea
*/
/**
\fn void KDChartParams::setAxisArea( const uint n, const TQRect& areaRect )
Specifies the true axis area rectangle.
\note Do <b>not call</b> this function unless you are knowing
exactly what you are doing. \c setAxisTrueAreaRect is normally
reserved for internal usage by methods calculating the area
size based upon \c axisAreaMin and \c axisAreaMax. Thus the
signal \c changed() is not sended here.
\sa axisAreaMax, axisAreaMin, setAxisAreaMode, setAxisAreaMin
\sa setAxisArea
*/
/**
\fn void KDChartParams::setAxisLabelsTouchEdges( uint n, bool axisLabelsTouchEdges )
Specifies whether the axis labels start and end at the
edges of the charts instead being positioned in the
middle of the first data point (or the last one, resp.)
\note If you decide to call setAxisLabelsTouchEdges() to
override the default settings of abscissa axes
(AxisPosBottom, AxisPosTop, AxisPosBottom2, AxisPosTop2)
make sure to call it again each time you have called
setChartType() since your settings will be overwritten
when changing the chart type.
\param axisLabelsTouchEdges if the axis labels start and end at
the edges of the charts instead being positioned in the
middle of the first data point (or the last one, resp.)
\sa axisLabelsTouchEdges
*/
/**
\fn void KDChartParams::setAxisLabelsVisible( uint n, bool axisLabelsVisible )
Specifies whether the axis labels of an axis are to be shown.
\param axisLabelsVisible if true the labels of this axis will be drawn.
\sa setAxisLabelsFont
*/
/**
Specifies the axis labels font for one axis.
\note The font size will be ignored if \c axisLabelsFontSize is not zero,
in this case the font size will be calculated dynamically using
the value axisLabelsFontSize.
\param axisLabelsFont the font to be used for the axis' labels.
\param axisLabelsFontSize the (fixed or relative) axis font size.
If this value is less than zero the absolute value is per thousand
of the average value of the printable area height and width
to be used. This will make the axis look the same even if scaled
to very different size.
\param axisLabelsColor the axis labels colour.
\sa setAxisLabelsVisible
\sa setAxisLabelsFontUseRelSize, setAxisLabelsFontRelSize
\sa KDChartAxisParams::setAxisLabelsFontMinSize
*/
void KDChartParams::setAxisLabelsFont( uint n,
TQFont axisLabelsFont,
int axisLabelsFontSize,
TQColor axisLabelsColor )
{
if ( n < KDCHART_MAX_AXES ) {
bool extraSize = (0 != axisLabelsFontSize);
TQFont theFont( axisLabelsFont );
bool useFontFixedSize = true;
if ( extraSize ){
if( 0 > axisLabelsFontSize ){
useFontFixedSize = false;
_axisSettings[ n ].params.setAxisLabelsFontRelSize( -axisLabelsFontSize );
}else{
theFont.setPointSize( axisLabelsFontSize );
}
}
_axisSettings[ n ].params.setAxisLabelsFont( theFont, useFontFixedSize );
_axisSettings[ n ].params.setAxisLabelsColor( axisLabelsColor );
}
}
/**
\fn void KDChartParams::setAxisLabelTextParams( uint n, bool axisSteadyValueCalc,
KDChartData axisValueStart, KDChartData axisValueEnd,
double axisValueDelta, int axisDigitsBehindComma,
int axisMaxEmptyInnerSpan,
KDChartAxisParams::LabelsFromDataRow takeLabelsFromDataRow,
int labelTextsDataRow, TQStringList* axisLabelStringList,
TQStringList* axisShortLabelsStringList )
Specifies the label text parameters for one axis.
\sa KDChartAxisParams::setAxisLabelTextParams
*/
/**
Specifies a \c TQStringList which the axis label texts for one
axis are to be taken from, the optional short-labels parameter
(if not zero) may be used to specify an alternative list of
strings that are to be displayed in case the axis area size
is too small for showing the full-length names.
\note Normally axis labeling starts with the list's first string
and end with its last string, but by specifying a start and an
end value as additional parameters you can make KDChart repeat
the strings between these two values only, as shown here:
\verbatim
TQStringList abscissaNames;
abscissaNames << "Sunday" << "Monday" << "Tuesday" << "Wednesday"
<< "Thursday" << "Friday" << "Saturday";
TQStringList abscissaShortNames;
abscissaShortNames << "Sun" << "Mon" << "Tue" << "Wed"
<< "Thu" << "Fri" << "Sat";
setAxisLabelStringParams( KDChartAxisParams::AxisPosBottom,
&names, &shortNames,
"Monday", "Friday")
\endverbatim
\param n the ID of the axis
\param TQStringList* axisLabelStringList points to the list of labels to be displayed
\param TQStringList* axisShortLabelStringList points to
an alternative list of short names to be displayed if the long labels take too much place
\param TQString valueStart ( default null ) the label to begin with
\param TQString valueEnd ( default null ) the label to end with
\sa KDChartAxisParams::setAxisLabelStringLists
*/
void KDChartParams::setAxisLabelStringParams( uint n,
TQStringList* axisLabelStringList,
TQStringList* axisShortLabelStringList,
const TQString& valueStart,
const TQString& valueEnd )
{
if ( n < KDCHART_MAX_AXES ) {
_axisSettings[ n ].params.setAxisLabelStringLists( axisLabelStringList,
axisShortLabelStringList,
valueStart,
valueEnd );
emit changed();
}
}
/**
Specifies the parameters for one axis.
\param axisParams the axis parameters to be used.
\sa axisParams, AxisParams
*/
void KDChartParams::setAxisParams( uint n,
const KDChartAxisParams& axisParams )
{
if ( n < KDCHART_MAX_AXES ) {
_axisSettings[ n ].params = axisParams;
emit changed();
}
}
/**
\fn const KDChartAxisParams& KDChartParams::axisParams( uint n ) const
Returns the parameters that are currently defined for axis n.
\return all the parameters defined for axis n. If called with invalid
value for \c n it returns the default axis parameters.
\sa setAxisParams, AxisParams
*/
//@}
// END AXES
// START HEADERFOOTER
/** @name Header and footer methods.
These methods query and set header and footer parameters.
The names of the Header and Footer sections.
You may use up to 9 header and/or up to 9 footer sections.
\li Up to three <b>leading headers</b> ( \c HdFtPosHeader0 , \c
HdFtPosHeader0L , \c HdFtPosHeader0R ) may be drawn at the very upper
edge of the printable area. <br>
You might want to use those sections to show some marginal information
like department name, print date, page number... <br>
<b>Note:</b> Those headers <b>share the same area</b> so make sure to
specify propper horizontal alignment for each section when using more than
one of them. By default \c HdFtPosHeader0 has centered alignement,
\c HdFtPosHeader0L is aligned to the left and \c HdFtPosHeader0R to the
right side. All of them are vertically aligned to the bottom, you may
change this at your own risk: the resulting output might look strange. <br>
<b>also note:</b> Alignment to bottom here means their baselines are
horizontally adjusted to each other when more than one of them is used - it
does <b>not</b> mean the <b>lowest pixel positions</b> of their output will
be at the very same y coordinate since those might vary depending from the
font size and or the font size you have specified for each of the sections.
\li Up to three <b>main headers</b> ( \c HdFtPosHeader , \c
HdFtPosHeaderL , \c HdFtPosHeaderR ) may be drawn under the
leading header(s). <br>
You could use this headers to show the main information such as project name,
chart title or period of time (e.g. census year). <br>
Like their counterparts they share the same part of the printable area so the
restrictions regarding alignment mentioned above apply also to these three
sections.
\li Up to three <b>additional headers</b> ( \c HdFtPosHeader2 , \c
HdFtPosHeader2L , \c HdFtPosHeader2R ) may be drawn under the main
header(s). <br>
This headers could show additional information such as project phase, chart
sub-title or sub-period of time (e.g. census quarter-year). <br>
Like their counterparts they share the same part of the printable area so the
restrictions regarding alignment mentioned above apply also to these three
sections.
<p>
\li Up to three <b>main footers</b> ( \c HdFtPosFooter , \c
HdFtPosFooterL , \c HdFtPosFooterR ) may be drawn under the chart data
area (or the legend that might be shown below that area, resp.). <br>
You might want to use these footers instead of (or additional to) the
main header(s) for showing the main information... <br>
Like their header-counterparts they share the same part of the printable area
so the restrictions regarding alignment mentioned above apply also to these
three sections.
\li Up to three <b>additional footers</b> ( \c HdFtPosFooter2 , \c
HdFtPosFooter2L , \c HdFtPosHeader2R ) may be drawn under the main
footer(s). <br>
This footers could show additional information instead of (or additional to)
the additional header(s). <br>
Like their counterparts they share the same part of the printable area so the
restrictions regarding alignment mentioned above apply also to these three
sections.
\li Up to three <b>trailing footers</b> ( \c HdFtPosFooter0 , \c
HdFtPosFooter0L , \c HdFtPosFooter0R ) may be drawn at the very lower
edge of the printable area: <b>under</b> the other footer sections <br>
You might want to use those sections to show some marginal information
instead of (or additional to) the leading header(s). <br>
Like their counterparts they share the same part of the printable area so the
restrictions regarding alignment mentioned above apply also to these three
sections.
\note The names \c HdFtPosHeader or \c HdFtPosFooter are the basic names also returned by \c basicAxisPos.
<p>
<b>Usage:</b> Please see example code at \c setHeaderFooterText function explanation.
\sa setHeaderFooterText, headerFooterText
\sa setHeaderFooterFont, headerFooterFont
\sa setHeaderFooterFontUseRelSize, headerFooterFontUseRelSize
\sa setHeaderFooterFontRelSize, headerFooterFontRelSize
*/
//@{
/**
\enum KDChartParams::HdFtPos
This enum lists the positions that headers and footers can take.
*/
/**
\enum KDChartParams::HdFtPosSTART,
start of all sections
*/
/**
\enum KDChartParams::HdFtPosHeadersSTART
start of header sections
*/
/**
\enum KDChartParams::HdFtPosHeader0
leading header (at the very top of the printable area)
*/
/**
\enum KDChartParams::HdFtPosHeader0L
another leading header, by default left-aligned
*/
/**
\enum KDChartParams::HdFtPosHeader0R
yet another leading header, by default right-aligned
*/
/**
\enum KDChartParams::HdFtPosHeader
main header (below the leading header)
*/
/**
\enum KDChartParams::HdFtPosHeaderL
another main header, by default left-aligned
*/
/**
\enum KDChartParams::HdFtPosHeaderR
yet another main header, by default right-aligned
*/
/**
\enum KDChartParams::HdFtPosHeader2
additional header (below the main header)
*/
/**
\enum KDChartParams::HdFtPosHeader2L
another additional header, by default left-aligned
*/
/**
\enum KDChartParams::HdFtPosHeader2R
yet another additional header, by default right-aligned
*/
/**
\enum KDChartParams::HdFtPosHeadersEND
end of header sections
*/
/**
\enum KDChartParams::HdFtPosFootersSTART
start of footer sections
*/
/**
\enum KDChartParams::HdFtPosFooter
main footer (below the data area or the bottom legend (if any), resp.)
*/
/**
\enum KDChartParams::HdFtPosFooterL
another main footer, by default left-aligned
*/
/**
\enum KDChartParams::HdFtPosFooterR
yet another main footer, by default right-aligned
*/
/**
\enum KDChartParams::HdFtPosFooter2
additional footer (below the main footer)
*/
/**
\enum KDChartParams::HdFtPosFooter2L
another additional footer, by default left-aligned
*/
/**
\enum KDChartParams::HdFtPosFooter2R
yet another additional footer, by default right-aligned
*/
/**
\enum KDChartParams::HdFtPosFooter0
trailing footer (below the additional footer)
*/
/**
\enum KDChartParams::HdFtPosFooter0L
another trailing footer, by default left-aligned
*/
/**
\enum KDChartParams::HdFtPosFooter0R
yet another trailing footer, by default right-aligned
*/
/**
\enum KDChartParams::HdFtPosFootersEND
end of footer sections
*/
/**
\enum KDChartParams::HdFtPosEND
end of all sections
*/
/**
Specifies the text to be displayed in the header (or footer, resp.)
section specified by \c pos.
The default is not to display any header text nor footer text.
\note To learn about the different header (or footer, resp.)
sections please see information given at \c HdFtPos enum explanation.
\param pos the section in which the text is to be shown
\param text the text to be shown
\sa HdFtPos, headerFooterText()
\sa setHeaderFooterFont, headerFooterFont
\sa setHeaderFooterFontUseRelSize, headerFooterFontUseRelSize
\sa setHeaderFooterFontRelSize, headerFooterFontRelSize
\sa setHeader1Text(), header1Text()
\sa setHeader2Text(), header2Text()
\sa setFooterText(), footerText()
*/
void KDChartParams::setHeaderFooterText( uint pos, const TQString& text )
{
if ( HdFtPosEND >= pos ) {
_hdFtParams[ pos ]._text = text;
emit changed();
}
}
/**
Returns the text that is displayed in the header (or footer, resp.)
section specified by \c pos.
\note To learn about the different header (or footer, resp.)
sections please see information given at \c HdFtPos enum explanation.
\param pos the section for which to return the text
\return the displayed text
\sa HdFtPos, setHeaderFooterText()
\sa setHeaderFooterFont, headerFooterFont
\sa setHeaderFooterFontUseRelSize, headerFooterFontUseRelSize
\sa setHeaderFooterFontRelSize, headerFooterFontRelSize
\sa setHeader1Text(), header1Text()
\sa setHeader2Text(), header2Text()
\sa setFooterText(), footerText()
*/
TQString KDChartParams::headerFooterText( uint pos ) const
{
if ( HdFtPosEND >= pos )
return _hdFtParams[ pos ]._text;
else
return TQString();
}
/**
\note This methode for internal use.
Return the position and size of one header/footer area.
<b>Will return valid data only if called after KDChartPainter::setupGeometry()!</b>
*/
const TQRect& KDChartParams::headerFooterRect( uint pos ) const
{
if ( HdFtPosEND >= pos )
return _hdFtParams[ pos ].rect();
else
return _noRect;
}
/**
Specifies the colour to be used for the header text (or footer text, resp.)
of the header/footer section specified by \c pos.
The default colour is <b>TQColor( TQt::black )</b>.
\note To learn about the different header (or footer, resp.)
sections please see information given at \c HdFtPos enum explanation.
\param pos the section for which the colour is to be changed
\param color the text colour to be used
\sa HdFtPos, headerFooterText()
\sa setHeaderFooterFont, headerFooterFont
\sa setHeaderFooterFontUseRelSize, headerFooterFontUseRelSize
\sa setHeaderFooterFontRelSize, headerFooterFontRelSize
\sa setHeader1Text(), header1Text()
\sa setHeader2Text(), header2Text()
\sa setFooterText(), footerText()
*/
void KDChartParams::setHeaderFooterColor( uint pos, const TQColor color )
{
if ( HdFtPosEND >= pos ) {
_hdFtParams[ pos ]._color = color;
emit changed();
}
}
/**
Returns the colour used for the header text (or footer text, resp.)
of the header/footer section specified by \c pos.
\note To learn about the different header (or footer, resp.)
sections please see information given at \c HdFtPos enum explanation.
\param pos the section for which to return the text colour
\return the text colour
\sa HdFtPos, setHeaderFooterText()
\sa setHeaderFooterFont, headerFooterFont
\sa setHeaderFooterFontUseRelSize, headerFooterFontUseRelSize
\sa setHeaderFooterFontRelSize, headerFooterFontRelSize
\sa setHeader1Text(), header1Text()
\sa setHeader2Text(), header2Text()
\sa setFooterText(), footerText()
*/
TQColor KDChartParams::headerFooterColor( uint pos ) const
{
if ( HdFtPosEND >= pos )
return _hdFtParams[ pos ]._color;
else
return TQColor( TQt::black );
}
/**
Specifies the font to be used in the header (or footer,
resp.) section specified by \c pos..
The default is a 14pt Helvetica font.
\note To learn about the different header (or footer, resp.)
sections please see information given at \c HdFtPos enum explanation.
\param pos the section in which the font is to be used
\param font the font to use
\sa HdFtPos, setHeaderFooterText(), headerFooterText()
\sa headerFooterFont()
\sa setHeaderFooterFontUseRelSize, headerFooterFontUseRelSize
\sa setHeaderFooterFontRelSize, headerFooterFontRelSize
\sa setHeader1Font(), header1Font()
\sa setHeader2Font(), header2Font()
\sa setFooterFont(), footerFont()
\sa setHeader1Text(), header1Text()
\sa setHeader2Text(), header2Text()
\sa setFooterText(), footerText()
*/
void KDChartParams::setHeaderFooterFont( uint pos, const TQFont& font,
bool fontUseRelSize,
int fontRelSize )
{
if ( HdFtPosEND >= pos ) {
_hdFtParams[ pos ]._font = font;
_hdFtParams[ pos ]._fontUseRelSize = fontUseRelSize;
_hdFtParams[ pos ]._fontRelSize = fontRelSize;
emit changed();
}
}
/**
Returns the font used in the header (or footer, resp.)
section specified by \c pos.
\note To learn about the different header (or footer, resp.)
sections please see information given at \c HdFtPos enum explanation.
\param pos the section for which to return the font
\return the used font
\sa HdFtPos, setHeaderFooterText(), headerFooterText()
\sa setHeaderFooterFont()
\sa setHeaderFooterFontUseRelSize, headerFooterFontUseRelSize
\sa setHeaderFooterFontRelSize, headerFooterFontRelSize
\sa setHeader1Font(), header1Font()
\sa setHeader2Font(), header2Font()
\sa setFooterFont(), footerFont()
\sa setHeader1Text(), header1Text()
\sa setHeader2Text(), header2Text()
\sa setFooterText(), footerText()
*/
TQFont KDChartParams::headerFooterFont( uint pos ) const
{
if ( HdFtPosEND >= pos )
return _hdFtParams[ pos ]._font;
else
return TQApplication::font();
}
/**
Returns is the font size used in the header (or footer, resp.)
section specified by \c pos will be calculated dynamically.
\note To learn about the different header (or footer, resp.)
sections please see information given at \c HdFtPos enum explanation.
\param pos the section for which to return the font calculation flag
\return the font calculation flag
\sa HdFtPos, setHeaderFooterText(), headerFooterText()
\sa setHeaderFooterFont()
\sa setHeaderFooterFontUseRelSize, headerFooterFontUseRelSize
\sa setHeaderFooterFontRelSize, headerFooterFontRelSize
\sa setHeader1Font(), header1Font()
\sa setHeader2Font(), header2Font()
\sa setFooterFont(), footerFont()
\sa setHeader1Text(), header1Text()
\sa setHeader2Text(), header2Text()
\sa setFooterText(), footerText()
*/
bool KDChartParams::headerFooterFontUseRelSize( uint pos ) const
{
if ( HdFtPosEND >= pos )
return _hdFtParams[ pos ]._fontUseRelSize;
else
return false;
}
/**
Returns the factor used for dynamical calculation of
the font size of the text in the header (or footer, resp.)
section specified by \c pos.
\note To learn about the different header (or footer, resp.)
sections please see information given at \c HdFtPos enum explanation.
\param pos the section for which to return the font size factor
\return the font size factor
\sa HdFtPos, setHeaderFooterText(), headerFooterText()
\sa setHeaderFooterFont()
\sa setHeaderFooterFontUseRelSize, headerFooterFontUseRelSize
\sa setHeaderFooterFontRelSize, headerFooterFontRelSize
\sa setHeader1Font(), header1Font()
\sa setHeader2Font(), header2Font()
\sa setFooterFont(), footerFont()
\sa setHeader1Text(), header1Text()
\sa setHeader2Text(), header2Text()
\sa setFooterText(), footerText()
*/
int KDChartParams::headerFooterFontRelSize( uint pos ) const
{
if ( HdFtPosEND >= pos )
return _hdFtParams[ pos ]._fontRelSize;
else
return 10;
}
/**
\fn void KDChartParams::setHeader1Text( const TQString& text )
Specifies the text to be displayed as the first header line. The
default is not to display any header text.
\note This function provided for convenience only. <br>
To gain the <b>full</b> benefits of the header/footer management
please consider learning about the different header (or footer,
resp.) sections, see information given at \c HdFtPos enum
explanation. <br>
The 'better' way to specify content and settings of headers or
footers is to call \c setHeaderFooterText ( or \c setHeaderFooterFont
, \c setHeaderFooterFontUseRelSize , \c setHeaderFooterFontRelSize ,
resp.) while specifying the appropriate \c HdFtPos. <br>
The canonical way to retrieve settings and content of headers or
footers is to call \c headerFooterText (or \c headerFooterFont ,
\c headerFooterFontUseRelSize , \c headerFooterFontRelSize, resp.).
\param text the text to display
\sa HdFtPos, setHeaderFooterText(), headerFooterText()
\sa header2Text(), setHeader1Text(), header1Text(), setFooterText(),
footerText()
*/
/**
\fn TQString KDChartParams::header1Text() const
Returns the text that is displayed as the first header line.
\note This function provided for convenience only. <br>
To gain the <b>full</b> benefits of the header/footer management
please consider learning about the different header (or footer,
resp.) sections, see information given at \c HdFtPos enum
explanation. <br>
The 'better' way to specify content and settings of headers or
footers is to call \c setHeaderFooterText ( or \c setHeaderFooterFont
, \c setHeaderFooterFontUseRelSize , \c setHeaderFooterFontRelSize ,
resp.) while specifying the appropriate \c HdFtPos. <br>
The canonical way to retrieve settings and content of headers or
footers is to call \c headerFooterText (or \c headerFooterFont ,
\c headerFooterFontUseRelSize , \c headerFooterFontRelSize, resp.).
\return the displayed text
\sa HdFtPos, setHeaderFooterText(), headerFooterText()
\sa setHeader2Text(), setHeader1Text(), header1Text()
\sa setFooterText(), footerText()
*/
/**
\fn void KDChartParams::setHeader1Font( const TQFont& font )
Specifies the font to be used for displaying the first header line.
The default is a 14pt Helvetica font.
\note This function provided for convenience only. <br>
To gain the <b>full</b> benefits of the header/footer management
please consider learning about the different header (or footer,
resp.) sections, see information given at \c HdFtPos enum
explanation. <br>
The 'better' way to specify content and settings of headers or
footers is to call \c setHeaderFooterText ( or \c setHeaderFooterFont
, \c setHeaderFooterFontUseRelSize , \c setHeaderFooterFontRelSize ,
resp.) while specifying the appropriate \c HdFtPos. <br>
The canonical way to retrieve settings and content of headers or
footers is to call \c headerFooterText (or \c headerFooterFont ,
\c headerFooterFontUseRelSize , \c headerFooterFontRelSize, resp.).
\param font the font to use
\sa HdFtPos, setHeaderFooterFont(), headerFooterFont()
\sa setHeaderFooterFontUseRelSize(), headerFooterFontUseRelSize()
\sa setHeaderFooterFontRelSize(), headerFooterFontRelSize()
\sa header2Font(), setHeader2Text(), header2Text()
\sa setHeader1Font(), header1Font()
\sa setFooterFont(), footerFont()
*/
/**
\fn TQFont KDChartParams::header1Font() const
Returns the font used for displaying the second header line.
\note This function provided for convenience only. <br>
To gain the <b>full</b> benefits of the header/footer management
please consider learning about the different header (or footer,
resp.) sections, see information given at \c HdFtPos enum
explanation. <br>
The 'better' way to specify content and settings of headers or
footers is to call \c setHeaderFooterText ( or \c setHeaderFooterFont
, \c setHeaderFooterFontUseRelSize , \c setHeaderFooterFontRelSize ,
resp.) while specifying the appropriate \c HdFtPos. <br>
The canonical way to retrieve settings and content of headers or
footers is to call \c headerFooterText (or \c headerFooterFont ,
\c headerFooterFontUseRelSize , \c headerFooterFontRelSize, resp.).
\return the used font
\sa HdFtPos, setHeaderFooterFont(), headerFooterFont()
\sa setHeaderFooterFontUseRelSize(), headerFooterFontUseRelSize()
\sa setHeaderFooterFontRelSize(), headerFooterFontRelSize()
\sa setHeader2Font(), setHeader2Text(), header2Text(),
setHeader1Font(), header1Font(), setFooterFont(), footerFont()
*/
/**
\fn void KDChartParams::setHeader2Text( const TQString& text )
Specifies the text to be displayed as the second header line. The
default is not to display any header text.
\note This function provided for convenience only. <br>
To gain the <b>full</b> benefits of the header/footer management
please consider learning about the different header (or footer,
resp.) sections, see information given at \c HdFtPos enum
explanation. <br>
The 'better' way to specify content and settings of headers or
footers is to call \c setHeaderFooterText ( or \c setHeaderFooterFont
, \c setHeaderFooterFontUseRelSize , \c setHeaderFooterFontRelSize ,
resp.) while specifying the appropriate \c HdFtPos. <br>
The canonical way to retrieve settings and content of headers or
footers is to call \c headerFooterText (or \c headerFooterFont ,
\c headerFooterFontUseRelSize , \c headerFooterFontRelSize, resp.).
\param text the text to display
\sa HdFtPos, setHeaderFooterText(), headerFooterText()
\sa header2Text(), setHeader1Text(), header1Text(), setFooterText(),
footerText()
*/
/**
\fn TQString KDChartParams::header2Text() const
Returns the text that is displayed as the second header line.
\note This function provided for convenience only. <br>
To gain the <b>full</b> benefits of the header/footer management
please consider learning about the different header (or footer,
resp.) sections, see information given at \c HdFtPos enum
explanation. <br>
The 'better' way to specify content and settings of headers or
footers is to call \c setHeaderFooterText ( or \c setHeaderFooterFont
, \c setHeaderFooterFontUseRelSize , \c setHeaderFooterFontRelSize ,
resp.) while specifying the appropriate \c HdFtPos. <br>
The canonical way to retrieve settings and content of headers or
footers is to call \c headerFooterText (or \c headerFooterFont ,
\c headerFooterFontUseRelSize , \c headerFooterFontRelSize, resp.).
\return the displayed text
\sa HdFtPos, setHeaderFooterText(), headerFooterText()
\sa setHeader2Text(), setHeader1Text(), header1Text(), setFooterText(),
footerText()
*/
/**
\fn void KDChartParams::setHeader2Font( const TQFont& font )
Specifies the font to be used for displaying the second header line. The
default is a 12pt Helvetica font.
\note This function provided for convenience only. <br>
To gain the <b>full</b> benefits of the header/footer management
please consider learning about the different header (or footer,
resp.) sections, see information given at \c HdFtPos enum
explanation. <br>
The 'better' way to specify content and settings of headers or
footers is to call \c setHeaderFooterText ( or \c setHeaderFooterFont
, \c setHeaderFooterFontUseRelSize , \c setHeaderFooterFontRelSize ,
resp.) while specifying the appropriate \c HdFtPos. <br>
The canonical way to retrieve settings and content of headers or
footers is to call \c headerFooterText (or \c headerFooterFont ,
\c headerFooterFontUseRelSize , \c headerFooterFontRelSize, resp.).
\param font the font to use
\sa HdFtPos, setHeaderFooterFont(), headerFooterFont()
\sa setHeaderFooterFontUseRelSize(), headerFooterFontUseRelSize()
\sa setHeaderFooterFontRelSize(), headerFooterFontRelSize()
\sa header2Font(), setHeader2Text(), header2Text(), setHeader1Font(), header1Font(),
setFooterFont(), footerFont()
*/
/**
\fn TQFont KDChartParams::header2Font() const
Returns the font used for displaying the second header line.
\note This function provided for convenience only. <br>
To gain the <b>full</b> benefits of the header/footer management
please consider learning about the different header (or footer,
resp.) sections, see information given at \c HdFtPos enum
explanation. <br>
The 'better' way to specify content and settings of headers or
footers is to call \c setHeaderFooterText ( or \c setHeaderFooterFont
, \c setHeaderFooterFontUseRelSize , \c setHeaderFooterFontRelSize ,
resp.) while specifying the appropriate \c HdFtPos. <br>
The canonical way to retrieve settings and content of headers or
footers is to call \c headerFooterText (or \c headerFooterFont ,
\c headerFooterFontUseRelSize , \c headerFooterFontRelSize, resp.).
\return the used font
\sa HdFtPos, setHeaderFooterFont(), headerFooterFont()
\sa setHeaderFooterFontUseRelSize(), headerFooterFontUseRelSize()
\sa setHeaderFooterFontRelSize(), headerFooterFontRelSize()
\sa setHeader2Font(), setHeader2Text(), header2Text(),
setHeader1Font(), header1Font(), setFooterFont(), footerFont()
*/
/**
\fn void KDChartParams::setFooterText( const TQString& text )
Specifies the text to be displayed as the footer line. The
default is not to display any footer text.
\note This function provided for convenience only. <br>
To gain the <b>full</b> benefits of the header/footer management
please consider learning about the different header (or footer,
resp.) sections, see information given at \c HdFtPos enum
explanation. <br>
The 'better' way to specify content and settings of headers or
footers is to call \c setHeaderFooterText ( or \c setHeaderFooterFont
, \c setHeaderFooterFontUseRelSize , \c setHeaderFooterFontRelSize ,
resp.) while specifying the appropriate \c HdFtPos. <br>
The canonical way to retrieve settings and content of headers or
footers is to call \c headerFooterText (or \c headerFooterFont ,
\c headerFooterFontUseRelSize , \c headerFooterFontRelSize, resp.).
\param text the text to display
\sa HdFtPos, setHeaderFooterText(), headerFooterText()
\sa footerText(), setHeader1Text(), header1Text(), setHeader2Text(),
header2Text()
*/
/**
\fn TQString KDChartParams::footerText() const
Returns the text that is displayed as the footer line.
\note This function provided for convenience only. <br>
To gain the <b>full</b> benefits of the header/footer management
please consider learning about the different header (or footer,
resp.) sections, see information given at \c HdFtPos enum
explanation. <br>
The 'better' way to specify content and settings of headers or
footers is to call \c setHeaderFooterText ( or \c setHeaderFooterFont
, \c setHeaderFooterFontUseRelSize , \c setHeaderFooterFontRelSize ,
resp.) while specifying the appropriate \c HdFtPos. <br>
The canonical way to retrieve settings and content of headers or
footers is to call \c headerFooterText (or \c headerFooterFont ,
\c headerFooterFontUseRelSize , \c headerFooterFontRelSize, resp.).
\return the displayed text
\sa HdFtPos, setHeaderFooterText(), headerFooterText()
\sa setFooterText(), setHeader1Text(), header1Text(), setHeader2Text(),
header2Text()
*/
/**
\fn void KDChartParams::setFooterFont( const TQFont& font )
Specifies the font to be used for displaying the footer line. The
default is a 12pt Helvetica font.
\note This function provided for convenience only. <br>
To gain the <b>full</b> benefits of the header/footer management
please consider learning about the different header (or footer,
resp.) sections, see information given at \c HdFtPos enum
explanation. <br>
The 'better' way to specify content and settings of headers or
footers is to call \c setHeaderFooterText ( or \c setHeaderFooterFont
, \c setHeaderFooterFontUseRelSize , \c setHeaderFooterFontRelSize ,
resp.) while specifying the appropriate \c HdFtPos. <br>
The canonical way to retrieve settings and content of headers or
footers is to call \c headerFooterText (or \c headerFooterFont ,
\c headerFooterFontUseRelSize , \c headerFooterFontRelSize, resp.).
\param font the font to use
\sa HdFtPos, setHeaderFooterFont(), headerFooterFont()
\sa setHeaderFooterFontUseRelSize(), headerFooterFontUseRelSize()
\sa setHeaderFooterFontRelSize(), headerFooterFontRelSize()
\sa footerFont(), setFooterText(), footerText(), setHeader1Font(), header1Font(),
setHeader2Font(), header2Font()
*/
/**
\fn TQFont KDChartParams::footerFont() const
Returns the font used for displaying the footer line.
\note This function provided for convenience only. <br>
To gain the <b>full</b> benefits of the header/footer management
please consider learning about the different header (or footer,
resp.) sections, see information given at \c HdFtPos enum
explanation. <br>
The 'better' way to specify content and settings of headers or
footers is to call \c setHeaderFooterText ( or \c setHeaderFooterFont
, \c setHeaderFooterFontUseRelSize , \c setHeaderFooterFontRelSize ,
resp.) while specifying the appropriate \c HdFtPos. <br>
The canonical way to retrieve settings and content of headers or
footers is to call \c headerFooterText (or \c headerFooterFont ,
\c headerFooterFontUseRelSize , \c headerFooterFontRelSize, resp.).
\return the used font
\sa HdFtPos, setHeaderFooterFont(), headerFooterFont()
\sa setHeaderFooterFontUseRelSize(), headerFooterFontUseRelSize()
\sa setHeaderFooterFontRelSize(), headerFooterFontRelSize()
\sa setFooterFont(), setFooterText(), footerText(),
setHeader1Font(), header1Font(), setHeader2Font(), header2Font()
*/
//@}
// END HEADERFOOTER
// PRIVATE VARIABLES
/**
\var int KDChartParams::_globalLeadingLeft;
Stores the distance between the chart and the left border of the painter area.
*/
/**
\var int KDChartParams::_globalLeadingTop;
Stores the distance between the chart and the upper border of the painter area.
*/
/**
\var int KDChartParams::_globalLeadingRight;
Stores the distance between the chart and the left border of the painter area.
*/
/**
\var int KDChartParams::_globalLeadingBottom;
Stores the distance between the chart and the right border of the painter area.
*/
/**
\var ChartType KDChartParams::_chartType;
Stores the chart type.
*/
/**
\var ChartType KDChartParams::_additionalChartType;
Stores the additional chart type.
*/
/**
\var int KDChartParams::_numValues;
Stores how many of the values should be shown. -1 means all
available values.
*/
/**
\var TQFont KDChartParams::_defaultFont;
Stores our default font used for many different purposes.
*/
/**
\var KDChartParams::AreaMap
The type used for storing the frame settings for all of the chart areas.
*/
/**
\var AreaMap KDChartParams::_areaMap;
Stores the frame settings for all of the chart areas.
*/
/**
\var CustomBoxMap KDChartParams::_customBoxDict;
Stores the settings for all of the custom boxes.
*/
/**
\var TQRect KDChartParams::_noRect;
Stores an empty rectangle.
*/
/**
\var KDFrame KDChartParams::_noFrame;
Stores the default frame settings: no border, no corners, no background.
*/
/**
\var KDChartFrameSettings KDChartParams::_noFrameSettings;
Stores the default area settings: no frame, no inner gap, no outer gap.
*/
/**
\class KDChartParams::ModeAndChart
Stores the SourceMode and the chart(s) for one dataset.
*/
/**
\var ModeAndChartMap KDChartParams::_dataSourceModeAndChart;
Stores the SourceMode and the chart(s) for the datasets.
*/
/**
\var typedef KDChartParams::ModeAndChartMap
The type used for storing the source mode and charts of the datasets
*/
/**
\var bool KDChartParams::_setChartSourceModeWasUsed;
Stores whether setChartSourceMode() was called or not
*/
/**
\var TQMap < uint, TQColor > KDChartParams::_dataColors;
Stores the colors for the datasets.
*/
/**
\var uint KDChartParams::_maxDatasetSourceMode;
Stores the highest dataset number for which a SourceMode has been
defined. Note that if you define a value for a dataset but not for a
dataset with a lower number (and there is neither a default value), the
source mode for that dataset with the lower number will be undefined.
*/
/**
\var KDChartPropertySetList KDChartParams::_propertySetList;
Stores all property-sets that were defined.
Each of these sets may be assigned to an individual cell.
*/
/**
\var double KDChartParams::_shadowBrightnessFactor;
Stores a factor to be used to adjust the
built-in brightness of shadow colors in
3-dimensional drawings like e.g. 3D bar charts.
*/
/**
\var Qt::BrushStyle KDChartParams::_shadowPattern;
Stores a fill style to be used for filling shadow area in
3-dimensional drawings like e.g. 3D bar charts.
*/
/**
\var bool KDChartParams::_threeDShadowColors;
Stores whether shadowed colors are used for 3D effects. Only used
for 3D effects in charts that support these.
*/
/**
\var uint KDChartParams::_maxDatasetColor;
Stores the highest dataset number for which a color has been
defined. Note that if you define a value for a dataset but not for a
dataset with a lower number (and there is neither a default value), the
color for that dataset with the lower number will be undefined.
*/
/**
\var TQMap < uint, TQColor > KDChartParams::_dataColorsShadow1;
Stores the shadow colors that are somewhat darker than the colors in
_dataColors.
*/
/**
\var TQMap < uint, TQColor > KDChartParams::_dataColorsShadow2;
Stores the shadow colors that are even more darker than the colors in
_dataColorsShadow1;
*/
/**
\var TQColor KDChartParams::_outlineDataColor;
Stores the color to be used for outlines of data displays.
*/
/**
\var uint KDChartParams::_outlineDataLineWidth;
Stores the line width to be used for outlines of data displays.
*/
/**
\var PenStyle KDChartParams::_outlineDataLineStyle;
Stores the line style to be used for outlines of data displays.
*/
/**
\struct PrintValueDataSettings KDChartParams.h
Stores if and how a chart will print the data values near their
respective entries.
*/
/**
\var PrintDataValuesSettings KDChartParams::_printDataValuesSettings;
Stores if and how the FIRST chart will print the data values
near their respective entries.
*/
/**
\var PrintDataValuesSettings KDChartParams::_printDataValuesSettings2;
Stores if and how the SECOND chart will print the data values
near their respective entries, in case two charts are to be
drawn sharing the same data area.
*/
/**
\var bool KDChartParams::_allowOverlappingDataValueTexts;
Stores whether a data value may be drawn near it's respective entry
even if it's region intersects with another data value text's region.
By default this is FALSE to prevent ugly mutual overwriting of data
value texts and to speed up drawing of cahrts containing thousands
of data points.
*/
/**
\var BarChartSubType KDChartParams::_barChartSubType;
Stores the bar chart subtype. Only used when chartType() ==
Bar
*/
/**
\var bool KDChartParams::_threeDBars;
Stores whether the engine should draw the bars in 3D. Only
used if chartType() == Bar.
*/
/**
\var int KDChartParams::_threeDBarAngle;
Stores the angle used for 3D display. Only used if
threeDBars == true.
*/
/**
\var double KDChartParams::_threeDBarDepth;
Stores the depth of the 3D Effect used for 3D bars
in relation to the bar width.
Only used if chartType() == Bar and threeDBars() == true.
*/
/**
\var double KDChartParams::_cosThreeDBarAngle;
The cosine in rad of the angle for 3D display. Only used if
threeDBars == true.
*/
/**
\var int KDChartParams::_datasetGap;
Stores the number of pixels between two dataset values.
*/
/**
\var bool KDChartParams::_datasetGapIsRelative;
Stores if the value set by \c setDatasetGap
is a per mille value of the chart data area width.
*/
/**
\var int KDChartParams::_valueBlockGap;
Stores the number of pixels between each value block.
*/
/**
\var bool KDChartParams::_valueBlockGapIsRelative;
Stores if the value set by \c setValueBlockGap
is a per mille value of the chart data area width.
*/
/// LINES/AREAS-specific
/**
\var LineChartSubType KDChartParams::_lineChartSubType;
Stores the line chart subtype. Only used when chartType() ==
Line
*/
/**
\var bool KDChartParams::_threeDLines;
Stores whether 3D lines should be drawn.
*/
/**
\var int KDChartParams::_threeDLineDepth;
Stores the depth of 3D lines.
*/
// documentation of this member variable temporary disabled:
// Feature is currently not supported, will be implemented
// by future versions of KDChart
/*
\var int KDChartParams::_threeDLineXRotation;
Stores the X rotation of 3D lines.
*/
// documentation of this member variable temporary disabled:
// Feature is currently not supported, will be implemented
// by future versions of KDChart
/*
\var int KDChartParams::_threeDLineYRotation;
Stores the Y rotation of 3D lines.
*/
/**
\var bool KDChartParams::_lineMarker;
Stores whether line markers should be drawn. Only used when
chartType() == Line.
*/
/**
\var LineMarkerStyleMap KDChartParams::_lineMarkerStyles;
Stores the styles of the line makers
*/
/**
\var uint KDChartParams::_maxDatasetLineMarkerStyle;
Stores the highest dataset number for which a line marker has been
defined. Note that if you define a value for a dataset but not for a
dataset with a lower number (and there is neither a default value), the
line marker for that dataset with the lower number will be undefined.
*/
/**
\var TQSize KDChartParams::_lineMarkerSize;
Stores the size of the line markers.
*/
/**
\var TQColor KDChartParams::_lineColor;
Stores the color of lines in line charts.
*/
/**
\var int KDChartParams::_lineWidth;
Stores the line width of lines in line charts.
*/
/**
\var PenStyle KDChartParams::_lineStyle;
Stores the line style of lines in line charts.
*/
/**
\var AreaChartSubType KDChartParams::_areaChartSubType;
Stores the area chart subtype. Only used when chartType() ==
Area
*/
/**
\var AreaLocation KDChartParams::_areaLocation;
Stores whether the area above or below the value points should
be filled.
*/
/// POLAR-specific
/**
\var PolarChartSubType KDChartParams::_polarChartSubType;
Stores the polar chart subtype. Only used when chartType() ==
Polar
*/
/**
\var bool KDChartParams::_polarMarker;
Stores whether polar markers should be drawn. Only used when
chartType() == Polar.
*/
/**
\var PolarMarkerStyleMap KDChartParams::_polarMarkerStyles;
Stores the styles of the markers in a polar char.
*/
/**
\var uint KDChartParams::_maxDatasetPolarMarkerStyle;
Stores the highest dataset number for which a polar marker has been
defined. Note that if you define a value for a dataset but not for a
dataset with a lower number (and there is neither a default value), the
polar marker for that dataset with the lower number will be undefined.
*/
/**
\var TQSize KDChartParams::_polarMarkerSize;
Stores the size of the polar markers.
*/
/**
\var int KDChartParams::_polarLineWidth;
Stores the line width of lines in polar charts.
*/
/**
\var int KDChartParams::_polarZeroDegreePos;
Stores the zero degree position in polar charts.
*/
/**
\var bool KDChartParams::_polarRotateCircularLabels;
Stores whether to rotate circular labels in polar charts.
*/
/**
\struct KDChartParams::_polarDelimsAndLabelStruct KDChartParams.h
Stores whether to show circular delimiters and/or labels
at a given position in polar charts.
*/
/**
\var _polarDelimsAndLabelStruct KDChartParams::_polarDelimsAndLabels[ 1 + KDCHART_MAX_POLAR_DELIMS_AND_LABELS_POS ];
Stores where to show circular delimiters and labels in polar charts.
*/
// PIES/RINGS
/**
\var bool KDChartParams::_explode;
Stores whether pies or ring segments are drawn exploding.
*/
/**
\var double KDChartParams::_explodeFactor;
Stores the default explode factor of pie or ring segments.
*/
/**
\var TQMap<int,double> KDChartParams::_explodeFactors;
Stores the list of segment-specific explode factors of pie or
ring segments.
*/
/**
\var TQValueList<int> KDChartParams::_explodeList;
Stores the list of pies or ring segments to explode.
*/
/**
\var bool KDChartParams::_threeDPies;
Stores whether pies will have a 3D effect.
*/
/**
\var int KDChartParams::_threeDPieHeight;
Stores the height of the pie 3D effect.
*/
/**
\var int KDChartParams::_pieStart;
Stores the starting point of the pie circle.
*/
/**
\var int KDChartParams::_ringStart;
Stores the starting point of the ring circle.
*/
/**
\var bool KDChartParams::_relativeRingThickness;
Stores whether the ring thickness is relativ or constant.
*/
// HI-LO CHARTS
/**
\var HiLoChartSubType KDChartParams::_hiLoChartSubType;
Stores the HiLo subtype.
*/
/**
\var bool KDChartParams::_hiLoChartPrintLowValues;
Stores whether the low values
will be printed under their respective entries.
*/
/**
\var TQFont KDChartParams::_hiLoChartLowValuesFont;
Stores the font to be used for printing the low values.
*/
/**
\var bool KDChartParams::_hiLoChartLowValuesUseFontRelSize;
Stores whether the font size to be used for printing the low
values is calculated dynamically.
*/
/**
\var int KDChartParams::_hiLoChartLowValuesFontRelSize;
Stores the relative size (in per mille of the chart width) of
font size to be used for printing the low values.
*/
/**
\var TQColor KDChartParams::_hiLoChartLowValuesColor;
Stores the colour of the font size to be used for printing the
low values.
*/
/**
\var bool KDChartParams::_hiLoChartPrintHighValues;
Stores whether the high values will be printed under their
respective entries.
*/
/**
\var TQFont KDChartParams::_hiLoChartHighValuesFont;
Stores the font to be used for printing the high values.
*/
/**
\var bool KDChartParams::_hiLoChartHighValuesUseFontRelSize;
Stores whether the font size to be used for printing the high
values is calculated dynamically.
*/
/**
\var int KDChartParams::_hiLoChartHighValuesFontRelSize;
Stores the relative size (in per mille of the chart width) of
font size to be used for printing the high values.
*/
/**
\var TQColor KDChartParams::_hiLoChartHighValuesColor;
Stores the colour of the font size to be used for printing the
high values.
*/
/**
\var bool KDChartParams::_hiLoChartPrintOpenValues;
Stores whether the open values
will be printed under their respective entries.
*/
/**
\var TQFont KDChartParams::_hiLoChartOpenValuesFont;
Stores the font to be used for printing the open values.
*/
/**
\var bool KDChartParams::_hiLoChartOpenValuesUseFontRelSize;
Stores whether the font size to be used for printing the open
values is calculated dynamically.
*/
/**
\var int KDChartParams::_hiLoChartOpenValuesFontRelSize;
Stores the relative size (in per mille of the chart width) of
font size to be used for printing the open values.
*/
/**
\var TQColor KDChartParams::_hiLoChartOpenValuesColor;
Stores the colour of the font size to be used for printing the
open values.
*/
/**
\var bool KDChartParams::_hiLoChartPrintCloseValues;
Stores whether the close values will be printed under their
respective entries.
*/
/**
\var TQFont KDChartParams::_hiLoChartCloseValuesFont;
Stores the font to be used for printing the close values.
*/
/**
\var bool KDChartParams::_hiLoChartCloseValuesUseFontRelSize;
Stores whether the font size to be used for printing the close
values is calculated dynamically.
*/
/**
\var int KDChartParams::_hiLoChartCloseValuesFontRelSize;
Stores the relative size (in per mille of the chart width) of
font size to be used for printing the close values.
*/
/**
\var TQColor KDChartParams::_hiLoChartCloseValuesColor;
Stores the colour of the font size to be used for printing the
close values.
*/
/**
\var BWChartSubType KDChartParams::_BWChartSubType;
Stores the Box And Whisker subtype.
*/
/**
\struct BWChartStatistics KDChartParams.h
Stores the statistical data for a box-and-whisker chart
*/
/**
\var BWChartStatistics KDChartParams::_BWChartStatistics[ BWStatValOffEndValue ];
Stores whether and how the statistical data
will be printed near the drawing.
*/
/**
\var double KDChartParams::_BWChartFenceUpperInner;
\var double KDChartParams::_BWChartFenceLowerInner;
\var double KDChartParams::_BWChartFenceUpperOuter;
\var double KDChartParams::_BWChartFenceLowerOuter;
Stores the factors to be used to calculate the width of
the inner and outer fences.
*/
/**
\var int KDChartParams::_BWChartOutValMarkerSize;
Stores the size (or the negative size factor, resp.) of
the markers representing the outliers.
*/
/**
\var TQBrush KDChartParams::_BWChartBrush;
Stores the brush to be used.
*/
/**
\var LegendPosition KDChartParams::_legendPosition;
Stores the legend position.
*/
/**
\var LegendSource KDChartParams::_legendSource;
Stores the legend source.
*/
/**
\var TQMap < int, TQString > KDChartParams::_legendText;
Stores the manually set legend texts.
*/
/**
\var TQColor KDChartParams::_legendTextColor;
Stores the color for drawing the legend texts.
*/
/**
\var TQFont KDChartParams::_legendFont;
Stores the font for drawing the legends.
*/
/**
\var bool KDChartParams::_legendFontUseRelSize;
Stores whether the size of the legend font is to be calculated
on a relative basis.
\sa setLegendFontUseRelSize, setLegendFontRelSize
\sa setLegendFont
*/
/**
\var int KDChartParams::_legendFontRelSize;
Stores the per mille basis for calculating the relative
legend font size.
\sa setLegendFontRelSize, setLegendFontUseRelSize
\sa setLegendFont
*/
/**
\var TQString KDChartParams::_legendTitleText;
Stores the legend title text.
*/
/**
\var TQColor KDChartParams::_legendTitleTextColor;
Stores the color for drawing the legend title.
*/
/**
\var TQFont KDChartParams::_legendTitleFont;
Stores the font for drawing the legend title.
*/
/**
\var bool KDChartParams::_legendTitleFontUseRelSize;
Stores whether the size of the legend title font is to be
calculated on a relative basis.
\sa setLegendTitleFontUseRelSize, setLegendTitleFontRelSize
\sa setLegendTitleFont
*/
/**
\var int KDChartParams::_legendTitleFontRelSize;
Stores the per mille basis for calculating the relative
legend title font size.
\sa setLegendTitleFontRelSize, setLegendTitleFontUseRelSize
\sa setLegendTitleFont
*/
/**
\var uint KDChartParams::_legendSpacing;
Stores the number of pixels between the legend and the data display
*/
/**
\struct KDChartParams::AxisSettings KDChartParams.h
Stores all the settings of all the axis \em plus one more
parameter set containing the build-in defauls axis settings.
*/
/**
\var KDChartParams::_axisSettings
Stores the settings for each of the possible thirteen axes
*/
/**
\struct HdFtParams KDChartParams.h
Stores all the settings of all the header sections
and all the footer sections.
*/
/**
Retrieves the ID of the first KDChartCustomBox that is anchored at axis \c n.
By default this box is used for the default axis title text: it is created
(or modified, resp.) by calling one of the axis title convenience functions
setAxisTitleColor or setAxisTitleFont or setAxisTitleFontUseRelSize or setAxisTitleFontRelSize.
\note If you have specified another custom box manually that is anchored to this axis
before (or instead of, resp.) calling one of the convenience functions mentioned above
your custom box will become the default axis title text box: you then can access/modify
its properties using these convenience functions.
\return TRUE if a KDChartCustomBox was found that is anchored to axis \c n.
\param n the axis number, this could be KDChartAxisParams::AxisPosLeft or KDChartAxisParams::AxisPosBottom...
\param boxID will obtain the respective KDChartCustomBox's ID if return value is TRUE, otherwise the parameter's value remains unchanged.
\sa setAxisTitle, setAxisTitleColor, setAxisTitleFont, setAxisTitleFontUseRelSize, setAxisTitleFontRelSize
*/
bool KDChartParams::findFirstAxisCustomBoxID( uint n, uint& boxID ) const
{
TQIntDictIterator<KDChartCustomBox> it( _customBoxDict );
for( ; it.current(); ++it ){
if( (*it).anchorArea() == KDChartEnums::AreaAxisBASE + n ){
boxID = it.currentKey();
return true;
}
}
return false;
}
void KDChartParams::insertDefaultAxisTitleBox( uint n,
bool setTitle, const TQString& axisTitle,
bool setColor, const TQColor& axisTitleColor,
bool setFont, const TQFont& axisTitleFont,
bool setFontUseRelSize, bool axisTitleFontUseRelSize,
bool setFontRelSize, int axisTitleFontRelSize )
{
bool bVert = false;
bool bHorz = false;
bool b3rd = false;
switch( KDChartAxisParams::basicAxisPos( n ) ){
case KDChartAxisParams::AxisPosLeft:
case KDChartAxisParams::AxisPosRight:
case KDChartAxisParams::AxisPosLeft2:
case KDChartAxisParams::AxisPosRight2:
bVert = true;
break;
case KDChartAxisParams::AxisPosTop:
case KDChartAxisParams::AxisPosBottom:
case KDChartAxisParams::AxisPosTop2:
case KDChartAxisParams::AxisPosBottom2:
bHorz = true;
break;
default:
b3rd = true;
break;
}
const TQFont defaultFont( "helvetica", 6, TQFont::Normal, false );
// SGI IRIX: Compiling error.
// TQString titleString( setTitle ? axisTitle : "<qt><center> </center></qt>" );
TQString titleString;
if( setTitle )
titleString = axisTitle;
else
titleString = "<qt><center> </center></qt>";
const TQString stripTitleString( titleString.simplifyWhiteSpace().upper() );
if( setTitle ){
if( !stripTitleString.startsWith("<QT>" ) )
titleString.prepend("<qt><center>");
if( !stripTitleString.endsWith("</QT>" ) )
titleString.append("</center></qt>");
}
KDChartTextPiece textPiece( titleString, setFont ? axisTitleFont : defaultFont );
int fixedFontSize = textPiece.font().pointSize();
if( -1 == fixedFontSize )
fixedFontSize = textPiece.font().pixelSize();
if( -1 == fixedFontSize )
fixedFontSize = 15;
int relFontSize = setFontRelSize ? -axisTitleFontRelSize : -18;
KDChartCustomBox customBox( bVert ? -90 : 0,
textPiece,
setFontUseRelSize
? ( axisTitleFontUseRelSize ? relFontSize : fixedFontSize )
: relFontSize,
true,
0, 0,
0, 0,
setColor ? axisTitleColor : TQt::darkBlue,
Qt::NoBrush,
KDChartEnums::AreaAxisBASE + n,
bVert ? KDChartEnums::PosCenterLeft : KDChartEnums::PosBottomCenter, bVert ? (TQt::AlignTop + TQt::AlignHCenter) : (TQt::AlignBottom + TQt::AlignHCenter),
0,0,0,
bVert ? (TQt::AlignBottom + TQt::AlignRight) : (TQt::AlignTop + TQt::AlignHCenter),
false, n );
customBox.setParentAxisArea( n );
const uint id = insertCustomBox( customBox );
/*debugging Title box*/
/*
setSimpleFrame(
KDChartEnums::AreaCustomBoxesBASE
+ id,
0,0, 0,0,
true,
true,
KDFrame::FrameFlat,
1,
0,
TQt::red,
TQBrush( TQColor ( 255,248,222 ) ) );
*/
}
/**
Specifies the default axis title text.
\note This is a convenience function accessing the first KDChartCustomBox that is anchored at axis \c n.
\param axisTitle the axis title text
\sa setAxisTitleColor,setAxisTitleFont,setAxisTitleFontUseRelSize, setAxisTitleFontRelSize
\sa axisTitle, axisTitleColor, axisTitleFont, axisTitleFontUseRelSize, axisTitleFontRelSize
*/
void KDChartParams::setAxisTitle( uint n, const TQString& axisTitle )
{
bool bDone = false;
uint boxID;
if( findFirstAxisCustomBoxID( n, boxID ) ){
KDChartCustomBox* box = (KDChartCustomBox*)customBox( boxID );
if( box ){
TQString title = axisTitle;
const TQString stripTitleString( title.simplifyWhiteSpace().upper() );
if( !stripTitleString.startsWith("<QT>" ) )
title.prepend("<qt><center>");
if( !stripTitleString.endsWith("</QT>" ) )
title.append("</center></qt>");
KDChartTextPiece textPiece( 0, title,
box->content().font() );
box->setContent( textPiece );
//qDebug ("old Axis Title updated");
bDone = true;
}
}
if( !bDone ){
insertDefaultAxisTitleBox( n,
true, axisTitle,
false, TQColor(),
false, TQFont(),
false, false,
false, 0 );
//qDebug("new Axis Title Box inserted");
}
emit changed();
}
/**
Returns the default axis title text
\return the axis title text.
\sa setAxisTitle
*/
TQString KDChartParams::axisTitle( uint n ) const
{
uint boxID;
if( findFirstAxisCustomBoxID( n, boxID ) ){
const KDChartCustomBox* box = customBox( boxID );
if( box )
return box->content().text();
}
return TQString();
}
/**
Specifies the color of the default axis title text.
\param axisTitleColor the color of the axis title text
\sa setAxisTitle, setAxisTitleFont,setAxisTitleFontUseRelSize, setAxisTitleFontRelSize
\sa axisTitle, axisTitleColor, axisTitleFont, axisTitleFontUseRelSize, axisTitleFontRelSize
*/
void KDChartParams::setAxisTitleColor( uint n, TQColor axisTitleColor )
{
bool bDone = false;
uint boxID;
if( findFirstAxisCustomBoxID( n, boxID ) ){
KDChartCustomBox* box = (KDChartCustomBox*)customBox( boxID );
if( box ){
box->setColor( axisTitleColor );
bDone = true;
}
}
if( !bDone )
insertDefaultAxisTitleBox( n,
false, TQString(),
true, axisTitleColor,
false, TQFont(),
false, false,
false, 0 );
emit changed();
}
/**
Returns the color of the default axis title text
\return the color of the axis title text.
\sa setAxisTitleColor
*/
TQColor KDChartParams::axisTitleColor( uint n ) const
{
uint boxID;
if( findFirstAxisCustomBoxID( n, boxID ) ){
const KDChartCustomBox* box = customBox( boxID );
if( box )
return box->color();
}
return TQt::darkBlue;
}
/**
Specifies the font and the size of the default axis title text.
\param axisTitleFont the font of the axis title text
\param useFontSize flag indicating whether the font's size is to be used
\param axisTitleFontRelSize the size to be used if \c useFontSize is false, this is interpreted as per mil value of the printable area size
\sa setAxisTitle, setAxisTitleColor,setAxisTitleFontUseRelSize, setAxisTitleFontRelSize
\sa axisTitle, axisTitleColor, axisTitleFont, axisTitleFontUseRelSize, axisTitleFontRelSize
*/
void KDChartParams::setAxisTitleFont( uint n,
TQFont axisTitleFont )
{
bool bDone = false;
uint boxID;
if( findFirstAxisCustomBoxID( n, boxID ) ){
KDChartCustomBox* box = (KDChartCustomBox*)customBox( boxID );
if( box ){
KDChartTextPiece textPiece( 0, box->content().text(),
axisTitleFont );
box->setContent( textPiece );
bDone = true;
}
}
if( !bDone )
insertDefaultAxisTitleBox( n,
false, TQString(),
false, TQColor(),
true, axisTitleFont,
false, false,
false, 0 );
emit changed();
}
/**
Specifies the font and the size of the default axis title text.
\param axisTitleFont the font of the axis title text - by default the font will be relative
\param useFixedFontSize flag indicating whether the font's size is to be used as fixed or calculated as per mil value.
\param axisTitleFontRelSize the size to be used if \c useFixedFontSize is false, this is interpreted as per mil value of the printable area size
\sa setAxisTitle, setAxisTitleColor, setAxisTitleFont, setAxisTitleFontUseRelSize, setAxisTitleFontRelSize
\sa axisTitle, axisTitleColor, axisTitleFont, axisTitleFontUseRelSize, axisTitleFontRelSize
*/
void KDChartParams::setAxisTitleFont( uint n,
TQFont axisTitleFont,
bool useFixedFontSize )
{
bool bDone = false;
uint boxID;
if( findFirstAxisCustomBoxID( n, boxID ) ){
KDChartCustomBox* box = (KDChartCustomBox*)customBox( boxID );
if( box ){
KDChartTextPiece textPiece( 0, box->content().text(),
axisTitleFont );
int fixedFontSize = textPiece.font().pointSize();
setAxisTitleFontRelSize( n, fixedFontSize );
box->setContent( textPiece );
bDone = true;
}
}
if( !bDone )
insertDefaultAxisTitleBox( n,
false, TQString(),
false, TQColor(),
true, axisTitleFont,
false, false,
false, 0 );
emit changed();
if ( useFixedFontSize )
setAxisTitleFontUseRelSize( n, false);
}
/**
Returns the font of the default axis title text.
\return the axis title's font.
\sa setAxisTitleFont
*/
TQFont KDChartParams::axisTitleFont( uint n ) const
{
uint boxID;
if( findFirstAxisCustomBoxID( n, boxID ) ){
const KDChartCustomBox* box = customBox( boxID );
if( box )
return box->content().font();
}
return TQFont( "helvetica", 6, TQFont::Normal, false );
}
/**
Specifies whether the fixed size of the the default axis title text's font.
\param axisTitleFontUseRelSize flag indicating whether the font's size is to be used or the size specified via setAxisTitleFontRelSize.
\sa setAxisTitle, setAxisTitleColor,setAxisTitleFont, setAxisTitleFontRelSize
\sa axisTitle, axisTitleColor, axisTitleFont, axisTitleFontUseRelSize, axisTitleFontRelSize
*/
void KDChartParams::setAxisTitleFontUseRelSize( uint n,
bool axisTitleFontUseRelSize )
{
bool bDone = false;
uint boxID;
if( findFirstAxisCustomBoxID( n, boxID ) ){
KDChartCustomBox* box = (KDChartCustomBox*)customBox( boxID );
if( box ){
if ( !axisTitleFontUseRelSize ) {
if ( box->fontSize() < 0 )
box->setFontSize( -(box->fontSize()), true );
} else {
if( 0 <= box->fontSize() ) {
box->setFontSize( -(box->fontSize()), true );
} else
box->setFontSize( box->fontSize(), true);
}
bDone = true;
}
}
if( !bDone )
insertDefaultAxisTitleBox( n,
false, TQString(),
false, TQColor(),
false, TQFont(),
true, axisTitleFontUseRelSize,
false, 0 );
emit changed();
}
/**
Returns whether the fix font size is used for the default axis title text.
\return whether the fix axis title font size is used.
\sa setAxisTitleFontUseRelSize
*/
bool KDChartParams::axisTitleFontUseRelSize( uint n ) const
{
uint boxID;
if( findFirstAxisCustomBoxID( n, boxID ) ){
const KDChartCustomBox* box = customBox( boxID );
if( box )
return ( 0 > box->fontSize() );
}
return true;
}
/**
Specifies whether a relative size to be used for the default axis title text instead of the fixed size of the font.
Calling this function implicitely sets this axis's \c axisTitleFontUseRelSize flag to TRUE.
\param axisTitleFontRelSize the size to be used, this is interpreted as per mil value of the printable area size.
\sa setAxisTitle, setAxisTitleColor,setAxisTitleFont, setAxisTitleFontUseRelSize
\sa axisTitle, axisTitleColor, axisTitleFont, axisTitleFontUseRelSize, axisTitleFontRelSize
*/
void KDChartParams::setAxisTitleFontRelSize( uint n,
int axisTitleFontRelSize )
{
bool bDone = false;
uint boxID;
if( findFirstAxisCustomBoxID( n, boxID ) ){
KDChartCustomBox* box = (KDChartCustomBox*)customBox( boxID );
if( box ){
box->setFontSize( -axisTitleFontRelSize, true );
bDone = true;
}
}
if( !bDone )
insertDefaultAxisTitleBox( n,
false, TQString(),
false, TQColor(),
false, TQFont(),
true, true,
true, axisTitleFontRelSize );
emit changed();
}
/**
Returns the relative size of the default axis title text, should
be ignored if \c axisTitleFontUseRelSize returns false.
\return the axis title's relative font size.
\sa setAxisTitleFontRelSize
*/
int KDChartParams::axisTitleFontRelSize( uint n ) const
{
uint boxID;
if( findFirstAxisCustomBoxID( n, boxID ) ){
const KDChartCustomBox* box = customBox( boxID );
if( box ){
int i = box->fontSize();
return (0 > i) ? -i : i;
}
}
return 18;
}