[feature] addMeshLayer to qgsinterface

This commit is contained in:
Peter Petrik 2018-07-13 09:20:21 +02:00 committed by Martin Dobias
parent c8b94d38bb
commit e135b9cf9f
10 changed files with 34 additions and 18 deletions

View File

@ -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;

View File

@ -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.

View File

@ -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<QgsMeshLayer> layer( new QgsMeshLayer( uri, base, providerKey, options ) );
std::unique_ptr<QgsMeshLayer> 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

View File

@ -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 );

View File

@ -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 );

View File

@ -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;

View File

@ -47,6 +47,7 @@ class QgsVectorLayerTools;
class QgsOptionsWidgetFactory;
class QgsLocatorFilter;
class QgsStatusBar;
class QgsMeshLayer;
#include <QObject>
#include <QFont>
@ -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

View File

@ -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

View File

@ -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

View File

@ -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" ) );
}
}