KD Chart 2  [rev.2.5]
KDChartRulerAttributes.cpp
Go to the documentation of this file.
00001 /****************************************************************************
00002 ** Copyright (C) 2001-2012 Klaralvdalens Datakonsult AB.  All rights reserved.
00003 **
00004 ** This file is part of the KD Chart library.
00005 **
00006 ** Licensees holding valid commercial KD Chart licenses may use this file in
00007 ** accordance with the KD Chart Commercial License Agreement provided with
00008 ** the Software.
00009 **
00010 **
00011 ** This file may be distributed and/or modified under the terms of the
00012 ** GNU General Public License version 2 and version 3 as published by the
00013 ** Free Software Foundation and appearing in the file LICENSE.GPL.txt included.
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 ** Contact info@kdab.com if any conditions of this licensing are not
00019 ** clear to you.
00020 **
00021 **********************************************************************/
00022 
00023 #include "KDChartRulerAttributes.h"
00024 
00025 #include <limits>
00026 
00027 #include <QPen>
00028 #include <QDebug>
00029 
00030 #include <KDABLibFakes>
00031 
00032 #define d d_func()
00033 
00034 using namespace KDChart;
00035 
00036 class RulerAttributes::Private
00037 {
00038     friend class RulerAttributes;
00039 public:
00040     Private();
00041 private:
00042     QPen tickMarkPen;
00043     QPen majorTickMarkPen;
00044     QPen minorTickMarkPen;
00045     
00046     bool majorTickMarkPenIsSet;
00047     bool minorTickMarkPenIsSet;
00048 
00049     bool showMajorTickMarks;
00050     bool showMinorTickMarks;
00051 
00052     bool showRulerLine;
00053     
00054     int labelMargin;
00055     int majorTickLength;
00056     int minorTickLength;
00057     bool majorTickLengthIsSet;
00058     bool minorTickLengthIsSet;
00059 
00060     bool showZeroLabel;
00061 
00062     RulerAttributes::TickMarkerPensMap customTickMarkPens;
00063 };
00064 
00065 RulerAttributes::Private::Private()
00066     : tickMarkPen( QColor( 0x00, 0x00, 0x00 ) )
00067     , majorTickMarkPen( QColor( 0x00, 0x00, 0x00 ) )
00068     , minorTickMarkPen( QColor( 0x00, 0x00, 0x00 ) )
00069     , showRulerLine( false )
00070     , showZeroLabel( false )
00071 {
00072     tickMarkPen.setCapStyle( Qt::FlatCap );
00073     majorTickMarkPen.setCapStyle( Qt::FlatCap );
00074     minorTickMarkPen.setCapStyle( Qt::FlatCap );
00075 
00076     majorTickMarkPenIsSet = false;
00077     minorTickMarkPenIsSet = false;
00078 
00079     showMajorTickMarks = true;
00080     showMinorTickMarks = true;
00081 
00082     majorTickLength = 3;
00083     minorTickLength = 2;
00084     majorTickLengthIsSet = false;
00085     minorTickLengthIsSet = false;
00086     
00087     labelMargin = -1;
00088 }
00089 
00090 RulerAttributes::RulerAttributes()
00091     : _d( new Private() )
00092 {
00093     // this bloc left empty intentionally
00094 }
00095 
00096 RulerAttributes::RulerAttributes( const RulerAttributes& r )
00097     : _d( new Private( *r.d ) )
00098 {
00099 }
00100 
00101 void RulerAttributes::setTickMarkPen( const QPen& pen )
00102 {
00103         d->tickMarkPen = pen;
00104 }
00105 
00106 QPen RulerAttributes::tickMarkPen() const
00107 {
00108         return d->tickMarkPen;
00109 }
00110 
00111 void RulerAttributes::setMajorTickMarkPen( const QPen& pen )
00112 {
00113         d->majorTickMarkPen = pen;
00114         d->majorTickMarkPenIsSet = true;
00115 }
00116 
00117 bool RulerAttributes::majorTickMarkPenIsSet() const
00118 {
00119     return d->majorTickMarkPenIsSet;
00120 }
00121 
00122 QPen RulerAttributes::majorTickMarkPen() const
00123 {
00124         return d->majorTickMarkPenIsSet ? d->majorTickMarkPen : d->tickMarkPen;
00125 }
00126 
00127 void RulerAttributes::setMinorTickMarkPen( const QPen& pen )
00128 {
00129         d->minorTickMarkPen = pen;
00130         d->minorTickMarkPenIsSet = true;
00131 }
00132 
00133 bool RulerAttributes::minorTickMarkPenIsSet() const
00134 {
00135     return d->minorTickMarkPenIsSet;
00136 }
00137 
00138 QPen RulerAttributes::minorTickMarkPen() const
00139 {
00140         return d->minorTickMarkPenIsSet ? d->minorTickMarkPen : d->tickMarkPen;
00141 }
00142 
00143 void RulerAttributes::setTickMarkPen( qreal value, const QPen& pen )
00144 {
00145         if ( !d->customTickMarkPens.contains( value ) )
00146                 d->customTickMarkPens.insert( value, pen );
00147 }
00148 
00149 QPen RulerAttributes::tickMarkPen( qreal value ) const
00150 {
00151         QMapIterator<qreal, QPen> it( d->customTickMarkPens );
00152         while( it.hasNext() ) {
00153                 it.next();
00154                 if ( qAbs( value - it.key() ) < std::numeric_limits< float >::epsilon() )
00155                         return it.value();
00156         }
00157         return d->tickMarkPen;
00158 }
00159 
00160 RulerAttributes::TickMarkerPensMap RulerAttributes::tickMarkPens() const
00161 {
00162     return d->customTickMarkPens;
00163 }
00164 
00165 bool RulerAttributes::hasTickMarkPenAt( qreal value ) const
00166 {
00167         QMapIterator<qreal, QPen> it( d->customTickMarkPens );
00168         while( it.hasNext() ) {
00169                 it.next();
00170                 if ( qAbs( value - it.key() ) < std::numeric_limits< float >::epsilon() )
00171                         return true;
00172         }
00173         return false;
00174 }
00175 
00176 void RulerAttributes::setTickMarkColor( const QColor& color )
00177 {
00178         d->tickMarkPen.setColor( color );
00179 }
00180 
00181 QColor RulerAttributes::tickMarkColor() const
00182 {
00183         return d->tickMarkPen.color();
00184 }
00185 
00186 void RulerAttributes::setShowMajorTickMarks( bool show )
00187 {
00188     d->showMajorTickMarks = show;
00189 }
00190 
00191 bool RulerAttributes::showMajorTickMarks() const
00192 {
00193     return d->showMajorTickMarks;
00194 }
00195 
00196 void RulerAttributes::setShowMinorTickMarks( bool show )
00197 {
00198     d->showMinorTickMarks = show;
00199 }
00200 
00201 bool RulerAttributes::showMinorTickMarks() const
00202 {
00203     return d->showMinorTickMarks;
00204 }
00205 
00206 void RulerAttributes::setLabelMargin(int margin)
00207 {
00208     d->labelMargin = margin;
00209 }
00210 
00211 int RulerAttributes::labelMargin() const
00212 {
00213     return d->labelMargin;
00214 }
00215 
00216 void RulerAttributes::setMajorTickMarkLength( int length )
00217 {
00218     d->majorTickLength = length;
00219     d->majorTickLengthIsSet = true;
00220 }
00221 
00222 int RulerAttributes::majorTickMarkLength() const
00223 {
00224     return d->majorTickLength;
00225 }
00226 
00227 bool RulerAttributes::majorTickMarkLengthIsSet() const
00228 {
00229     return d->majorTickLengthIsSet;
00230 }
00231 
00232 void RulerAttributes::setMinorTickMarkLength( int length )
00233 {
00234     d->minorTickLength = length;
00235     d->minorTickLengthIsSet = true;
00236 }
00237 
00238 int RulerAttributes::minorTickMarkLength() const
00239 {
00240     return d->minorTickLength;
00241 }
00242 
00243 bool RulerAttributes::minorTickMarkLengthIsSet() const
00244 {
00245     return d->minorTickLengthIsSet;
00246 }
00247     
00248 void RulerAttributes::setShowZeroLabel( bool show )
00249 {
00250     d->showZeroLabel = show;
00251 }
00252 
00253 bool RulerAttributes::showZeroLabel() const
00254 {
00255     return d->showZeroLabel;
00256 }
00257 
00258 RulerAttributes & RulerAttributes::operator=( const RulerAttributes& r )
00259 {
00260     if( this == &r )
00261         return *this;
00262 
00263     *d = *r.d;
00264 
00265     return *this;
00266 }
00267 
00268 RulerAttributes::~RulerAttributes()
00269 {
00270     delete _d; _d = 0;
00271 }
00272 
00273 
00274 bool RulerAttributes::operator == ( const RulerAttributes& r ) const
00275 {
00276     bool isEqual =
00277         tickMarkPen()      == r.tickMarkPen() &&
00278         majorTickMarkPen() == r.majorTickMarkPen() &&
00279         minorTickMarkPen() == r.minorTickMarkPen();
00280     if( isEqual ) {
00281         QMapIterator<qreal, QPen> it( d->customTickMarkPens );
00282         while( it.hasNext() ) {
00283             it.next();
00284             if ( it.value() != r.tickMarkPen(it.key()) )
00285                 return false;
00286         }
00287     }
00288     return isEqual;
00289 }
00290 
00291 void RulerAttributes::setShowRulerLine( bool show )
00292 {
00293     d->showRulerLine = show;
00294 }
00295 
00296 bool RulerAttributes::showRulerLine() const
00297 {
00298     return d->showRulerLine;
00299 }
00300 
00301 #if !defined( QT_NO_DEBUG_STREAM )
00302 QDebug operator << ( QDebug dbg, const KDChart::RulerAttributes& a )
00303 {
00304     dbg << "KDChart::RulerAttributes("
00305             << "tickMarkPen=" << a.tickMarkPen()
00306             << "majorTickMarkPen=" << a.majorTickMarkPen()
00307             << "minorTickMarkPen=" << a.minorTickMarkPen();
00308     const RulerAttributes::TickMarkerPensMap pens( a.tickMarkPens() );
00309     QMapIterator<qreal, QPen> it( pens );
00310     while( it.hasNext() ) {
00311         it.next();
00312         dbg << "customTickMarkPen=(" << it.value() << " : " << it.key() << ")";
00313     }
00314     dbg << ")";
00315     return dbg;
00316 }
00317 #endif /* QT_NO_DEBUG_STREAM */
00318 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Defines

Klarälvdalens Datakonsult AB (KDAB)
Qt-related services and products
http://www.kdab.com/
http://www.kdab.com/products/kd-chart/