Skip to content

Commit d7cc1c7

Browse files
committedJan 16, 2023
Add a "New Relationship" action to context menu for supported browser datasets
Supported for: - ESRI FileGeodatabases on GDAL 3.6+ - GeoPackage and sqlite databases on GDAL 3.7+
1 parent 923abcb commit d7cc1c7

File tree

1 file changed

+35
-0
lines changed

1 file changed

+35
-0
lines changed
 

‎src/app/browser/qgsinbuiltdataitemproviders.cpp

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
#include "qgsmessageoutput.h"
6161
#include "qgsrelationshipsitem.h"
6262
#include "qgsprovidersqlquerybuilder.h"
63+
#include "qgsdbrelationshipwidget.h"
6364

6465
#include <QFileInfo>
6566
#include <QMenu>
@@ -1990,6 +1991,40 @@ void QgsFieldDomainItemGuiProvider::populateContextMenu( QgsDataItem *item, QMen
19901991
{
19911992
std::unique_ptr<QgsAbstractDatabaseProviderConnection> conn { static_cast<QgsAbstractDatabaseProviderConnection *>( md->createConnection( connectionUri, {} ) ) };
19921993

1994+
if ( conn && conn->capabilities().testFlag( QgsAbstractDatabaseProviderConnection::Capability::AddRelationship ) )
1995+
{
1996+
QAction *createRelationshipAction = new QAction( tr( "New Relationship…" ), menu );
1997+
1998+
QPointer< QgsDataItem > itemWeakPointer( item );
1999+
2000+
connect( createRelationshipAction, &QAction::triggered, this, [ = ]
2001+
{
2002+
std::unique_ptr<QgsAbstractDatabaseProviderConnection> conn { static_cast<QgsAbstractDatabaseProviderConnection *>( md->createConnection( connectionUri, {} ) ) };
2003+
QgsDbRelationDialog dialog( conn.release(), QgisApp::instance() );
2004+
dialog.setWindowTitle( tr( "New Relationship" ) );
2005+
if ( dialog.exec() )
2006+
{
2007+
QgsWeakRelation relation = dialog.relationship();
2008+
std::unique_ptr<QgsAbstractDatabaseProviderConnection> conn { static_cast<QgsAbstractDatabaseProviderConnection *>( md->createConnection( connectionUri, {} ) ) };
2009+
try
2010+
{
2011+
conn->addRelationship( relation );
2012+
notify( QObject::tr( "New Relationship Created" ), QObject::tr( "Relationship '%1' was created successfully." ).arg( relation.name() ), context, Qgis::MessageLevel::Success );
2013+
if ( itemWeakPointer )
2014+
{
2015+
itemWeakPointer->refresh();
2016+
}
2017+
}
2018+
catch ( QgsProviderConnectionException &ex )
2019+
{
2020+
notify( QObject::tr( "Relationship Creation Error" ), QObject::tr( "Error creating new relationship '%1': %2" ).arg( relation.name(), ex.what() ), context, Qgis::MessageLevel::Critical );
2021+
}
2022+
}
2023+
} );
2024+
2025+
menu->addAction( createRelationshipAction );
2026+
}
2027+
19932028
if ( conn && conn->capabilities().testFlag( QgsAbstractDatabaseProviderConnection::Capability::AddFieldDomain ) )
19942029
{
19952030
QMenu *createFieldDomainMenu = new QMenu( tr( "New Field Domain" ), menu );

0 commit comments

Comments
 (0)
Please sign in to comment.