|
60 | 60 | #include "qgsmessageoutput.h"
|
61 | 61 | #include "qgsrelationshipsitem.h"
|
62 | 62 | #include "qgsprovidersqlquerybuilder.h"
|
| 63 | +#include "qgsdbrelationshipwidget.h" |
63 | 64 |
|
64 | 65 | #include <QFileInfo>
|
65 | 66 | #include <QMenu>
|
@@ -1990,6 +1991,40 @@ void QgsFieldDomainItemGuiProvider::populateContextMenu( QgsDataItem *item, QMen
|
1990 | 1991 | {
|
1991 | 1992 | std::unique_ptr<QgsAbstractDatabaseProviderConnection> conn { static_cast<QgsAbstractDatabaseProviderConnection *>( md->createConnection( connectionUri, {} ) ) };
|
1992 | 1993 |
|
| 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 | + |
1993 | 2028 | if ( conn && conn->capabilities().testFlag( QgsAbstractDatabaseProviderConnection::Capability::AddFieldDomain ) )
|
1994 | 2029 | {
|
1995 | 2030 | QMenu *createFieldDomainMenu = new QMenu( tr( "New Field Domain" ), menu );
|
|
0 commit comments