KD Chart 2 [rev.2.4]

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     
00056     RulerAttributes::TickMarkerPensMap customTickMarkPens;
00057 };
00058 
00059 RulerAttributes::Private::Private()
00060     : tickMarkPen( QColor( 0x00, 0x00, 0x00 ) )
00061     , majorTickMarkPen( QColor( 0x00, 0x00, 0x00 ) )
00062     , minorTickMarkPen( QColor( 0x00, 0x00, 0x00 ) )
00063     , showRulerLine( false )
00064 {
00065     tickMarkPen.setCapStyle( Qt::FlatCap );
00066     majorTickMarkPen.setCapStyle( Qt::FlatCap );
00067     minorTickMarkPen.setCapStyle( Qt::FlatCap );
00068 
00069     majorTickMarkPenIsSet = false;
00070     minorTickMarkPenIsSet = false;
00071 
00072     showMajorTickMarks = true;
00073     showMinorTickMarks = true;
00074     
00075     labelMargin = -1;
00076 }
00077 
00078 RulerAttributes::RulerAttributes()
00079     : _d( new Private() )
00080 {
00081     // this bloc left empty intentionally
00082 }
00083 
00084 RulerAttributes::RulerAttributes( const RulerAttributes& r )
00085     : _d( new Private( *r.d ) )
00086 {
00087 }
00088 
00089 void RulerAttributes::setTickMarkPen( const QPen& pen )
00090 {
00091         d->tickMarkPen = pen;
00092 }
00093 
00094 QPen RulerAttributes::tickMarkPen() const
00095 {
00096         return d->tickMarkPen;
00097 }
00098 
00099 void RulerAttributes::setMajorTickMarkPen( const QPen& pen )
00100 {
00101         d->majorTickMarkPen = pen;
00102         d->majorTickMarkPenIsSet = true;
00103 }
00104 
00105 bool RulerAttributes::majorTickMarkPenIsSet() const
00106 {
00107     return d->majorTickMarkPenIsSet;
00108 }
00109 
00110 QPen RulerAttributes::majorTickMarkPen() const
00111 {
00112         return d->majorTickMarkPenIsSet ? d->majorTickMarkPen : d->tickMarkPen;
00113 }
00114 
00115 void RulerAttributes::setMinorTickMarkPen( const QPen& pen )
00116 {
00117         d->minorTickMarkPen = pen;
00118         d->minorTickMarkPenIsSet = true;
00119 }
00120 
00121 bool RulerAttributes::minorTickMarkPenIsSet() const
00122 {
00123     return d->minorTickMarkPenIsSet;
00124 }
00125 
00126 QPen RulerAttributes::minorTickMarkPen() const
00127 {
00128         return d->minorTickMarkPenIsSet ? d->minorTickMarkPen : d->tickMarkPen;
00129 }
00130 
00131 void RulerAttributes::setTickMarkPen( qreal value, const QPen& pen )
00132 {
00133         if ( !d->customTickMarkPens.contains( value ) )
00134                 d->customTickMarkPens.insert( value, pen );
00135 }
00136 
00137 QPen RulerAttributes::tickMarkPen( qreal value ) const
00138 {
00139         QMapIterator<qreal, QPen> it( d->customTickMarkPens );
00140         while( it.hasNext() ) {
00141                 it.next();
00142                 if ( qAbs( value - it.key() ) < std::numeric_limits< float >::epsilon() )
00143                         return it.value();
00144         }
00145         return d->tickMarkPen;
00146 }
00147 
00148 RulerAttributes::TickMarkerPensMap RulerAttributes::tickMarkPens() const
00149 {
00150     return d->customTickMarkPens;
00151 }
00152 
00153 bool RulerAttributes::hasTickMarkPenAt( qreal value ) const
00154 {
00155         QMapIterator<qreal, QPen> it( d->customTickMarkPens );
00156         while( it.hasNext() ) {
00157                 it.next();
00158                 if ( qAbs( value - it.key() ) < std::numeric_limits< float >::epsilon() )
00159                         return true;
00160         }
00161         return false;
00162 }
00163 
00164 void RulerAttributes::setTickMarkColor( const QColor& color )
00165 {
00166         d->tickMarkPen.setColor( color );
00167 }
00168 
00169 QColor RulerAttributes::tickMarkColor() const
00170 {
00171         return d->tickMarkPen.color();
00172 }
00173 
00174 void RulerAttributes::setShowMajorTickMarks( bool show )
00175 {
00176     d->showMajorTickMarks = show;
00177 }
00178 
00179 bool RulerAttributes::showMajorTickMarks() const
00180 {
00181     return d->showMajorTickMarks;
00182 }
00183 
00184 void RulerAttributes::setShowMinorTickMarks( bool show )
00185 {
00186     d->showMinorTickMarks = show;
00187 }
00188 
00189 bool RulerAttributes::showMinorTickMarks() const
00190 {
00191     return d->showMinorTickMarks;
00192 }
00193 
00194 void RulerAttributes::setLabelMargin(int margin)
00195 {
00196     d->labelMargin = margin;
00197 }
00198 
00199 int RulerAttributes::labelMargin() const
00200 {
00201     return d->labelMargin;
00202 }
00203     
00204 RulerAttributes & RulerAttributes::operator=( const RulerAttributes& r )
00205 {
00206     if( this == &r )
00207         return *this;
00208 
00209     *d = *r.d;
00210 
00211     return *this;
00212 }
00213 
00214 RulerAttributes::~RulerAttributes()
00215 {
00216     delete _d; _d = 0;
00217 }
00218 
00219 
00220 bool RulerAttributes::operator == ( const RulerAttributes& r ) const
00221 {
00222     bool isEqual =
00223         tickMarkPen()      == r.tickMarkPen() &&
00224         majorTickMarkPen() == r.majorTickMarkPen() &&
00225         minorTickMarkPen() == r.minorTickMarkPen();
00226     if( isEqual ) {
00227         QMapIterator<qreal, QPen> it( d->customTickMarkPens );
00228         while( it.hasNext() ) {
00229             it.next();
00230             if ( it.value() != r.tickMarkPen(it.key()) )
00231                 return false;
00232         }
00233     }
00234     return isEqual;
00235 }
00236 
00237 void RulerAttributes::setShowRulerLine( bool show )
00238 {
00239     d->showRulerLine = show;
00240 }
00241 
00242 bool RulerAttributes::showRulerLine() const
00243 {
00244     return d->showRulerLine;
00245 }
00246 
00247 #if !defined( QT_NO_DEBUG_STREAM )
00248 QDebug operator << ( QDebug dbg, const KDChart::RulerAttributes& a )
00249 {
00250     dbg << "KDChart::RulerAttributes("
00251             << "tickMarkPen=" << a.tickMarkPen()
00252             << "majorTickMarkPen=" << a.majorTickMarkPen()
00253             << "minorTickMarkPen=" << a.minorTickMarkPen();
00254     const RulerAttributes::TickMarkerPensMap pens( a.tickMarkPens() );
00255     QMapIterator<qreal, QPen> it( pens );
00256     while( it.hasNext() ) {
00257         it.next();
00258         dbg << "customTickMarkPen=(" << it.value() << " : " << it.key() << ")";
00259     }
00260     dbg << ")";
00261     return dbg;
00262 }
00263 #endif /* QT_NO_DEBUG_STREAM */
00264 
 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/