177
177
#include " ogr/qgsopenvectorlayerdialog.h"
178
178
#include " ogr/qgsvectorlayersaveasdialog.h"
179
179
//
180
- // Gdal/Ogr includes
180
+ // GDAL/OGR includes
181
181
//
182
182
#include < ogr_api.h>
183
183
@@ -2135,7 +2135,6 @@ void QgisApp::addVectorLayer()
2135
2135
2136
2136
bool QgisApp::addVectorLayers ( QStringList const & theLayerQStringList, const QString& enc, const QString dataSourceType )
2137
2137
{
2138
-
2139
2138
foreach ( QString src, theLayerQStringList )
2140
2139
{
2141
2140
src = src.trimmed ();
@@ -2270,11 +2269,27 @@ void QgisApp::askUserForGDALSublayers( QgsRasterLayer *layer )
2270
2269
}
2271
2270
}
2272
2271
2272
+ bool QgisApp::shouldAskUserForGDALSublayers ( QgsRasterLayer *layer )
2273
+ {
2274
+ // return false if layer is empty or raster has no sublayers
2275
+ if ( !layer || layer->subLayers ().size () < 1 )
2276
+ return false ;
2277
+
2278
+ QSettings settings;
2279
+ int promptLayers = settings.value ( " /qgis/promptForRasterSublayers" , " if_need" ).toInt ();
2280
+ // 0 = always -> always ask (if there are existing sublayers)
2281
+ // 1 = if needed -> ask if layer has no bands, but has sublayers
2282
+ // 2 = never
2283
+
2284
+ return promptLayers == 0 || ( promptLayers == 1 && layer->bandCount () == 0 );
2285
+ }
2286
+
2287
+
2273
2288
// This method is the method that does the real job. If the layer given in
2274
2289
// parameter is NULL, then the method tries to act on the activeLayer.
2275
2290
void QgisApp::askUserForOGRSublayers ( QgsVectorLayer *layer )
2276
2291
{
2277
- if ( layer == NULL )
2292
+ if ( ! layer )
2278
2293
{
2279
2294
layer = qobject_cast<QgsVectorLayer *>( activeLayer () );
2280
2295
if ( !layer || layer->dataProvider ()->name () != " ogr" )
@@ -6472,7 +6487,24 @@ QgsRasterLayer* QgisApp::addRasterLayer( QString const & rasterFile, QString con
6472
6487
QgsRasterLayer *layer =
6473
6488
new QgsRasterLayer ( rasterFile, baseName ); // fi.completeBaseName());
6474
6489
6475
- if ( !addRasterLayer ( layer ) )
6490
+ bool ok = false ;
6491
+
6492
+ if ( shouldAskUserForGDALSublayers ( layer ) )
6493
+ {
6494
+ askUserForGDALSublayers ( layer );
6495
+ ok = true ;
6496
+
6497
+ // The first layer loaded is not useful in that case. The user can select it in
6498
+ // the list if he wants to load it.
6499
+ delete layer;
6500
+ layer = 0 ;
6501
+ }
6502
+ else
6503
+ {
6504
+ ok = addRasterLayer ( layer );
6505
+ }
6506
+
6507
+ if ( !ok )
6476
6508
{
6477
6509
mMapCanvas ->freeze ( false );
6478
6510
QApplication::restoreOverrideCursor ();
@@ -6556,7 +6588,15 @@ QgsRasterLayer* QgisApp::addRasterLayer(
6556
6588
6557
6589
QgsDebugMsg ( " Constructed new layer." );
6558
6590
6559
- if ( layer && layer->isValid () )
6591
+ if ( layer && shouldAskUserForGDALSublayers ( layer ) )
6592
+ {
6593
+ askUserForGDALSublayers ( layer );
6594
+
6595
+ // The first layer loaded is not useful in that case. The user can select it in
6596
+ // the list if he wants to load it.
6597
+ delete layer;
6598
+ }
6599
+ else if ( layer && layer->isValid () )
6560
6600
{
6561
6601
addRasterLayer ( layer );
6562
6602
@@ -6582,7 +6622,6 @@ QgsRasterLayer* QgisApp::addRasterLayer(
6582
6622
} // QgisApp::addRasterLayer
6583
6623
6584
6624
6585
-
6586
6625
// create a raster layer object and delegate to addRasterLayer(QgsRasterLayer *)
6587
6626
bool QgisApp::addRasterLayers ( QStringList const &theFileNameQStringList, bool guiWarning )
6588
6627
{
@@ -6627,9 +6666,8 @@ bool QgisApp::addRasterLayers( QStringList const &theFileNameQStringList, bool g
6627
6666
6628
6667
// create the layer
6629
6668
QgsRasterLayer *layer = new QgsRasterLayer ( *myIterator, myBaseNameQString );
6630
- QStringList sublayers = layer->subLayers ();
6631
6669
6632
- if ( sublayers. size () > 0 )
6670
+ if ( shouldAskUserForGDALSublayers ( layer ) )
6633
6671
{
6634
6672
askUserForGDALSublayers ( layer );
6635
6673
0 commit comments