KDChartRulerAttributes.cpp

Go to the documentation of this file.
00001 /****************************************************************************
00002  ** Copyright (C) 2007 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 #include "KDChartRulerAttributes.h"
00027 
00028 #include <limits>
00029 
00030 #include <QPen>
00031 #include <QDebug>
00032 
00033 #include <KDABLibFakes>
00034 
00035 #define d d_func()
00036 
00037 using namespace KDChart;
00038 
00039 class RulerAttributes::Private
00040 {
00041     friend class RulerAttributes;
00042 public:
00043     Private();
00044 private:
00045     QPen tickMarkPen;
00046     QPen majorTickMarkPen;
00047     QPen minorTickMarkPen;
00048     
00049     bool majorTickMarkPenIsSet;
00050     bool minorTickMarkPenIsSet;
00051 
00052     bool showMajorTickMarks;
00053     bool showMinorTickMarks;
00054     
00055     RulerAttributes::TickMarkerPensMap customTickMarkPens;
00056 };
00057 
00058 RulerAttributes::Private::Private()
00059     : tickMarkPen( QColor( 0x00, 0x00, 0x00 ) )
00060     , majorTickMarkPen( QColor( 0x00, 0x00, 0x00 ) )
00061     , minorTickMarkPen( QColor( 0x00, 0x00, 0x00 ) )
00062 {
00063         tickMarkPen.setCapStyle( Qt::FlatCap );
00064         majorTickMarkPen.setCapStyle( Qt::FlatCap );
00065         minorTickMarkPen.setCapStyle( Qt::FlatCap );
00066         
00067         majorTickMarkPenIsSet = false;
00068         minorTickMarkPenIsSet = false;
00069 
00070         showMajorTickMarks = true;
00071         showMinorTickMarks = true;
00072 }
00073 
00074 
00075 RulerAttributes::RulerAttributes()
00076     : _d( new Private() )
00077 {
00078     // this bloc left empty intentionally
00079 }
00080 
00081 RulerAttributes::RulerAttributes( const RulerAttributes& r )
00082     : _d( new Private( *r.d ) )
00083 {
00084 }
00085 
00086 void RulerAttributes::setTickMarkPen( const QPen& pen )
00087 {
00088         d->tickMarkPen = pen;
00089 }
00090 
00091 QPen RulerAttributes::tickMarkPen() const
00092 {
00093         return d->tickMarkPen;
00094 }
00095 
00096 void RulerAttributes::setMajorTickMarkPen( const QPen& pen )
00097 {
00098         d->majorTickMarkPen = pen;
00099         d->majorTickMarkPenIsSet = true;
00100 }
00101 
00102 bool RulerAttributes::majorTickMarkPenIsSet() const
00103 {
00104     return d->majorTickMarkPenIsSet;
00105 }
00106 
00107 QPen RulerAttributes::majorTickMarkPen() const
00108 {
00109         return d->majorTickMarkPenIsSet ? d->majorTickMarkPen : d->tickMarkPen;
00110 }
00111 
00112 void RulerAttributes::setMinorTickMarkPen( const QPen& pen )
00113 {
00114         d->minorTickMarkPen = pen;
00115         d->minorTickMarkPenIsSet = true;
00116 }
00117 
00118 bool RulerAttributes::minorTickMarkPenIsSet() const
00119 {
00120     return d->minorTickMarkPenIsSet;
00121 }
00122 
00123 QPen RulerAttributes::minorTickMarkPen() const
00124 {
00125         return d->minorTickMarkPenIsSet ? d->minorTickMarkPen : d->tickMarkPen;
00126 }
00127 
00128 void RulerAttributes::setTickMarkPen( qreal value, const QPen& pen )
00129 {
00130         if ( !d->customTickMarkPens.contains( value ) )
00131                 d->customTickMarkPens.insert( value, pen );
00132 }
00133 
00134 QPen RulerAttributes::tickMarkPen( qreal value ) const
00135 {
00136         QMapIterator<qreal, QPen> it( d->customTickMarkPens );
00137         while( it.hasNext() ) {
00138                 it.next();
00139                 if ( qAbs( value - it.key() ) < std::numeric_limits< float >::epsilon() )
00140                         return it.value();
00141         }
00142         return d->tickMarkPen;
00143 }
00144 
00145 RulerAttributes::TickMarkerPensMap RulerAttributes::tickMarkPens() const
00146 {
00147     return d->customTickMarkPens;
00148 }
00149 
00150 bool RulerAttributes::hasTickMarkPenAt( qreal value ) const
00151 {
00152         QMapIterator<qreal, QPen> it( d->customTickMarkPens );
00153         while( it.hasNext() ) {
00154                 it.next();
00155                 if ( qAbs( value - it.key() ) < std::numeric_limits< float >::epsilon() )
00156                         return true;
00157         }
00158         return false;
00159 }
00160 
00161 void RulerAttributes::setTickMarkColor( const QColor& color )
00162 {
00163         d->tickMarkPen.setColor( color );
00164 }
00165 
00166 QColor RulerAttributes::tickMarkColor() const
00167 {
00168         return d->tickMarkPen.color();
00169 }
00170 
00171 void RulerAttributes::setShowMajorTickMarks( bool show )
00172 {
00173     d->showMajorTickMarks = show;
00174 }
00175 
00176 bool RulerAttributes::showMajorTickMarks() const
00177 {
00178     return d->showMajorTickMarks;
00179 }
00180 
00181 void RulerAttributes::setShowMinorTickMarks( bool show )
00182 {
00183     d->showMinorTickMarks = show;
00184 }
00185 
00186 bool RulerAttributes::showMinorTickMarks() const
00187 {
00188     return d->showMinorTickMarks;
00189 }
00190 
00191 RulerAttributes & RulerAttributes::operator=( const RulerAttributes& r )
00192 {
00193     if( this == &r )
00194         return *this;
00195 
00196     *d = *r.d;
00197 
00198     return *this;
00199 }
00200 
00201 RulerAttributes::~RulerAttributes()
00202 {
00203     delete _d; _d = 0;
00204 }
00205 
00206 
00207 bool RulerAttributes::operator == ( const RulerAttributes& r ) const
00208 {
00209     bool isEqual =
00210         tickMarkPen()      == r.tickMarkPen() &&
00211         majorTickMarkPen() == r.majorTickMarkPen() &&
00212         minorTickMarkPen() == r.minorTickMarkPen();
00213     if( isEqual ) {
00214         QMapIterator<qreal, QPen> it( d->customTickMarkPens );
00215         while( it.hasNext() ) {
00216             it.next();
00217             if ( it.value() != r.tickMarkPen(it.key()) )
00218                 return false;
00219         }
00220     }
00221     return isEqual;
00222 }
00223 
00224 #if !defined( QT_NO_DEBUG_STREAM )
00225 QDebug operator << ( QDebug dbg, const KDChart::RulerAttributes& a )
00226 {
00227     dbg << "KDChart::RulerAttributes("
00228             << "tickMarkPen=" << a.tickMarkPen()
00229             << "majorTickMarkPen=" << a.majorTickMarkPen()
00230             << "minorTickMarkPen=" << a.minorTickMarkPen();
00231     const RulerAttributes::TickMarkerPensMap pens( a.tickMarkPens() );
00232     QMapIterator<qreal, QPen> it( pens );
00233     while( it.hasNext() ) {
00234         it.next();
00235         dbg << "customTickMarkPen=(" << it.value() << " : " << it.key() << ")";
00236     }
00237     dbg << ")";
00238     return dbg;
00239 }
00240 #endif /* QT_NO_DEBUG_STREAM */
00241 

Generated on Thu Mar 4 23:19:12 2010 for KD Chart 2 by  doxygen 1.5.4