From e135b9cf9fb66f4dfda22c418ce54469dc287abf Mon Sep 17 00:00:00 2001 From: Peter Petrik Date: Fri, 13 Jul 2018 09:20:21 +0200 Subject: [PATCH] [feature] addMeshLayer to qgsinterface --- python/gui/auto_generated/qgisinterface.sip.in | 5 +++++ .../qgsabstractdatasourcewidget.sip.in | 2 +- src/app/qgisapp.cpp | 16 ++++++++-------- src/app/qgisapp.h | 12 ++++++------ src/app/qgisappinterface.cpp | 5 +++++ src/app/qgisappinterface.h | 2 ++ src/gui/qgisinterface.h | 4 ++++ src/gui/qgsabstractdatasourcewidget.h | 2 +- src/gui/qgsdatasourcemanagerdialog.h | 2 +- src/providers/mdal/qgsmdalsourceselect.cpp | 2 +- 10 files changed, 34 insertions(+), 18 deletions(-) diff --git a/python/gui/auto_generated/qgisinterface.sip.in b/python/gui/auto_generated/qgisinterface.sip.in index ac96b380b94..7e8f2bfd4e7 100644 --- a/python/gui/auto_generated/qgisinterface.sip.in +++ b/python/gui/auto_generated/qgisinterface.sip.in @@ -629,6 +629,11 @@ Add a raster layer given a raster layer file name virtual QgsRasterLayer *addRasterLayer( const QString &url, const QString &layerName, const QString &providerKey ) = 0; %Docstring Add a WMS layer +%End + + virtual QgsMeshLayer *addMeshLayer( const QString &url, const QString &baseName, const QString &providerKey ) = 0; +%Docstring +Add a mesh layer %End virtual bool addProject( const QString &project ) = 0; diff --git a/python/gui/auto_generated/qgsabstractdatasourcewidget.sip.in b/python/gui/auto_generated/qgsabstractdatasourcewidget.sip.in index af705c958e3..f71e813f6a8 100644 --- a/python/gui/auto_generated/qgsabstractdatasourcewidget.sip.in +++ b/python/gui/auto_generated/qgsabstractdatasourcewidget.sip.in @@ -76,7 +76,7 @@ If ``providerKey`` is not specified, the default provider key associated with th will be used. %End - void addMeshLayer( const QString &uri, const QString &providerKey ); + void addMeshLayer( const QString &url, const QString &baseName, const QString &providerKey ); %Docstring Emitted when a mesh layer has been selected for addition. diff --git a/src/app/qgisapp.cpp b/src/app/qgisapp.cpp index 5d6699b0ddc..244fb1cfcd8 100644 --- a/src/app/qgisapp.cpp +++ b/src/app/qgisapp.cpp @@ -4486,13 +4486,12 @@ bool QgisApp::addVectorLayers( const QStringList &layerQStringList, const QStrin } // QgisApp::addVectorLayer() -bool QgisApp::addMeshLayer( const QString &uri, const QString &providerKey ) +QgsMeshLayer *QgisApp::addMeshLayer( const QString &url, const QString &baseName, const QString &providerKey ) { bool wasfrozen = mMapCanvas->isFrozen(); QgsSettings settings; - QFileInfo fi( uri ); - QString base = fi.completeBaseName(); + QString base( baseName ); if ( settings.value( QStringLiteral( "qgis/formatLayerName" ), false ).toBool() ) { @@ -4503,23 +4502,24 @@ bool QgisApp::addMeshLayer( const QString &uri, const QString &providerKey ) // create the layer QgsMeshLayer::LayerOptions options; - std::unique_ptr layer( new QgsMeshLayer( uri, base, providerKey, options ) ); + std::unique_ptr layer( new QgsMeshLayer( url, base, providerKey, options ) ); if ( ! layer || !layer->isValid() ) { - QString msg = tr( "%1 is not a valid or recognized data source." ).arg( uri ); + QString msg = tr( "%1 is not a valid or recognized data source." ).arg( url ); messageBar()->pushMessage( tr( "Invalid Data Source" ), msg, Qgis::Critical, messageTimeout() ); // since the layer is bad, stomp on it - return false; + return nullptr; } // Register this layer with the layers registry freezeCanvases(); + + QgsProject::instance()->addMapLayer( layer.get() ); bool ok; layer->loadDefaultStyle( ok ); layer->loadDefaultMetadata( ok ); - QgsProject::instance()->addMapLayer( layer.release() ); activateDeactivateLayerRelatedActions( activeLayer() ); @@ -4530,7 +4530,7 @@ bool QgisApp::addMeshLayer( const QString &uri, const QString &providerKey ) freezeCanvases( false ); refreshMapCanvas(); } - return true; + return layer.release(); } // QgisApp::addMeshLayer() // present a dialog to choose zipitem layers diff --git a/src/app/qgisapp.h b/src/app/qgisapp.h index 82949d64eec..9cff9f831f4 100644 --- a/src/app/qgisapp.h +++ b/src/app/qgisapp.h @@ -905,6 +905,12 @@ class APP_EXPORT QgisApp : public QMainWindow, private Ui::MainWindow */ QgsVectorLayer *addVectorLayer( const QString &vectorLayerPath, const QString &baseName, const QString &providerKey ); + /** + * Adds a mesh layer directly without prompting user for location + * \returns true if successfully added layer + */ + QgsMeshLayer *addMeshLayer( const QString &url, const QString &baseName, const QString &providerKey ); + /** * \brief overloaded version of the private addLayer method that takes a list of * file names instead of prompting user with a dialog. @@ -922,12 +928,6 @@ class APP_EXPORT QgisApp : public QMainWindow, private Ui::MainWindow */ bool addRasterLayers( const QStringList &layerQStringList, bool guiWarning = true ); - /** - * Adds a mesh layer directly without prompting user for location - * \returns true if successfully added layer - */ - bool addMeshLayer( const QString &uri, const QString &providerKey ); - //! Open a plugin layer using its provider QgsPluginLayer *addPluginLayer( const QString &uri, const QString &baseName, const QString &providerKey ); diff --git a/src/app/qgisappinterface.cpp b/src/app/qgisappinterface.cpp index 9196409a839..7992f9e2929 100644 --- a/src/app/qgisappinterface.cpp +++ b/src/app/qgisappinterface.cpp @@ -157,6 +157,11 @@ QgsRasterLayer *QgisAppInterface::addRasterLayer( const QString &url, const QStr return qgis->addRasterLayer( url, baseName, providerKey ); } +QgsMeshLayer *QgisAppInterface::addMeshLayer( const QString &url, const QString &baseName, const QString &providerKey ) +{ + return qgis->addMeshLayer( url, baseName, providerKey ); +} + bool QgisAppInterface::addProject( const QString &projectName ) { return qgis->addProject( projectName ); diff --git a/src/app/qgisappinterface.h b/src/app/qgisappinterface.h index d91d2219498..267bc97bb9f 100644 --- a/src/app/qgisappinterface.h +++ b/src/app/qgisappinterface.h @@ -75,6 +75,8 @@ class APP_EXPORT QgisAppInterface : public QgisInterface QgsRasterLayer *addRasterLayer( const QString &rasterLayerPath, const QString &baseName ) override; //! Add a WMS layer QgsRasterLayer *addRasterLayer( const QString &url, const QString &baseName, const QString &providerKey ) override; + //! Add a mesh layer + QgsMeshLayer *addMeshLayer( const QString &url, const QString &baseName, const QString &providerKey ) override; //! Add a project bool addProject( const QString &projectName ) override; diff --git a/src/gui/qgisinterface.h b/src/gui/qgisinterface.h index d58fde19f7a..91757225aea 100644 --- a/src/gui/qgisinterface.h +++ b/src/gui/qgisinterface.h @@ -47,6 +47,7 @@ class QgsVectorLayerTools; class QgsOptionsWidgetFactory; class QgsLocatorFilter; class QgsStatusBar; +class QgsMeshLayer; #include #include @@ -546,6 +547,9 @@ class GUI_EXPORT QgisInterface : public QObject //! Add a WMS layer virtual QgsRasterLayer *addRasterLayer( const QString &url, const QString &layerName, const QString &providerKey ) = 0; + //! Add a mesh layer + virtual QgsMeshLayer *addMeshLayer( const QString &url, const QString &baseName, const QString &providerKey ) = 0; + //! Add a project virtual bool addProject( const QString &project ) = 0; //! Start a blank project diff --git a/src/gui/qgsabstractdatasourcewidget.h b/src/gui/qgsabstractdatasourcewidget.h index c9a136e8d83..5270d346d96 100644 --- a/src/gui/qgsabstractdatasourcewidget.h +++ b/src/gui/qgsabstractdatasourcewidget.h @@ -93,7 +93,7 @@ class GUI_EXPORT QgsAbstractDataSourceWidget : public QDialog * Emitted when a mesh layer has been selected for addition. * \since QGIS 3.4 */ - void addMeshLayer( const QString &uri, const QString &providerKey ); + void addMeshLayer( const QString &url, const QString &baseName, const QString &providerKey ); /** * Emitted when one or more OGR supported layers are selected for addition diff --git a/src/gui/qgsdatasourcemanagerdialog.h b/src/gui/qgsdatasourcemanagerdialog.h index f21d4ef3fab..7ab79237875 100644 --- a/src/gui/qgsdatasourcemanagerdialog.h +++ b/src/gui/qgsdatasourcemanagerdialog.h @@ -100,7 +100,7 @@ class GUI_EXPORT QgsDataSourceManagerDialog : public QgsOptionsDialogBase, priva * Emitted when a mesh layer was selected for addition: for signal forwarding to QgisApp\ * \since QGIS 3.4 */ - void addMeshLayer( const QString &uri, const QString &providerKey ); + void addMeshLayer( const QString &uri, const QString &baseName, const QString &providerKey ); //! Replace the selected layer by a vector layer defined by uri, layer name, data source uri void replaceSelectedVectorLayer( const QString &oldId, const QString &uri, const QString &layerName, const QString &provider ); //! Emitted when a one or more layer were selected for addition: for signal forwarding to QgisApp diff --git a/src/providers/mdal/qgsmdalsourceselect.cpp b/src/providers/mdal/qgsmdalsourceselect.cpp index debbe3d31a5..638d0be5a29 100644 --- a/src/providers/mdal/qgsmdalsourceselect.cpp +++ b/src/providers/mdal/qgsmdalsourceselect.cpp @@ -49,7 +49,7 @@ void QgsMdalSourceSelect::addButtonClicked() for ( const QString &path : QgsFileWidget::splitFilePaths( mMeshPath ) ) { - emit addMeshLayer( path, QStringLiteral( "mdal" ) ); + emit addMeshLayer( path, QFileInfo( path ).baseName(), QStringLiteral( "mdal" ) ); } }