Skip to content

Commit a1ea0ac

Browse files
committedNov 20, 2018
action deleteLayer in the dataitemproviders
implemented for derived functions in: - `QgsGeoPackageAbstractLayerItem` - `QgsSLLayerItem` - `QgsPGLayerItem` - `QgsMssqlLayerItem`
1 parent f06bb79 commit a1ea0ac

14 files changed

+50
-106
lines changed
 

‎python/core/auto_generated/qgsdataitem.sip.in

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -314,8 +314,10 @@ Sets a custom sorting ``key`` for the item.
314314
Move object and all its descendants to thread
315315
%End
316316

317-
void setSelectedItems( const QList<QgsDataItem *> &selectedItems );
318-
QList<QgsDataItem *> selectedItems() const;
317+
virtual bool deleteLayer();
318+
%Docstring
319+
Delete this layer item
320+
%End
319321

320322
protected:
321323
virtual void populate( const QVector<QgsDataItem *> &children );

‎src/app/browser/qgsinbuiltdataitemproviders.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -366,6 +366,15 @@ void QgsLayerItemGuiProvider::populateContextMenu( QgsDataItem *item, QMenu *men
366366
} );
367367
menu->addAction( addAction );
368368

369+
const QString deleteText = selectedItems.count() == 1 ? tr( "Delete Layer" )
370+
: tr( "Delete Selected Layers" );
371+
QAction *deleteAction = new QAction( deleteText, menu );
372+
connect( deleteAction, &QAction::triggered, this, [ = ]
373+
{
374+
deleteLayers( selectedItems );
375+
} );
376+
menu->addAction( deleteAction );
377+
369378
QAction *propertiesAction = new QAction( tr( "Layer Properties…" ), menu );
370379
connect( propertiesAction, &QAction::triggered, this, [ = ]
371380
{
@@ -433,6 +442,15 @@ void QgsLayerItemGuiProvider::addLayersFromItems( const QList<QgsDataItem *> &it
433442
QgisApp::instance()->handleDropUriList( layerUriList );
434443
}
435444

445+
void QgsLayerItemGuiProvider::deleteLayers( const QList<QgsDataItem *> &items )
446+
{
447+
for ( QgsDataItem *item : items )
448+
{
449+
if ( !item->deleteLayer() )
450+
QMessageBox::information( QgisApp::instance(), tr( "Delete Layer" ), tr( "Item Layer %1 cannot be deleted." ).arg( item->name() ) );
451+
}
452+
}
453+
436454
void QgsLayerItemGuiProvider::showPropertiesForItem( QgsLayerItem *item )
437455
{
438456
if ( ! item )

‎src/app/browser/qgsinbuiltdataitemproviders.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +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<QgsDataItem *> &items );
103104

104105
};
105106

‎src/core/qgsdataitem.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,11 @@ void QgsDataItem::moveToThread( QThread *targetThread )
219219
QObject::moveToThread( targetThread );
220220
}
221221

