@@ -231,25 +231,40 @@ void QgsFileWidget::openFileDialog()
231
231
232
232
// Handle Storage
233
233
QString fileName;
234
+ QStringList fileNames;
234
235
QString title;
235
236
if ( mStorageMode == GetFile )
236
237
{
237
238
title = !mDialogTitle .isEmpty () ? mDialogTitle : tr ( " Select a file" );
238
239
fileName = QFileDialog::getOpenFileName ( this , title, QFileInfo ( oldPath ).absoluteFilePath (), mFilter );
239
240
}
241
+ else if ( mStorageMode == GetMultipleFiles )
242
+ {
243
+ title = !mDialogTitle .isEmpty () ? mDialogTitle : tr ( " Select one ore more files" );
244
+ fileNames = QFileDialog::getOpenFileNames ( this , title, QFileInfo ( oldPath ).absoluteFilePath (), mFilter );
245
+ }
240
246
else if ( mStorageMode == GetDirectory )
241
247
{
242
248
title = !mDialogTitle .isEmpty () ? mDialogTitle : tr ( " Select a directory" );
243
249
fileName = QFileDialog::getExistingDirectory ( this , title, QFileInfo ( oldPath ).absoluteFilePath (), QFileDialog::ShowDirsOnly );
244
250
}
245
251
246
- if ( fileName.isEmpty () )
252
+ if ( fileName.isEmpty () && fileNames. isEmpty ( ) )
247
253
return ;
248
254
255
+ if ( mStorageMode != GetMultipleFiles )
256
+ {
257
+ fileName = QDir::toNativeSeparators ( QDir::cleanPath ( QFileInfo ( fileName ).absoluteFilePath () ) );
258
+ }
259
+ else
260
+ {
261
+ for ( int i = 0 ; i < fileNames.length (); i++ )
262
+ {
263
+ fileNames.replace ( i, QDir::cleanPath ( QFileInfo ( fileNames.at ( i ) ).absoluteFilePath () ) ) ;
264
+ }
265
+ }
249
266
250
- fileName = QDir::toNativeSeparators ( QDir::cleanPath ( QFileInfo ( fileName ).absoluteFilePath () ) );
251
267
// Store the last used path:
252
-
253
268
if ( mStorageMode == GetFile )
254
269
{
255
270
settings.setValue ( QStringLiteral ( " UI/lastFileNameWidgetDir" ), QFileInfo ( fileName ).absolutePath () );
@@ -258,12 +273,26 @@ void QgsFileWidget::openFileDialog()
258
273
{
259
274
settings.setValue ( QStringLiteral ( " UI/lastFileNameWidgetDir" ), fileName );
260
275
}
276
+ else if ( mStorageMode == GetMultipleFiles )
277
+ {
278
+ settings.setValue ( QStringLiteral ( " UI/lastFileNameWidgetDir" ), fileNames.first ( ) );
279
+ }
261
280
262
281
// Handle relative Path storage
263
- fileName = relativePath ( fileName, true );
264
-
265
- // Keep the new value
266
- setFilePath ( fileName );
282
+ if ( mStorageMode != GetMultipleFiles )
283
+ {
284
+ fileName = relativePath ( fileName, true );
285
+ // Keep the new value
286
+ setFilePath ( fileName );
287
+ }
288
+ else
289
+ {
290
+ for ( int i = 0 ; i < fileNames.length (); i++ )
291
+ {
292
+ fileNames.replace ( i, relativePath ( fileNames.at ( i ), true ) );
293
+ }
294
+ setFilePath ( QStringLiteral ( " \" %1\" " ).arg ( fileNames.join ( " \" \" " ) ) );
295
+ }
267
296
}
268
297
269
298
@@ -359,16 +388,30 @@ void QgsFileDropEdit::setFilters( const QString &filters )
359
388
360
389
QString QgsFileDropEdit::acceptableFilePath ( QDropEvent *event ) const
361
390
{
362
- QString path ;
391
+ QStringList paths ;
363
392
if ( event->mimeData ()->hasUrls () )
364
393
{
365
- QFileInfo file ( event->mimeData ()->urls ().first ().toLocalFile () );
366
- if ( ( mStorageMode == QgsFileWidget::GetFile && file.isFile () &&
367
- ( mAcceptableExtensions .isEmpty () || mAcceptableExtensions .contains ( file.suffix (), Qt::CaseInsensitive ) ) )
368
- || ( mStorageMode == QgsFileWidget::GetDirectory && file.isDir () ) )
369
- path = file.filePath ();
394
+ for ( const auto url : event->mimeData ()->urls () )
395
+ {
396
+ QFileInfo file ( url.toLocalFile () );
397
+ if ( ( mStorageMode != QgsFileWidget::GetDirectory && file.isFile () &&
398
+ ( mAcceptableExtensions .isEmpty () || mAcceptableExtensions .contains ( file.suffix (), Qt::CaseInsensitive ) ) )
399
+ || ( mStorageMode == QgsFileWidget::GetDirectory && file.isDir () ) )
400
+ paths.append ( file.filePath () );
401
+ }
402
+ }
403
+ if ( paths.size () > 1 )
404
+ {
405
+ return QStringLiteral ( " \" %1\" " ).arg ( paths.join ( " \" \" " ) );
406
+ }
407
+ else if ( paths.size () == 1 )
408
+ {
409
+ return paths.first ();
410
+ }
411
+ else
412
+ {
413
+ return QString ();
370
414
}
371
- return path;
372
415
}
373
416
374
417
void QgsFileDropEdit::dragEnterEvent ( QDragEnterEvent *event )
0 commit comments