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