Skip to content

Commit ea10cc6

Browse files
committedMar 13, 2017
Allow annotations to be toggled in additional map views
1 parent 76b9d94 commit ea10cc6

8 files changed

+87
-18
lines changed
 

‎python/gui/qgsmapcanvas.sip

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,10 @@ class QgsMapCanvas : QGraphicsView
9797
void setSegmentationTolerance( double tolerance );
9898
void setSegmentationToleranceType( QgsAbstractGeometry::SegmentationToleranceType type );
9999

100+
QList< QgsMapCanvasAnnotationItem *> annotationItems() const;
101+
bool annotationsVisible() const;
102+
void setAnnotationsVisible( bool visible );
103+
100104
public slots:
101105

102106
//! Repaints the canvas map

‎src/app/qgsmapcanvasdockwidget.cpp

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,9 +87,14 @@ QgsMapCanvasDockWidget::QgsMapCanvasDockWidget( const QString &name, QWidget *pa
8787

8888
settingsMenu->addSeparator();
8989
settingsMenu->addAction( mActionSetCrs );
90+
settingsMenu->addAction( mActionShowAnnotations );
9091
settingsMenu->addAction( mActionRename );
91-
settingsMenu->addSeparator();
92+
93+
connect( settingsMenu, &QMenu::aboutToShow, this, &QgsMapCanvasDockWidget::settingsMenuAboutToShow );
94+
9295
connect( mActionRename, &QAction::triggered, this, &QgsMapCanvasDockWidget::renameTriggered );
96+
mActionShowAnnotations->setChecked( mMapCanvas->annotationsVisible() );
97+
connect( mActionShowAnnotations, &QAction::toggled, this, [ = ]( bool checked ) { mMapCanvas->setAnnotationsVisible( checked ); } );
9398

9499
mScaleCombo = settingsAction->scaleCombo();
95100
mRotationEdit = settingsAction->rotationSpinBox();
@@ -279,6 +284,11 @@ void QgsMapCanvasDockWidget::menuAboutToShow()
279284
mMenu->addActions( mMenuPresetActions );
280285
}
281286

287+
void QgsMapCanvasDockWidget::settingsMenuAboutToShow()
288+
{
289+
whileBlocking( mActionShowAnnotations )->setChecked( mMapCanvas->annotationsVisible() );
290+
}
291+
282292

283293
QgsMapSettingsAction::QgsMapSettingsAction( QWidget *parent )
284294
: QWidgetAction( parent )

‎src/app/qgsmapcanvasdockwidget.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ class APP_EXPORT QgsMapCanvasDockWidget : public QgsDockWidget, private Ui::QgsM
6969
void mapExtentChanged();
7070
void mapCrsChanged();
7171
void menuAboutToShow();
72+
void settingsMenuAboutToShow();
7273

7374
private:
7475

‎src/app/qgsmaptoolannotation.cpp

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -336,24 +336,14 @@ QgsMapCanvasAnnotationItem *QgsMapToolAnnotation::selectedItem() const
336336

337337
QList<QgsMapCanvasAnnotationItem *> QgsMapToolAnnotation::annotationItems() const
338338
{
339-
QList<QgsMapCanvasAnnotationItem *> annotationItemList;
340-
if ( !mCanvas || !mCanvas->scene() )
339+
if ( !mCanvas )
341340
{
342-
return annotationItemList;
341+
return QList<QgsMapCanvasAnnotationItem *>();
343342
}
344-
345-
QList<QGraphicsItem *> itemList = mCanvas->scene()->items();
346-
QList<QGraphicsItem *>::iterator it = itemList.begin();
347-
for ( ; it != itemList.end(); ++it )
343+
else
348344
{
349-
QgsMapCanvasAnnotationItem *aItem = dynamic_cast<QgsMapCanvasAnnotationItem *>( *it );
350-
if ( aItem )
351-
{
352-
annotationItemList.push_back( aItem );
353-
}
345+
return mCanvas->annotationItems();
354346
}
355-
356-
return annotationItemList;
357347
}
358348

359349
void QgsMapToolAnnotation::toggleTextItemVisibilities()

