diff --git a/src/app/composer/qgscomposermapwidget.cpp b/src/app/composer/qgscomposermapwidget.cpp index 427263edbf21..9dc4a800b33d 100644 --- a/src/app/composer/qgscomposermapwidget.cpp +++ b/src/app/composer/qgscomposermapwidget.cpp @@ -102,7 +102,7 @@ QgsComposerMapWidget::QgsComposerMapWidget( QgsComposerMap* composerMap ): QgsCo mGridFrameFill2ColorButton->setShowNoColor( true ); //set initial state of frame style controls - toggleFrameControls( false ); + toggleFrameControls( false, false ); if ( composerMap ) { @@ -695,17 +695,17 @@ void QgsComposerMapWidget::blockAllSignals( bool b ) blockOverviewItemsSignals( b ); } -void QgsComposerMapWidget::toggleFrameControls( bool frameEnabled ) +void QgsComposerMapWidget::toggleFrameControls( bool frameEnabled, bool frameFillEnabled ) { //set status of frame controls mFrameWidthSpinBox->setEnabled( frameEnabled ); mGridFramePenSizeSpinBox->setEnabled( frameEnabled ); mGridFramePenColorButton->setEnabled( frameEnabled ); - mGridFrameFill1ColorButton->setEnabled( frameEnabled ); - mGridFrameFill2ColorButton->setEnabled( frameEnabled ); + mGridFrameFill1ColorButton->setEnabled( frameFillEnabled ); + mGridFrameFill2ColorButton->setEnabled( frameFillEnabled ); mFrameWidthLabel->setEnabled( frameEnabled ); mFramePenLabel->setEnabled( frameEnabled ); - mFrameFillLabel->setEnabled( frameEnabled ); + mFrameFillLabel->setEnabled( frameFillEnabled ); mCheckGridLeftSide->setEnabled( frameEnabled ); mCheckGridRightSide->setEnabled( frameEnabled ); mCheckGridTopSide->setEnabled( frameEnabled ); @@ -1209,15 +1209,28 @@ void QgsComposerMapWidget::setGridItems( const QgsComposerMapGrid* grid ) //grid frame mFrameWidthSpinBox->setValue( grid->gridFrameWidth() ); QgsComposerMap::GridFrameStyle gridFrameStyle = grid->gridFrameStyle(); - if ( gridFrameStyle == QgsComposerMap::Zebra ) + switch ( gridFrameStyle ) { - mFrameStyleComboBox->setCurrentIndex( 1 ); - toggleFrameControls( true ); - } - else //NoGridFrame - { - mFrameStyleComboBox->setCurrentIndex( 0 ); - toggleFrameControls( false ); + case QgsComposerMap::Zebra: + mFrameStyleComboBox->setCurrentIndex( 1 ); + toggleFrameControls( true, true ); + break; + case QgsComposerMap::InteriorTicks: + mFrameStyleComboBox->setCurrentIndex( 2 ); + toggleFrameControls( true, false ); + break; + case QgsComposerMap::ExteriorTicks: + mFrameStyleComboBox->setCurrentIndex( 3 ); + toggleFrameControls( true, false ); + break; + case QgsComposerMap::InteriorExteriorTicks: + mFrameStyleComboBox->setCurrentIndex( 4 ); + toggleFrameControls( true, false ); + break; + default: + mFrameStyleComboBox->setCurrentIndex( 0 ); + toggleFrameControls( false, false ); + break; } mCheckGridLeftSide->setChecked( grid->testGridFrameSideFlag( QgsComposerMapGrid::FrameLeft ) ); @@ -1557,12 +1570,27 @@ void QgsComposerMapWidget::on_mFrameStyleComboBox_currentIndexChanged( const QSt if ( text == tr( "Zebra" ) ) { grid->setGridFrameStyle( QgsComposerMap::Zebra ); - toggleFrameControls( true ); + toggleFrameControls( true, true ); + } + else if ( text == tr( "Interior ticks" ) ) + { + grid->setGridFrameStyle( QgsComposerMap::InteriorTicks ); + toggleFrameControls( true, false ); + } + else if ( text == tr( "Exterior ticks" ) ) + { + grid->setGridFrameStyle( QgsComposerMap::ExteriorTicks ); + toggleFrameControls( true, false ); + } + else if ( text == tr( "Interior and exterior ticks" ) ) + { + grid->setGridFrameStyle( QgsComposerMap::InteriorExteriorTicks ); + toggleFrameControls( true, false ); } else //no frame { grid->setGridFrameStyle( QgsComposerMap::NoGridFrame ); - toggleFrameControls( false ); + toggleFrameControls( false, false ); } mComposerMap->updateBoundingRect(); mComposerMap->update(); diff --git a/src/app/composer/qgscomposermapwidget.h b/src/app/composer/qgscomposermapwidget.h index ebc2544a8eb4..687b0ecc044e 100644 --- a/src/app/composer/qgscomposermapwidget.h +++ b/src/app/composer/qgscomposermapwidget.h @@ -179,7 +179,7 @@ class QgsComposerMapWidget: public QgsComposerItemBaseWidget, private Ui::QgsCom void refreshMapComboBox(); /**Enables/disables grid frame related controls*/ - void toggleFrameControls( bool frameEnabled ); + void toggleFrameControls( bool frameEnabled , bool frameFillEnabled ); /**Enables or disables the atlas margin and predefined scales radio depending on the atlas coverage layer type*/ void toggleAtlasScalingOptionsByLayerType(); diff --git a/src/core/composer/qgscomposermap.h b/src/core/composer/qgscomposermap.h index c16f2ad21355..e7a07914eb15 100644 --- a/src/core/composer/qgscomposermap.h +++ b/src/core/composer/qgscomposermap.h @@ -96,7 +96,10 @@ class CORE_EXPORT QgsComposerMap : public QgsComposerItem enum GridFrameStyle { NoGridFrame = 0, - Zebra // black/white pattern + Zebra, // black/white pattern + InteriorTicks, + ExteriorTicks, + InteriorExteriorTicks }; /**Enum for different frame borders*/ diff --git a/src/core/composer/qgscomposermapgrid.cpp b/src/core/composer/qgscomposermapgrid.cpp index 5e9cdac03c75..c74e6fb96e20 100644 --- a/src/core/composer/qgscomposermapgrid.cpp +++ b/src/core/composer/qgscomposermapgrid.cpp @@ -451,13 +451,6 @@ void QgsComposerMapGrid::drawGridNoTransform( QgsRenderContext &context, double QPointF intersectionPoint, crossEnd1, crossEnd2; for ( ; vIt != verticalLines.constEnd(); ++vIt ) { - //start mark - if ( mGridStyle == QgsComposerMap::Cross ) - { - crossEnd1 = QgsSymbolLayerV2Utils::pointOnLineWithDistance( vIt->second.p1(), vIt->second.p2(), mCrossLength ); - drawGridLine( QLineF( vIt->second.p1() * dotsPerMM, crossEnd1 * dotsPerMM ), context ); - } - //test for intersection with every horizontal line hIt = horizontalLines.constBegin(); for ( ; hIt != horizontalLines.constEnd(); ++hIt ) @@ -480,12 +473,6 @@ void QgsComposerMapGrid::drawGridNoTransform( QgsRenderContext &context, double } } } - //end mark - if ( mGridStyle == QgsComposerMap::Cross ) - { - QPointF crossEnd2 = QgsSymbolLayerV2Utils::pointOnLineWithDistance( vIt->second.p2(), vIt->second.p1(), mCrossLength ); - drawGridLine( QLineF( vIt->second.p2() * dotsPerMM, crossEnd2 * dotsPerMM ), context ); - } } if ( mGridStyle == QgsComposerMap::Markers ) { @@ -497,10 +484,6 @@ void QgsComposerMapGrid::drawGridNoTransform( QgsRenderContext &context, double hIt = horizontalLines.constBegin(); for ( ; hIt != horizontalLines.constEnd(); ++hIt ) { - //start mark - crossEnd1 = QgsSymbolLayerV2Utils::pointOnLineWithDistance( hIt->second.p1(), hIt->second.p2(), mCrossLength ); - drawGridLine( QLineF( hIt->second.p1() * dotsPerMM, crossEnd1 * dotsPerMM ), context ); - vIt = verticalLines.constBegin(); for ( ; vIt != verticalLines.constEnd(); ++vIt ) { @@ -515,9 +498,6 @@ void QgsComposerMapGrid::drawGridNoTransform( QgsRenderContext &context, double drawGridLine( QLineF( crossEnd1 * dotsPerMM, crossEnd2 * dotsPerMM ), context ); } } - //end mark - crossEnd1 = QgsSymbolLayerV2Utils::pointOnLineWithDistance( hIt->second.p2(), hIt->second.p1(), mCrossLength ); - drawGridLine( QLineF( hIt->second.p2() * dotsPerMM, crossEnd1 * dotsPerMM ), context ); } } } @@ -592,6 +572,30 @@ void QgsComposerMapGrid::drawGridFrameBorder( QPainter* p, const QMap< double, d return; } + switch ( mGridFrameStyle ) + { + case QgsComposerMap::Zebra: + drawGridFrameZebraBorder( p, borderPos, border ); + break; + case QgsComposerMap::InteriorTicks: + case QgsComposerMap::ExteriorTicks: + case QgsComposerMap::InteriorExteriorTicks: + drawGridFrameTicks( p, borderPos, border ); + break; + + case QgsComposerMap::NoGridFrame: + break; + } + +} + +void QgsComposerMapGrid::drawGridFrameZebraBorder( QPainter* p, const QMap< double, double >& borderPos, QgsComposerMap::Border border ) const +{ + if ( !mComposerMap ) + { + return; + } + QMap< double, double > pos = borderPos; double currentCoord = 0; @@ -658,6 +662,72 @@ void QgsComposerMapGrid::drawGridFrameBorder( QPainter* p, const QMap< double, d } } +void QgsComposerMapGrid::drawGridFrameTicks( QPainter* p, const QMap< double, double >& borderPos, QgsComposerMap::Border border ) const +{ + if ( !mComposerMap ) + { + return; + } + + double x = 0; + double y = 0; + double width = 0; + double height = 0; + + //set pen to current frame pen + QPen framePen = QPen( mGridFramePenColor ); + framePen.setWidthF( mGridFramePenThickness ); + framePen.setCapStyle( Qt::FlatCap ); + p->setBrush( Qt::NoBrush ); + p->setPen( framePen ); + + QMap< double, double >::const_iterator posIt = borderPos.constBegin(); + for ( ; posIt != borderPos.constEnd(); ++posIt ) + { + if ( border == QgsComposerMap::Left || border == QgsComposerMap::Right ) + { + y = posIt.key(); + height = 0; + if ( mGridFrameStyle == QgsComposerMap::InteriorTicks ) + { + width = mGridFrameWidth; + x = ( border == QgsComposerMap::Left ) ? 0 : mComposerMap->rect().width() - mGridFrameWidth; + } + else if ( mGridFrameStyle == QgsComposerMap::ExteriorTicks ) + { + width = mGridFrameWidth; + x = ( border == QgsComposerMap::Left ) ? - mGridFrameWidth : mComposerMap->rect().width(); + } + else if ( mGridFrameStyle == QgsComposerMap::InteriorExteriorTicks ) + { + width = mGridFrameWidth * 2; + x = ( border == QgsComposerMap::Left ) ? - mGridFrameWidth : mComposerMap->rect().width() - mGridFrameWidth; + } + } + else //top or bottom + { + x = posIt.key(); + width = 0; + if ( mGridFrameStyle == QgsComposerMap::InteriorTicks ) + { + height = mGridFrameWidth; + y = ( border == QgsComposerMap::Top ) ? 0 : mComposerMap->rect().height() - mGridFrameWidth; + } + else if ( mGridFrameStyle == QgsComposerMap::ExteriorTicks ) + { + height = mGridFrameWidth; + y = ( border == QgsComposerMap::Top ) ? -mGridFrameWidth : mComposerMap->rect().height(); + } + else if ( mGridFrameStyle == QgsComposerMap::InteriorExteriorTicks ) + { + height = mGridFrameWidth * 2; + y = ( border == QgsComposerMap::Top ) ? -mGridFrameWidth : mComposerMap->rect().height() - mGridFrameWidth; + } + } + p->drawLine( QLineF( x, y, x + width, y + height ) ); + } +} + void QgsComposerMapGrid::drawCoordinateAnnotations( QPainter* p, const QList< QPair< double, QLineF > >& hLines, const QList< QPair< double, QLineF > >& vLines ) const { if ( !p ) @@ -665,7 +735,6 @@ void QgsComposerMapGrid::drawCoordinateAnnotations( QPainter* p, const QList< QP return; } - QString currentAnnotationString; QList< QPair< double, QLineF > >::const_iterator it = hLines.constBegin(); for ( ; it != hLines.constEnd(); ++it ) @@ -698,7 +767,15 @@ void QgsComposerMapGrid::drawCoordinateAnnotation( QPainter* p, const QPointF& p double ypos = pos.y(); int rotation = 0; - double gridFrameDistance = ( mGridFrameStyle == QgsComposerMap::NoGridFrame ) ? 0 : mGridFrameWidth + ( mGridFramePenThickness / 2.0 ); + double gridFrameDistance = 0; + if ( mGridFrameStyle != QgsComposerMap::NoGridFrame ) + { + gridFrameDistance = mGridFrameWidth; + } + if ( mGridFrameStyle == QgsComposerMap::Zebra ) + { + gridFrameDistance += ( mGridFramePenThickness / 2.0 ); + } if ( frameBorder == QgsComposerMap::Left ) { @@ -709,20 +786,28 @@ void QgsComposerMapGrid::drawCoordinateAnnotation( QPainter* p, const QPointF& p if ( mLeftGridAnnotationPosition == QgsComposerMap::InsideMapFrame ) { + if ( mGridFrameStyle == QgsComposerMap::Zebra || mGridFrameStyle == QgsComposerMap::ExteriorTicks ) + { + gridFrameDistance = 0; + } if ( mLeftGridAnnotationDirection == QgsComposerMap::Vertical || mLeftGridAnnotationDirection == QgsComposerMap::BoundaryDirection ) { - xpos += textHeight + mAnnotationFrameDistance; + xpos += textHeight + mAnnotationFrameDistance + gridFrameDistance; ypos += textWidth / 2.0; rotation = 270; } else { - xpos += mAnnotationFrameDistance; + xpos += mAnnotationFrameDistance + gridFrameDistance; ypos += textHeight / 2.0; } } else if ( mLeftGridAnnotationPosition == QgsComposerMap::OutsideMapFrame ) //Outside map frame { + if ( mGridFrameStyle == QgsComposerMap::InteriorTicks ) + { + gridFrameDistance = 0; + } if ( mLeftGridAnnotationDirection == QgsComposerMap::Vertical || mLeftGridAnnotationDirection == QgsComposerMap::BoundaryDirection ) { xpos -= ( mAnnotationFrameDistance + gridFrameDistance ); @@ -750,20 +835,28 @@ void QgsComposerMapGrid::drawCoordinateAnnotation( QPainter* p, const QPointF& p if ( mRightGridAnnotationPosition == QgsComposerMap::InsideMapFrame ) { + if ( mGridFrameStyle == QgsComposerMap::Zebra || mGridFrameStyle == QgsComposerMap::ExteriorTicks ) + { + gridFrameDistance = 0; + } if ( mRightGridAnnotationDirection == QgsComposerMap::Vertical || mRightGridAnnotationDirection == QgsComposerMap::BoundaryDirection ) { - xpos -= mAnnotationFrameDistance; + xpos -= mAnnotationFrameDistance + gridFrameDistance; ypos += textWidth / 2.0; rotation = 270; } else { - xpos -= textWidth + mAnnotationFrameDistance; + xpos -= textWidth + mAnnotationFrameDistance + gridFrameDistance; ypos += textHeight / 2.0; } } else if ( mRightGridAnnotationPosition == QgsComposerMap::OutsideMapFrame )//OutsideMapFrame { + if ( mGridFrameStyle == QgsComposerMap::InteriorTicks ) + { + gridFrameDistance = 0; + } if ( mRightGridAnnotationDirection == QgsComposerMap::Vertical || mRightGridAnnotationDirection == QgsComposerMap::BoundaryDirection ) { xpos += ( textHeight + mAnnotationFrameDistance + gridFrameDistance ); @@ -790,20 +883,28 @@ void QgsComposerMapGrid::drawCoordinateAnnotation( QPainter* p, const QPointF& p if ( mBottomGridAnnotationPosition == QgsComposerMap::InsideMapFrame ) { + if ( mGridFrameStyle == QgsComposerMap::Zebra || mGridFrameStyle == QgsComposerMap::ExteriorTicks ) + { + gridFrameDistance = 0; + } if ( mBottomGridAnnotationDirection == QgsComposerMap::Horizontal || mBottomGridAnnotationDirection == QgsComposerMap::BoundaryDirection ) { - ypos -= mAnnotationFrameDistance; + ypos -= mAnnotationFrameDistance + gridFrameDistance; xpos -= textWidth / 2.0; } else //Vertical { xpos += textHeight / 2.0; - ypos -= mAnnotationFrameDistance; + ypos -= mAnnotationFrameDistance + gridFrameDistance; rotation = 270; } } else if ( mBottomGridAnnotationPosition == QgsComposerMap::OutsideMapFrame ) //OutsideMapFrame { + if ( mGridFrameStyle == QgsComposerMap::InteriorTicks ) + { + gridFrameDistance = 0; + } if ( mBottomGridAnnotationDirection == QgsComposerMap::Horizontal || mBottomGridAnnotationDirection == QgsComposerMap::BoundaryDirection ) { ypos += ( mAnnotationFrameDistance + textHeight + gridFrameDistance ); @@ -830,20 +931,28 @@ void QgsComposerMapGrid::drawCoordinateAnnotation( QPainter* p, const QPointF& p if ( mTopGridAnnotationPosition == QgsComposerMap::InsideMapFrame ) { + if ( mGridFrameStyle == QgsComposerMap::Zebra || mGridFrameStyle == QgsComposerMap::ExteriorTicks ) + { + gridFrameDistance = 0; + } if ( mTopGridAnnotationDirection == QgsComposerMap::Horizontal || mTopGridAnnotationDirection == QgsComposerMap::BoundaryDirection ) { xpos -= textWidth / 2.0; - ypos += textHeight + mAnnotationFrameDistance; + ypos += textHeight + mAnnotationFrameDistance + gridFrameDistance; } else //Vertical { xpos += textHeight / 2.0; - ypos += textWidth + mAnnotationFrameDistance; + ypos += textWidth + mAnnotationFrameDistance + gridFrameDistance; rotation = 270; } } else if ( mTopGridAnnotationPosition == QgsComposerMap::OutsideMapFrame ) //OutsideMapFrame { + if ( mGridFrameStyle == QgsComposerMap::InteriorTicks ) + { + gridFrameDistance = 0; + } if ( mTopGridAnnotationDirection == QgsComposerMap::Horizontal || mTopGridAnnotationDirection == QgsComposerMap::BoundaryDirection ) { xpos -= textWidth / 2.0; diff --git a/src/core/composer/qgscomposermapgrid.h b/src/core/composer/qgscomposermapgrid.h index b35cfea8ef61..2aea27fb520b 100644 --- a/src/core/composer/qgscomposermapgrid.h +++ b/src/core/composer/qgscomposermapgrid.h @@ -332,6 +332,8 @@ class CORE_EXPORT QgsComposerMapGrid void createDefaultGridLineSymbol(); void createDefaultGridMarkerSymbol(); void drawGridMarker( const QPointF &point, QgsRenderContext &context ) const; + void drawGridFrameZebraBorder( QPainter *p, const QMap &borderPos, QgsComposerMap::Border border ) const; + void drawGridFrameTicks( QPainter *p, const QMap &borderPos, QgsComposerMap::Border border ) const; }; #endif // QGSCOMPOSERMAPGRID_H diff --git a/src/ui/qgscomposermapwidgetbase.ui b/src/ui/qgscomposermapwidgetbase.ui index 8d66ad5f2b03..be2468b178f7 100644 --- a/src/ui/qgscomposermapwidgetbase.ui +++ b/src/ui/qgscomposermapwidgetbase.ui @@ -54,7 +54,7 @@ 0 - -1047 + -571 444 2231 @@ -822,6 +822,21 @@ Zebra + + + Interior ticks + + + + + Exterior ticks + + + + + Interior and exterior ticks + + diff --git a/tests/src/core/testqgscomposermapgrid.cpp b/tests/src/core/testqgscomposermapgrid.cpp index 47392b6337b3..1b9369e897fe 100644 --- a/tests/src/core/testqgscomposermapgrid.cpp +++ b/tests/src/core/testqgscomposermapgrid.cpp @@ -40,6 +40,12 @@ class TestQgsComposerMapGrid: public QObject void frameOnly(); //test if grid "frame/annotation" mode works void zebraStyle(); //test zebra map border style void zebraStyleSides(); //test zebra border on certain sides + void interiorTicks(); //test interior tick mode + void interiorTicksAnnotated(); //test interior tick mode with annotations + void exteriorTicks(); //test exterior tick mode + void exteriorTicksAnnotated(); //test exterior tick mode with annotations + void interiorExteriorTicks(); //test interior & exterior tick mode + void interiorExteriorTicksAnnotated(); //test interior & exterior tick mode with annotations private: QgsComposition* mComposition; @@ -234,7 +240,166 @@ void TestQgsComposerMapGrid::zebraStyleSides() mComposerMap->mapGrids()[0]->setGridFrameSideFlag( QgsComposerMapGrid::FrameBottom, true ); mComposerMap->setGridFrameStyle( QgsComposerMap::NoGridFrame ); + +} + +void TestQgsComposerMapGrid::interiorTicks() +{ + mComposerMap->setNewExtent( QgsRectangle( 781662.375, 3339523.125, 793062.375, 3345223.125 ) ); + + mComposerMap->setGridFrameStyle( QgsComposerMap::InteriorTicks ); + mComposerMap->setGridFrameWidth( 10 ); + mComposerMap->setGridFramePenSize( 1 ); + mComposerMap->setGridFramePenColor( Qt::black ); + mComposerMap->setGridEnabled( true ); + mComposerMap->setGridStyle( QgsComposerMap::FrameAnnotationsOnly ); + + QgsCompositionChecker checker( "composermap_interiorticks", mComposition ); + bool testResult = checker.testComposition( mReport, 0, 100 ); + QVERIFY( testResult ); + + mComposerMap->setGridFrameStyle( QgsComposerMap::NoGridFrame ); } +void TestQgsComposerMapGrid::interiorTicksAnnotated() +{ + mComposerMap->setNewExtent( QgsRectangle( 781662.375, 3339523.125, 793062.375, 3345223.125 ) ); + + mComposerMap->setGridFrameStyle( QgsComposerMap::InteriorTicks ); + mComposerMap->setGridFrameWidth( 10 ); + mComposerMap->setGridFramePenSize( 1 ); + mComposerMap->setGridFramePenColor( Qt::black ); + mComposerMap->setGridEnabled( true ); + mComposerMap->setGridStyle( QgsComposerMap::FrameAnnotationsOnly ); + mComposerMap->setShowGridAnnotation( true ); + mComposerMap->setAnnotationFontColor( Qt::black ); + mComposerMap->setGridAnnotationPosition( QgsComposerMap::InsideMapFrame, QgsComposerMap::Left ); + mComposerMap->setGridAnnotationPosition( QgsComposerMap::InsideMapFrame, QgsComposerMap::Right ); + mComposerMap->setGridAnnotationPosition( QgsComposerMap::InsideMapFrame, QgsComposerMap::Top ); + mComposerMap->setGridAnnotationPosition( QgsComposerMap::InsideMapFrame, QgsComposerMap::Bottom ); + + QgsCompositionChecker checker( "composermap_interiorticks_annotated", mComposition ); + bool testResult = checker.testComposition( mReport, 0, 100 ); + QVERIFY( testResult ); + + mComposerMap->setGridAnnotationPosition( QgsComposerMap::OutsideMapFrame, QgsComposerMap::Left ); + mComposerMap->setGridAnnotationPosition( QgsComposerMap::OutsideMapFrame, QgsComposerMap::Right ); + mComposerMap->setGridAnnotationPosition( QgsComposerMap::OutsideMapFrame, QgsComposerMap::Top ); + mComposerMap->setGridAnnotationPosition( QgsComposerMap::OutsideMapFrame, QgsComposerMap::Bottom ); + + QgsCompositionChecker checker2( "composermap_interiorticks_annotated2", mComposition ); + bool testResult2 = checker2.testComposition( mReport, 0, 100 ); + QVERIFY( testResult2 ); + + mComposerMap->setGridFrameStyle( QgsComposerMap::NoGridFrame ); + mComposerMap->setShowGridAnnotation( false ); +} + +void TestQgsComposerMapGrid::exteriorTicks() +{ + mComposerMap->setNewExtent( QgsRectangle( 781662.375, 3339523.125, 793062.375, 3345223.125 ) ); + + mComposerMap->setGridFrameStyle( QgsComposerMap::ExteriorTicks ); + mComposerMap->setGridFrameWidth( 10 ); + mComposerMap->setGridFramePenSize( 1 ); + mComposerMap->setGridFramePenColor( Qt::black ); + mComposerMap->setGridEnabled( true ); + mComposerMap->setGridStyle( QgsComposerMap::FrameAnnotationsOnly ); + + QgsCompositionChecker checker( "composermap_exteriorticks", mComposition ); + bool testResult = checker.testComposition( mReport, 0, 100 ); + QVERIFY( testResult ); + + mComposerMap->setGridFrameStyle( QgsComposerMap::NoGridFrame ); +} + +void TestQgsComposerMapGrid::exteriorTicksAnnotated() +{ + mComposerMap->setNewExtent( QgsRectangle( 781662.375, 3339523.125, 793062.375, 3345223.125 ) ); + + mComposerMap->setGridFrameStyle( QgsComposerMap::ExteriorTicks ); + mComposerMap->setGridFrameWidth( 10 ); + mComposerMap->setGridFramePenSize( 1 ); + mComposerMap->setGridFramePenColor( Qt::black ); + mComposerMap->setGridEnabled( true ); + mComposerMap->setGridStyle( QgsComposerMap::FrameAnnotationsOnly ); + mComposerMap->setShowGridAnnotation( true ); + mComposerMap->setAnnotationFontColor( Qt::black ); + mComposerMap->setGridAnnotationPosition( QgsComposerMap::InsideMapFrame, QgsComposerMap::Left ); + mComposerMap->setGridAnnotationPosition( QgsComposerMap::InsideMapFrame, QgsComposerMap::Right ); + mComposerMap->setGridAnnotationPosition( QgsComposerMap::InsideMapFrame, QgsComposerMap::Top ); + mComposerMap->setGridAnnotationPosition( QgsComposerMap::InsideMapFrame, QgsComposerMap::Bottom ); + + QgsCompositionChecker checker( "composermap_exteriorticks_annotated", mComposition ); + bool testResult = checker.testComposition( mReport, 0, 100 ); + QVERIFY( testResult ); + + mComposerMap->setGridAnnotationPosition( QgsComposerMap::OutsideMapFrame, QgsComposerMap::Left ); + mComposerMap->setGridAnnotationPosition( QgsComposerMap::OutsideMapFrame, QgsComposerMap::Right ); + mComposerMap->setGridAnnotationPosition( QgsComposerMap::OutsideMapFrame, QgsComposerMap::Top ); + mComposerMap->setGridAnnotationPosition( QgsComposerMap::OutsideMapFrame, QgsComposerMap::Bottom ); + + QgsCompositionChecker checker2( "composermap_exteriorticks_annotated2", mComposition ); + bool testResult2 = checker2.testComposition( mReport, 0, 100 ); + QVERIFY( testResult2 ); + + mComposerMap->setGridFrameStyle( QgsComposerMap::NoGridFrame ); + mComposerMap->setShowGridAnnotation( false ); +} + +void TestQgsComposerMapGrid::interiorExteriorTicks() +{ + mComposerMap->setNewExtent( QgsRectangle( 781662.375, 3339523.125, 793062.375, 3345223.125 ) ); + + mComposerMap->setGridFrameStyle( QgsComposerMap::InteriorExteriorTicks ); + mComposerMap->setGridFrameWidth( 10 ); + mComposerMap->setGridFramePenSize( 1 ); + mComposerMap->setGridFramePenColor( Qt::black ); + mComposerMap->setGridEnabled( true ); + mComposerMap->setGridStyle( QgsComposerMap::FrameAnnotationsOnly ); + + QgsCompositionChecker checker( "composermap_interiorexteriorticks", mComposition ); + bool testResult = checker.testComposition( mReport, 0, 100 ); + QVERIFY( testResult ); + + mComposerMap->setGridFrameStyle( QgsComposerMap::NoGridFrame ); +} + +void TestQgsComposerMapGrid::interiorExteriorTicksAnnotated() +{ + mComposerMap->setNewExtent( QgsRectangle( 781662.375, 3339523.125, 793062.375, 3345223.125 ) ); + + mComposerMap->setGridFrameStyle( QgsComposerMap::InteriorExteriorTicks ); + mComposerMap->setGridFrameWidth( 10 ); + mComposerMap->setGridFramePenSize( 1 ); + mComposerMap->setGridFramePenColor( Qt::black ); + mComposerMap->setGridEnabled( true ); + mComposerMap->setGridStyle( QgsComposerMap::FrameAnnotationsOnly ); + mComposerMap->setShowGridAnnotation( true ); + mComposerMap->setAnnotationFontColor( Qt::black ); + mComposerMap->setGridAnnotationPosition( QgsComposerMap::InsideMapFrame, QgsComposerMap::Left ); + mComposerMap->setGridAnnotationPosition( QgsComposerMap::InsideMapFrame, QgsComposerMap::Right ); + mComposerMap->setGridAnnotationPosition( QgsComposerMap::InsideMapFrame, QgsComposerMap::Top ); + mComposerMap->setGridAnnotationPosition( QgsComposerMap::InsideMapFrame, QgsComposerMap::Bottom ); + + QgsCompositionChecker checker( "composermap_interiorexteriorticks_annotated", mComposition ); + bool testResult = checker.testComposition( mReport, 0, 100 ); + QVERIFY( testResult ); + + mComposerMap->setGridAnnotationPosition( QgsComposerMap::OutsideMapFrame, QgsComposerMap::Left ); + mComposerMap->setGridAnnotationPosition( QgsComposerMap::OutsideMapFrame, QgsComposerMap::Right ); + mComposerMap->setGridAnnotationPosition( QgsComposerMap::OutsideMapFrame, QgsComposerMap::Top ); + mComposerMap->setGridAnnotationPosition( QgsComposerMap::OutsideMapFrame, QgsComposerMap::Bottom ); + + QgsCompositionChecker checker2( "composermap_interiorexteriorticks_annotated2", mComposition ); + bool testResult2 = checker2.testComposition( mReport, 0, 100 ); + QVERIFY( testResult2 ); + + mComposerMap->setGridFrameStyle( QgsComposerMap::NoGridFrame ); + mComposerMap->setShowGridAnnotation( false ); +} + + + QTEST_MAIN( TestQgsComposerMapGrid ) #include "moc_testqgscomposermapgrid.cxx" diff --git a/tests/testdata/control_images/expected_composermap_crossgrid/expected_composermap_crossgrid.png b/tests/testdata/control_images/expected_composermap_crossgrid/expected_composermap_crossgrid.png index 0a711b7cacde..a1a797f43d6f 100644 Binary files a/tests/testdata/control_images/expected_composermap_crossgrid/expected_composermap_crossgrid.png and b/tests/testdata/control_images/expected_composermap_crossgrid/expected_composermap_crossgrid.png differ diff --git a/tests/testdata/control_images/expected_composermap_exteriorticks/expected_composermap_exteriorticks.png b/tests/testdata/control_images/expected_composermap_exteriorticks/expected_composermap_exteriorticks.png new file mode 100644 index 000000000000..98735f5e806d Binary files /dev/null and b/tests/testdata/control_images/expected_composermap_exteriorticks/expected_composermap_exteriorticks.png differ diff --git a/tests/testdata/control_images/expected_composermap_exteriorticks_annotated/expected_composermap_exteriorticks_annotated.png b/tests/testdata/control_images/expected_composermap_exteriorticks_annotated/expected_composermap_exteriorticks_annotated.png new file mode 100644 index 000000000000..cbeb1dcd5033 Binary files /dev/null and b/tests/testdata/control_images/expected_composermap_exteriorticks_annotated/expected_composermap_exteriorticks_annotated.png differ diff --git a/tests/testdata/control_images/expected_composermap_exteriorticks_annotated2/expected_composermap_exteriorticks_annotated2.png b/tests/testdata/control_images/expected_composermap_exteriorticks_annotated2/expected_composermap_exteriorticks_annotated2.png new file mode 100644 index 000000000000..d1a4824b03e8 Binary files /dev/null and b/tests/testdata/control_images/expected_composermap_exteriorticks_annotated2/expected_composermap_exteriorticks_annotated2.png differ diff --git a/tests/testdata/control_images/expected_composermap_interiorexteriorticks/expected_composermap_interiorexteriorticks.png b/tests/testdata/control_images/expected_composermap_interiorexteriorticks/expected_composermap_interiorexteriorticks.png new file mode 100644 index 000000000000..4fa7704300e0 Binary files /dev/null and b/tests/testdata/control_images/expected_composermap_interiorexteriorticks/expected_composermap_interiorexteriorticks.png differ diff --git a/tests/testdata/control_images/expected_composermap_interiorexteriorticks_annotated/expected_composermap_interiorexteriorticks_annotated.png b/tests/testdata/control_images/expected_composermap_interiorexteriorticks_annotated/expected_composermap_interiorexteriorticks_annotated.png new file mode 100644 index 000000000000..3f80f48cedd3 Binary files /dev/null and b/tests/testdata/control_images/expected_composermap_interiorexteriorticks_annotated/expected_composermap_interiorexteriorticks_annotated.png differ diff --git a/tests/testdata/control_images/expected_composermap_interiorexteriorticks_annotated2/expected_composermap_interiorexteriorticks_annotated2.png b/tests/testdata/control_images/expected_composermap_interiorexteriorticks_annotated2/expected_composermap_interiorexteriorticks_annotated2.png new file mode 100644 index 000000000000..440207c4e018 Binary files /dev/null and b/tests/testdata/control_images/expected_composermap_interiorexteriorticks_annotated2/expected_composermap_interiorexteriorticks_annotated2.png differ diff --git a/tests/testdata/control_images/expected_composermap_interiorticks/expected_composermap_interiorticks.png b/tests/testdata/control_images/expected_composermap_interiorticks/expected_composermap_interiorticks.png new file mode 100644 index 000000000000..8d05727093f1 Binary files /dev/null and b/tests/testdata/control_images/expected_composermap_interiorticks/expected_composermap_interiorticks.png differ diff --git a/tests/testdata/control_images/expected_composermap_interiorticks_annotated/expected_composermap_interiorticks_annotated.png b/tests/testdata/control_images/expected_composermap_interiorticks_annotated/expected_composermap_interiorticks_annotated.png new file mode 100644 index 000000000000..28645d1ea50c Binary files /dev/null and b/tests/testdata/control_images/expected_composermap_interiorticks_annotated/expected_composermap_interiorticks_annotated.png differ diff --git a/tests/testdata/control_images/expected_composermap_interiorticks_annotated2/expected_composermap_interiorticks_annotated2.png b/tests/testdata/control_images/expected_composermap_interiorticks_annotated2/expected_composermap_interiorticks_annotated2.png new file mode 100644 index 000000000000..a1c3e49a61fe Binary files /dev/null and b/tests/testdata/control_images/expected_composermap_interiorticks_annotated2/expected_composermap_interiorticks_annotated2.png differ