Skip to content

Commit 358408d

Browse files
alexbruynyalldawson
authored andcommitted
do not show Edit, Duplicate and Refresh context menu items when multiple
connection items are selected in the Browser dock (fix qgis#31928)
1 parent be5b238 commit 358408d

11 files changed

+196
-139
lines changed

src/gui/providers/gdal/qgsgdalclouddataitemguiprovider.cpp

+10-7
Original file line numberDiff line numberDiff line change
@@ -31,15 +31,18 @@ void QgsGdalCloudDataItemGuiProvider::populateContextMenu( QgsDataItem *item, QM
3131
{
3232
if ( QgsGdalCloudConnectionItem *providerItem = qobject_cast<QgsGdalCloudConnectionItem *>( item ) )
3333
{
34-
QAction *actionEdit = new QAction( tr( "Edit Connection…" ), menu );
35-
connect( actionEdit, &QAction::triggered, this, [providerItem] { editConnection( providerItem ); } );
36-
menu->addAction( actionEdit );
34+
const QList<QgsGdalCloudConnectionItem *> stConnectionItems = QgsDataItem::filteredItems<QgsGdalCloudConnectionItem>( selection );
35+
if ( stConnectionItems.size() == 1 )
36+
{
37+
QAction *actionEdit = new QAction( tr( "Edit Connection…" ), menu );
38+
connect( actionEdit, &QAction::triggered, this, [providerItem] { editConnection( providerItem ); } );
39+
menu->addAction( actionEdit );
3740

38-
QAction *actionDuplicate = new QAction( tr( "Duplicate Connection" ), menu );
39-
connect( actionDuplicate, &QAction::triggered, this, [providerItem] { duplicateConnection( providerItem ); } );
40-
menu->addAction( actionDuplicate );
41+
QAction *actionDuplicate = new QAction( tr( "Duplicate Connection" ), menu );
42+
connect( actionDuplicate, &QAction::triggered, this, [providerItem] { duplicateConnection( providerItem ); } );
43+
menu->addAction( actionDuplicate );
44+
}
4145

42-
const QList<QgsGdalCloudConnectionItem *> stConnectionItems = QgsDataItem::filteredItems<QgsGdalCloudConnectionItem>( selection );
4346
QAction *actionDelete = new QAction( stConnectionItems.size() > 1 ? tr( "Remove Connections…" ) : tr( "Remove Connection…" ), menu );
4447
connect( actionDelete, &QAction::triggered, this, [stConnectionItems, item, context] {
4548
QgsDataItemGuiProviderUtils::deleteConnections( stConnectionItems, []( const QString &connectionName ) { QgsGdalCloudProviderConnection( QString() ).remove( connectionName ); }, context );

src/gui/providers/sensorthings/qgssensorthingsdataitemguiprovider.cpp

+11-7
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,19 @@ void QgsSensorThingsDataItemGuiProvider::populateContextMenu( QgsDataItem *item,
3030
{
3131
if ( QgsSensorThingsConnectionItem *connectionItem = qobject_cast<QgsSensorThingsConnectionItem *>( item ) )
3232
{
33-
QAction *actionEdit = new QAction( tr( "Edit Connection…" ), menu );
34-
connect( actionEdit, &QAction::triggered, this, [connectionItem] { editConnection( connectionItem ); } );
35-
menu->addAction( actionEdit );
33+
const QList<QgsSensorThingsConnectionItem *> stConnectionItems = QgsDataItem::filteredItems<QgsSensorThingsConnectionItem>( selection );
3634

37-
QAction *actionDuplicate = new QAction( tr( "Duplicate Connection" ), menu );
38-
connect( actionDuplicate, &QAction::triggered, this, [connectionItem] { duplicateConnection( connectionItem ); } );
39-
menu->addAction( actionDuplicate );
35+
if ( stConnectionItems.size() == 1 )
36+
{
37+
QAction *actionEdit = new QAction( tr( "Edit Connection…" ), menu );
38+
connect( actionEdit, &QAction::triggered, this, [connectionItem] { editConnection( connectionItem ); } );
39+
menu->addAction( actionEdit );
40+
41+
QAction *actionDuplicate = new QAction( tr( "Duplicate Connection" ), menu );
42+
connect( actionDuplicate, &QAction::triggered, this, [connectionItem] { duplicateConnection( connectionItem ); } );
43+
menu->addAction( actionDuplicate );
44+
}
4045

41-
const QList<QgsSensorThingsConnectionItem *> stConnectionItems = QgsDataItem::filteredItems<QgsSensorThingsConnectionItem>( selection );
4246
QAction *actionDelete = new QAction( stConnectionItems.size() > 1 ? tr( "Remove Connections…" ) : tr( "Remove Connection…" ), menu );
4347
connect( actionDelete, &QAction::triggered, this, [stConnectionItems, context] {
4448
QgsDataItemGuiProviderUtils::deleteConnections( stConnectionItems, []( const QString &connectionName ) { QgsSensorThingsProviderConnection( QString() ).remove( connectionName ); }, context );

src/gui/tiledscene/qgstiledscenedataitemguiprovider.cpp

+10-7
Original file line numberDiff line numberDiff line change
@@ -31,15 +31,18 @@ void QgsTiledSceneDataItemGuiProvider::populateContextMenu( QgsDataItem *item, Q
3131
{
3232
if ( QgsTiledSceneLayerItem *layerItem = qobject_cast<QgsTiledSceneLayerItem *>( item ) )
3333
{
34-
QAction *actionEdit = new QAction( tr( "Edit Connection…" ), menu );
35-
connect( actionEdit, &QAction::triggered, this, [layerItem] { editConnection( layerItem ); } );
36-
menu->addAction( actionEdit );
34+
const QList<QgsTiledSceneLayerItem *> sceneConnectionItems = QgsDataItem::filteredItems<QgsTiledSceneLayerItem>( selection );
35+
if ( sceneConnectionItems.size() == 1 )
36+
{
37+
QAction *actionEdit = new QAction( tr( "Edit Connection…" ), menu );
38+
connect( actionEdit, &QAction::triggered, this, [layerItem] { editConnection( layerItem ); } );
39+
menu->addAction( actionEdit );
3740

38-
QAction *actionDuplicate = new QAction( tr( "Duplicate Connection" ), menu );
39-
connect( actionDuplicate, &QAction::triggered, this, [layerItem] { duplicateConnection( layerItem ); } );
40-
menu->addAction( actionDuplicate );
41+
QAction *actionDuplicate = new QAction( tr( "Duplicate Connection" ), menu );
42+
connect( actionDuplicate, &QAction::triggered, this, [layerItem] { duplicateConnection( layerItem ); } );
43+
menu->addAction( actionDuplicate );
44+
}
4145

42-
const QList<QgsTiledSceneLayerItem *> sceneConnectionItems = QgsDataItem::filteredItems<QgsTiledSceneLayerItem>( selection );
4346
QAction *actionDelete = new QAction( sceneConnectionItems.size() > 1 ? tr( "Remove Connections…" ) : tr( "Remove Connection…" ), menu );
4447
connect( actionDelete, &QAction::triggered, this, [sceneConnectionItems, context] {
4548
QgsDataItemGuiProviderUtils::deleteConnections( sceneConnectionItems, []( const QString &connectionName ) { QgsTiledSceneProviderConnection( QString() ).remove( connectionName ); }, context );

src/gui/vectortile/qgsvectortiledataitemguiprovider.cpp

+11-7
Original file line numberDiff line numberDiff line change
@@ -32,15 +32,19 @@ void QgsVectorTileDataItemGuiProvider::populateContextMenu( QgsDataItem *item, Q
3232
{
3333
if ( QgsVectorTileLayerItem *layerItem = qobject_cast<QgsVectorTileLayerItem *>( item ) )
3434
{
35-
QAction *actionEdit = new QAction( tr( "Edit Connection…" ), menu );
36-
connect( actionEdit, &QAction::triggered, this, [layerItem] { editConnection( layerItem ); } );
37-
menu->addAction( actionEdit );
35+
const QList<QgsVectorTileLayerItem *> vtConnectionItems = QgsDataItem::filteredItems<QgsVectorTileLayerItem>( selection );
3836

39-
QAction *actionDuplicate = new QAction( tr( "Duplicate Connection" ), menu );
40-
connect( actionDuplicate, &QAction::triggered, this, [layerItem] { duplicateConnection( layerItem ); } );
41-
menu->addAction( actionDuplicate );
37+
if ( vtConnectionItems.size() == 1 )
38+
{
39+
QAction *actionEdit = new QAction( tr( "Edit Connection…" ), menu );
40+
connect( actionEdit, &QAction::triggered, this, [layerItem] { editConnection( layerItem ); } );
41+
menu->addAction( actionEdit );
42+
43+
QAction *actionDuplicate = new QAction( tr( "Duplicate Connection" ), menu );
44+
connect( actionDuplicate, &QAction::triggered, this, [layerItem] { duplicateConnection( layerItem ); } );
45+
menu->addAction( actionDuplicate );
46+
}
4247

43-
const QList<QgsVectorTileLayerItem *> vtConnectionItems = QgsDataItem::filteredItems<QgsVectorTileLayerItem>( selection );
4448
QAction *actionDelete = new QAction( vtConnectionItems.size() > 1 ? tr( "Remove Connections…" ) : tr( "Remove Connection…" ), menu );
4549
connect( actionDelete, &QAction::triggered, this, [vtConnectionItems, context] {
4650
QgsDataItemGuiProviderUtils::deleteConnections( vtConnectionItems, []( const QString &connectionName ) { QgsVectorTileProviderConnection::deleteConnection( connectionName ); }, context );

src/providers/arcgisrest/qgsarcgisrestdataitemguiprovider.cpp

+23-16
Original file line numberDiff line numberDiff line change
@@ -49,32 +49,39 @@ void QgsArcGisRestDataItemGuiProvider::populateContextMenu( QgsDataItem *item, Q
4949
}
5050
else if ( QgsArcGisRestConnectionItem *connectionItem = qobject_cast<QgsArcGisRestConnectionItem *>( item ) )
5151
{
52-
QAction *actionRefresh = new QAction( tr( "Refresh" ), menu );
53-
connect( actionRefresh, &QAction::triggered, this, [connectionItem] { refreshConnection( connectionItem ); } );
54-
menu->addAction( actionRefresh );
52+
const QList<QgsArcGisRestConnectionItem *> arcgisConnectionItems = QgsDataItem::filteredItems<QgsArcGisRestConnectionItem>( selection );
5553

56-
menu->addSeparator();
54+
if ( arcgisConnectionItems.size() == 1 )
55+
{
56+
QAction *actionRefresh = new QAction( tr( "Refresh" ), menu );
57+
connect( actionRefresh, &QAction::triggered, this, [connectionItem] { refreshConnection( connectionItem ); } );
58+
menu->addAction( actionRefresh );
5759

58-
QAction *actionEdit = new QAction( tr( "Edit Connection…" ), menu );
59-
connect( actionEdit, &QAction::triggered, this, [connectionItem] { editConnection( connectionItem ); } );
60-
menu->addAction( actionEdit );
60+
menu->addSeparator();
6161

62-
QAction *actionDuplicate = new QAction( tr( "Duplicate Connection" ), menu );
63-
connect( actionDuplicate, &QAction::triggered, this, [connectionItem] { duplicateConnection( connectionItem ); } );
64-
menu->addAction( actionDuplicate );
62+
QAction *actionEdit = new QAction( tr( "Edit Connection…" ), menu );
63+
connect( actionEdit, &QAction::triggered, this, [connectionItem] { editConnection( connectionItem ); } );
64+
menu->addAction( actionEdit );
65+
66+
QAction *actionDuplicate = new QAction( tr( "Duplicate Connection" ), menu );
67+
connect( actionDuplicate, &QAction::triggered, this, [connectionItem] { duplicateConnection( connectionItem ); } );
68+
menu->addAction( actionDuplicate );
69+
}
6570

66-
const QList<QgsArcGisRestConnectionItem *> arcgisConnectionItems = QgsDataItem::filteredItems<QgsArcGisRestConnectionItem>( selection );
6771
QAction *actionDelete = new QAction( arcgisConnectionItems.size() > 1 ? tr( "Remove Connections…" ) : tr( "Remove Connection…" ), menu );
6872
connect( actionDelete, &QAction::triggered, this, [arcgisConnectionItems, context] {
6973
QgsDataItemGuiProviderUtils::deleteConnections( arcgisConnectionItems, []( const QString &connectionName ) { QgsArcGisConnectionSettings::sTreeConnectionArcgis->deleteItem( connectionName ); }, context );
7074
} );
7175
menu->addAction( actionDelete );
7276

73-
QAction *viewInfo = new QAction( tr( "View Service Info" ), menu );
74-
connect( viewInfo, &QAction::triggered, this, [=] {
75-
QDesktopServices::openUrl( QUrl( connectionItem->url() ) );
76-
} );
77-
menu->addAction( viewInfo );
77+
if ( arcgisConnectionItems.size() == 1 )
78+
{
79+
QAction *viewInfo = new QAction( tr( "View Service Info" ), menu );
80+
connect( viewInfo, &QAction::triggered, this, [=] {
81+
QDesktopServices::openUrl( QUrl( connectionItem->url() ) );
82+
} );
83+
menu->addAction( viewInfo );
84+
}
7885
}
7986
else if ( QgsArcGisRestFolderItem *folderItem = qobject_cast<QgsArcGisRestFolderItem *>( item ) )
8087
{

src/providers/hana/qgshanadataitemguiprovider.cpp

+22-16
Original file line numberDiff line numberDiff line change
@@ -43,32 +43,38 @@ void QgsHanaDataItemGuiProvider::populateContextMenu(
4343

4444
if ( QgsHanaConnectionItem *connItem = qobject_cast<QgsHanaConnectionItem *>( item ) )
4545
{
46-
QAction *actionRefresh = new QAction( tr( "Refresh" ), this );
47-
connect( actionRefresh, &QAction::triggered, this, [connItem] { refreshConnection( connItem ); } );
48-
menu->addAction( actionRefresh );
46+
const QList<QgsHanaConnectionItem *> hanaConnectionItems = QgsDataItem::filteredItems<QgsHanaConnectionItem>( selection );
4947

50-
menu->addSeparator();
48+
if ( hanaConnectionItems.size() == 1 )
49+
{
50+
QAction *actionRefresh = new QAction( tr( "Refresh" ), this );
51+
connect( actionRefresh, &QAction::triggered, this, [connItem] { refreshConnection( connItem ); } );
52+
menu->addAction( actionRefresh );
5153

52-
QAction *actionEdit = new QAction( tr( "Edit Connection…" ), this );
53-
connect( actionEdit, &QAction::triggered, this, [connItem] { editConnection( connItem ); } );
54-
menu->addAction( actionEdit );
54+
menu->addSeparator();
5555

56-
QAction *actionDuplicate = new QAction( tr( "Duplicate Connection" ), this );
57-
connect( actionDuplicate, &QAction::triggered, this, [connItem] { duplicateConnection( connItem ); } );
58-
menu->addAction( actionDuplicate );
56+
QAction *actionEdit = new QAction( tr( "Edit Connection…" ), this );
57+
connect( actionEdit, &QAction::triggered, this, [connItem] { editConnection( connItem ); } );
58+
menu->addAction( actionEdit );
59+
60+
QAction *actionDuplicate = new QAction( tr( "Duplicate Connection" ), this );
61+
connect( actionDuplicate, &QAction::triggered, this, [connItem] { duplicateConnection( connItem ); } );
62+
menu->addAction( actionDuplicate );
63+
}
5964

60-
const QList<QgsHanaConnectionItem *> hanaConnectionItems = QgsDataItem::filteredItems<QgsHanaConnectionItem>( selection );
6165
QAction *actionDelete = new QAction( hanaConnectionItems.size() > 1 ? tr( "Remove Connections…" ) : tr( "Remove Connection…" ), menu );
6266
connect( actionDelete, &QAction::triggered, this, [hanaConnectionItems, context] {
6367
QgsDataItemGuiProviderUtils::deleteConnections( hanaConnectionItems, []( const QString &connectionName ) { QgsHanaSettings::removeConnection( connectionName ); }, context );
6468
} );
6569
menu->addAction( actionDelete );
6670

67-
menu->addSeparator();
68-
69-
QAction *actionCreateSchema = new QAction( tr( "New Schema…" ), this );
70-
connect( actionCreateSchema, &QAction::triggered, this, [connItem, context] { createSchema( connItem, context ); } );
71-
menu->addAction( actionCreateSchema );
71+
if ( hanaConnectionItems.size() == 1 )
72+
{
73+
menu->addSeparator();
74+
QAction *actionCreateSchema = new QAction( tr( "New Schema…" ), this );
75+
connect( actionCreateSchema, &QAction::triggered, this, [connItem, context] { createSchema( connItem, context ); } );
76+
menu->addAction( actionCreateSchema );
77+
}
7278
}
7379

7480
if ( QgsHanaSchemaItem *schemaItem = qobject_cast<QgsHanaSchemaItem *>( item ) )

src/providers/mssql/qgsmssqldataitemguiprovider.cpp

+31-24
Original file line numberDiff line numberDiff line change
@@ -45,42 +45,49 @@ void QgsMssqlDataItemGuiProvider::populateContextMenu( QgsDataItem *item, QMenu
4545
}
4646
else if ( QgsMssqlConnectionItem *connItem = qobject_cast<QgsMssqlConnectionItem *>( item ) )
4747
{
48-
QAction *actionRefresh = new QAction( tr( "Refresh" ), menu );
49-
connect( actionRefresh, &QAction::triggered, this, [connItem] {
50-
connItem->refresh();
51-
if ( connItem->parent() )
52-
connItem->parent()->refreshConnections();
53-
} );
54-
menu->addAction( actionRefresh );
48+
const QList<QgsMssqlConnectionItem *> mssqlConnectionItems = QgsDataItem::filteredItems<QgsMssqlConnectionItem>( selection );
5549

56-
menu->addSeparator();
50+
if ( mssqlConnectionItems.size() == 1 )
51+
{
52+
QAction *actionRefresh = new QAction( tr( "Refresh" ), menu );
53+
connect( actionRefresh, &QAction::triggered, this, [connItem] {
54+
connItem->refresh();
55+
if ( connItem->parent() )
56+
connItem->parent()->refreshConnections();
57+
} );
58+
menu->addAction( actionRefresh );
5759

58-
QAction *actionEdit = new QAction( tr( "Edit Connection…" ), menu );
59-
connect( actionEdit, &QAction::triggered, this, [connItem] { editConnection( connItem ); } );
60-
menu->addAction( actionEdit );
60+
menu->addSeparator();
6161

62-
QAction *actionDuplicate = new QAction( tr( "Duplicate Connection" ), menu );
63-
connect( actionDuplicate, &QAction::triggered, this, [connItem] { duplicateConnection( connItem ); } );
64-
menu->addAction( actionDuplicate );
62+
QAction *actionEdit = new QAction( tr( "Edit Connection…" ), menu );
63+
connect( actionEdit, &QAction::triggered, this, [connItem] { editConnection( connItem ); } );
64+
menu->addAction( actionEdit );
65+
66+
QAction *actionDuplicate = new QAction( tr( "Duplicate Connection" ), menu );
67+
connect( actionDuplicate, &QAction::triggered, this, [connItem] { duplicateConnection( connItem ); } );
68+
menu->addAction( actionDuplicate );
69+
}
6570

66-
const QList<QgsMssqlConnectionItem *> mssqlConnectionItems = QgsDataItem::filteredItems<QgsMssqlConnectionItem>( selection );
6771
QAction *actionDelete = new QAction( mssqlConnectionItems.size() > 1 ? tr( "Remove Connections…" ) : tr( "Remove Connection…" ), menu );
6872
connect( actionDelete, &QAction::triggered, this, [mssqlConnectionItems, context] {
6973
QgsDataItemGuiProviderUtils::deleteConnections( mssqlConnectionItems, []( const QString &connectionName ) { QgsMssqlSourceSelect::deleteConnection( connectionName ); }, context );
7074
} );
7175
menu->addAction( actionDelete );
7276

73-
menu->addSeparator();
77+
if ( mssqlConnectionItems.size() == 1 )
78+
{
79+
menu->addSeparator();
7480

75-
QAction *actionShowNoGeom = new QAction( tr( "Show Non-spatial Tables" ), menu );
76-
actionShowNoGeom->setCheckable( true );
77-
actionShowNoGeom->setChecked( connItem->allowGeometrylessTables() );
78-
connect( actionShowNoGeom, &QAction::toggled, connItem, &QgsMssqlConnectionItem::setAllowGeometrylessTables );
79-
menu->addAction( actionShowNoGeom );
81+
QAction *actionShowNoGeom = new QAction( tr( "Show Non-spatial Tables" ), menu );
82+
actionShowNoGeom->setCheckable( true );
83+
actionShowNoGeom->setChecked( connItem->allowGeometrylessTables() );
84+
connect( actionShowNoGeom, &QAction::toggled, connItem, &QgsMssqlConnectionItem::setAllowGeometrylessTables );
85+
menu->addAction( actionShowNoGeom );
8086

81-
QAction *actionCreateSchema = new QAction( tr( "New Schema…" ), menu );
82-
connect( actionCreateSchema, &QAction::triggered, this, [connItem] { createSchema( connItem ); } );
83-
menu->addAction( actionCreateSchema );
87+
QAction *actionCreateSchema = new QAction( tr( "New Schema…" ), menu );
88+
connect( actionCreateSchema, &QAction::triggered, this, [connItem] { createSchema( connItem ); } );
89+
menu->addAction( actionCreateSchema );
90+
}
8491
}
8592
else if ( QgsMssqlSchemaItem *schemaItem = qobject_cast<QgsMssqlSchemaItem *>( item ) )
8693
{

0 commit comments

Comments
 (0)