222+
bool QgsDataItem::deleteLayer()
223+
{
224+
return false;
225+
}
226+
222227
QIcon QgsDataItem::icon()
223228
{
224229
if ( state() == Populating && sPopulatingIcon )

‎src/core/qgsdataitem.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -323,8 +323,8 @@ class CORE_EXPORT QgsDataItem : public QObject
323323
//! Move object and all its descendants to thread
324324
void moveToThread( QThread *targetThread );
325325

326-
void setSelectedItems( const QList<QgsDataItem *> &selectedItems ) { mSelectedItems = selectedItems; }
327-
QList<QgsDataItem *> selectedItems() const { return mSelectedItems; }
326+
//! Delete this layer item
327+
virtual bool deleteLayer();
328328

329329
protected:
330330
virtual void populate( const QVector<QgsDataItem *> &children );

‎src/gui/qgsbrowserdockwidget.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,6 @@ void QgsBrowserDockWidget::showContextMenu( QPoint pt )
211211
QMenu *menu = new QMenu( this );
212212

213213
const QList<QMenu *> menus = item->menus( menu );
214-
item->setSelectedItems( selectedItems );
215214
QList<QAction *> actions = item->actions( menu );
216215

217216
if ( !menus.isEmpty() )

‎src/providers/mssql/qgsmssqldataitems.cpp

Lines changed: 5 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -570,46 +570,24 @@ QList<QAction *> QgsMssqlLayerItem::actions( QWidget *actionParent )
570570
{
571571
QList<QAction *> lst;
572572

573-
// delete
574-
const QString deleteText = selectedItems().count() == 1 ? tr( "Delete Table" )
575-
: tr( "Delete Selected Tables" );
576-
QAction *actionDeleteLayer = new QAction( deleteText, actionParent );
577-
connect( actionDeleteLayer, &QAction::triggered, this, [ = ]
578-
{
579-
QList<QgsDataItem *> items = selectedItems();
580-
for ( QgsDataItem *item : items )
581-
{
582-
if ( QgsMssqlLayerItem *mssqlLayerItem = qobject_cast< QgsMssqlLayerItem *>( item ) )
583-
mssqlLayerItem->deleteLayer();
584-
}
585-
} );
586-
lst.append( actionDeleteLayer );
587-
588573
// truncate
589-
const QString truncateText = selectedItems().count() == 1 ? tr( "Truncate Table" )
590-
: tr( "Truncate Selected Tables" );
591-
QAction *actionTruncateLayer = new QAction( truncateText, actionParent );
574+
QAction *actionTruncateLayer = new QAction( tr( "Truncate Table" ), actionParent );
592575
connect( actionTruncateLayer, &QAction::triggered, this, [ = ]
593576
{
594-
QList<QgsDataItem *> items = selectedItems();
595-
for ( QgsDataItem *item : items )
596-
{
597-
if ( QgsMssqlLayerItem *mssqlLayerItem = qobject_cast< QgsMssqlLayerItem *>( item ) )
598-
mssqlLayerItem->truncateTable();
599-
}
577+
truncateTable();
600578
} );
601579
lst.append( actionTruncateLayer );
602580
return lst;
603581
}
604582

605-
void QgsMssqlLayerItem::deleteLayer()
583+
bool QgsMssqlLayerItem::deleteLayer()
606584
{
607585
QgsMssqlConnectionItem *connItem = qobject_cast<QgsMssqlConnectionItem *>( parent() ? parent()->parent() : nullptr );
608586

609587
if ( QMessageBox::question( nullptr, QObject::tr( "Delete Table" ),
610588
QObject::tr( "Are you sure you want to delete [%1].[%2]?" ).arg( mLayerProperty.schemaName, mLayerProperty.tableName ),
611589
QMessageBox::Yes | QMessageBox::No, QMessageBox::No ) != QMessageBox::Yes )
612-
return;
590+
return true;
613591

614592
QString errCause;
615593
bool res = QgsMssqlConnection::dropTable( mUri, &errCause );
@@ -623,6 +601,7 @@ void QgsMssqlLayerItem::deleteLayer()
623601
if ( connItem )
624602
connItem->refresh();
625603
}
604+
return true;
626605
}
627606

628607
void QgsMssqlLayerItem::truncateTable()

‎src/providers/mssql/qgsmssqldataitems.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ class QgsMssqlLayerItem : public QgsLayerItem
142142

143143
public slots:
144144
#ifdef HAVE_GUI
145-
void deleteLayer();
145+
bool deleteLayer() override;
146146
void truncateTable();
147147
#endif
148148

‎src/providers/ogr/qgsgeopackagedataitems.cpp

Lines changed: 4 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -75,26 +75,6 @@ QVector<QgsDataItem *> QgsGeoPackageRootItem::createChildren()
7575
}
7676

