1 /***************************************************************************
2 testqgslayoutmapgrid.cpp
3 ----------------------
4 begin : October 2017
5 copyright : (C) 2017 by Nyall Dawson
6 email : nyall dot dawson at gmail dot com
7 ***************************************************************************/
8
9 /***************************************************************************
10 * *
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License as published by *
13 * the Free Software Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
15 * *
16 ***************************************************************************/
17
18 #include "qgsapplication.h"
19 #include "qgslayout.h"
20 #include "qgsmultirenderchecker.h"
21 #include "qgslayoutitemmap.h"
22 #include "qgslayoutitemmapgrid.h"
23 #include "qgsmarkersymbollayer.h"
24 #include "qgsfontutils.h"
25 #include "qgsproject.h"
26 #include <QObject>
27 #include "qgstest.h"
28
29 class TestQgsLayoutMapGrid : public QObject
30 {
31 Q_OBJECT
32
33 public:
34
35 private slots:
36 void initTestCase();// will be called before the first testfunction is executed.
37 void cleanupTestCase();// will be called after the last testfunction was executed.
38 void init();// will be called before each testfunction is executed.
39 void cleanup();// will be called after every testfunction.
40
41 void grid(); //test if grid and grid annotation works
42 void reprojected(); //test if reprojected grid works
43 void crossGrid(); //test if grid "cross" mode works
44 void markerGrid(); //test if grid "marker" mode works
45 void frameOnly(); //test if grid "frame/annotation" mode works
46 void zebraStyle(); //test zebra map border style
47 void zebraStyleSides(); //test zebra border on certain sides
48 void zebraStyleMargin(); //test zebra map border style
49 void zebraStyleNautical(); //test zebra map border style
50 void frameDivisions(); //test filtering frame divisions
51 void annotationFilter(); //test filtering annotations
52 void interiorTicks(); //test interior tick mode
53 void interiorTicksMargin(); //test interior tick mode
54 void interiorTicksAnnotated(); //test interior tick mode with annotations
55 void exteriorTicks(); //test exterior tick mode
56 void exteriorTicksMargin(); //test exterior tick mode
57 void exteriorTicksAnnotated(); //test exterior tick mode with annotations
58 void interiorExteriorTicks(); //test interior & exterior tick mode
59 void interiorExteriorTicksMargin(); //test interior & exterior tick mode
60 void interiorExteriorTicksAnnotated(); //test interior & exterior tick mode with annotations
61 void lineBorder(); //test line border frame mode
62 void lineBorderMargin(); //test line border frame mode
63 void lineBorderNautical(); //test line border frame mode
64 void lineBorderAnnotated(); //test line border frame with annotations
65 void annotationFormats(); //various tests for annotation formats
66 void descendingAnnotations(); //test descending annotation direction
67
68 private:
69 QString mReport;
70 };
71
initTestCase()72 void TestQgsLayoutMapGrid::initTestCase()
73 {
74 QgsApplication::init();
75 QgsApplication::initQgis();
76
77 QgsFontUtils::loadStandardTestFonts( QStringList() << QStringLiteral( "Bold" ) );
78
79 mReport = QStringLiteral( "<h1>Composer Map Grid Tests</h1>\n" );
80 }
81
cleanupTestCase()82 void TestQgsLayoutMapGrid::cleanupTestCase()
83 {
84 QString myReportFile = QDir::tempPath() + "/qgistest.html";
85 QFile myFile( myReportFile );
86 if ( myFile.open( QIODevice::WriteOnly | QIODevice::Append ) )
87 {
88 QTextStream myQTextStream( &myFile );
89 myQTextStream << mReport;
90 myFile.close();
91 }
92
93 QgsApplication::exitQgis();
94 }
95
init()96 void TestQgsLayoutMapGrid::init()
97 {
98 }
99
cleanup()100 void TestQgsLayoutMapGrid::cleanup()
101 {
102 }
103
grid()104 void TestQgsLayoutMapGrid::grid()
105 {
106 QgsCoordinateReferenceSystem crs = QgsCoordinateReferenceSystem( QStringLiteral( "EPSG:32633" ) );
107 QgsProject::instance()->setCrs( crs );
108 QgsLayout l( QgsProject::instance() );
109 l.initializeDefaults();
110
111 QgsLayoutItemMap *map = new QgsLayoutItemMap( &l );
112 map->attemptSetSceneRect( QRectF( 20, 20, 200, 100 ) );
113 map->setFrameEnabled( true );
114 map->setBackgroundColor( QColor( 150, 100, 100 ) );
115
116 QgsTextFormat format = QgsTextFormat::fromQFont( QgsFontUtils::getStandardTestFont( QStringLiteral( "Bold" ) ) );
117 format.setColor( QColor( 255, 0, 0 ) );
118 format.setOpacity( 150.0 / 255.0 );
119 map->grid()->setAnnotationTextFormat( format );
120 map->grid()->setAnnotationPrecision( 0 );
121 map->grid()->setIntervalX( 2000 );
122 map->grid()->setIntervalY( 2000 );
123 map->grid()->setGridLineWidth( 0.5 );
124 map->grid()->setGridLineColor( QColor( 0, 0, 0 ) );
125 map->updateBoundingRect();
126 l.addLayoutItem( map );
127
128 map->setExtent( QgsRectangle( 781662.375, 3339523.125, 793062.375, 3345223.125 ) );
129 map->grid()->setEnabled( true );
130
131 map->grid()->setAnnotationEnabled( true );
132 map->grid()->setGridLineColor( QColor( 0, 255, 0 ) );
133 map->grid()->setAnnotationDisplay( QgsLayoutItemMapGrid::HideAll, QgsLayoutItemMapGrid::Left );
134 map->grid()->setAnnotationPosition( QgsLayoutItemMapGrid::OutsideMapFrame, QgsLayoutItemMapGrid::Right );
135 map->grid()->setAnnotationDisplay( QgsLayoutItemMapGrid::HideAll, QgsLayoutItemMapGrid::Top );
136 map->grid()->setAnnotationPosition( QgsLayoutItemMapGrid::OutsideMapFrame, QgsLayoutItemMapGrid::Bottom );
137 map->grid()->setAnnotationDirection( QgsLayoutItemMapGrid::Horizontal, QgsLayoutItemMapGrid::Right );
138 map->grid()->setAnnotationDirection( QgsLayoutItemMapGrid::Horizontal, QgsLayoutItemMapGrid::Bottom );
139 map->grid()->setBlendMode( QPainter::CompositionMode_Overlay );
140 map->updateBoundingRect();
141 QgsLayoutChecker checker( QStringLiteral( "composermap_grid" ), &l );
142 checker.setControlPathPrefix( QStringLiteral( "composer_mapgrid" ) );
143
144 bool testResult = checker.testLayout( mReport, 0, 0 );
145 map->grid()->setEnabled( false );
146 map->grid()->setAnnotationEnabled( false );
147 QVERIFY( testResult );
148 }
149
reprojected()150 void TestQgsLayoutMapGrid::reprojected()
151 {
152 QgsCoordinateReferenceSystem crs = QgsCoordinateReferenceSystem( QStringLiteral( "EPSG:32633" ) );
153 QgsProject::instance()->setCrs( crs );
154 QgsLayout l( QgsProject::instance() );
155 l.initializeDefaults();
156
157 QgsLayoutItemMap *map = new QgsLayoutItemMap( &l );
158 map->attemptSetSceneRect( QRectF( 20, 20, 200, 100 ) );
159 map->setFrameEnabled( true );
160 map->setBackgroundColor( QColor( 150, 100, 100 ) );
161 map->grid()->setAnnotationTextFormat( QgsTextFormat::fromQFont( QgsFontUtils::getStandardTestFont( QStringLiteral( "Bold" ) ) ) );
162 map->grid()->setAnnotationPrecision( 0 );
163 map->grid()->setIntervalX( 2000 );
164 map->grid()->setIntervalY( 2000 );
165 map->grid()->setGridLineWidth( 0.5 );
166 map->grid()->setGridLineColor( QColor( 0, 0, 0 ) );
167 map->updateBoundingRect();
168 l.addLayoutItem( map );
169
170 map->setExtent( QgsRectangle( -243577.565, 2939084.773, 1215622.435, 3668684.773 ) );
171 QgsCoordinateReferenceSystem geographic = QgsCoordinateReferenceSystem( QStringLiteral( "EPSG:4326" ) );
172 map->grid()->setCrs( geographic );
173 map->grid()->setEnabled( true );
174 map->grid()->setIntervalX( 1 );
175 map->grid()->setIntervalY( 1 );
176 map->grid()->setAnnotationEnabled( false );
177 map->grid()->setBlendMode( QPainter::CompositionMode_SourceOver );
178 map->grid()->setFrameStyle( QgsLayoutItemMapGrid::ExteriorTicks );
179 map->grid()->setFrameWidth( 10 );
180 map->setFrameEnabled( false );
181 map->updateBoundingRect();
182 QgsLayoutChecker checker( QStringLiteral( "composermap_gridreprojected" ), &l );
183 checker.setControlPathPrefix( QStringLiteral( "composer_mapgrid" ) );
184
185 bool testResult = checker.testLayout( mReport, 0, 0 );
186 map->grid()->setEnabled( false );
187 map->grid()->setCrs( crs );
188 map->grid()->setFrameStyle( QgsLayoutItemMapGrid::NoFrame );
189 map->setFrameEnabled( true );
190 QVERIFY( testResult );
191 }
192
crossGrid()193 void TestQgsLayoutMapGrid::crossGrid()
194 {
195 QgsCoordinateReferenceSystem crs = QgsCoordinateReferenceSystem( QStringLiteral( "EPSG:32633" ) );
196 QgsProject::instance()->setCrs( crs );
197 QgsLayout l( QgsProject::instance() );
198 l.initializeDefaults();
199
200 QgsLayoutItemMap *map = new QgsLayoutItemMap( &l );
201 map->attemptSetSceneRect( QRectF( 20, 20, 200, 100 ) );
202 map->setFrameEnabled( true );
203 map->setBackgroundColor( QColor( 150, 100, 100 ) );
204 map->grid()->setAnnotationTextFormat( QgsTextFormat::fromQFont( QgsFontUtils::getStandardTestFont( QStringLiteral( "Bold" ) ) ) );
205 map->grid()->setAnnotationPrecision( 0 );
206 map->grid()->setIntervalX( 2000 );
207 map->grid()->setIntervalY( 2000 );
208 map->grid()->setGridLineWidth( 0.5 );
209 map->grid()->setGridLineColor( QColor( 0, 0, 0 ) );
210 map->updateBoundingRect();
211 l.addLayoutItem( map );
212
213 map->setExtent( QgsRectangle( 781662.375, 3339523.125, 793062.375, 3345223.125 ) );
214 map->grid()->setEnabled( true );
215 map->grid()->setStyle( QgsLayoutItemMapGrid::Cross );
216 map->grid()->setCrossLength( 2.0 );
217 map->grid()->setAnnotationEnabled( false );
218 map->grid()->setGridLineColor( QColor( 0, 255, 0 ) );
219 map->grid()->setBlendMode( QPainter::CompositionMode_SourceOver );
220 map->updateBoundingRect();
221 QgsLayoutChecker checker( QStringLiteral( "composermap_crossgrid" ), &l );
222 checker.setControlPathPrefix( QStringLiteral( "composer_mapgrid" ) );
223
224 bool testResult = checker.testLayout( mReport, 0, 0 );
225 map->grid()->setStyle( QgsLayoutItemMapGrid::Solid );
226 map->grid()->setEnabled( false );
227 map->grid()->setAnnotationEnabled( false );
228 QVERIFY( testResult );
229 }
230
markerGrid()231 void TestQgsLayoutMapGrid::markerGrid()
232 {
233 QgsCoordinateReferenceSystem crs = QgsCoordinateReferenceSystem( QStringLiteral( "EPSG:32633" ) );
234 QgsProject::instance()->setCrs( crs );
235 QgsLayout l( QgsProject::instance() );
236 l.initializeDefaults();
237
238 QgsLayoutItemMap *map = new QgsLayoutItemMap( &l );
239 map->attemptSetSceneRect( QRectF( 20, 20, 200, 100 ) );
240 map->setFrameEnabled( true );
241 map->setBackgroundColor( QColor( 150, 100, 100 ) );
242 map->grid()->setAnnotationTextFormat( QgsTextFormat::fromQFont( QgsFontUtils::getStandardTestFont( QStringLiteral( "Bold" ) ) ) );
243 map->grid()->setAnnotationPrecision( 0 );
244 map->grid()->setIntervalX( 2000 );
245 map->grid()->setIntervalY( 2000 );
246 map->grid()->setGridLineWidth( 0.5 );
247 map->grid()->setGridLineColor( QColor( 0, 0, 0 ) );
248 static_cast< QgsSimpleMarkerSymbolLayer * >( map->grid()->markerSymbol()->symbolLayer( 0 ) )->setStrokeColor( Qt::black );
249 map->updateBoundingRect();
250 l.addLayoutItem( map );
251
252 map->setExtent( QgsRectangle( 781662.375, 3339523.125, 793062.375, 3345223.125 ) );
253 map->grid()->setEnabled( true );
254 map->grid()->setStyle( QgsLayoutItemMapGrid::Markers );
255 map->grid()->setAnnotationEnabled( false );
256 map->grid()->setBlendMode( QPainter::CompositionMode_SourceOver );
257 map->updateBoundingRect();
258 QgsLayoutChecker checker( QStringLiteral( "composermap_markergrid" ), &l );
259 checker.setControlPathPrefix( QStringLiteral( "composer_mapgrid" ) );
260
261 bool testResult = checker.testLayout( mReport, 0, 0 );
262 map->grid()->setStyle( QgsLayoutItemMapGrid::Solid );
263 map->grid()->setEnabled( false );
264 map->grid()->setAnnotationEnabled( false );
265 QVERIFY( testResult );
266 }
267
frameOnly()268 void TestQgsLayoutMapGrid::frameOnly()
269 {
270 QgsCoordinateReferenceSystem crs = QgsCoordinateReferenceSystem( QStringLiteral( "EPSG:32633" ) );
271 QgsProject::instance()->setCrs( crs );
272 QgsLayout l( QgsProject::instance() );
273 l.initializeDefaults();
274
275 QgsLayoutItemMap *map = new QgsLayoutItemMap( &l );
276 map->attemptSetSceneRect( QRectF( 20, 20, 200, 100 ) );
277 map->setFrameEnabled( true );
278 map->setBackgroundColor( QColor( 150, 100, 100 ) );
279 map->grid()->setAnnotationTextFormat( QgsTextFormat::fromQFont( QgsFontUtils::getStandardTestFont( QStringLiteral( "Bold" ) ) ) );
280 map->grid()->setAnnotationPrecision( 0 );
281 map->grid()->setIntervalX( 2000 );
282 map->grid()->setIntervalY( 2000 );
283 map->grid()->setGridLineWidth( 0.5 );
284 map->grid()->setGridLineColor( QColor( 0, 0, 0 ) );
285 map->updateBoundingRect();
286 l.addLayoutItem( map );
287
288 map->setExtent( QgsRectangle( 781662.375, 3339523.125, 793062.375, 3345223.125 ) );
289 map->grid()->setEnabled( true );
290 map->grid()->setStyle( QgsLayoutItemMapGrid::FrameAnnotationsOnly );
291 map->grid()->setAnnotationEnabled( false );
292 //set a frame for testing
293 map->grid()->setFrameStyle( QgsLayoutItemMapGrid::Zebra );
294 map->grid()->setFrameWidth( 2.0 );
295 map->grid()->setFramePenSize( 0.5 );
296 map->grid()->setBlendMode( QPainter::CompositionMode_SourceOver );
297 map->updateBoundingRect();
298 QgsLayoutChecker checker( QStringLiteral( "composermap_gridframeonly" ), &l );
299 checker.setControlPathPrefix( QStringLiteral( "composer_mapgrid" ) );
300
301 bool testResult = checker.testLayout( mReport, 0, 0 );
302 map->grid()->setStyle( QgsLayoutItemMapGrid::Solid );
303 map->grid()->setEnabled( false );
304 map->grid()->setAnnotationEnabled( false );
305 map->grid()->setFrameStyle( QgsLayoutItemMapGrid::NoFrame );
306 QVERIFY( testResult );
307 }
308
zebraStyle()309 void TestQgsLayoutMapGrid::zebraStyle()
310 {
311 QgsCoordinateReferenceSystem crs = QgsCoordinateReferenceSystem( QStringLiteral( "EPSG:32633" ) );
312 QgsProject::instance()->setCrs( crs );
313 QgsLayout l( QgsProject::instance() );
314 l.initializeDefaults();
315
316 QgsLayoutItemMap *map = new QgsLayoutItemMap( &l );
317 map->attemptSetSceneRect( QRectF( 20, 20, 200, 100 ) );
318 map->setFrameEnabled( true );
319 map->setBackgroundColor( QColor( 150, 100, 100 ) );
320 QgsTextFormat format = QgsTextFormat::fromQFont( QgsFontUtils::getStandardTestFont( QStringLiteral( "Bold" ) ) );
321 format.setColor( QColor( 0, 0, 0, 0 ) );
322 map->grid()->setAnnotationTextFormat( format );
323 map->grid()->setAnnotationPrecision( 0 );
324 map->grid()->setIntervalX( 2000 );
325 map->grid()->setIntervalY( 2000 );
326 map->grid()->setGridLineWidth( 0.5 );
327 map->grid()->setGridLineColor( QColor( 0, 0, 0 ) );
328 map->updateBoundingRect();
329 l.addLayoutItem( map );
330
331 map->setExtent( QgsRectangle( 785462.375, 3341423.125, 789262.375, 3343323.125 ) ); //zoom in
332 map->grid()->setBlendMode( QPainter::CompositionMode_SourceOver );
333
334 map->grid()->setFrameStyle( QgsLayoutItemMapGrid::Zebra );
335 map->grid()->setFrameWidth( 10 );
336 map->grid()->setFramePenSize( 1 );
337 map->grid()->setFramePenColor( QColor( 255, 100, 0, 200 ) );
338 map->grid()->setFrameFillColor1( QColor( 50, 90, 50, 100 ) );
339 map->grid()->setFrameFillColor2( QColor( 200, 220, 100, 60 ) );
340 map->grid()->setEnabled( true );
341 map->updateBoundingRect();
342
343 QgsLayoutChecker checker( QStringLiteral( "composermap_zebrastyle" ), &l );
344 checker.setControlPathPrefix( QStringLiteral( "composer_mapgrid" ) );
345
346 bool testResult = checker.testLayout( mReport, 0, 0 );
347 QVERIFY( testResult );
348 }
349
zebraStyleSides()350 void TestQgsLayoutMapGrid::zebraStyleSides()
351 {
352 QgsCoordinateReferenceSystem crs = QgsCoordinateReferenceSystem( QStringLiteral( "EPSG:32633" ) );
353 QgsProject::instance()->setCrs( crs );
354 QgsLayout l( QgsProject::instance() );
355 l.initializeDefaults();
356
357 QgsLayoutItemMap *map = new QgsLayoutItemMap( &l );
358 map->attemptSetSceneRect( QRectF( 20, 20, 200, 100 ) );
359 map->setFrameEnabled( true );
360 map->setBackgroundColor( QColor( 150, 100, 100 ) );
361 QgsTextFormat format = QgsTextFormat::fromQFont( QgsFontUtils::getStandardTestFont( QStringLiteral( "Bold" ) ) );
362 format.setColor( QColor( 0, 0, 0, 0 ) );
363 map->grid()->setAnnotationTextFormat( format );
364 map->grid()->setAnnotationPrecision( 0 );
365 map->grid()->setIntervalX( 2000 );
366 map->grid()->setIntervalY( 2000 );
367 map->grid()->setGridLineWidth( 0.5 );
368 map->grid()->setGridLineColor( QColor( 0, 0, 0 ) );
369 map->updateBoundingRect();
370 l.addLayoutItem( map );
371
372 map->setExtent( QgsRectangle( 781662.375, 3339523.125, 793062.375, 3345223.125 ) );
373 map->grid()->setBlendMode( QPainter::CompositionMode_SourceOver );
374
375 map->grid()->setFrameStyle( QgsLayoutItemMapGrid::Zebra );
376 map->grid()->setFrameWidth( 10 );
377 map->grid()->setFramePenSize( 1 );
378 map->grid()->setFramePenColor( Qt::black );
379 map->grid()->setFrameFillColor1( Qt::black );
380 map->grid()->setFrameFillColor2( Qt::white );
381 map->grid()->setEnabled( true );
382
383 map->grid()->setFrameSideFlag( QgsLayoutItemMapGrid::FrameLeft, true );
384 map->grid()->setFrameSideFlag( QgsLayoutItemMapGrid::FrameRight, false );
385 map->grid()->setFrameSideFlag( QgsLayoutItemMapGrid::FrameTop, false );
386 map->grid()->setFrameSideFlag( QgsLayoutItemMapGrid::FrameBottom, false );
387 map->updateBoundingRect();
388
389 QgsLayoutChecker checker( QStringLiteral( "composermap_zebrastyle_left" ), &l );
390 checker.setControlPathPrefix( QStringLiteral( "composer_mapgrid" ) );
391 bool testResult = checker.testLayout( mReport, 0, 0 );
392 QVERIFY( testResult );
393
394 map->grid()->setFrameSideFlag( QgsLayoutItemMapGrid::FrameTop, true );
395 map->updateBoundingRect();
396 QgsLayoutChecker checker2( QStringLiteral( "composermap_zebrastyle_lefttop" ), &l );
397 checker2.setControlPathPrefix( QStringLiteral( "composer_mapgrid" ) );
398 bool testResult2 = checker2.testLayout( mReport, 0, 0 );
399 QVERIFY( testResult2 );
400
401 map->grid()->setFrameSideFlag( QgsLayoutItemMapGrid::FrameRight, true );
402 map->updateBoundingRect();
403 QgsLayoutChecker checker3( QStringLiteral( "composermap_zebrastyle_lefttopright" ), &l );
404 checker3.setControlPathPrefix( QStringLiteral( "composer_mapgrid" ) );
405 bool testResult3 = checker3.testLayout( mReport, 0, 0 );
406 QVERIFY( testResult3 );
407
408 map->grid()->setFrameSideFlag( QgsLayoutItemMapGrid::FrameBottom, true );
409 map->grid()->setFrameStyle( QgsLayoutItemMapGrid::NoFrame );
410
411 }
412
zebraStyleMargin()413 void TestQgsLayoutMapGrid::zebraStyleMargin()
414 {
415 QgsCoordinateReferenceSystem crs = QgsCoordinateReferenceSystem( QStringLiteral( "EPSG:32633" ) );
416 QgsProject::instance()->setCrs( crs );
417 QgsLayout l( QgsProject::instance() );
418 l.initializeDefaults();
419
420 QgsLayoutItemMap *map = new QgsLayoutItemMap( &l );
421 map->attemptSetSceneRect( QRectF( 20, 20, 200, 100 ) );
422 map->setFrameEnabled( true );
423 map->setBackgroundColor( QColor( 150, 100, 100 ) );
424 QgsTextFormat format = QgsTextFormat::fromQFont( QgsFontUtils::getStandardTestFont( QStringLiteral( "Bold" ) ) );
425 format.setColor( QColor( 0, 0, 0, 0 ) );
426 map->grid()->setAnnotationTextFormat( format );
427 map->grid()->setAnnotationPrecision( 0 );
428 map->grid()->setIntervalX( 2000 );
429 map->grid()->setIntervalY( 2000 );
430 map->grid()->setGridLineWidth( 0.5 );
431 map->grid()->setGridLineColor( QColor( 0, 0, 0 ) );
432 map->updateBoundingRect();
433 l.addLayoutItem( map );
434
435 map->setExtent( QgsRectangle( 785462.375, 3341423.125, 789262.375, 3343323.125 ) ); //zoom in
436 map->grid()->setBlendMode( QPainter::CompositionMode_SourceOver );
437
438 map->grid()->setFrameStyle( QgsLayoutItemMapGrid::Zebra );
439 map->grid()->setFrameWidth( 10 );
440 map->grid()->setFramePenSize( 1 );
441 map->grid()->setFrameMargin( 5 );
442 map->grid()->setFramePenColor( QColor( 255, 100, 0, 200 ) );
443 map->grid()->setFrameFillColor1( QColor( 50, 90, 50, 100 ) );
444 map->grid()->setFrameFillColor2( QColor( 200, 220, 100, 60 ) );
445 map->grid()->setEnabled( true );
446 map->updateBoundingRect();
447
448 QgsLayoutChecker checker( QStringLiteral( "composermap_marginzebrastyle" ), &l );
449 checker.setControlPathPrefix( QStringLiteral( "composer_mapgrid" ) );
450
451 bool testResult = checker.testLayout( mReport, 0, 0 );
452 QVERIFY( testResult );
453 }
454
zebraStyleNautical()455 void TestQgsLayoutMapGrid::zebraStyleNautical()
456 {
457 QgsCoordinateReferenceSystem crs = QgsCoordinateReferenceSystem( QStringLiteral( "EPSG:32633" ) );
458 QgsProject::instance()->setCrs( crs );
459 QgsLayout l( QgsProject::instance() );
460 l.initializeDefaults();
461
462 QgsLayoutItemMap *map = new QgsLayoutItemMap( &l );
463 map->attemptSetSceneRect( QRectF( 20, 20, 200, 100 ) );
464 map->setFrameEnabled( true );
465 map->setBackgroundColor( QColor( 150, 100, 100 ) );
466 QgsTextFormat format = QgsTextFormat::fromQFont( QgsFontUtils::getStandardTestFont( QStringLiteral( "Bold" ) ) );
467 format.setColor( QColor( 0, 0, 0, 0 ) );
468 map->grid()->setAnnotationTextFormat( format );
469 map->grid()->setAnnotationPrecision( 0 );
470 map->grid()->setIntervalX( 2000 );
471 map->grid()->setIntervalY( 2000 );
472 map->grid()->setGridLineWidth( 0.5 );
473 map->grid()->setGridLineColor( QColor( 0, 0, 0 ) );
474 map->updateBoundingRect();
475 l.addLayoutItem( map );
476
477 map->setExtent( QgsRectangle( 785462.375, 3341423.125, 789262.375, 3343323.125 ) ); //zoom in
478 map->grid()->setBlendMode( QPainter::CompositionMode_SourceOver );
479
480 map->grid()->setFrameStyle( QgsLayoutItemMapGrid::ZebraNautical );
481 map->grid()->setFrameWidth( 10 );
482 map->grid()->setFramePenSize( 1 );
483 map->grid()->setFrameMargin( 5 );
484 map->grid()->setFramePenColor( QColor( 255, 100, 0, 200 ) );
485 map->grid()->setFrameFillColor1( QColor( 50, 90, 50, 100 ) );
486 map->grid()->setFrameFillColor2( QColor( 200, 220, 100, 60 ) );
487 map->grid()->setEnabled( true );
488 map->updateBoundingRect();
489
490 QgsLayoutChecker checker( QStringLiteral( "composermap_zebranauticalstyle" ), &l );
491 checker.setControlPathPrefix( QStringLiteral( "composer_mapgrid" ) );
492
493 bool testResult = checker.testLayout( mReport, 0, 0 );
494 QVERIFY( testResult );
495 }
496
frameDivisions()497 void TestQgsLayoutMapGrid::frameDivisions()
498 {
499 QgsCoordinateReferenceSystem crs = QgsCoordinateReferenceSystem( QStringLiteral( "EPSG:32633" ) );
500 QgsProject::instance()->setCrs( crs );
501 QgsLayout l( QgsProject::instance() );
502 l.initializeDefaults();
503
504 QgsLayoutItemMap *map = new QgsLayoutItemMap( &l );
505 map->attemptSetSceneRect( QRectF( 20, 20, 200, 100 ) );
506 map->setFrameEnabled( true );
507 map->setBackgroundColor( QColor( 150, 100, 100 ) );
508 QgsTextFormat format = QgsTextFormat::fromQFont( QgsFontUtils::getStandardTestFont( QStringLiteral( "Bold" ) ) );
509 format.setColor( QColor( 0, 0, 0, 0 ) );
510 map->grid()->setAnnotationTextFormat( format );
511 map->grid()->setAnnotationPrecision( 0 );
512 map->grid()->setIntervalX( 2000 );
513 map->grid()->setIntervalY( 2000 );
514 map->grid()->setGridLineWidth( 0.5 );
515 map->grid()->setGridLineColor( QColor( 0, 0, 0 ) );
516 map->updateBoundingRect();
517 l.addLayoutItem( map );
518
519 map->setExtent( QgsRectangle( 781662.375, 3339523.125, 793062.375, 3345223.125 ) );
520 //rotate map, so we mix latitude and longitude coordinates on every map side
521 map->setMapRotation( 45.0 );
522
523 //setup defaults
524 map->grid()->setBlendMode( QPainter::CompositionMode_SourceOver );
525 map->grid()->setFrameStyle( QgsLayoutItemMapGrid::Zebra );
526 map->grid()->setFrameWidth( 10 );
527 map->grid()->setFramePenSize( 1 );
528 map->grid()->setFramePenColor( Qt::black );
529 map->grid()->setFrameFillColor1( Qt::black );
530 map->grid()->setFrameFillColor2( Qt::white );
531 map->grid()->setEnabled( true );
532 map->grid()->setFrameSideFlag( QgsLayoutItemMapGrid::FrameLeft, true );
533 map->grid()->setFrameSideFlag( QgsLayoutItemMapGrid::FrameRight, true );
534 map->grid()->setFrameSideFlag( QgsLayoutItemMapGrid::FrameTop, true );
535 map->grid()->setFrameSideFlag( QgsLayoutItemMapGrid::FrameBottom, true );
536 map->updateBoundingRect();
537
538 QgsLayoutChecker checker( QStringLiteral( "composermap_rotatedframe" ), &l );
539 checker.setControlPathPrefix( QStringLiteral( "composer_mapgrid" ) );
540 bool testResult = checker.testLayout( mReport, 0, 0 );
541 QVERIFY( testResult );
542
543 map->grid()->setFrameDivisions( QgsLayoutItemMapGrid::LatitudeOnly, QgsLayoutItemMapGrid::Left );
544 map->grid()->setFrameDivisions( QgsLayoutItemMapGrid::LongitudeOnly, QgsLayoutItemMapGrid::Right );
545 map->grid()->setFrameDivisions( QgsLayoutItemMapGrid::LatitudeOnly, QgsLayoutItemMapGrid::Top );
546 map->grid()->setFrameDivisions( QgsLayoutItemMapGrid::LongitudeOnly, QgsLayoutItemMapGrid::Bottom );
547 map->updateBoundingRect();
548
549 QgsLayoutChecker checker2( QStringLiteral( "composermap_framedivisions" ), &l );
550 checker2.setControlPathPrefix( QStringLiteral( "composer_mapgrid" ) );
551 testResult = checker2.testLayout( mReport, 0, 0 );
552 QVERIFY( testResult );
553
554 map->grid()->setFrameDivisions( QgsLayoutItemMapGrid::ShowAll, QgsLayoutItemMapGrid::Left );
555 map->grid()->setFrameDivisions( QgsLayoutItemMapGrid::ShowAll, QgsLayoutItemMapGrid::Right );
556 map->grid()->setFrameDivisions( QgsLayoutItemMapGrid::ShowAll, QgsLayoutItemMapGrid::Top );
557 map->grid()->setFrameDivisions( QgsLayoutItemMapGrid::ShowAll, QgsLayoutItemMapGrid::Bottom );
558 map->grid()->setFrameStyle( QgsLayoutItemMapGrid::NoFrame );
559 map->setMapRotation( 0.0 );
560 }
561
annotationFilter()562 void TestQgsLayoutMapGrid::annotationFilter()
563 {
564 QgsCoordinateReferenceSystem crs = QgsCoordinateReferenceSystem( QStringLiteral( "EPSG:32633" ) );
565 QgsProject::instance()->setCrs( crs );
566 QgsLayout l( QgsProject::instance() );
567 l.initializeDefaults();
568
569 QgsLayoutItemMap *map = new QgsLayoutItemMap( &l );
570 map->attemptSetSceneRect( QRectF( 20, 20, 200, 100 ) );
571 map->setFrameEnabled( true );
572 map->setBackgroundColor( QColor( 150, 100, 100 ) );
573 QgsTextFormat format = QgsTextFormat::fromQFont( QgsFontUtils::getStandardTestFont( QStringLiteral( "Bold" ) ) );
574 format.setColor( QColor( 0, 0, 0, 0 ) );
575 map->grid()->setAnnotationTextFormat( format );
576 map->grid()->setAnnotationPrecision( 0 );
577 map->grid()->setIntervalX( 2000 );
578 map->grid()->setIntervalY( 2000 );
579 map->grid()->setGridLineWidth( 0.5 );
580 map->grid()->setGridLineColor( QColor( 0, 0, 0 ) );
581 map->updateBoundingRect();
582 l.addLayoutItem( map );
583
584 map->setExtent( QgsRectangle( 781662.375, 3339523.125, 793062.375, 3345223.125 ) );
585 //rotate map, so we mix latitude and longitude coordinates on every map side
586 map->setMapRotation( 45.0 );
587
588 //setup defaults
589 map->grid()->setBlendMode( QPainter::CompositionMode_SourceOver );
590 map->grid()->setFrameStyle( QgsLayoutItemMapGrid::NoFrame );
591 map->grid()->setEnabled( true );
592 map->grid()->setAnnotationEnabled( true );
593 map->grid()->setAnnotationPosition( QgsLayoutItemMapGrid::OutsideMapFrame, QgsLayoutItemMapGrid::Left );
594 map->grid()->setAnnotationPosition( QgsLayoutItemMapGrid::OutsideMapFrame, QgsLayoutItemMapGrid::Right );
595 map->grid()->setAnnotationPosition( QgsLayoutItemMapGrid::OutsideMapFrame, QgsLayoutItemMapGrid::Top );
596 map->grid()->setAnnotationPosition( QgsLayoutItemMapGrid::OutsideMapFrame, QgsLayoutItemMapGrid::Bottom );
597 map->updateBoundingRect();
598
599 QgsLayoutChecker checker( QStringLiteral( "composermap_rotatedannotations" ), &l );
600 checker.setControlPathPrefix( QStringLiteral( "composer_mapgrid" ) );
601 bool testResult = checker.testLayout( mReport, 0, 0 );
602 QVERIFY( testResult );
603
604 map->grid()->setAnnotationDisplay( QgsLayoutItemMapGrid::HideAll, QgsLayoutItemMapGrid::Left );
605 map->grid()->setAnnotationDisplay( QgsLayoutItemMapGrid::LongitudeOnly, QgsLayoutItemMapGrid::Right );
606 map->grid()->setAnnotationDisplay( QgsLayoutItemMapGrid::LatitudeOnly, QgsLayoutItemMapGrid::Top );
607 map->grid()->setAnnotationDisplay( QgsLayoutItemMapGrid::LongitudeOnly, QgsLayoutItemMapGrid::Bottom );
608 map->updateBoundingRect();
609
610 QgsLayoutChecker checker2( QStringLiteral( "composermap_filteredannotations" ), &l );
611 checker2.setControlPathPrefix( QStringLiteral( "composer_mapgrid" ) );
612 testResult = checker2.testLayout( mReport, 0, 0 );
613 QVERIFY( testResult );
614
615 map->grid()->setAnnotationEnabled( false );
616 map->grid()->setAnnotationDisplay( QgsLayoutItemMapGrid::ShowAll, QgsLayoutItemMapGrid::Left );
617 map->grid()->setAnnotationDisplay( QgsLayoutItemMapGrid::ShowAll, QgsLayoutItemMapGrid::Right );
618 map->grid()->setAnnotationDisplay( QgsLayoutItemMapGrid::ShowAll, QgsLayoutItemMapGrid::Top );
619 map->grid()->setAnnotationDisplay( QgsLayoutItemMapGrid::ShowAll, QgsLayoutItemMapGrid::Bottom );
620 map->setMapRotation( 0.0 );
621 }
622
interiorTicks()623 void TestQgsLayoutMapGrid::interiorTicks()
624 {
625 QgsCoordinateReferenceSystem crs = QgsCoordinateReferenceSystem( QStringLiteral( "EPSG:32633" ) );
626 QgsProject::instance()->setCrs( crs );
627 QgsLayout l( QgsProject::instance() );
628 l.initializeDefaults();
629
630 QgsLayoutItemMap *map = new QgsLayoutItemMap( &l );
631 map->attemptSetSceneRect( QRectF( 20, 20, 200, 100 ) );
632 map->setFrameEnabled( true );
633 map->setBackgroundColor( QColor( 150, 100, 100 ) );
634 map->grid()->setAnnotationTextFormat( QgsTextFormat::fromQFont( QgsFontUtils::getStandardTestFont( QStringLiteral( "Bold" ) ) ) );
635 map->grid()->setAnnotationPrecision( 0 );
636 map->grid()->setIntervalX( 2000 );
637 map->grid()->setIntervalY( 2000 );
638 map->grid()->setGridLineWidth( 0.5 );
639 map->grid()->setGridLineColor( QColor( 0, 0, 0 ) );
640 map->updateBoundingRect();
641 l.addLayoutItem( map );
642
643 map->setExtent( QgsRectangle( 781662.375, 3339523.125, 793062.375, 3345223.125 ) );
644
645 map->grid()->setFrameStyle( QgsLayoutItemMapGrid::InteriorTicks );
646 map->grid()->setFrameWidth( 10 );
647 map->grid()->setFramePenSize( 1 );
648 map->grid()->setFramePenColor( Qt::black );
649 map->grid()->setEnabled( true );
650 map->grid()->setStyle( QgsLayoutItemMapGrid::FrameAnnotationsOnly );
651 map->updateBoundingRect();
652
653 QgsLayoutChecker checker( QStringLiteral( "composermap_interiorticks" ), &l );
654 checker.setControlPathPrefix( QStringLiteral( "composer_mapgrid" ) );
655 bool testResult = checker.testLayout( mReport, 0, 0 );
656 QVERIFY( testResult );
657
658 map->grid()->setFrameStyle( QgsLayoutItemMapGrid::NoFrame );
659 }
660
interiorTicksMargin()661 void TestQgsLayoutMapGrid::interiorTicksMargin()
662 {
663 QgsCoordinateReferenceSystem crs = QgsCoordinateReferenceSystem( QStringLiteral( "EPSG:32633" ) );
664 QgsProject::instance()->setCrs( crs );
665 QgsLayout l( QgsProject::instance() );
666 l.initializeDefaults();
667
668 QgsLayoutItemMap *map = new QgsLayoutItemMap( &l );
669 map->attemptSetSceneRect( QRectF( 20, 20, 200, 100 ) );
670 map->setFrameEnabled( true );
671 map->setBackgroundColor( QColor( 150, 100, 100 ) );
672 map->grid()->setAnnotationTextFormat( QgsTextFormat::fromQFont( QgsFontUtils::getStandardTestFont( QStringLiteral( "Bold" ) ) ) );
673 map->grid()->setAnnotationPrecision( 0 );
674 map->grid()->setIntervalX( 2000 );
675 map->grid()->setIntervalY( 2000 );
676 map->grid()->setGridLineWidth( 0.5 );
677 map->grid()->setGridLineColor( QColor( 0, 0, 0 ) );
678 map->updateBoundingRect();
679 l.addLayoutItem( map );
680
681 map->setExtent( QgsRectangle( 781662.375, 3339523.125, 793062.375, 3345223.125 ) );
682
683 map->grid()->setFrameStyle( QgsLayoutItemMapGrid::InteriorTicks );
684 map->grid()->setFrameWidth( 10 );
685 map->grid()->setFramePenSize( 1 );
686 map->grid()->setFrameMargin( 5 );
687 map->grid()->setFramePenColor( Qt::black );
688 map->grid()->setEnabled( true );
689 map->grid()->setStyle( QgsLayoutItemMapGrid::FrameAnnotationsOnly );
690 map->updateBoundingRect();
691
692 QgsLayoutChecker checker( QStringLiteral( "composermap_margininteriorticks" ), &l );
693 checker.setControlPathPrefix( QStringLiteral( "composer_mapgrid" ) );
694 bool testResult = checker.testLayout( mReport, 0, 0 );
695 QVERIFY( testResult );
696
697 map->grid()->setFrameStyle( QgsLayoutItemMapGrid::NoFrame );
698 }
699
interiorTicksAnnotated()700 void TestQgsLayoutMapGrid::interiorTicksAnnotated()
701 {
702 QgsCoordinateReferenceSystem crs = QgsCoordinateReferenceSystem( QStringLiteral( "EPSG:32633" ) );
703 QgsProject::instance()->setCrs( crs );
704 QgsLayout l( QgsProject::instance() );
705 l.initializeDefaults();
706
707 QgsLayoutItemMap *map = new QgsLayoutItemMap( &l );
708 map->attemptSetSceneRect( QRectF( 20, 20, 200, 100 ) );
709 map->setFrameEnabled( true );
710 map->setBackgroundColor( QColor( 150, 100, 100 ) );
711 map->grid()->setAnnotationTextFormat( QgsTextFormat::fromQFont( QgsFontUtils::getStandardTestFont( QStringLiteral( "Bold" ) ) ) );
712 map->grid()->setAnnotationPrecision( 0 );
713 map->grid()->setIntervalX( 2000 );
714 map->grid()->setIntervalY( 2000 );
715 map->grid()->setGridLineWidth( 0.5 );
716 map->grid()->setGridLineColor( QColor( 0, 0, 0 ) );
717 map->updateBoundingRect();
718 l.addLayoutItem( map );
719
720 map->setExtent( QgsRectangle( 781662.375, 3339523.125, 793062.375, 3345223.125 ) );
721
722 map->grid()->setFrameStyle( QgsLayoutItemMapGrid::InteriorTicks );
723 map->grid()->setFrameWidth( 10 );
724 map->grid()->setFramePenSize( 1 );
725 map->grid()->setFramePenColor( Qt::black );
726 map->grid()->setEnabled( true );
727 map->grid()->setStyle( QgsLayoutItemMapGrid::FrameAnnotationsOnly );
728 map->grid()->setAnnotationEnabled( true );
729 map->grid()->setAnnotationPosition( QgsLayoutItemMapGrid::InsideMapFrame, QgsLayoutItemMapGrid::Left );
730 map->grid()->setAnnotationPosition( QgsLayoutItemMapGrid::InsideMapFrame, QgsLayoutItemMapGrid::Right );
731 map->grid()->setAnnotationPosition( QgsLayoutItemMapGrid::InsideMapFrame, QgsLayoutItemMapGrid::Top );
732 map->grid()->setAnnotationPosition( QgsLayoutItemMapGrid::InsideMapFrame, QgsLayoutItemMapGrid::Bottom );
733 map->updateBoundingRect();
734
735 QgsLayoutChecker checker( QStringLiteral( "composermap_interiorticks_annotated" ), &l );
736 checker.setControlPathPrefix( QStringLiteral( "composer_mapgrid" ) );
737 bool testResult = checker.testLayout( mReport, 0, 0 );
738 QVERIFY( testResult );
739
740 map->grid()->setAnnotationPosition( QgsLayoutItemMapGrid::OutsideMapFrame, QgsLayoutItemMapGrid::Left );
741 map->grid()->setAnnotationPosition( QgsLayoutItemMapGrid::OutsideMapFrame, QgsLayoutItemMapGrid::Right );
742 map->grid()->setAnnotationPosition( QgsLayoutItemMapGrid::OutsideMapFrame, QgsLayoutItemMapGrid::Top );
743 map->grid()->setAnnotationPosition( QgsLayoutItemMapGrid::OutsideMapFrame, QgsLayoutItemMapGrid::Bottom );
744 map->updateBoundingRect();
745
746 QgsLayoutChecker checker2( QStringLiteral( "composermap_interiorticks_annotated2" ), &l );
747 checker2.setControlPathPrefix( QStringLiteral( "composer_mapgrid" ) );
748 bool testResult2 = checker2.testLayout( mReport, 0, 0 );
749 QVERIFY( testResult2 );
750
751 map->grid()->setFrameStyle( QgsLayoutItemMapGrid::NoFrame );
752 map->grid()->setAnnotationEnabled( false );
753 }
754
exteriorTicks()755 void TestQgsLayoutMapGrid::exteriorTicks()
756 {
757 QgsCoordinateReferenceSystem crs = QgsCoordinateReferenceSystem( QStringLiteral( "EPSG:32633" ) );
758 QgsProject::instance()->setCrs( crs );
759 QgsLayout l( QgsProject::instance() );
760 l.initializeDefaults();
761
762 QgsLayoutItemMap *map = new QgsLayoutItemMap( &l );
763 map->attemptSetSceneRect( QRectF( 20, 20, 200, 100 ) );
764 map->setFrameEnabled( true );
765 map->setBackgroundColor( QColor( 150, 100, 100 ) );
766 map->grid()->setAnnotationTextFormat( QgsTextFormat::fromQFont( QgsFontUtils::getStandardTestFont( QStringLiteral( "Bold" ) ) ) );
767 map->grid()->setAnnotationPrecision( 0 );
768 map->grid()->setIntervalX( 2000 );
769 map->grid()->setIntervalY( 2000 );
770 map->grid()->setGridLineWidth( 0.5 );
771 map->grid()->setGridLineColor( QColor( 0, 0, 0 ) );
772 map->updateBoundingRect();
773 l.addLayoutItem( map );
774
775 map->setExtent( QgsRectangle( 781662.375, 3339523.125, 793062.375, 3345223.125 ) );
776
777 map->grid()->setFrameStyle( QgsLayoutItemMapGrid::ExteriorTicks );
778 map->grid()->setFrameWidth( 10 );
779 map->grid()->setFramePenSize( 1 );
780 map->grid()->setFramePenColor( Qt::black );
781 map->grid()->setEnabled( true );
782 map->grid()->setStyle( QgsLayoutItemMapGrid::FrameAnnotationsOnly );
783 map->updateBoundingRect();
784
785 QgsLayoutChecker checker( QStringLiteral( "composermap_exteriorticks" ), &l );
786 checker.setControlPathPrefix( QStringLiteral( "composer_mapgrid" ) );
787 bool testResult = checker.testLayout( mReport, 0, 0 );
788 QVERIFY( testResult );
789
790 map->grid()->setFrameStyle( QgsLayoutItemMapGrid::NoFrame );
791 }
792
exteriorTicksMargin()793 void TestQgsLayoutMapGrid::exteriorTicksMargin()
794 {
795 QgsCoordinateReferenceSystem crs = QgsCoordinateReferenceSystem( QStringLiteral( "EPSG:32633" ) );
796 QgsProject::instance()->setCrs( crs );
797 QgsLayout l( QgsProject::instance() );
798 l.initializeDefaults();
799
800 QgsLayoutItemMap *map = new QgsLayoutItemMap( &l );
801 map->attemptSetSceneRect( QRectF( 20, 20, 200, 100 ) );
802 map->setFrameEnabled( true );
803 map->setBackgroundColor( QColor( 150, 100, 100 ) );
804 map->grid()->setAnnotationTextFormat( QgsTextFormat::fromQFont( QgsFontUtils::getStandardTestFont( QStringLiteral( "Bold" ) ) ) );
805 map->grid()->setAnnotationPrecision( 0 );
806 map->grid()->setIntervalX( 2000 );
807 map->grid()->setIntervalY( 2000 );
808 map->grid()->setGridLineWidth( 0.5 );
809 map->grid()->setGridLineColor( QColor( 0, 0, 0 ) );
810 map->updateBoundingRect();
811 l.addLayoutItem( map );
812
813 map->setExtent( QgsRectangle( 781662.375, 3339523.125, 793062.375, 3345223.125 ) );
814
815 map->grid()->setFrameStyle( QgsLayoutItemMapGrid::ExteriorTicks );
816 map->grid()->setFrameWidth( 10 );
817 map->grid()->setFramePenSize( 1 );
818 map->grid()->setFrameMargin( 5 );
819 map->grid()->setFramePenColor( Qt::black );
820 map->grid()->setEnabled( true );
821 map->grid()->setStyle( QgsLayoutItemMapGrid::FrameAnnotationsOnly );
822 map->updateBoundingRect();
823
824 QgsLayoutChecker checker( QStringLiteral( "composermap_marginexteriorticks" ), &l );
825 checker.setControlPathPrefix( QStringLiteral( "composer_mapgrid" ) );
826 bool testResult = checker.testLayout( mReport, 0, 0 );
827 QVERIFY( testResult );
828
829 map->grid()->setFrameStyle( QgsLayoutItemMapGrid::NoFrame );
830 }
831
exteriorTicksAnnotated()832 void TestQgsLayoutMapGrid::exteriorTicksAnnotated()
833 {
834 QgsCoordinateReferenceSystem crs = QgsCoordinateReferenceSystem( QStringLiteral( "EPSG:32633" ) );
835 QgsProject::instance()->setCrs( crs );
836 QgsLayout l( QgsProject::instance() );
837 l.initializeDefaults();
838
839 QgsLayoutItemMap *map = new QgsLayoutItemMap( &l );
840 map->attemptSetSceneRect( QRectF( 20, 20, 200, 100 ) );
841 map->setFrameEnabled( true );
842 map->setBackgroundColor( QColor( 150, 100, 100 ) );
843 map->grid()->setAnnotationTextFormat( QgsTextFormat::fromQFont( QgsFontUtils::getStandardTestFont( QStringLiteral( "Bold" ) ) ) );
844 map->grid()->setAnnotationPrecision( 0 );
845 map->grid()->setIntervalX( 2000 );
846 map->grid()->setIntervalY( 2000 );
847 map->grid()->setGridLineWidth( 0.5 );
848 map->grid()->setGridLineColor( QColor( 0, 0, 0 ) );
849 map->updateBoundingRect();
850 l.addLayoutItem( map );
851
852 map->setExtent( QgsRectangle( 781662.375, 3339523.125, 793062.375, 3345223.125 ) );
853
854 map->grid()->setFrameStyle( QgsLayoutItemMapGrid::ExteriorTicks );
855 map->grid()->setFrameWidth( 10 );
856 map->grid()->setFramePenSize( 1 );
857 map->grid()->setFramePenColor( Qt::black );
858 map->grid()->setEnabled( true );
859 map->grid()->setStyle( QgsLayoutItemMapGrid::FrameAnnotationsOnly );
860 map->grid()->setAnnotationEnabled( true );
861 map->grid()->setAnnotationPosition( QgsLayoutItemMapGrid::InsideMapFrame, QgsLayoutItemMapGrid::Left );
862 map->grid()->setAnnotationPosition( QgsLayoutItemMapGrid::InsideMapFrame, QgsLayoutItemMapGrid::Right );
863 map->grid()->setAnnotationPosition( QgsLayoutItemMapGrid::InsideMapFrame, QgsLayoutItemMapGrid::Top );
864 map->grid()->setAnnotationPosition( QgsLayoutItemMapGrid::InsideMapFrame, QgsLayoutItemMapGrid::Bottom );
865 map->updateBoundingRect();
866
867 QgsLayoutChecker checker( QStringLiteral( "composermap_exteriorticks_annotated" ), &l );
868 checker.setControlPathPrefix( QStringLiteral( "composer_mapgrid" ) );
869 bool testResult = checker.testLayout( mReport, 0, 0 );
870 QVERIFY( testResult );
871
872 map->grid()->setAnnotationPosition( QgsLayoutItemMapGrid::OutsideMapFrame, QgsLayoutItemMapGrid::Left );
873 map->grid()->setAnnotationPosition( QgsLayoutItemMapGrid::OutsideMapFrame, QgsLayoutItemMapGrid::Right );
874 map->grid()->setAnnotationPosition( QgsLayoutItemMapGrid::OutsideMapFrame, QgsLayoutItemMapGrid::Top );
875 map->grid()->setAnnotationPosition( QgsLayoutItemMapGrid::OutsideMapFrame, QgsLayoutItemMapGrid::Bottom );
876 map->updateBoundingRect();
877
878 QgsLayoutChecker checker2( QStringLiteral( "composermap_exteriorticks_annotated2" ), &l );
879 checker2.setControlPathPrefix( QStringLiteral( "composer_mapgrid" ) );
880 bool testResult2 = checker2.testLayout( mReport, 0, 0 );
881 QVERIFY( testResult2 );
882
883 map->grid()->setFrameStyle( QgsLayoutItemMapGrid::NoFrame );
884 map->grid()->setAnnotationEnabled( false );
885 }
886
interiorExteriorTicks()887 void TestQgsLayoutMapGrid::interiorExteriorTicks()
888 {
889 QgsCoordinateReferenceSystem crs = QgsCoordinateReferenceSystem( QStringLiteral( "EPSG:32633" ) );
890 QgsProject::instance()->setCrs( crs );
891 QgsLayout l( QgsProject::instance() );
892 l.initializeDefaults();
893
894 QgsLayoutItemMap *map = new QgsLayoutItemMap( &l );
895 map->attemptSetSceneRect( QRectF( 20, 20, 200, 100 ) );
896 map->setFrameEnabled( true );
897 map->setBackgroundColor( QColor( 150, 100, 100 ) );
898 map->grid()->setAnnotationTextFormat( QgsTextFormat::fromQFont( QgsFontUtils::getStandardTestFont( QStringLiteral( "Bold" ) ) ) );
899 map->grid()->setAnnotationPrecision( 0 );
900 map->grid()->setIntervalX( 2000 );
901 map->grid()->setIntervalY( 2000 );
902 map->grid()->setGridLineWidth( 0.5 );
903 map->grid()->setGridLineColor( QColor( 0, 0, 0 ) );
904 map->updateBoundingRect();
905 l.addLayoutItem( map );
906
907 map->setExtent( QgsRectangle( 781662.375, 3339523.125, 793062.375, 3345223.125 ) );
908
909 map->grid()->setFrameStyle( QgsLayoutItemMapGrid::InteriorExteriorTicks );
910 map->grid()->setFrameWidth( 10 );
911 map->grid()->setFramePenSize( 1 );
912 map->grid()->setFramePenColor( Qt::black );
913 map->grid()->setEnabled( true );
914 map->grid()->setStyle( QgsLayoutItemMapGrid::FrameAnnotationsOnly );
915 map->updateBoundingRect();
916
917 QgsLayoutChecker checker( QStringLiteral( "composermap_interiorexteriorticks" ), &l );
918 checker.setControlPathPrefix( QStringLiteral( "composer_mapgrid" ) );
919 bool testResult = checker.testLayout( mReport, 0, 0 );
920 QVERIFY( testResult );
921
922 map->grid()->setFrameStyle( QgsLayoutItemMapGrid::NoFrame );
923 }
924
interiorExteriorTicksMargin()925 void TestQgsLayoutMapGrid::interiorExteriorTicksMargin()
926 {
927 QgsCoordinateReferenceSystem crs = QgsCoordinateReferenceSystem( QStringLiteral( "EPSG:32633" ) );
928 QgsProject::instance()->setCrs( crs );
929 QgsLayout l( QgsProject::instance() );
930 l.initializeDefaults();
931
932 QgsLayoutItemMap *map = new QgsLayoutItemMap( &l );
933 map->attemptSetSceneRect( QRectF( 20, 20, 200, 100 ) );
934 map->setFrameEnabled( true );
935 map->setBackgroundColor( QColor( 150, 100, 100 ) );
936 map->grid()->setAnnotationTextFormat( QgsTextFormat::fromQFont( QgsFontUtils::getStandardTestFont( QStringLiteral( "Bold" ) ) ) );
937 map->grid()->setAnnotationPrecision( 0 );
938 map->grid()->setIntervalX( 2000 );
939 map->grid()->setIntervalY( 2000 );
940 map->grid()->setGridLineWidth( 0.5 );
941 map->grid()->setGridLineColor( QColor( 0, 0, 0 ) );
942 map->updateBoundingRect();
943 l.addLayoutItem( map );
944
945 map->setExtent( QgsRectangle( 781662.375, 3339523.125, 793062.375, 3345223.125 ) );
946
947 map->grid()->setFrameStyle( QgsLayoutItemMapGrid::InteriorExteriorTicks );
948 map->grid()->setFrameWidth( 10 );
949 map->grid()->setFramePenSize( 1 );
950 map->grid()->setFrameMargin( 5 );
951 map->grid()->setFramePenColor( Qt::black );
952 map->grid()->setEnabled( true );
953 map->grid()->setStyle( QgsLayoutItemMapGrid::FrameAnnotationsOnly );
954 map->updateBoundingRect();
955
956 QgsLayoutChecker checker( QStringLiteral( "composermap_margininteriorexteriorticks" ), &l );
957 checker.setControlPathPrefix( QStringLiteral( "composer_mapgrid" ) );
958 bool testResult = checker.testLayout( mReport, 0, 0 );
959 QVERIFY( testResult );
960
961 map->grid()->setFrameStyle( QgsLayoutItemMapGrid::NoFrame );
962 }
963
interiorExteriorTicksAnnotated()964 void TestQgsLayoutMapGrid::interiorExteriorTicksAnnotated()
965 {
966 QgsCoordinateReferenceSystem crs = QgsCoordinateReferenceSystem( QStringLiteral( "EPSG:32633" ) );
967 QgsProject::instance()->setCrs( crs );
968 QgsLayout l( QgsProject::instance() );
969 l.initializeDefaults();
970
971 QgsLayoutItemMap *map = new QgsLayoutItemMap( &l );
972 map->attemptSetSceneRect( QRectF( 20, 20, 200, 100 ) );
973 map->setFrameEnabled( true );
974 map->setBackgroundColor( QColor( 150, 100, 100 ) );
975 map->grid()->setAnnotationTextFormat( QgsTextFormat::fromQFont( QgsFontUtils::getStandardTestFont( QStringLiteral( "Bold" ) ) ) );
976 map->grid()->setAnnotationPrecision( 0 );
977 map->grid()->setIntervalX( 2000 );
978 map->grid()->setIntervalY( 2000 );
979 map->grid()->setGridLineWidth( 0.5 );
980 map->grid()->setGridLineColor( QColor( 0, 0, 0 ) );
981 map->updateBoundingRect();
982 l.addLayoutItem( map );
983
984 map->setExtent( QgsRectangle( 781662.375, 3339523.125, 793062.375, 3345223.125 ) );
985
986 map->grid()->setFrameStyle( QgsLayoutItemMapGrid::InteriorExteriorTicks );
987 map->grid()->setFrameWidth( 10 );
988 map->grid()->setFramePenSize( 1 );
989 map->grid()->setFramePenColor( Qt::black );
990 map->grid()->setEnabled( true );
991 map->grid()->setStyle( QgsLayoutItemMapGrid::FrameAnnotationsOnly );
992 map->grid()->setAnnotationEnabled( true );
993 map->grid()->setAnnotationPosition( QgsLayoutItemMapGrid::InsideMapFrame, QgsLayoutItemMapGrid::Left );
994 map->grid()->setAnnotationPosition( QgsLayoutItemMapGrid::InsideMapFrame, QgsLayoutItemMapGrid::Right );
995 map->grid()->setAnnotationPosition( QgsLayoutItemMapGrid::InsideMapFrame, QgsLayoutItemMapGrid::Top );
996 map->grid()->setAnnotationPosition( QgsLayoutItemMapGrid::InsideMapFrame, QgsLayoutItemMapGrid::Bottom );
997 map->updateBoundingRect();
998
999 QgsLayoutChecker checker( QStringLiteral( "composermap_interiorexteriorticks_annotated" ), &l );
1000 checker.setControlPathPrefix( QStringLiteral( "composer_mapgrid" ) );
1001 bool testResult = checker.testLayout( mReport, 0, 0 );
1002 QVERIFY( testResult );
1003
1004 map->grid()->setAnnotationPosition( QgsLayoutItemMapGrid::OutsideMapFrame, QgsLayoutItemMapGrid::Left );
1005 map->grid()->setAnnotationPosition( QgsLayoutItemMapGrid::OutsideMapFrame, QgsLayoutItemMapGrid::Right );
1006 map->grid()->setAnnotationPosition( QgsLayoutItemMapGrid::OutsideMapFrame, QgsLayoutItemMapGrid::Top );
1007 map->grid()->setAnnotationPosition( QgsLayoutItemMapGrid::OutsideMapFrame, QgsLayoutItemMapGrid::Bottom );
1008 map->updateBoundingRect();
1009
1010 QgsLayoutChecker checker2( QStringLiteral( "composermap_interiorexteriorticks_annotated2" ), &l );
1011 checker2.setControlPathPrefix( QStringLiteral( "composer_mapgrid" ) );
1012 bool testResult2 = checker2.testLayout( mReport, 0, 0 );
1013 QVERIFY( testResult2 );
1014
1015 map->grid()->setFrameStyle( QgsLayoutItemMapGrid::NoFrame );
1016 map->grid()->setAnnotationEnabled( false );
1017 }
1018
lineBorder()1019 void TestQgsLayoutMapGrid::lineBorder()
1020 {
1021 QgsCoordinateReferenceSystem crs = QgsCoordinateReferenceSystem( QStringLiteral( "EPSG:32633" ) );
1022 QgsProject::instance()->setCrs( crs );
1023 QgsLayout l( QgsProject::instance() );
1024 l.initializeDefaults();
1025
1026 QgsLayoutItemMap *map = new QgsLayoutItemMap( &l );
1027 map->attemptSetSceneRect( QRectF( 20, 20, 200, 100 ) );
1028 map->setFrameEnabled( true );
1029 map->setBackgroundColor( QColor( 150, 100, 100 ) );
1030 map->grid()->setAnnotationTextFormat( QgsTextFormat::fromQFont( QgsFontUtils::getStandardTestFont( QStringLiteral( "Bold" ) ) ) );
1031 map->grid()->setAnnotationPrecision( 0 );
1032 map->grid()->setIntervalX( 2000 );
1033 map->grid()->setIntervalY( 2000 );
1034 map->grid()->setGridLineWidth( 0.5 );
1035 map->grid()->setGridLineColor( QColor( 0, 0, 0 ) );
1036 map->updateBoundingRect();
1037 l.addLayoutItem( map );
1038
1039 map->setExtent( QgsRectangle( 781662.375, 3339523.125, 793062.375, 3345223.125 ) );
1040
1041 map->grid()->setFrameStyle( QgsLayoutItemMapGrid::LineBorder );
1042 map->grid()->setFrameWidth( 10 );
1043 map->grid()->setFramePenSize( 1 );
1044 map->grid()->setFramePenColor( Qt::black );
1045 map->grid()->setEnabled( true );
1046 map->grid()->setStyle( QgsLayoutItemMapGrid::FrameAnnotationsOnly );
1047 map->updateBoundingRect();
1048
1049 QgsLayoutChecker checker( QStringLiteral( "composermap_lineborder" ), &l );
1050 checker.setControlPathPrefix( QStringLiteral( "composer_mapgrid" ) );
1051 bool testResult = checker.testLayout( mReport, 0, 0 );
1052 QVERIFY( testResult );
1053
1054 map->grid()->setFrameStyle( QgsLayoutItemMapGrid::NoFrame );
1055 }
1056
lineBorderMargin()1057 void TestQgsLayoutMapGrid::lineBorderMargin()
1058 {
1059 QgsCoordinateReferenceSystem crs = QgsCoordinateReferenceSystem( QStringLiteral( "EPSG:32633" ) );
1060 QgsProject::instance()->setCrs( crs );
1061 QgsLayout l( QgsProject::instance() );
1062 l.initializeDefaults();
1063
1064 QgsLayoutItemMap *map = new QgsLayoutItemMap( &l );
1065 map->attemptSetSceneRect( QRectF( 20, 20, 200, 100 ) );
1066 map->setFrameEnabled( true );
1067 map->setBackgroundColor( QColor( 150, 100, 100 ) );
1068 map->grid()->setAnnotationTextFormat( QgsTextFormat::fromQFont( QgsFontUtils::getStandardTestFont( QStringLiteral( "Bold" ) ) ) );
1069 map->grid()->setAnnotationPrecision( 0 );
1070 map->grid()->setIntervalX( 2000 );
1071 map->grid()->setIntervalY( 2000 );
1072 map->grid()->setGridLineWidth( 0.5 );
1073 map->grid()->setGridLineColor( QColor( 0, 0, 0 ) );
1074 map->updateBoundingRect();
1075 l.addLayoutItem( map );
1076
1077 map->setExtent( QgsRectangle( 781662.375, 3339523.125, 793062.375, 3345223.125 ) );
1078
1079 map->grid()->setFrameStyle( QgsLayoutItemMapGrid::LineBorder );
1080 map->grid()->setFrameWidth( 10 );
1081 map->grid()->setFramePenSize( 1 );
1082 map->grid()->setFrameMargin( 5 );
1083 map->grid()->setFramePenColor( Qt::black );
1084 map->grid()->setEnabled( true );
1085 map->grid()->setStyle( QgsLayoutItemMapGrid::FrameAnnotationsOnly );
1086 map->updateBoundingRect();
1087
1088 QgsLayoutChecker checker( QStringLiteral( "composermap_marginlineborder" ), &l );
1089 checker.setControlPathPrefix( QStringLiteral( "composer_mapgrid" ) );
1090 bool testResult = checker.testLayout( mReport, 0, 0 );
1091 QVERIFY( testResult );
1092
1093 map->grid()->setFrameStyle( QgsLayoutItemMapGrid::NoFrame );
1094 }
1095
lineBorderNautical()1096 void TestQgsLayoutMapGrid::lineBorderNautical()
1097 {
1098 QgsCoordinateReferenceSystem crs = QgsCoordinateReferenceSystem( QStringLiteral( "EPSG:32633" ) );
1099 QgsProject::instance()->setCrs( crs );
1100 QgsLayout l( QgsProject::instance() );
1101 l.initializeDefaults();
1102
1103 QgsLayoutItemMap *map = new QgsLayoutItemMap( &l );
1104 map->attemptSetSceneRect( QRectF( 20, 20, 200, 100 ) );
1105 map->setFrameEnabled( true );
1106 map->setBackgroundColor( QColor( 150, 100, 100 ) );
1107 map->grid()->setAnnotationTextFormat( QgsTextFormat::fromQFont( QgsFontUtils::getStandardTestFont( QStringLiteral( "Bold" ) ) ) );
1108 map->grid()->setAnnotationPrecision( 0 );
1109 map->grid()->setIntervalX( 2000 );
1110 map->grid()->setIntervalY( 2000 );
1111 map->grid()->setGridLineWidth( 0.5 );
1112 map->grid()->setGridLineColor( QColor( 0, 0, 0 ) );
1113 map->updateBoundingRect();
1114 l.addLayoutItem( map );
1115
1116 map->setExtent( QgsRectangle( 781662.375, 3339523.125, 793062.375, 3345223.125 ) );
1117
1118 map->grid()->setFrameStyle( QgsLayoutItemMapGrid::LineBorderNautical );
1119 map->grid()->setFrameWidth( 10 );
1120 map->grid()->setFramePenSize( 1 );
1121 map->grid()->setFrameMargin( 5 );
1122 map->grid()->setFramePenColor( Qt::black );
1123 map->grid()->setEnabled( true );
1124 map->grid()->setStyle( QgsLayoutItemMapGrid::FrameAnnotationsOnly );
1125 map->updateBoundingRect();
1126
1127 QgsLayoutChecker checker( QStringLiteral( "composermap_linebordernautical" ), &l );
1128 checker.setControlPathPrefix( QStringLiteral( "composer_mapgrid" ) );
1129 bool testResult = checker.testLayout( mReport, 0, 0 );
1130 QVERIFY( testResult );
1131
1132 map->grid()->setFrameStyle( QgsLayoutItemMapGrid::NoFrame );
1133 }
1134
lineBorderAnnotated()1135 void TestQgsLayoutMapGrid::lineBorderAnnotated()
1136 {
1137 QgsCoordinateReferenceSystem crs = QgsCoordinateReferenceSystem( QStringLiteral( "EPSG:32633" ) );
1138 QgsProject::instance()->setCrs( crs );
1139 QgsLayout l( QgsProject::instance() );
1140 l.initializeDefaults();
1141
1142 QgsLayoutItemMap *map = new QgsLayoutItemMap( &l );
1143 map->attemptSetSceneRect( QRectF( 20, 20, 200, 100 ) );
1144 map->setFrameEnabled( true );
1145 map->setBackgroundColor( QColor( 150, 100, 100 ) );
1146 map->grid()->setAnnotationTextFormat( QgsTextFormat::fromQFont( QgsFontUtils::getStandardTestFont( QStringLiteral( "Bold" ) ) ) );
1147 map->grid()->setAnnotationPrecision( 0 );
1148 map->grid()->setIntervalX( 2000 );
1149 map->grid()->setIntervalY( 2000 );
1150 map->grid()->setGridLineWidth( 0.5 );
1151 map->grid()->setGridLineColor( QColor( 0, 0, 0 ) );
1152 map->updateBoundingRect();
1153 l.addLayoutItem( map );
1154
1155 map->setExtent( QgsRectangle( 781662.375, 3339523.125, 793062.375, 3345223.125 ) );
1156
1157 map->grid()->setFrameStyle( QgsLayoutItemMapGrid::LineBorder );
1158 map->grid()->setFrameWidth( 10 );
1159 map->grid()->setFramePenSize( 1 );
1160 map->grid()->setFramePenColor( Qt::black );
1161 map->grid()->setEnabled( true );
1162 map->grid()->setStyle( QgsLayoutItemMapGrid::FrameAnnotationsOnly );
1163 map->grid()->setAnnotationEnabled( true );
1164 map->grid()->setAnnotationPosition( QgsLayoutItemMapGrid::InsideMapFrame, QgsLayoutItemMapGrid::Left );
1165 map->grid()->setAnnotationPosition( QgsLayoutItemMapGrid::InsideMapFrame, QgsLayoutItemMapGrid::Right );
1166 map->grid()->setAnnotationPosition( QgsLayoutItemMapGrid::InsideMapFrame, QgsLayoutItemMapGrid::Top );
1167 map->grid()->setAnnotationPosition( QgsLayoutItemMapGrid::InsideMapFrame, QgsLayoutItemMapGrid::Bottom );
1168 map->updateBoundingRect();
1169
1170 QgsLayoutChecker checker( QStringLiteral( "composermap_lineborder_annotated" ), &l );
1171 checker.setControlPathPrefix( QStringLiteral( "composer_mapgrid" ) );
1172 bool testResult = checker.testLayout( mReport, 0, 0 );
1173 QVERIFY( testResult );
1174
1175 map->grid()->setAnnotationPosition( QgsLayoutItemMapGrid::OutsideMapFrame, QgsLayoutItemMapGrid::Left );
1176 map->grid()->setAnnotationPosition( QgsLayoutItemMapGrid::OutsideMapFrame, QgsLayoutItemMapGrid::Right );
1177 map->grid()->setAnnotationPosition( QgsLayoutItemMapGrid::OutsideMapFrame, QgsLayoutItemMapGrid::Top );
1178 map->grid()->setAnnotationPosition( QgsLayoutItemMapGrid::OutsideMapFrame, QgsLayoutItemMapGrid::Bottom );
1179 map->updateBoundingRect();
1180
1181 QgsLayoutChecker checker2( QStringLiteral( "composermap_lineborder_annotated2" ), &l );
1182 checker2.setControlPathPrefix( QStringLiteral( "composer_mapgrid" ) );
1183 bool testResult2 = checker2.testLayout( mReport, 0, 0 );
1184 QVERIFY( testResult2 );
1185
1186 map->grid()->setFrameStyle( QgsLayoutItemMapGrid::NoFrame );
1187 map->grid()->setAnnotationEnabled( false );
1188 }
1189
annotationFormats()1190 void TestQgsLayoutMapGrid::annotationFormats()
1191 {
1192 QgsCoordinateReferenceSystem crs = QgsCoordinateReferenceSystem( QStringLiteral( "EPSG:32633" ) );
1193 QgsProject::instance()->setCrs( crs );
1194 QgsLayout l( QgsProject::instance() );
1195 l.initializeDefaults();
1196
1197 QgsLayoutItemMap *map = new QgsLayoutItemMap( &l );
1198 map->attemptSetSceneRect( QRectF( 20, 20, 200, 100 ) );
1199 map->setFrameEnabled( true );
1200 map->setBackgroundColor( QColor( 150, 100, 100 ) );
1201 map->grid()->setAnnotationTextFormat( QgsTextFormat::fromQFont( QgsFontUtils::getStandardTestFont( QStringLiteral( "Bold" ) ) ) );
1202 map->grid()->setAnnotationPrecision( 0 );
1203 map->grid()->setIntervalX( 2000 );
1204 map->grid()->setIntervalY( 2000 );
1205 map->grid()->setGridLineWidth( 0.5 );
1206 map->grid()->setGridLineColor( QColor( 0, 0, 0 ) );
1207 map->updateBoundingRect();
1208 l.addLayoutItem( map );
1209
1210 //create grids in geographic and projected coordinates
1211 QgsCoordinateReferenceSystem projectedCrs( QStringLiteral( "EPSG:3994" ) );
1212 QgsCoordinateReferenceSystem geographicCrs( QStringLiteral( "EPSG:4326" ) );
1213
1214 QgsLayoutItemMapGrid gridGeographic( QStringLiteral( "geographic grid" ), map );
1215 gridGeographic.setCrs( geographicCrs );
1216 QgsLayoutItemMapGrid gridProjected( QStringLiteral( "projected grid" ), map );
1217 gridProjected.setCrs( projectedCrs );
1218
1219 //decimal degrees format
1220 gridGeographic.setAnnotationFormat( QgsLayoutItemMapGrid::DecimalWithSuffix );
1221 gridGeographic.setAnnotationPrecision( 1 );
1222 gridProjected.setAnnotationFormat( QgsLayoutItemMapGrid::DecimalWithSuffix );
1223 gridProjected.setAnnotationPrecision( 1 );
1224
1225 QgsExpressionContext expressionContext = gridGeographic.createExpressionContext();
1226
1227 //normal e/w
1228 QCOMPARE( gridGeographic.gridAnnotationString( 90, QgsLayoutItemMapGrid::Longitude, expressionContext ), QString( "90.0°E" ) );
1229 QCOMPARE( gridProjected.gridAnnotationString( 90, QgsLayoutItemMapGrid::Longitude, expressionContext ), QString( "90.0E" ) );
1230
1231 //0 degrees
1232 QCOMPARE( gridGeographic.gridAnnotationString( 0, QgsLayoutItemMapGrid::Longitude, expressionContext ), QString( "0.0°" ) );
1233 QCOMPARE( gridProjected.gridAnnotationString( 0, QgsLayoutItemMapGrid::Longitude, expressionContext ), QString( "0.0E" ) );
1234
1235 //180 degrees
1236 QCOMPARE( gridGeographic.gridAnnotationString( 180, QgsLayoutItemMapGrid::Longitude, expressionContext ), QString( "180.0°" ) );
1237 QCOMPARE( gridProjected.gridAnnotationString( 180, QgsLayoutItemMapGrid::Longitude, expressionContext ), QString( "180.0E" ) );
1238
1239 //normal n/s
1240 QCOMPARE( gridGeographic.gridAnnotationString( 45, QgsLayoutItemMapGrid::Latitude, expressionContext ), QString( "45.0°N" ) );
1241 QCOMPARE( gridProjected.gridAnnotationString( 45, QgsLayoutItemMapGrid::Latitude, expressionContext ), QString( "45.0N" ) );
1242
1243 //0 north/south
1244 QCOMPARE( gridGeographic.gridAnnotationString( 0, QgsLayoutItemMapGrid::Latitude, expressionContext ), QString( "0.0°" ) );
1245 QCOMPARE( gridProjected.gridAnnotationString( 0, QgsLayoutItemMapGrid::Latitude, expressionContext ), QString( "0.0N" ) );
1246
1247 //Custom format annotations
1248 gridProjected.setAnnotationFormat( QgsLayoutItemMapGrid::CustomFormat );
1249 gridProjected.setAnnotationExpression( QStringLiteral( "(@grid_number/10) || case when @grid_axis ='x' then 'a' else 'b' end" ) );
1250 QCOMPARE( gridProjected.gridAnnotationString( 45, QgsLayoutItemMapGrid::Latitude, expressionContext ), QString( "4.5b" ) );
1251 QCOMPARE( gridProjected.gridAnnotationString( 35, QgsLayoutItemMapGrid::Longitude, expressionContext ), QString( "3.5a" ) );
1252 }
1253
descendingAnnotations()1254 void TestQgsLayoutMapGrid::descendingAnnotations()
1255 {
1256 QgsCoordinateReferenceSystem crs = QgsCoordinateReferenceSystem( QStringLiteral( "EPSG:32633" ) );
1257 QgsProject::instance()->setCrs( crs );
1258 QgsLayout l( QgsProject::instance() );
1259 l.initializeDefaults();
1260
1261 QgsLayoutItemMap *map = new QgsLayoutItemMap( &l );
1262 map->attemptSetSceneRect( QRectF( 20, 20, 200, 100 ) );
1263 map->setFrameEnabled( true );
1264 map->setBackgroundColor( QColor( 150, 100, 100 ) );
1265 map->grid()->setAnnotationTextFormat( QgsTextFormat::fromQFont( QgsFontUtils::getStandardTestFont( QStringLiteral( "Bold" ) ) ) );
1266 map->grid()->setAnnotationPrecision( 0 );
1267 map->grid()->setIntervalX( 2000 );
1268 map->grid()->setIntervalY( 2000 );
1269 map->grid()->setGridLineWidth( 0.5 );
1270 map->grid()->setGridLineColor( QColor( 0, 0, 0 ) );
1271 map->updateBoundingRect();
1272 l.addLayoutItem( map );
1273
1274 map->setExtent( QgsRectangle( 781662.375, 3339523.125, 793062.375, 3345223.125 ) );
1275
1276 map->grid()->setFrameStyle( QgsLayoutItemMapGrid::NoFrame );
1277 map->grid()->setEnabled( true );
1278 map->grid()->setStyle( QgsLayoutItemMapGrid::FrameAnnotationsOnly );
1279 map->grid()->setAnnotationEnabled( true );
1280 map->grid()->setAnnotationPosition( QgsLayoutItemMapGrid::InsideMapFrame, QgsLayoutItemMapGrid::Left );
1281 map->grid()->setAnnotationPosition( QgsLayoutItemMapGrid::InsideMapFrame, QgsLayoutItemMapGrid::Right );
1282 map->grid()->setAnnotationPosition( QgsLayoutItemMapGrid::InsideMapFrame, QgsLayoutItemMapGrid::Top );
1283 map->grid()->setAnnotationPosition( QgsLayoutItemMapGrid::InsideMapFrame, QgsLayoutItemMapGrid::Bottom );
1284 map->grid()->setAnnotationDirection( QgsLayoutItemMapGrid::VerticalDescending, QgsLayoutItemMapGrid::Left );
1285 map->grid()->setAnnotationDirection( QgsLayoutItemMapGrid::VerticalDescending, QgsLayoutItemMapGrid::Right );
1286 map->grid()->setAnnotationDirection( QgsLayoutItemMapGrid::VerticalDescending, QgsLayoutItemMapGrid::Top );
1287 map->grid()->setAnnotationDirection( QgsLayoutItemMapGrid::VerticalDescending, QgsLayoutItemMapGrid::Bottom );
1288 map->updateBoundingRect();
1289
1290 QgsLayoutChecker checker( QStringLiteral( "composermap_verticaldescending_inside" ), &l );
1291 checker.setControlPathPrefix( QStringLiteral( "composer_mapgrid" ) );
1292 bool testResult = checker.testLayout( mReport, 0, 0 );
1293 QVERIFY( testResult );
1294
1295 map->grid()->setAnnotationPosition( QgsLayoutItemMapGrid::OutsideMapFrame, QgsLayoutItemMapGrid::Left );
1296 map->grid()->setAnnotationPosition( QgsLayoutItemMapGrid::OutsideMapFrame, QgsLayoutItemMapGrid::Right );
1297 map->grid()->setAnnotationPosition( QgsLayoutItemMapGrid::OutsideMapFrame, QgsLayoutItemMapGrid::Top );
1298 map->grid()->setAnnotationPosition( QgsLayoutItemMapGrid::OutsideMapFrame, QgsLayoutItemMapGrid::Bottom );
1299 map->updateBoundingRect();
1300
1301 QgsLayoutChecker checker2( QStringLiteral( "composermap_verticaldescending_outside" ), &l );
1302 checker2.setControlPathPrefix( QStringLiteral( "composer_mapgrid" ) );
1303 bool testResult2 = checker2.testLayout( mReport, 0, 0 );
1304 QVERIFY( testResult2 );
1305
1306 map->grid()->setAnnotationEnabled( false );
1307 }
1308 QGSTEST_MAIN( TestQgsLayoutMapGrid )
1309 #include "testqgslayoutmapgrid.moc"
1310