Skip to content

Commit c13b627

Browse files
authored
Merge pull request #6452 from elpaso/delete-existing-from-browser
[bugfix] Respect multi-single part when importing and allow delete existing from browser
2 parents bfa3cab + 772adec commit c13b627

File tree

4 files changed

+35
-25
lines changed

4 files changed

+35
-25
lines changed

src/core/qgsdataitem.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -297,7 +297,7 @@ class CORE_EXPORT QgsDataItem : public QObject
297297
void setToolTip( const QString &msg ) { mToolTip = msg; }
298298
QString toolTip() const { return mToolTip; }
299299

300-
// deleteLater() items anc clear the vector
300+
// deleteLater() items and clear the vector
301301
static void deleteLater( QVector<QgsDataItem *> &items );
302302

303303
//! Move object and all its descendants to thread

src/providers/ogr/qgsgeopackagedataitems.cpp

+31-22
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,7 @@ bool QgsGeoPackageCollectionItem::handleDrop( const QMimeData *data, Qt::DropAct
265265
options.insert( QStringLiteral( "update" ), true );
266266
options.insert( QStringLiteral( "overwrite" ), true );
267267
options.insert( QStringLiteral( "layerName" ), dropUri.name );
268+
options.insert( QStringLiteral( "forceSinglePartGeometryType" ), true );
268269
QgsVectorLayerExporterTask *exportTask = new QgsVectorLayerExporterTask( vectorSrcLayer, uri, QStringLiteral( "ogr" ), vectorSrcLayer->crs(), options, owner );
269270
mainTask->addSubTask( exportTask, importTasks );
270271
importTasks << exportTask;
@@ -537,40 +538,48 @@ QList<QAction *> QgsGeoPackageAbstractLayerItem::actions( QWidget * )
537538

538539
void QgsGeoPackageAbstractLayerItem::deleteLayer()
539540
{
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;
542543
const auto mapLayers( QgsProject::instance()->mapLayers() );
543-
for ( const QgsMapLayer *layer : mapLayers )
544+
for ( QgsMapLayer *layer : mapLayers )
544545
{
545546
if ( layer->publicSource() == mUri )
546547
{
547-
projectLayer = layer;
548+
layersList << layer;
548549
}
549550
}
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;
556551

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 )
564556
{
565-
QMessageBox::information( nullptr, tr( "Delete Layer" ), tr( "Layer <b>%1</b> deleted successfully." ).arg( mName ) );
566-
if ( mParent )
567-
mParent->refreshConnections();
557+
return;
568558
}
569559
}
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+
}
570578
else
571579
{
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();
574583
}
575584

576585
}

src/providers/ogr/qgsogrprovider.cpp

-1
Original file line numberDiff line numberDiff line change
@@ -4560,7 +4560,6 @@ QgsWkbTypes::Type QgsOgrProviderUtils::qgisTypeFromOgrType( OGRwkbGeometryType t
45604560
{
45614561
case wkbUnknown:
45624562
return QgsWkbTypes::Unknown;
4563-
45644563
case wkbPoint:
45654564
return QgsWkbTypes::Point;
45664565
case wkbLineString:

src/providers/postgres/qgspostgresdataitems.cpp

+3-1
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,9 @@ bool QgsPGConnectionItem::handleDrop( const QMimeData *data, const QString &toSc
244244
uri.setSchema( toSchema );
245245
}
246246

247-
std::unique_ptr< QgsVectorLayerExporterTask > exportTask( new QgsVectorLayerExporterTask( srcLayer, uri.uri( false ), QStringLiteral( "postgres" ), srcLayer->crs(), QVariantMap(), owner ) );
247+
QVariantMap options;
248+
options.insert( QStringLiteral( "forceSinglePartGeometryType" ), true );
249+
std::unique_ptr< QgsVectorLayerExporterTask > exportTask( new QgsVectorLayerExporterTask( srcLayer, uri.uri( false ), QStringLiteral( "postgres" ), srcLayer->crs(), options, owner ) );
248250

249251
// when export is successful:
250252
connect( exportTask.get(), &QgsVectorLayerExporterTask::exportComplete, this, [ = ]()

0 commit comments

Comments
 (0)