@@ -2621,7 +2621,7 @@ bool QgisApp::addVectorLayers( QStringList const & theLayerQStringList, const QS
2621
2621
// sublayers selection dialog so the user can select the sublayers to actually load.
2622
2622
if ( sublayers.count () > 1 )
2623
2623
{
2624
- askUserForSublayers ( layer );
2624
+ askUserForOGRSublayers ( layer );
2625
2625
2626
2626
// The first layer loaded is not useful in that case. The user can select it in
2627
2627
// the list if he wants to load it.
@@ -2674,17 +2674,48 @@ bool QgisApp::addVectorLayers( QStringList const & theLayerQStringList, const QS
2674
2674
return true ;
2675
2675
} // QgisApp::addVectorLayer()
2676
2676
2677
+ void QgisApp::askUserForGDALSublayers ( QgsRasterLayer *layer )
2678
+ {
2679
+ if ( !layer )
2680
+ return ;
2681
+
2682
+ QStringList sublayers = layer->subLayers ();
2683
+
2684
+ QgsDebugMsg ( " sublayers:\n " + sublayers.join ( " \n " ) + " \n " );
2685
+
2686
+ // We initialize a selection dialog and display it.
2687
+ QgsOGRSublayersDialog chooseSublayersDialog ( this );
2688
+ chooseSublayersDialog.setWindowTitle ( tr ( " Select raster layers to add..." ) );
2689
+
2690
+ QStringList layers;
2691
+ for ( int i = 0 ; i < sublayers.size (); i++ )
2692
+ {
2693
+ layers << QString ( " %1|%2|1|%3" ).arg ( i ).arg ( sublayers[i] ).arg ( tr ( " Raster" ) );
2694
+ }
2695
+
2696
+ chooseSublayersDialog.populateLayerTable ( layers, " |" );
2697
+
2698
+ if ( chooseSublayersDialog.exec () )
2699
+ {
2700
+ foreach ( QString layer, chooseSublayersDialog.getSelection () )
2701
+ {
2702
+ QgsRasterLayer *rlayer = new QgsRasterLayer ( layer, layer );
2703
+ if ( rlayer && rlayer->isValid () )
2704
+ {
2705
+ addRasterLayer ( rlayer );
2706
+ }
2707
+ }
2708
+ }
2709
+ }
2710
+
2677
2711
// This method is the method that does the real job. If the layer given in
2678
2712
// parameter is NULL, then the method tries to act on the activeLayer.
2679
- void QgisApp::askUserForSublayers ( QgsVectorLayer *layer )
2713
+ void QgisApp::askUserForOGRSublayers ( QgsVectorLayer *layer )
2680
2714
{
2681
2715
if ( layer == NULL )
2682
2716
{
2683
- if ( activeLayer () == NULL || activeLayer ()->type () != QgsMapLayer::VectorLayer )
2684
- return ;
2685
-
2686
- layer = ( QgsVectorLayer* ) activeLayer ();
2687
- if ( layer->dataProvider ()->name () != " ogr" )
2717
+ layer = qobject_cast<QgsVectorLayer *>( activeLayer () );
2718
+ if ( !layer || layer->dataProvider ()->name () != " ogr" )
2688
2719
return ;
2689
2720
}
2690
2721
@@ -2693,6 +2724,7 @@ void QgisApp::askUserForSublayers( QgsVectorLayer *layer )
2693
2724
2694
2725
// We initialize a selection dialog and display it.
2695
2726
QgsOGRSublayersDialog chooseSublayersDialog ( this );
2727
+ chooseSublayersDialog.setWindowTitle ( tr ( " Select vector layers to add..." ) );
2696
2728
chooseSublayersDialog.populateLayerTable ( sublayers );
2697
2729
2698
2730
if ( chooseSublayersDialog.exec () )
@@ -6350,16 +6382,28 @@ bool QgisApp::addRasterLayers( QStringList const &theFileNameQStringList, bool g
6350
6382
6351
6383
// create the layer
6352
6384
QgsRasterLayer *layer = new QgsRasterLayer ( *myIterator, myBaseNameQString );
6385
+ QStringList sublayers = layer->subLayers ();
6353
6386
6354
- addRasterLayer ( layer );
6355
-
6356
- // only allow one copy of a ai grid file to be loaded at a
6357
- // time to prevent the user selecting all adfs in 1 dir which
6358
- // actually represent 1 coverate,
6387
+ if ( sublayers.size () > 0 )
6388
+ {
6389
+ askUserForGDALSublayers ( layer );
6359
6390
6360
- if ( myBaseNameQString.toLower ().endsWith ( " .adf" ) )
6391
+ // The first layer loaded is not useful in that case. The user can select it in
6392
+ // the list if he wants to load it.
6393
+ delete layer;
6394
+ }
6395
+ else
6361
6396
{
6362
- break ;
6397
+ addRasterLayer ( layer );
6398
+
6399
+ // only allow one copy of a ai grid file to be loaded at a
6400
+ // time to prevent the user selecting all adfs in 1 dir which
6401
+ // actually represent 1 coverate,
6402
+
6403
+ if ( myBaseNameQString.toLower ().endsWith ( " .adf" ) )
6404
+ {
6405
+ break ;
6406
+ }
6363
6407
}
6364
6408
}
6365
6409
else
0 commit comments