@@ -265,6 +265,7 @@ bool QgsGeoPackageCollectionItem::handleDrop( const QMimeData *data, Qt::DropAct
265
265
options.insert ( QStringLiteral ( " update" ), true );
266
266
options.insert ( QStringLiteral ( " overwrite" ), true );
267
267
options.insert ( QStringLiteral ( " layerName" ), dropUri.name );
268
+ options.insert ( QStringLiteral ( " forceSinglePartGeometryType" ), true );
268
269
QgsVectorLayerExporterTask *exportTask = new QgsVectorLayerExporterTask ( vectorSrcLayer, uri, QStringLiteral ( " ogr" ), vectorSrcLayer->crs (), options, owner );
269
270
mainTask->addSubTask ( exportTask, importTasks );
270
271
importTasks << exportTask;
@@ -537,40 +538,48 @@ QList<QAction *> QgsGeoPackageAbstractLayerItem::actions( QWidget * )
537
538
538
539
void QgsGeoPackageAbstractLayerItem::deleteLayer ()
539
540
{
540
- // Check if the layer is in the registry
541
- const QgsMapLayer *projectLayer = nullptr ;
541
+ // Check if the layer(s) are in the registry
542
+ QList< QgsMapLayer *> layersList ;
542
543
const auto mapLayers ( QgsProject::instance ()->mapLayers () );
543
- for ( const QgsMapLayer *layer : mapLayers )
544
+ for ( QgsMapLayer *layer : mapLayers )
544
545
{
545
546
if ( layer->publicSource () == mUri )
546
547
{
547
- projectLayer = layer;
548
+ layersList << layer;
548
549
}
549
550
}
550
- if ( ! projectLayer )
551
- {
552
- if ( QMessageBox::question ( nullptr , QObject::tr ( " Delete Layer" ),
553
- QObject::tr ( " Are you sure you want to delete layer <b>%1</b> from GeoPackage?" ).arg ( mName ),
554
- QMessageBox::Yes | QMessageBox::No, QMessageBox::No ) != QMessageBox::Yes )
555
- return ;
556
551
557
- QString errCause;
558
- bool res = executeDeleteLayer ( errCause );
559
- if ( !res )
560
- {
561
- QMessageBox::warning ( nullptr , tr ( " Delete Layer" ), errCause );
562
- }
563
- else
552
+ if ( ! layersList.isEmpty ( ) )
553
+ {
554
+ if ( QMessageBox::question ( nullptr , QObject::tr ( " Delete Layer" ), QObject::tr ( " The layer <b>%1</b> exists in the current project <b>%2</b>,"
555
+ " do you want to remove it from the project and delete it?" ).arg ( mName , layersList.at ( 0 )->name () ), QMessageBox::Yes | QMessageBox::No, QMessageBox::No ) != QMessageBox::Yes )
564
556
{
565
- QMessageBox::information ( nullptr , tr ( " Delete Layer" ), tr ( " Layer <b>%1</b> deleted successfully." ).arg ( mName ) );
566
- if ( mParent )
567
- mParent ->refreshConnections ();
557
+ return ;
568
558
}
569
559
}
560
+ else if ( QMessageBox::question ( nullptr , QObject::tr ( " Delete Layer" ),
561
+ QObject::tr ( " Are you sure you want to delete layer <b>%1</b> from GeoPackage?" ).arg ( mName ),
562
+ QMessageBox::Yes | QMessageBox::No, QMessageBox::No ) != QMessageBox::Yes )
563
+ {
564
+ return ;
565
+ }
566
+
567
+ if ( layersList.isEmpty () )
568
+ {
569
+ QgsProject::instance ()->removeMapLayers ( layersList );
570
+ }
571
+
572
+ QString errCause;
573
+ bool res = executeDeleteLayer ( errCause );
574
+ if ( !res )
575
+ {
576
+ QMessageBox::warning ( nullptr , tr ( " Delete Layer" ), errCause );
577
+ }
570
578
else
571
579
{
572
- QMessageBox::warning ( nullptr , QObject::tr ( " Delete Layer" ), QObject::tr ( " The layer <b>%1</b> cannot be deleted because it is in the current project as <b>%2</b>,"
573
- " remove it from the project and retry." ).arg ( mName , projectLayer->name () ) );
580
+ QMessageBox::information ( nullptr , tr ( " Delete Layer" ), tr ( " Layer <b>%1</b> deleted successfully." ).arg ( mName ) );
581
+ if ( mParent )
582
+ mParent ->refreshConnections ();
574
583
}
575
584
576
585
}
0 commit comments