7777
#ifdef HAVE_GUI
78-
QList<QAction *> QgsGeoPackageAbstractLayerItem::actions( QWidget * )
79-
{
80-
QList<QAction *> lst;
81-
82-
const QString deleteText = selectedItems().count() == 1 ? tr( "Delete Layer '%1'…" ).arg( mName )
83-
: tr( "Delete Selected Layers" );
84-
QAction *actionDeleteLayer = new QAction( deleteText, this );
85-
connect( actionDeleteLayer, &QAction::triggered, this, [ = ]
86-
{
87-
QList<QgsDataItem *> items = selectedItems();
88-
for ( QgsDataItem *item : items )
89-
{
90-
if ( QgsGeoPackageAbstractLayerItem *gpkgAbstractItem = qobject_cast< QgsGeoPackageAbstractLayerItem *>( item ) )
91-
gpkgAbstractItem->deleteLayer();
92-
}
93-
} ) ;
94-
lst.append( actionDeleteLayer );
95-
return lst;
96-
}
97-
9878
void QgsGeoPackageRootItem::onConnectionsChanged()
9979
{
10080
refresh();
@@ -498,7 +478,7 @@ void QgsGeoPackageCollectionItem::vacuumGeoPackageDbAction()
498478
}
499479
}
500480

501-
void QgsGeoPackageAbstractLayerItem::deleteLayer()
481+
bool QgsGeoPackageAbstractLayerItem::deleteLayer()
502482
{
503483
// Check if the layer(s) are in the registry
504484
QList<QgsMapLayer *> layersList;
@@ -516,14 +496,14 @@ void QgsGeoPackageAbstractLayerItem::deleteLayer()
516496
if ( QMessageBox::question( nullptr, QObject::tr( "Delete Layer" ), QObject::tr( "The layer <b>%1</b> exists in the current project <b>%2</b>,"
517497
" 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 )
518498
{
519-
return;
499+
return true;
520500
}
521501
}
522502
else if ( QMessageBox::question( nullptr, QObject::tr( "Delete Layer" ),
523503
QObject::tr( "Are you sure you want to delete layer <b>%1</b> from GeoPackage?" ).arg( mName ),
524504
QMessageBox::Yes | QMessageBox::No, QMessageBox::No ) != QMessageBox::Yes )
525505
{
526-
return;
506+
return true;
527507
}
528508

529509
if ( layersList.isEmpty() )
@@ -543,7 +523,7 @@ void QgsGeoPackageAbstractLayerItem::deleteLayer()
543523
if ( mParent )
544524
mParent->refreshConnections();
545525
}
546-
526+
return true;
547527
}
548528
#endif
549529

‎src/providers/ogr/qgsgeopackagedataitems.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,9 @@ class QgsGeoPackageAbstractLayerItem : public QgsLayerItem
3636
* the real deletion implementation
3737
*/
3838
virtual bool executeDeleteLayer( QString &errCause );
39+
3940
#ifdef HAVE_GUI
40-
QList<QAction *> actions( QWidget *menu ) override;
41-
public slots:
42-
virtual void deleteLayer();
41+
bool deleteLayer() override;
4342
#endif
4443
};
4544

‎src/providers/postgres/qgspostgresdataitems.cpp

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -317,20 +317,6 @@ QList<QAction *> QgsPGLayerItem::actions( QWidget *parent )
317317
connect( actionRenameLayer, &QAction::triggered, this, &QgsPGLayerItem::renameLayer );
318318
lst.append( actionRenameLayer );
319319

320-
const QString deleteText = selectedItems().count() == 1 ? tr( "Delete %1" ).arg( typeName )
321-
: tr( "Delete Selected Tables" );
322-
QAction *actionDeleteLayer = new QAction( deleteText, parent );
323-
connect( actionDeleteLayer, &QAction::triggered, this, [ = ]
324-
{
325-
QList<QgsDataItem *> items = selectedItems();
326-
for ( QgsDataItem *item : items )
327-
{
328-
if ( QgsPGLayerItem *pgLayerItem = qobject_cast< QgsPGLayerItem *>( item ) )
329-
pgLayerItem->deleteLayer();
330-
}
331-
} ) ;
332-
lst.append( actionDeleteLayer );
333-
334320
if ( !mLayerProperty.isView )
335321
{
336322
QAction *actionTruncateLayer = new QAction( tr( "Truncate %1" ).arg( typeName ), parent );
@@ -348,12 +334,12 @@ QList<QAction *> QgsPGLayerItem::actions( QWidget *parent )
348334
return lst;
349335
}
350336

