Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members | Related Pages

KDChartDataValueAttributes.cpp

Go to the documentation of this file.
00001 /****************************************************************************
00002  ** Copyright (C) 2006 Klarälvdalens Datakonsult AB.  All rights reserved.
00003  **
00004  ** This file is part of the KD Chart library.
00005  **
00006  ** This file may be distributed and/or modified under the terms of the
00007  ** GNU General Public License version 2 as published by the Free Software
00008  ** Foundation and appearing in the file LICENSE.GPL included in the
00009  ** packaging of this file.
00010  **
00011  ** Licensees holding valid commercial KD Chart licenses may use this file in
00012  ** accordance with the KD Chart Commercial License Agreement provided with
00013  ** the Software.
00014  **
00015  ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
00016  ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
00017  **
00018  ** See http://www.kdab.net/kdchart for
00019  **   information about KDChart Commercial License Agreements.
00020  **
00021  ** Contact info@kdab.net if any conditions of this
00022  ** licensing are not clear to you.
00023  **
00024  **********************************************************************/
00025 
00026 
00027 #include <QVariant>
00028 #include <QDebug>
00029 #include "KDChartDataValueAttributes.h"
00030 #include "KDChartRelativePosition.h"
00031 #include "KDChartPosition.h"
00032 #include <KDChartTextAttributes.h>
00033 #include <KDChartFrameAttributes.h>
00034 #include <KDChartBackgroundAttributes.h>
00035 #include <KDChartMarkerAttributes.h>
00036 
00037 #include <KDABLibFakes>
00038 
00039 // FIXME till
00040 #define KDCHART_DATA_VALUE_AUTO_DIGITS 4
00041 
00042 
00043 #define d d_func()
00044 
00045 using namespace KDChart;
00046 
00047 class DataValueAttributes::Private
00048 {
00049     friend class DataValueAttributes;
00050 public:
00051     Private();
00052 private:
00053     bool visible;
00054     TextAttributes textAttributes;
00055     FrameAttributes frameAttributes;
00056     BackgroundAttributes backgroundAttributes;
00057     MarkerAttributes markerAttributes;
00058     int decimalDigits;
00059     QString prefix;
00060     QString suffix;
00061     QString dataLabel;
00062     int powerOfTenDivisor;
00063     bool showInfinite;
00064     RelativePosition negativeRelPos;
00065     RelativePosition positiveRelPos;
00066     bool showRepetitiveDataLabels;
00067 };
00068 
00069 DataValueAttributes::Private::Private() :
00070     visible( false ),
00071     decimalDigits( KDCHART_DATA_VALUE_AUTO_DIGITS ),
00072     powerOfTenDivisor( 0 ),
00073     showInfinite( true )
00074 {
00075     Measure me( 25.0,
00076                 KDChartEnums::MeasureCalculationModeAuto,
00077                 KDChartEnums::MeasureOrientationAuto );
00078     textAttributes.setFontSize( me );
00079     me.setValue( 8.0 );
00080     me.setCalculationMode( KDChartEnums::MeasureCalculationModeAbsolute );
00081     textAttributes.setMinimalFontSize( me );
00082     textAttributes.setRotation( -45 );
00083 
00084     // we set the Position to unknown: so the diagrams can take their own decisions
00085     positiveRelPos.setReferencePosition( Position::Unknown ); // a bar diagram will use: Position::NorthWest
00086     negativeRelPos.setReferencePosition( Position::Unknown ); // a bar diagram will use: Position::SouthEast
00087 
00088     positiveRelPos.setAlignment( Qt::AlignLeft  | Qt::AlignBottom );
00089     negativeRelPos.setAlignment( Qt::AlignRight | Qt::AlignTop );
00090 
00091     showRepetitiveDataLabels = false;
00092 
00093     // By default use 0.25 of the font height as horizontal distance between
00094     // the data and their respective data value texts,
00095     // and use 0.33 as the vertical distance.
00096     Measure m(   250.0, KDChartEnums::MeasureCalculationModeAuto );
00097                           positiveRelPos.setHorizontalPadding( m );
00098     m.setValue( -333.3 ); positiveRelPos.setVerticalPadding( m );
00099 
00100     m.setValue( -250.0 ); negativeRelPos.setHorizontalPadding( m );
00101     m.setValue(  100.0 ); negativeRelPos.setVerticalPadding( m );
00102     // note: we use a smaller default vertical gap, because the fonts have top leading anyway
00103 }
00104 
00105 
00106 DataValueAttributes::DataValueAttributes()
00107     : _d( new Private() )
00108 {
00109 }
00110 
00111 DataValueAttributes::DataValueAttributes( const DataValueAttributes& r )
00112     : _d( new Private( *r.d ) )
00113 {
00114 }
00115 
00116 DataValueAttributes & DataValueAttributes::operator=( const DataValueAttributes& r )
00117 {
00118     if( this == &r )
00119         return *this;
00120 
00121     *d = *r.d;
00122 
00123     return *this;
00124 }
00125 
00126 DataValueAttributes::~DataValueAttributes()
00127 {
00128     delete _d; _d = 0;
00129 }
00130 
00131 
00132 bool DataValueAttributes::operator==( const DataValueAttributes& r ) const
00133 {
00134     /*
00135     qDebug() << "DataValueAttributes::operator== finds"
00136             << "b" << (isVisible() == r.isVisible())
00137             << "c" << (textAttributes() == r.textAttributes())
00138             << "d" << (frameAttributes() == r.frameAttributes())
00139             << "e" << (backgroundAttributes() == r.backgroundAttributes())
00140             << "f" << (markerAttributes() == r.markerAttributes())
00141             << "g" << (decimalDigits() == r.decimalDigits())
00142             << "h" << (prefix() == r.prefix())
00143             << "i" << (suffix() == r.suffix())
00144             << "j" << (dataLabel() == r.dataLabel())
00145             << "k" << (powerOfTenDivisor() == r.powerOfTenDivisor())
00146             << "l" << (showInfinite() == r.showInfinite())
00147             << "m" << (negativePosition() == r.negativePosition())
00148             << "n" << (positivePosition() == r.positivePosition())
00149             << "o" << (showRepetitiveDataLabels() == r.showRepetitiveDataLabels());
00150     */
00151     return ( isVisible() == r.isVisible() &&
00152             textAttributes() == r.textAttributes() &&
00153             frameAttributes() == r.frameAttributes() &&
00154             backgroundAttributes() == r.backgroundAttributes() &&
00155             markerAttributes() == r.markerAttributes() &&
00156             decimalDigits() == r.decimalDigits() &&
00157             prefix() == r.prefix() &&
00158             suffix() == r.suffix() &&
00159             dataLabel() == r.dataLabel() &&
00160             powerOfTenDivisor() == r.powerOfTenDivisor() &&
00161             showInfinite() == r.showInfinite() &&
00162             negativePosition() == r.negativePosition() &&
00163             positivePosition() == r.positivePosition() &&
00164             showRepetitiveDataLabels() == r.showRepetitiveDataLabels() );
00165 }
00166 
00167 /*static*/
00168 const DataValueAttributes& DataValueAttributes::defaultAttributes()
00169 {
00170     static const DataValueAttributes theDefaultDataValueAttributes;
00171     return theDefaultDataValueAttributes;
00172 }
00173 
00174 /*static*/
00175 const QVariant& DataValueAttributes::defaultAttributesAsVariant()
00176 {
00177     static const QVariant theDefaultDataValueAttributesVariant = qVariantFromValue(defaultAttributes());
00178     return theDefaultDataValueAttributesVariant;
00179 }
00180 
00181 
00182 void DataValueAttributes::setVisible( bool visible )
00183 {
00184     d->visible = visible;
00185 }
00186 
00187 bool DataValueAttributes::isVisible() const
00188 {
00189     return d->visible;
00190 }
00191 
00192 void DataValueAttributes::setTextAttributes( const TextAttributes &a )
00193 {
00194     d->textAttributes = a;
00195 }
00196 
00197 TextAttributes DataValueAttributes::textAttributes() const
00198 {
00199     return d->textAttributes;
00200 }
00201 
00202 void DataValueAttributes::setFrameAttributes( const FrameAttributes &a )
00203 {
00204     d->frameAttributes = a;
00205 }
00206 
00207 FrameAttributes DataValueAttributes::frameAttributes() const
00208 {
00209     return d->frameAttributes;
00210 }
00211 
00212 void DataValueAttributes::setBackgroundAttributes( const BackgroundAttributes &a )
00213 {
00214     d->backgroundAttributes = a;
00215 }
00216 
00217 BackgroundAttributes DataValueAttributes::backgroundAttributes() const
00218 {
00219     return d->backgroundAttributes;
00220 }
00221 
00222 void DataValueAttributes::setMarkerAttributes( const MarkerAttributes &a )
00223 {
00224     d->markerAttributes = a;
00225 }
00226 
00227 MarkerAttributes DataValueAttributes::markerAttributes() const
00228 {
00229     return d->markerAttributes;
00230 }
00231 
00232 
00233 void DataValueAttributes::setDecimalDigits( int digits )
00234 {
00235     d->decimalDigits = digits;
00236 }
00237 
00238 int DataValueAttributes::decimalDigits() const
00239 {
00240     return d->decimalDigits;
00241 }
00242 
00243 void DataValueAttributes::setPrefix( const QString prefixString )
00244 {
00245     d->prefix = prefixString;
00246 }
00247 
00248 QString DataValueAttributes::prefix() const
00249 {
00250     return d->prefix;
00251 }
00252 
00253 void DataValueAttributes::setSuffix( const QString suffixString )
00254 {
00255     d->suffix  = suffixString;
00256 }
00257 
00258 QString DataValueAttributes::suffix() const
00259 {
00260     return d->suffix;
00261 }
00262 
00263 void DataValueAttributes::setDataLabel( const QString label )
00264 {
00265     d->dataLabel =  label;
00266 }
00267 
00268 QString DataValueAttributes::dataLabel() const
00269 {
00270     return d->dataLabel;
00271 }
00272 
00273 bool DataValueAttributes::showRepetitiveDataLabels() const
00274 {
00275     return d->showRepetitiveDataLabels;
00276 }
00277 
00278 void DataValueAttributes::setShowRepetitiveDataLabels( bool showRepetitiveDataLabels )
00279 {
00280     d->showRepetitiveDataLabels = showRepetitiveDataLabels;
00281 }
00282 
00283 void DataValueAttributes::setPowerOfTenDivisor( int powerOfTenDivisor )
00284 {
00285     d->powerOfTenDivisor = powerOfTenDivisor;
00286 }
00287 
00288 int DataValueAttributes::powerOfTenDivisor() const
00289 {
00290     return d->powerOfTenDivisor;
00291 }
00292 
00293 void DataValueAttributes::setShowInfinite( bool infinite )
00294 {
00295     d->showInfinite = infinite;
00296 }
00297 
00298 bool DataValueAttributes::showInfinite() const
00299 {
00300     return d->showInfinite;
00301 }
00302 
00303 void DataValueAttributes::setNegativePosition( const RelativePosition& relPosition )
00304 {
00305     d->negativeRelPos = relPosition;
00306 }
00307 
00308 const RelativePosition DataValueAttributes::negativePosition() const
00309 {
00310     return d->negativeRelPos;
00311 }
00312 
00313 void DataValueAttributes::setPositivePosition( const RelativePosition& relPosition )
00314 {
00315     d->positiveRelPos = relPosition;
00316 }
00317 
00318 const RelativePosition DataValueAttributes::positivePosition() const
00319 {
00320     return d->positiveRelPos;
00321 }
00322 
00323 #if !defined(QT_NO_DEBUG_STREAM)
00324 QDebug operator<<(QDebug dbg, const KDChart::DataValueAttributes& val )
00325 {
00326     dbg << "RelativePosition DataValueAttributes("
00327         << "visible="<<val.isVisible()
00328         << "textattributes="<<val.textAttributes()
00329         << "frameattributes="<<val.frameAttributes()
00330         << "backgroundattributes="<<val.backgroundAttributes()
00331         << "decimaldigits="<<val.decimalDigits()
00332         << "poweroftendivisor="<<val.powerOfTenDivisor()
00333         << "showinfinite="<<val.showInfinite()
00334         << "negativerelativeposition="<<val.negativePosition()
00335         << "positiverelativeposition="<<val.positivePosition()
00336         << "showRepetitiveDataLabels="<<val.showRepetitiveDataLabels()
00337         <<")";
00338     return dbg;
00339 }
00340 #endif /* QT_NO_DEBUG_STREAM */

Generated on Thu May 10 11:06:25 2007 for KD Chart 2 by doxygen 1.3.6