Skip to content

Commit 81faf95

Browse files
committed
use uri to get layeritem to delete
1 parent d453006 commit 81faf95

File tree

2 files changed

+14
-7
lines changed

2 files changed

+14
-7
lines changed

src/app/browser/qgsinbuiltdataitemproviders.cpp

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -368,19 +368,19 @@ void QgsLayerItemGuiProvider::populateContextMenu( QgsDataItem *item, QMenu *men
368368

369369
if ( item->capabilities2() & QgsDataItem::Delete )
370370
{
371-
QList<QgsLayerItem *> selectedDeletableItems;
371+
QStringList selectedDeletableItemPaths;
372372
for ( QgsDataItem *selectedItem : selectedItems )
373373
{
374374
if ( qobject_cast<QgsLayerItem *>( selectedItem ) && ( selectedItem->capabilities2() & QgsDataItem::Delete ) )
375-
selectedDeletableItems.append( qobject_cast<QgsLayerItem *>( selectedItem ) );
375+
selectedDeletableItemPaths.append( qobject_cast<QgsLayerItem *>( selectedItem )->uri() );
376376
}
377377

378-
const QString deleteText = selectedDeletableItems.count() == 1 ? tr( "Delete Layer" )
378+
const QString deleteText = selectedDeletableItemPaths.count() == 1 ? tr( "Delete Layer" )
379379
: tr( "Delete Selected Layers" );
380380
QAction *deleteAction = new QAction( deleteText, menu );
381381
connect( deleteAction, &QAction::triggered, this, [ = ]
382382
{
383-
deleteLayers( selectedDeletableItems );
383+
deleteLayers( selectedDeletableItemPaths );
384384
} );
385385
menu->addAction( deleteAction );
386386
}
@@ -452,10 +452,17 @@ void QgsLayerItemGuiProvider::addLayersFromItems( const QList<QgsDataItem *> &it
452452
QgisApp::instance()->handleDropUriList( layerUriList );
453453
}
454454

455-
void QgsLayerItemGuiProvider::deleteLayers( const QList<QgsLayerItem *> &items )
455+
void QgsLayerItemGuiProvider::deleteLayers( const QStringList &itemPaths )
456456
{
457-
for ( QgsLayerItem *item : items )
457+
for ( const QString &itemPath : itemPaths )
458458
{
459+
//get the item from browserModel by its path
460+
QgsLayerItem *item = qobject_cast<QgsLayerItem *>( QgisApp::instance()->browserModel()->dataItem( QgisApp::instance()->browserModel()->findUri( itemPath ) ) );
461+
if ( !item )
462+
{
463+
QMessageBox::information( QgisApp::instance(), tr( "Delete Layer" ), tr( "Item with path %1 not found anymore." ).arg( itemPath ) );
464+
return;
465+
}
459466
if ( !item->deleteLayer() )
460467
QMessageBox::information( QgisApp::instance(), tr( "Delete Layer" ), tr( "Item Layer %1 cannot be deleted." ).arg( item->name() ) );
461468
}

src/app/browser/qgsinbuiltdataitemproviders.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ class QgsLayerItemGuiProvider : public QObject, public QgsDataItemGuiProvider
100100

101101
void addLayersFromItems( const QList<QgsDataItem *> &items );
102102
void showPropertiesForItem( QgsLayerItem *item );
103-
void deleteLayers( const QList<QgsLayerItem *> &items );
103+
void deleteLayers( const QStringList &itemPath );
104104

105105
};
106106

0 commit comments

Comments
 (0)