@@ -2262,15 +2262,23 @@ bool QgisApp::addVectorLayers( QStringList const & theLayerQStringList, const QS
2262
2262
return true ;
2263
2263
} // QgisApp::addVectorLayer()
2264
2264
2265
+ // present a dialog to choose GDAL raster sublayers
2265
2266
void QgisApp::askUserForGDALSublayers ( QgsRasterLayer *layer )
2266
2267
{
2267
- if ( !layer )
2268
+ if ( !layer || layer-> subLayers (). size () < 1 )
2268
2269
return ;
2269
2270
2270
2271
QStringList sublayers = layer->subLayers ();
2271
-
2272
2272
QgsDebugMsg ( " sublayers:\n " + sublayers.join ( " \n " ) + " \n " );
2273
2273
2274
+ // if promptLayers=Load all, load all sublayers without prompting
2275
+ QSettings settings;
2276
+ if ( settings.value ( " /qgis/promptForRasterSublayers" , 1 ).toInt () == 3 )
2277
+ {
2278
+ loadGDALSublayers ( layer->source (), sublayers );
2279
+ return ;
2280
+ }
2281
+
2274
2282
// We initialize a selection dialog and display it.
2275
2283
QgsOGRSublayersDialog chooseSublayersDialog ( this );
2276
2284
chooseSublayersDialog.setWindowTitle ( tr ( " Select raster layers to add..." ) );
@@ -2285,19 +2293,11 @@ void QgisApp::askUserForGDALSublayers( QgsRasterLayer *layer )
2285
2293
2286
2294
if ( chooseSublayersDialog.exec () )
2287
2295
{
2288
- foreach ( QString path, chooseSublayersDialog.getSelection () )
2289
- {
2290
- QString name = path;
2291
- name.replace ( layer->source (), QFileInfo ( layer->source () ).completeBaseName () );
2292
- QgsRasterLayer *rlayer = new QgsRasterLayer ( path, name );
2293
- if ( rlayer && rlayer->isValid () )
2294
- {
2295
- addRasterLayer ( rlayer );
2296
- }
2297
- }
2296
+ loadGDALSublayers ( layer->source (), chooseSublayersDialog.getSelection () );
2298
2297
}
2299
2298
}
2300
2299
2300
+ // should the GDAL sublayers dialog should be presented to the user?
2301
2301
bool QgisApp::shouldAskUserForGDALSublayers ( QgsRasterLayer *layer )
2302
2302
{
2303
2303
// return false if layer is empty or raster has no sublayers
@@ -2306,13 +2306,35 @@ bool QgisApp::shouldAskUserForGDALSublayers( QgsRasterLayer *layer )
2306
2306
2307
2307
QSettings settings;
2308
2308
int promptLayers = settings.value ( " /qgis/promptForRasterSublayers" , 1 ).toInt ();
2309
- // 0 = always -> always ask (if there are existing sublayers)
2310
- // 1 = if needed -> ask if layer has no bands, but has sublayers
2311
- // 2 = never
2312
2309
2313
- return promptLayers == 0 || ( promptLayers == 1 && layer->bandCount () == 0 );
2310
+ // return true if promptLayers=Always or if promptLayers!=Never and there are no bands
2311
+ return promptLayers == 0 || ( promptLayers != 2 && layer->bandCount () == 0 );
2314
2312
}
2315
2313
2314
+ // This method will load with GDAL the layers in parameter.
2315
+ // It is normally triggered by the sublayer selection dialog.
2316
+ void QgisApp::loadGDALSublayers ( QString uri, QStringList list )
2317
+ {
2318
+ QString path, name;
2319
+ QgsRasterLayer *subLayer = NULL ;
2320
+
2321
+ // add layers in reverse order so they appear in the right order in the layer dock
2322
+ for ( int i = list.size () - 1 ; i >= 0 ; i-- )
2323
+ {
2324
+ path = list[i];
2325
+ // shorten name by replacing complete path with filename
2326
+ name = path;
2327
+ name.replace ( uri, QFileInfo ( uri ).completeBaseName () );
2328
+ subLayer = new QgsRasterLayer ( path, name );
2329
+ if ( subLayer )
2330
+ {
2331
+ if ( subLayer->isValid () )
2332
+ addRasterLayer ( subLayer );
2333
+ else
2334
+ delete subLayer;
2335
+ }
2336
+ }
2337
+ }
2316
2338
2317
2339
// This method is the method that does the real job. If the layer given in
2318
2340
// parameter is NULL, then the method tries to act on the activeLayer.
0 commit comments