KD Chart 2
[rev.2.5]
|
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