mirror of
https://github.com/qgis/QGIS.git
synced 2025-02-25 00:58:06 -05:00
Expose field domain management capabilities for non-gpkg supported datasets in browser
This commit is contained in:
parent
acdea9605c
commit
fe363d134b
@ -1613,7 +1613,8 @@ QString QgsFieldDomainItemGuiProvider::name()
|
||||
void QgsFieldDomainItemGuiProvider::populateContextMenu( QgsDataItem *item, QMenu *menu, const QList<QgsDataItem *> &, QgsDataItemGuiContext context )
|
||||
{
|
||||
if ( qobject_cast< QgsFieldDomainsItem * >( item )
|
||||
|| qobject_cast< QgsGeoPackageCollectionItem * >( item ) )
|
||||
|| qobject_cast< QgsGeoPackageCollectionItem * >( item )
|
||||
|| qobject_cast< QgsFileDataCollectionItem * >( item ) )
|
||||
{
|
||||
QString providerKey;
|
||||
QString connectionUri;
|
||||
@ -1628,6 +1629,11 @@ void QgsFieldDomainItemGuiProvider::populateContextMenu( QgsDataItem *item, QMen
|
||||
providerKey = QStringLiteral( "ogr" );
|
||||
connectionUri = gpkgItem->path().remove( QStringLiteral( "gpkg:/" ) );
|
||||
}
|
||||
else if ( QgsFileDataCollectionItem *fileItem = qobject_cast< QgsFileDataCollectionItem * >( item ) )
|
||||
{
|
||||
providerKey = QStringLiteral( "ogr" );
|
||||
connectionUri = fileItem->path();
|
||||
}
|
||||
|
||||
// Check if domain creation is supported
|
||||
QgsProviderMetadata *md { QgsProviderRegistry::instance()->providerMetadata( providerKey ) };
|
||||
|
@ -25,6 +25,7 @@
|
||||
#include "qgsgeopackagedataitems.h"
|
||||
#include "qgsprovidersublayerdetails.h"
|
||||
#include "qgsfieldsitem.h"
|
||||
#include "qgsfielddomainsitem.h"
|
||||
#include "qgsproviderutils.h"
|
||||
#include "qgsmbtiles.h"
|
||||
#include "qgsvectortiledataitems.h"
|
||||
@ -197,6 +198,29 @@ QVector<QgsDataItem *> QgsFileDataCollectionItem::createChildren()
|
||||
children.append( item );
|
||||
}
|
||||
|
||||
std::unique_ptr<QgsAbstractDatabaseProviderConnection> conn( databaseConnection() );
|
||||
if ( conn && ( conn->capabilities() & QgsAbstractDatabaseProviderConnection::Capability::ListFieldDomains ) )
|
||||
{
|
||||
QString domainError;
|
||||
QStringList fieldDomains;
|
||||
try
|
||||
{
|
||||
fieldDomains = conn->fieldDomainNames();
|
||||
}
|
||||
catch ( QgsProviderConnectionException &ex )
|
||||
{
|
||||
domainError = ex.what();
|
||||
}
|
||||
|
||||
if ( !fieldDomains.empty() || !domainError.isEmpty() )
|
||||
{
|
||||
std::unique_ptr< QgsFieldDomainsItem > domainsItem = std::make_unique< QgsFieldDomainsItem >( this, mPath + "/domains", conn->uri(), QStringLiteral( "ogr" ) );
|
||||
// force this item to appear last by setting a maximum string value for the sort key
|
||||
domainsItem->setSortKey( QString( QChar( 0x10FFFF ) ) );
|
||||
children.append( domainsItem.release() );
|
||||
}
|
||||
}
|
||||
|
||||
return children;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user