‎src/gui/qgsmapcanvas.cpp

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1890,6 +1890,7 @@ void QgsMapCanvas::readProject( const QDomDocument &doc )
18901890
setTheme( elem.attribute( QStringLiteral( "theme" ) ) );
18911891
}
18921892
}
1893+
setAnnotationsVisible( elem.attribute( QStringLiteral( "annotationsVisible" ), QStringLiteral( "1" ) ).toInt() );
18931894
}
18941895
else
18951896
{
@@ -1910,9 +1911,10 @@ void QgsMapCanvas::writeProject( QDomDocument &doc )
19101911
QDomNode qgisNode = nl.item( 0 ); // there should only be one, so zeroth element ok
19111912

19121913
QDomElement mapcanvasNode = doc.createElement( QStringLiteral( "mapcanvas" ) );
1913-
mapcanvasNode.setAttribute( "name", objectName() );
1914+
mapcanvasNode.setAttribute( QStringLiteral( "name" ), objectName() );
19141915
if ( !mTheme.isEmpty() )
1915-
mapcanvasNode.setAttribute( "theme", mTheme );
1916+
mapcanvasNode.setAttribute( QStringLiteral( "theme" ), mTheme );
1917+
mapcanvasNode.setAttribute( QStringLiteral( "annotationsVisible" ), mAnnotationsVisible );
19161918
qgisNode.appendChild( mapcanvasNode );
19171919

19181920
mSettings.writeXml( mapcanvasNode, doc );
@@ -2074,3 +2076,29 @@ void QgsMapCanvas::setSegmentationToleranceType( QgsAbstractGeometry::Segmentati
20742076
{
20752077
mSettings.setSegmentationToleranceType( type );
20762078
}
2079+
2080+
QList<QgsMapCanvasAnnotationItem *> QgsMapCanvas::annotationItems() const
2081+
{
2082+
QList<QgsMapCanvasAnnotationItem *> annotationItemList;
2083+
QList<QGraphicsItem *> itemList = mScene->items();
2084+
QList<QGraphicsItem *>::iterator it = itemList.begin();
2085+
for ( ; it != itemList.end(); ++it )
2086+
{
2087+
QgsMapCanvasAnnotationItem *aItem = dynamic_cast< QgsMapCanvasAnnotationItem *>( *it );
2088+
if ( aItem )
2089+
{
2090+
annotationItemList.push_back( aItem );
2091+
}
2092+
}
2093+
2094+
return annotationItemList;
2095+
}
2096+
2097+
void QgsMapCanvas::setAnnotationsVisible( bool show )
2098+
{
2099+
mAnnotationsVisible = show;
2100+
Q_FOREACH ( QgsMapCanvasAnnotationItem *item, annotationItems() )
2101+
{
2102+
item->setVisible( show );
2103+
}
2104+
}

‎src/gui/qgsmapcanvas.h

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ class QgsMapOverviewCanvas;
6363
class QgsMapTool;
6464
class QgsSnappingUtils;
6565
class QgsRubberBand;
66-
66+
class QgsMapCanvasAnnotationItem;
6767

6868
/** \ingroup gui
6969
* Map canvas is a class for displaying all GIS data types on a canvas.
@@ -468,6 +468,26 @@ class GUI_EXPORT QgsMapCanvas : public QGraphicsView
468468
@param type the segmentation tolerance typename*/
469469
void setSegmentationToleranceType( QgsAbstractGeometry::SegmentationToleranceType type );
470470

471+
/**
472+
* Returns a list of all annotation items in the canvas.
473+
* @note added in QGIS 3.0
474+
*/
475+
QList< QgsMapCanvasAnnotationItem *> annotationItems() const;
476+
477+
/**
478+
* Returns true if annotations are visible within the map canvas.
479+
* @note added in QGIS 3.0
480+
* @see setAnnotationsVisible()
481+
*/
482+
bool annotationsVisible() const { return mAnnotationsVisible; }
483+
484+
/**
485+
* Sets whether annotations are \a visible in the canvas.
486+
* @note added in QGIS 3.0
487+
* @see annotationsVisible()
488+
*/
489+
void setAnnotationsVisible( bool visible );
490+
471491
public slots:
472492

473493
//! Repaints the canvas map
@@ -784,6 +804,8 @@ class GUI_EXPORT QgsMapCanvas : public QGraphicsView
784804

785805
QString mTheme;
786806

807+
bool mAnnotationsVisible = true;
808+
787809
//! Force a resize of the map canvas item
788810
//! @note added in 2.16
789811
void updateMapSize();

‎src/gui/qgsmapcanvasannotationitem.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ QgsMapCanvasAnnotationItem::QgsMapCanvasAnnotationItem( QgsAnnotation *annotatio
3333
, mAnnotation( annotation )
3434
{
3535
setFlag( QGraphicsItem::ItemIsSelectable, true );
36+
if ( mapCanvas && !mapCanvas->annotationsVisible() )
37+
setVisible( false );
38+
3639
connect( mAnnotation, &QgsAnnotation::appearanceChanged, this, [this] { update(); } );
3740
connect( mAnnotation, &QgsAnnotation::moved, this, [this] { updatePosition(); } );
3841
connect( mAnnotation, &QgsAnnotation::moved, this, &QgsMapCanvasAnnotationItem::setFeatureForMapPosition );

‎src/ui/qgsmapcanvasdockwidgetbase.ui

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,17 @@
132132
<string>Zoom &amp;Full</string>
133133
</property>
134134
</action>
135+
<action name="mActionShowAnnotations">
136+
<property name="checkable">
137+
<bool>true</bool>
138+
</property>
139+
<property name="text">
140+
<string>Show Annotations</string>
141+
</property>
142+
<property name="toolTip">
143+
<string>Show Annotations</string>
144+
</property>
145+
</action>
135146
</widget>
136147
<customwidgets>
137148
<customwidget>

0 commit comments

Comments
 (0)
Please sign in to comment.