@@ -4626,7 +4626,8 @@ static void setupVectorLayer( const QString &vectorLayerPath,
4626
4626
bool QgisApp::addVectorLayers( const QStringList &layerQStringList, const QString &enc, const QString &dataSourceType )
4627
4627
{
4628
4628
bool wasfrozen = mMapCanvas->isFrozen();
4629
- QList<QgsMapLayer *> myList;
4629
+ QList<QgsMapLayer *> layersToAdd;
4630
+ QList<QgsMapLayer *> addedLayers;
4630
4631
QgsSettings settings;
4631
4632
4632
4633
Q_FOREACH ( QString src, layerQStringList )
@@ -4713,7 +4714,7 @@ bool QgisApp::addVectorLayers( const QStringList &layerQStringList, const QStrin
4713
4714
// sublayers selection dialog so the user can select the sublayers to actually load.
4714
4715
if ( sublayers.count() > 1 )
4715
4716
{
4716
- askUserForOGRSublayers( layer );
4717
+ addedLayers.append( askUserForOGRSublayers( layer ) );
4717
4718
4718
4719
// The first layer loaded is not useful in that case. The user can select it in
4719
4720
// the list if he wants to load it.
@@ -4725,7 +4726,7 @@ bool QgisApp::addVectorLayers( const QStringList &layerQStringList, const QStrin
4725
4726
setupVectorLayer( src, sublayers, layer,
4726
4727
QStringLiteral( "ogr" ), options );
4727
4728
4728
- myList << layer;
4729
+ layersToAdd << layer;
4729
4730
}
4730
4731
else
4731
4732
{
@@ -4754,14 +4755,14 @@ bool QgisApp::addVectorLayers( const QStringList &layerQStringList, const QStrin
4754
4755
}
4755
4756
4756
4757
// make sure at least one layer was successfully added
4757
- if ( myList .isEmpty() )
4758
+ if ( layersToAdd .isEmpty() )
4758
4759
{
4759
- return false ;
4760
+ return !addedLayers.isEmpty() ;
4760
4761
}
4761
4762
4762
4763
// Register this layer with the layers registry
4763
- QgsProject::instance()->addMapLayers( myList );
4764
- Q_FOREACH ( QgsMapLayer *l, myList )
4764
+ QgsProject::instance()->addMapLayers( layersToAdd );
4765
+ for ( QgsMapLayer *l : qgis::as_const( layersToAdd ) )
4765
4766
{
4766
4767
bool ok;
4767
4768
l->loadDefaultStyle( ok );
@@ -4782,10 +4783,15 @@ bool QgisApp::addVectorLayers( const QStringList &layerQStringList, const QStrin
4782
4783
// statusBar()->showMessage( mMapCanvas->extent().toString( 2 ) );
4783
4784
4784
4785
return true;
4785
- } // QgisApp::addVectorLayer()
4786
+ }
4786
4787
4787
4788
4788
4789
QgsMeshLayer *QgisApp::addMeshLayer( const QString &url, const QString &baseName, const QString &providerKey )
4790
+ {
4791
+ return addMeshLayerPrivate( url, baseName, providerKey );
4792
+ }
4793
+
4794
+ QgsMeshLayer *QgisApp::addMeshLayerPrivate( const QString &url, const QString &baseName, const QString &providerKey, const bool guiWarning )
4789
4795
{
4790
4796
bool wasfrozen = mMapCanvas->isFrozen();
4791
4797
QgsSettings settings;
@@ -4805,8 +4811,11 @@ QgsMeshLayer *QgisApp::addMeshLayer( const QString &url, const QString &baseName
4805
4811
4806
4812
if ( ! layer || !layer->isValid() )
4807
4813
{
4808
- QString msg = tr( "%1 is not a valid or recognized data source." ).arg( url );
4809
- visibleMessageBar()->pushMessage( tr( "Invalid Data Source" ), msg, Qgis::Critical, messageTimeout() );
4814
+ if ( guiWarning )
4815
+ {
4816
+ QString msg = tr( "%1 is not a valid or recognized data source." ).arg( url );
4817
+ visibleMessageBar()->pushMessage( tr( "Invalid Data Source" ), msg, Qgis::Critical, messageTimeout() );
4818
+ }
4810
4819
4811
4820
// since the layer is bad, stomp on it
4812
4821
return nullptr;
@@ -4830,7 +4839,7 @@ QgsMeshLayer *QgisApp::addMeshLayer( const QString &url, const QString &baseName
4830
4839
refreshMapCanvas();
4831
4840
}
4832
4841
return layer.release();
4833
- } // QgisApp::addMeshLayer()
4842
+ }
4834
4843
4835
4844
// present a dialog to choose zipitem layers
4836
4845
bool QgisApp::askUserForZipItemLayers( const QString &path )
@@ -5119,13 +5128,14 @@ void QgisApp::loadGDALSublayers( const QString &uri, const QStringList &list )
5119
5128
5120
5129
// This method is the method that does the real job. If the layer given in
5121
5130
// parameter is nullptr, then the method tries to act on the activeLayer.
5122
- void QgisApp::askUserForOGRSublayers( QgsVectorLayer *layer )
5131
+ QList<QgsMapLayer *> QgisApp::askUserForOGRSublayers( QgsVectorLayer *layer )
5123
5132
{
5133
+ QList<QgsMapLayer *> result;
5124
5134
if ( !layer )
5125
5135
{
5126
5136
layer = qobject_cast<QgsVectorLayer *>( activeLayer() );
5127
5137
if ( !layer || layer->dataProvider()->name() != QLatin1String( "ogr" ) )
5128
- return;
5138
+ return result ;
5129
5139
}
5130
5140
5131
5141
QStringList sublayers = layer->dataProvider()->subLayers();
@@ -5170,7 +5180,7 @@ void QgisApp::askUserForOGRSublayers( QgsVectorLayer *layer )
5170
5180
chooseSublayersDialog.populateLayerTable( list );
5171
5181
5172
5182
if ( !chooseSublayersDialog.exec() )
5173
- return;
5183
+ return result ;
5174
5184
5175
5185
QString name = layer->name();
5176
5186
@@ -5181,7 +5191,6 @@ void QgisApp::askUserForOGRSublayers( QgsVectorLayer *layer )
5181
5191
// The uri must contain the actual uri of the vectorLayer from which we are
5182
5192
// going to load the sublayers.
5183
5193
QString fileName = QFileInfo( uri ).baseName();
5184
- QList<QgsMapLayer *> myList;
5185
5194
Q_FOREACH ( const QgsSublayersDialog::LayerDefinition &def, chooseSublayersDialog.selection() )
5186
5195
{
5187
5196
QString layerGeometryType = def.type;
@@ -5208,7 +5217,7 @@ void QgisApp::askUserForOGRSublayers( QgsVectorLayer *layer )
5208
5217
QgsVectorLayer *layer = new QgsVectorLayer( composedURI, name, QStringLiteral( "ogr" ), options );
5209
5218
if ( layer && layer->isValid() )
5210
5219
{
5211
- myList << layer;
5220
+ result << layer;
5212
5221
}
5213
5222
else
5214
5223
{
@@ -5218,7 +5227,7 @@ void QgisApp::askUserForOGRSublayers( QgsVectorLayer *layer )
5218
5227
}
5219
5228
}
5220
5229
5221
- if ( ! myList .isEmpty() )
5230
+ if ( !result .isEmpty() )
5222
5231
{
5223
5232
QgsSettings settings;
5224
5233
bool addToGroup = settings.value( QStringLiteral( "/qgis/openSublayersInGroup" ), true ).toBool();
@@ -5227,8 +5236,8 @@ void QgisApp::askUserForOGRSublayers( QgsVectorLayer *layer )
5227
5236
if ( addToGroup )
5228
5237
group = QgsProject::instance()->layerTreeRoot()->insertGroup( 0, name );
5229
5238
5230
- QgsProject::instance()->addMapLayers( myList , ! addToGroup );
5231
- Q_FOREACH ( QgsMapLayer *l, myList )
5239
+ QgsProject::instance()->addMapLayers( result , ! addToGroup );
5240
+ for ( QgsMapLayer *l : qgis::as_const( result ) )
5232
5241
{
5233
5242
bool ok;
5234
5243
l->loadDefaultStyle( ok );
@@ -5241,6 +5250,7 @@ void QgisApp::askUserForOGRSublayers( QgsVectorLayer *layer )
5241
5250
if ( addToGroup && ! newLayersVisible )
5242
5251
group->setItemVisibilityCheckedRecursive( newLayersVisible );
5243
5252
}
5253
+ return result;
5244
5254
}
5245
5255
5246
5256
void QgisApp::addDatabaseLayers( QStringList const &layerPathList, QString const &providerKey )
@@ -6478,7 +6488,7 @@ bool QgisApp::openLayer( const QString &fileName, bool allowInteractive )
6478
6488
// Try to load as mesh layer after raster & vector
6479
6489
if ( !ok )
6480
6490
{
6481
- ok = addMeshLayer( fileName, fileInfo.completeBaseName(), "mdal" );
6491
+ ok = static_cast< bool >( addMeshLayerPrivate( fileName, fileInfo.completeBaseName(), QStringLiteral( "mdal" ), false ) );
6482
6492
}
6483
6493
6484
6494
if ( !ok )
@@ -11055,12 +11065,12 @@ QgsVectorLayer *QgisApp::addVectorLayer( const QString &vectorLayerPath, const Q
11055
11065
! vectorLayerPath.contains( QStringLiteral( "layerid=" ) ) &&
11056
11066
! vectorLayerPath.contains( QStringLiteral( "layername=" ) ) )
11057
11067
{
11058
- askUserForOGRSublayers( layer );
11068
+ QList< QgsMapLayer * > addedLayers = askUserForOGRSublayers( layer );
11059
11069
11060
11070
// The first layer loaded is not useful in that case. The user can select it in
11061
11071
// the list if he wants to load it.
11062
11072
delete layer;
11063
- layer = nullptr;
11073
+ layer = addedLayers.isEmpty() ? nullptr : qobject_cast< QgsVectorLayer * >( addedLayers.at( 0 ) ) ;
11064
11074
}
11065
11075
else
11066
11076
{
0 commit comments