351-
void QgsPGLayerItem::deleteLayer()
337+
bool QgsPGLayerItem::deleteLayer()
352338
{
353339
if ( QMessageBox::question( nullptr, QObject::tr( "Delete Table" ),
354340
QObject::tr( "Are you sure you want to delete %1.%2?" ).arg( mLayerProperty.schemaName, mLayerProperty.tableName ),
355341
QMessageBox::Yes | QMessageBox::No, QMessageBox::No ) != QMessageBox::Yes )
356-
return;
342+
return true;
357343

358344
QString errCause;
359345
bool res = ::deleteLayer( mUri, errCause );
@@ -367,6 +353,7 @@ void QgsPGLayerItem::deleteLayer()
367353
if ( mParent )
368354
mParent->refresh();
369355
}
356+
return true;
370357
}
371358

372359
void QgsPGLayerItem::renameLayer()

‎src/providers/postgres/qgspostgresdataitems.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ class QgsPGLayerItem : public QgsLayerItem
129129

130130
public slots:
131131
#ifdef HAVE_GUI
132-
void deleteLayer();
132+
bool deleteLayer() override;
133133
void renameLayer();
134134
void truncateTable();
135135
void refreshMaterializedView();

‎src/providers/spatialite/qgsspatialitedataitems.cpp

Lines changed: 3 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -41,34 +41,12 @@ QgsSLLayerItem::QgsSLLayerItem( QgsDataItem *parent, const QString &name, const
4141
}
4242

4343
#ifdef HAVE_GUI
44-
QList<QAction *> QgsSLLayerItem::actions( QWidget *parent )
45-
{
46-
QList<QAction *> lst;
47-
48-
const QString deleteText = selectedItems().count() == 1 ? tr( "Delete Layer '%1'…" ).arg( mName )
49-
: tr( "Delete Selected Layers" );
50-
QAction *actionDeleteLayer = new QAction( deleteText, parent );
51-
52-
connect( actionDeleteLayer, &QAction::triggered, this, [ = ]
53-
{
54-
QList<QgsDataItem *> items = selectedItems();
55-
for ( QgsDataItem *item : items )
56-
{
57-
if ( QgsSLLayerItem *slLayerItem = qobject_cast< QgsSLLayerItem *>( item ) )
58-
slLayerItem->deleteLayer();
59-
}
60-
} ) ;
61-
lst.append( actionDeleteLayer );
62-
63-
return lst;
64-
}
65-
66-
void QgsSLLayerItem::deleteLayer()
44+
bool QgsSLLayerItem::deleteLayer()
6745
{
6846
if ( QMessageBox::question( nullptr, QObject::tr( "Delete Object" ),
6947
QObject::tr( "Are you sure you want to delete %1?" ).arg( mName ),
7048
QMessageBox::Yes | QMessageBox::No, QMessageBox::No ) != QMessageBox::Yes )
71-
return;
49+
return true;
7250

7351
QgsDataSourceUri uri( mUri );
7452
QString errCause;
@@ -82,6 +60,7 @@ void QgsSLLayerItem::deleteLayer()
8260
QMessageBox::information( nullptr, tr( "Delete Layer" ), tr( "Layer deleted successfully." ) );
8361
mParent->refresh();
8462
}
63+
return true;
8564
}
8665
#endif
8766

‎src/providers/spatialite/qgsspatialitedataitems.h

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,7 @@ class QgsSLLayerItem : public QgsLayerItem
2424
QgsSLLayerItem( QgsDataItem *parent, const QString &name, const QString &path, const QString &uri, LayerType layerType );
2525

2626
#ifdef HAVE_GUI
27-
QList<QAction *> actions( QWidget *parent ) override;
28-
#endif
29-
30-
public slots:
31-
#ifdef HAVE_GUI
32-
void deleteLayer();
27+
bool deleteLayer() override;
3328
#endif
3429
};
3530

0 commit comments

Comments
 (0)
Please sign in to comment.