Skip to content

Commit

Permalink
Add method to interface to close map canvases
Browse files Browse the repository at this point in the history
  • Loading branch information
nyalldawson committed Mar 14, 2017
1 parent 57637ca commit 2d37ca9
Show file tree
Hide file tree
Showing 6 changed files with 34 additions and 0 deletions.
2 changes: 2 additions & 0 deletions python/gui/qgisinterface.sip
Expand Up @@ -62,6 +62,8 @@ class QgisInterface : QObject

virtual QgsMapCanvas* createNewMapCanvas( const QString& name ) = 0;

virtual void closeMapCanvas( const QString &name ) = 0;

public slots:


Expand Down
13 changes: 13 additions & 0 deletions src/app/qgisapp.cpp
Expand Up @@ -3176,6 +3176,19 @@ QgsMapCanvas *QgisApp::createNewMapCanvas( const QString &name, bool isFloating,
return mapCanvas;
}

void QgisApp::closeMapCanvas( const QString &name )
{
Q_FOREACH ( QgsMapCanvasDockWidget *w, findChildren< QgsMapCanvasDockWidget * >() )
{
if ( w->mapCanvas()->objectName() == name )
{
w->close();
delete w;
break;
}
}
}

void QgisApp::closeAdditionalMapCanvases()
{
freezeCanvases( true ); // closing docks may cause canvases to resize, and we don't want a map refresh occurring
Expand Down
5 changes: 5 additions & 0 deletions src/app/qgisapp.h
Expand Up @@ -245,6 +245,11 @@ class APP_EXPORT QgisApp : public QMainWindow, private Ui::MainWindow
bool synced = false, bool showCursor = true, bool scaleSynced = false,
double scaleFactor = 1.0 );

/**
* Closes the additional map canvas with matching \a name.
*/
void closeMapCanvas( const QString &name );

/**
* Closes any additional map canvases. The main map canvas will not
* be affected.
Expand Down
5 changes: 5 additions & 0 deletions src/app/qgisappinterface.cpp
Expand Up @@ -341,6 +341,11 @@ QgsMapCanvas *QgisAppInterface::createNewMapCanvas( const QString &name )
return qgis->createNewMapCanvas( name );
}

void QgisAppInterface::closeMapCanvas( const QString &name )
{
qgis->closeMapCanvas( name );
}

QgsLayerTreeMapCanvasBridge *QgisAppInterface::layerTreeCanvasBridge()
{
return qgis->layerTreeCanvasBridge();
Expand Down
1 change: 1 addition & 0 deletions src/app/qgisappinterface.h
Expand Up @@ -181,6 +181,7 @@ class APP_EXPORT QgisAppInterface : public QgisInterface

QList< QgsMapCanvas * > mapCanvases() override;
QgsMapCanvas *createNewMapCanvas( const QString &name ) override;
virtual void closeMapCanvas( const QString &name ) override;

/**
* Returns a pointer to the layer tree canvas bridge
Expand Down
8 changes: 8 additions & 0 deletions src/gui/qgisinterface.h
Expand Up @@ -113,9 +113,17 @@ class GUI_EXPORT QgisInterface : public QObject
/**
* Create a new map canvas with the specified unique \a name.
* @note added in QGIS 3.0
* @see closeMapCanvas()
*/
virtual QgsMapCanvas *createNewMapCanvas( const QString &name ) = 0;

/**
* Closes the additional map canvas with matching \a name.
* @note added in QGIS 3.0
* @see createNewMapCanvas()
*/
virtual void closeMapCanvas( const QString &name ) = 0;

public slots: // TODO: do these functions really need to be slots?

/* Exposed functions */
Expand Down

0 comments on commit 2d37ca9

Please sign in to comment.