00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include "qgsticksscalebarstyle.h"
00018 #include "qgscomposerscalebar.h"
00019 #include <QPainter>
00020
00021 QgsTicksScaleBarStyle::QgsTicksScaleBarStyle( const QgsComposerScaleBar* bar ): QgsScaleBarStyle( bar )
00022 {
00023 mTickPosition = TicksMiddle;
00024 }
00025
00026 QgsTicksScaleBarStyle::QgsTicksScaleBarStyle(): QgsScaleBarStyle( 0 )
00027 {
00028 mTickPosition = TicksMiddle;
00029 }
00030
00031 QgsTicksScaleBarStyle::~QgsTicksScaleBarStyle()
00032 {
00033
00034 }
00035
00036 QString QgsTicksScaleBarStyle::name() const
00037 {
00038 switch ( mTickPosition )
00039 {
00040 case TicksUp:
00041 return "Line Ticks Up";
00042 case TicksDown:
00043 return "Line Ticks Down";
00044 case TicksMiddle:
00045 return "Line Ticks Middle";
00046 }
00047 return "";
00048 }
00049
00050 void QgsTicksScaleBarStyle::draw( QPainter* p, double xOffset ) const
00051 {
00052 if ( !mScaleBar )
00053 {
00054 return;
00055 }
00056 double barTopPosition = mScaleBar->fontAscentMillimeters( mScaleBar->font() ) + mScaleBar->labelBarSpace() + mScaleBar->boxContentSpace();
00057 double middlePosition = barTopPosition + mScaleBar->height() / 2.0;
00058 double bottomPosition = barTopPosition + mScaleBar->height();
00059
00060 p->save();
00061 p->setPen( mScaleBar->pen() );
00062
00063 QList<QPair<double, double> > segmentInfo;
00064 mScaleBar->segmentPositions( segmentInfo );
00065
00066 QList<QPair<double, double> >::const_iterator segmentIt = segmentInfo.constBegin();
00067 for ( ; segmentIt != segmentInfo.constEnd(); ++segmentIt )
00068 {
00069 p->drawLine( segmentIt->first + xOffset, barTopPosition, segmentIt->first + xOffset, barTopPosition + mScaleBar->height() );
00070 switch ( mTickPosition )
00071 {
00072 case TicksDown:
00073 p->drawLine( xOffset + segmentIt->first, barTopPosition, xOffset + segmentIt->first + mScaleBar->segmentMillimeters(), barTopPosition );
00074 break;
00075 case TicksMiddle:
00076 p->drawLine( xOffset + segmentIt->first, middlePosition, xOffset + segmentIt->first + mScaleBar->segmentMillimeters(), middlePosition );
00077 break;
00078 case TicksUp:
00079 p->drawLine( xOffset + segmentIt->first, bottomPosition, xOffset + segmentIt->first + mScaleBar->segmentMillimeters(), bottomPosition );
00080 break;
00081 }
00082 }
00083
00084
00085 if ( !segmentInfo.isEmpty() )
00086 {
00087 double lastTickPositionX = segmentInfo.last().first + mScaleBar->segmentMillimeters();
00088 p->drawLine( lastTickPositionX + xOffset, barTopPosition, lastTickPositionX + xOffset, barTopPosition + mScaleBar->height() );
00089 }
00090
00091 p->restore();
00092
00093
00094 drawLabels( p );
00095 }
00096
00097