QGIS API Documentation 3.99.0-Master (2fe06baccd8)
Loading...
Searching...
No Matches
qgsfielddomainsitem.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgsfielddomainsitem.h
3 -------------------
4 begin : 2022-01-27
5 copyright : (C) 2022 Nyall Dawson
6 email : nyall dot dawson at gmail dot com
7 ***************************************************************************/
8
9/***************************************************************************
10 * *
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License as published by *
13 * the Free Software Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
15 * *
16 ***************************************************************************/
17
18#include "qgsfielddomainsitem.h"
19
20#include "qgsapplication.h"
21#include "qgsfielddomain.h"
22#include "qgsmessagelog.h"
23#include "qgsprovidermetadata.h"
24#include "qgsproviderregistry.h"
25
26#include "moc_qgsfielddomainsitem.cpp"
27
37
39
41{
42 QVector<QgsDataItem *> children;
43 try
44 {
46 if ( md )
47 {
48 std::unique_ptr<QgsAbstractDatabaseProviderConnection> conn { static_cast<QgsAbstractDatabaseProviderConnection *>( md->createConnection( mConnectionUri, {} ) ) };
50 {
51 QString domainError;
52 QStringList fieldDomains;
53 try
54 {
55 fieldDomains = conn->fieldDomainNames();
56 }
58 {
59 domainError = ex.what();
60 }
61
62 for ( const QString &name : std::as_const( fieldDomains ) )
63 {
64 try
65 {
66 std::unique_ptr< QgsFieldDomain > domain( conn->fieldDomain( name ) );
67 QgsFieldDomainItem *fieldDomainItem { new QgsFieldDomainItem( this, domain.release() ) };
68 children.push_back( fieldDomainItem );
69 }
71 {
73 }
74 }
75
76 if ( !domainError.isEmpty() )
77 {
78 children.push_back( new QgsErrorItem( this, domainError, path() + QStringLiteral( "/domainerror" ) ) );
79 }
80 }
81 }
82 }
83 catch ( const QgsProviderConnectionException &ex )
84 {
85 children.push_back( new QgsErrorItem( this, ex.what(), path() + QStringLiteral( "/error" ) ) );
86 }
87 return children;
88}
89
91{
92 return QgsApplication::getThemeIcon( QStringLiteral( "mSourceFields.svg" ) );
93}
94
96{
97 return mConnectionUri;
98}
99
100//
101// QgsFieldDomainItem
102//
103
105 : QgsDataItem( Qgis::BrowserItemType::Custom, parent, domain->name(), parent->path() + '/' + domain->name(), parent->providerKey() )
106 , mDomain( domain )
107{
108 // Precondition
109 Q_ASSERT( dynamic_cast<QgsFieldDomainsItem *>( parent ) );
111 setToolTip( domain->description().isEmpty() ? domain->name() : domain->description() );
112 QgsFieldDomainsItem *domainsItem = qobject_cast<QgsFieldDomainsItem *>( parent );
113 mConnectionUri = domainsItem->connectionUri();
114}
115
117{
118 switch ( mDomain->type() )
119 {
121 return QgsApplication::getThemeIcon( QStringLiteral( "/mIconFieldText.svg" ) );
123 return QgsApplication::getThemeIcon( QStringLiteral( "/mIconFieldInteger.svg" ) );
125 return QgsApplication::getThemeIcon( QStringLiteral( "/mIconFieldText.svg" ) );
126 }
128}
129
131{
132 return mDomain.get();
133}
134
136
138{
139 return mConnectionUri;
140}
Provides global constants and enumerations for use throughout the application.
Definition qgis.h:56
@ Populated
Children created.
Definition qgis.h:941
@ Collapse
The collapse/expand status for this items children should be ignored in order to avoid undesired netw...
Definition qgis.h:956
@ Fertile
Can create children. Even items without this capability may have children, but cannot create them,...
Definition qgis.h:954
@ RefreshChildrenWhenItemIsRefreshed
When the item is refreshed, all its populated children will also be refreshed in turn.
Definition qgis.h:960
@ Coded
Coded field domain.
Definition qgis.h:3957
@ Range
Numeric range field domain (min/max).
Definition qgis.h:3958
@ Glob
Glob string pattern field domain.
Definition qgis.h:3959
Provides common functionality for database based connections.
@ RetrieveFieldDomain
Can retrieve field domain details from provider via fieldDomain().
static QIcon getThemeIcon(const QString &name, const QColor &fillColor=QColor(), const QColor &strokeColor=QColor())
Helper to get a theme icon.
void setToolTip(const QString &msg)
QVector< QgsDataItem * > children() const
Qgis::BrowserItemCapabilities mCapabilities
QgsDataItem(Qgis::BrowserItemType type, QgsDataItem *parent, const QString &name, const QString &path, const QString &providerKey=QString())
Constructor for QgsDataItem, with the specified parent item.
QString name() const
Returns the name of the item (the displayed text for the item).
QString path() const
virtual void setState(Qgis::BrowserItemState state)
Set item state.
QgsDataItem * parent() const
Gets item parent.
QString providerKey() const
Returns the provider key that created this item (e.g.
A browser item that can be used to report problems (e.g.
QString what() const
A browser item representing a field domain.
QString connectionUri() const
Returns the connection URI.
const QgsFieldDomain * fieldDomain()
Returns the associated field domain.
~QgsFieldDomainItem() override
QgsFieldDomainItem(QgsDataItem *parent, QgsFieldDomain *domain)
Constructor for QgsFieldDomainItem, with the specified parent item and domain.
Base class for field domains.
QString name() const
Returns the name of the field domain.
QString description() const
Returns the description of the field domain.
Contains a collection of field domain items.
QgsFieldDomainsItem(QgsDataItem *parent, const QString &path, const QString &connectionUri, const QString &providerKey)
Constructor for QgsFieldDomainsItem, with the specified parent item.
QVector< QgsDataItem * > createChildren() override
Create children.
~QgsFieldDomainsItem() override
QString connectionUri() const
Returns the connection URI.
static void logMessage(const QString &message, const QString &tag=QString(), Qgis::MessageLevel level=Qgis::MessageLevel::Warning, bool notifyUser=true, const char *file=__builtin_FILE(), const char *function=__builtin_FUNCTION(), int line=__builtin_LINE())
Adds a message to the log instance (and creates it if necessary).
Custom exception class for provider connection related exceptions.
Holds data provider key, description, and associated shared library file or function pointer informat...
virtual QgsAbstractProviderConnection * createConnection(const QString &uri, const QVariantMap &configuration)
Creates a new connection from uri and configuration, the newly created connection is not automaticall...
static QgsProviderRegistry * instance(const QString &pluginPath=QString())
Means of accessing canonical single instance.
QgsProviderMetadata * providerMetadata(const QString &providerKey) const
Returns metadata of the provider or nullptr if not found.
#define BUILTIN_UNREACHABLE
Definition qgis.h:7208