@@ -2338,10 +2338,13 @@ static void buildSupportedVectorFileFilter_( QString & fileFilters )
2338
2338
2339
2339
*/
2340
2340
2341
- static void openFilesRememberingFilter_ ( QString const &filterName,
2342
- QString const &filters, QStringList & selectedFiles, QString& enc, QString &title )
2341
+ static bool openFilesRememberingFilter_ ( QString const &filterName,
2342
+ QString const &filters, QStringList & selectedFiles, QString& enc, QString &title,
2343
+ bool cancelAll = false )
2343
2344
{
2344
2345
2346
+ bool retVal = false ;
2347
+
2345
2348
bool haveLastUsedFilter = false ; // by default, there is no last
2346
2349
// used filter
2347
2350
@@ -2367,6 +2370,12 @@ static void openFilesRememberingFilter_( QString const &filterName,
2367
2370
openFileDialog->selectFilter ( lastUsedFilter );
2368
2371
}
2369
2372
2373
+ // Check if we should add a cancel all button
2374
+ if ( cancelAll )
2375
+ {
2376
+ openFileDialog->addCancelAll ();
2377
+ }
2378
+
2370
2379
if ( openFileDialog->exec () == QDialog::Accepted )
2371
2380
{
2372
2381
selectedFiles = openFileDialog->selectedFiles ();
@@ -2383,8 +2392,14 @@ static void openFilesRememberingFilter_( QString const &filterName,
2383
2392
settings.setValue ( " /UI/" + filterName, openFileDialog->selectedFilter () );
2384
2393
settings.setValue ( " /UI/" + filterName + " Dir" , myPath );
2385
2394
}
2395
+ else
2396
+ {
2397
+ // Cancel or cancel all
2398
+ retVal = openFileDialog->cancelAll ();
2399
+ }
2386
2400
2387
2401
delete openFileDialog;
2402
+ return retVal;
2388
2403
} // openFilesRememberingFilter_
2389
2404
2390
2405
@@ -2938,7 +2953,7 @@ setDataSource_( QDomNode & layerNode, QString const & dataSource )
2938
2953
2939
2954
*/
2940
2955
static
2941
- void
2956
+ bool
2942
2957
findMissingFile_ ( QString const & fileFilters, QDomNode & layerNode )
2943
2958
{
2944
2959
// Prepend that file name to the valid file format filter list since it
@@ -2966,7 +2981,7 @@ findMissingFile_( QString const & fileFilters, QDomNode & layerNode )
2966
2981
}
2967
2982
default :
2968
2983
QgsDebugMsg ( " unable to determine data type" );
2969
- return ;
2984
+ return false ;
2970
2985
}
2971
2986
2972
2987
// Prepend the original data source base name to make it easier to pick it
@@ -2982,15 +2997,16 @@ findMissingFile_( QString const & fileFilters, QDomNode & layerNode )
2982
2997
.arg ( originalDataSource.fileName () )
2983
2998
.arg ( originalDataSource.absoluteFilePath () );
2984
2999
2985
- openFilesRememberingFilter_ ( memoryQualifier,
2986
- myFileFilters,
2987
- selectedFiles,
2988
- enc,
2989
- title );
3000
+ bool retVal = openFilesRememberingFilter_ ( memoryQualifier,
3001
+ myFileFilters,
3002
+ selectedFiles,
3003
+ enc,
3004
+ title,
3005
+ true );
2990
3006
2991
3007
if ( selectedFiles.isEmpty () )
2992
3008
{
2993
- return ;
3009
+ return retVal ;
2994
3010
}
2995
3011
else
2996
3012
{
@@ -3000,7 +3016,7 @@ findMissingFile_( QString const & fileFilters, QDomNode & layerNode )
3000
3016
QgsDebugMsg ( " unable to re-read layer" );
3001
3017
}
3002
3018
}
3003
-
3019
+ return retVal;
3004
3020
} // findMissingFile_
3005
3021
3006
3022
@@ -3019,17 +3035,19 @@ findMissingFile_( QString const & fileFilters, QDomNode & layerNode )
3019
3035
3020
3036
*/
3021
3037
static
3022
- void
3038
+ bool
3023
3039
findLayer_ ( QString const & fileFilters, QDomNode const & constLayerNode )
3024
3040
{
3025
3041
// XXX actually we could possibly get away with a copy of the node
3026
3042
QDomNode & layerNode = const_cast <QDomNode&>( constLayerNode );
3027
3043
3044
+ bool retVal = false ;
3045
+
3028
3046
switch ( providerType_ ( layerNode ) )
3029
3047
{
3030
3048
case IS_FILE:
3031
3049
QgsDebugMsg ( " layer is file based" );
3032
- findMissingFile_ ( fileFilters, layerNode );
3050
+ retVal = findMissingFile_ ( fileFilters, layerNode );
3033
3051
break ;
3034
3052
3035
3053
case IS_DATABASE:
@@ -3044,7 +3062,7 @@ findLayer_( QString const & fileFilters, QDomNode const & constLayerNode )
3044
3062
QgsDebugMsg ( " layer has an unkown type" );
3045
3063
break ;
3046
3064
}
3047
-
3065
+ return retVal;
3048
3066
} // findLayer_
3049
3067
3050
3068
@@ -3064,7 +3082,11 @@ findLayers_( QString const & fileFilters, std::list<QDomNode> const & layerNodes
3064
3082
i != layerNodes.end ();
3065
3083
++i )
3066
3084
{
3067
- findLayer_ ( fileFilters, *i );
3085
+ if ( findLayer_ ( fileFilters, *i ) )
3086
+ {
3087
+ // If findLayer returns true, the user hit Cancel All button
3088
+ break ;
3089
+ }
3068
3090
}
3069
3091
3070
3092
} // findLayers_
0 commit comments