Skip to content

Commit 0d2fbbe

Browse files
committed
Sync works now between QgsMapRenderer and QgsMapCanvas
1 parent bf7dd52 commit 0d2fbbe

File tree

3 files changed

+102
-8
lines changed

3 files changed

+102
-8
lines changed

src/gui/qgsmapcanvas.cpp

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -105,9 +105,7 @@ QgsMapCanvasRendererSync::QgsMapCanvasRendererSync( QgsMapCanvas* canvas, QgsMap
105105

106106
void QgsMapCanvasRendererSync::onExtentC2R()
107107
{
108-
mRenderer->blockSignals( true );
109108
mRenderer->setExtent( mCanvas->mapSettings().extent() );
110-
mRenderer->blockSignals( false );
111109
}
112110

113111
void QgsMapCanvasRendererSync::onExtentR2C()
@@ -117,9 +115,7 @@ void QgsMapCanvasRendererSync::onExtentR2C()
117115

118116
void QgsMapCanvasRendererSync::onMapUnitsC2R()
119117
{
120-
mRenderer->blockSignals( true );
121118
mRenderer->setMapUnits( mCanvas->mapSettings().mapUnits() );
122-
mRenderer->blockSignals( false );
123119
}
124120

125121
void QgsMapCanvasRendererSync::onMapUnitsR2C()
@@ -129,9 +125,7 @@ void QgsMapCanvasRendererSync::onMapUnitsR2C()
129125

130126
void QgsMapCanvasRendererSync::onCrsTransformC2R()
131127
{
132-
mRenderer->blockSignals( true );
133128
mRenderer->setProjectionsEnabled( mCanvas->mapSettings().hasCrsTransformEnabled() );
134-
mRenderer->blockSignals( false );
135129
}
136130

137131
void QgsMapCanvasRendererSync::onCrsTransformR2C()
@@ -141,9 +135,7 @@ void QgsMapCanvasRendererSync::onCrsTransformR2C()
141135

142136
void QgsMapCanvasRendererSync::onDestCrsC2R()
143137
{
144-
mRenderer->blockSignals( true );
145138
mRenderer->setDestinationCrs( mCanvas->mapSettings().destinationCrs() );
146-
mRenderer->blockSignals( false );
147139
}
148140

149141
void QgsMapCanvasRendererSync::onDestCrsR2C()
@@ -461,6 +453,9 @@ void QgsMapCanvas::setCrsTransformEnabled(bool enabled)
461453

462454
void QgsMapCanvas::setDestinationCrs(const QgsCoordinateReferenceSystem &crs)
463455
{
456+
if ( mSettings.destinationCrs() == crs )
457+
return;
458+
464459
if ( mSettings.hasCrsTransformEnabled() )
465460
{
466461
// try to reproject current extent to the new one
@@ -734,6 +729,9 @@ void QgsMapCanvas::setExtent( QgsRectangle const & r )
734729
{
735730
QgsRectangle current = extent();
736731

732+
if ( r == current )
733+
return;
734+
737735
if ( r.isEmpty() )
738736
{
739737
QgsDebugMsg( "Empty extent - keeping old extent with new center!" );
@@ -1425,6 +1423,9 @@ double QgsMapCanvas::mapUnitsPerPixel() const
14251423

14261424
void QgsMapCanvas::setMapUnits( QGis::UnitType u )
14271425
{
1426+
if ( mSettings.mapUnits() == u )
1427+
return;
1428+
14281429
QgsDebugMsg( "Setting map units to " + QString::number( static_cast<int>( u ) ) );
14291430
mSettings.setMapUnits( u );
14301431

tests/src/gui/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,4 +122,5 @@ ADD_QGIS_TEST(projectionissues testprojectionissues.cpp)
122122
ADD_QGIS_TEST(scalecombobox testqgsscalecombobox.cpp)
123123
ADD_QGIS_TEST(dualviewtest testqgsdualview.cpp )
124124
ADD_QGIS_TEST(rubberbandtest testqgsrubberband.cpp )
125+
ADD_QGIS_TEST(mapcanvastest testqgsmapcanvas.cpp )
125126

tests/src/gui/testqgsmapcanvas.cpp

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
2+
#include <QtTest>
3+
4+
#include <qgsapplication.h>
5+
#include <qgsmapcanvas.h>
6+
#include <qgsmaprenderer.h>
7+
8+
class TestQgsMapCanvas : public QObject
9+
{
10+
Q_OBJECT
11+
private slots:
12+
void initTestCase(); // will be called before the first testfunction is executed.
13+
void cleanupTestCase(); // will be called after the last testfunction was executed.
14+
15+
void testMapRendererInteraction();
16+
17+
private:
18+
QgsMapCanvas* mCanvas;
19+
};
20+
21+
22+
23+
void TestQgsMapCanvas::initTestCase()
24+
{
25+
QgsApplication::init(); // init paths for CRS lookup
26+
27+
mCanvas = new QgsMapCanvas();
28+
}
29+
30+
void TestQgsMapCanvas::cleanupTestCase()
31+
{
32+
}
33+
34+
void TestQgsMapCanvas::testMapRendererInteraction()
35+
{
36+
QgsMapRenderer* mr = mCanvas->mapRenderer();
37+
38+
// CRS transforms
39+
40+
QSignalSpy spy0( mCanvas, SIGNAL(hasCrsTransformEnabledChanged(bool)) );
41+
mr->setProjectionsEnabled( true );
42+
QCOMPARE( mr->hasCrsTransformEnabled(), true );
43+
QCOMPARE( mCanvas->hasCrsTransformEnabled(), true );
44+
QCOMPARE( spy0.count(), 1 );
45+
46+
QSignalSpy spy1( mr, SIGNAL(hasCrsTransformEnabled(bool)) );
47+
mCanvas->setCrsTransformEnabled( false );
48+
QCOMPARE( mr->hasCrsTransformEnabled(), false );
49+
QCOMPARE( mCanvas->hasCrsTransformEnabled(), false );
50+
QCOMPARE( spy1.count(), 1 );
51+
52+
// Extent
53+
54+
QSignalSpy spy2( mCanvas, SIGNAL(extentsChanged()) );
55+
QgsRectangle r1( 10, 10, 20, 20 );
56+
mr->setExtent( r1 );
57+
QgsRectangle r2 = mr->extent();
58+
QCOMPARE( mCanvas->extent(), r2 );
59+
QCOMPARE( spy2.count(), 1 );
60+
61+
QgsRectangle r3( 100, 100, 200, 200 );
62+
QSignalSpy spy3( mr, SIGNAL(extentsChanged()) );
63+
mCanvas->setExtent( r3 );
64+
QgsRectangle r4 = mCanvas->extent();
65+
QCOMPARE( mr->extent(), r4 );
66+
QCOMPARE( spy3.count(), 1 );
67+
68+
// Destination CRS
69+
70+
QgsCoordinateReferenceSystem crs1("EPSG:27700");
71+
QCOMPARE( crs1.isValid(), true );
72+
QSignalSpy spy4( mCanvas, SIGNAL(destinationCrsChanged()) );
73+
mr->setDestinationCrs( crs1 );
74+
qDebug(" crs %s vs %s", mCanvas->mapSettings().destinationCrs().authid().toAscii().data(), crs1.authid().toAscii().data() );
75+
QCOMPARE( mCanvas->mapSettings().destinationCrs(), crs1 );
76+
QCOMPARE( mr->destinationCrs(), crs1 );
77+
QCOMPARE( spy4.count(), 1 );
78+
79+
QgsCoordinateReferenceSystem crs2("EPSG:4326");
80+
QCOMPARE( crs2.isValid(), true );
81+
QSignalSpy spy5( mr, SIGNAL(destinationSrsChanged()) );
82+
mCanvas->setDestinationCrs( crs2 );
83+
QCOMPARE( mCanvas->mapSettings().destinationCrs(), crs2 );
84+
QCOMPARE( mr->destinationCrs(), crs2 );
85+
QCOMPARE( spy5.count(), 1 );
86+
87+
// TODO: set map units
88+
}
89+
90+
91+
QTEST_MAIN( TestQgsMapCanvas )
92+
#include "moc_testqgsmapcanvas.cxx"

0 commit comments

Comments
 (0)