mirror of
https://github.com/qgis/QGIS.git
synced 2025-10-05 00:09:32 -04:00
[FEATURE] [needs-docs] Metadata editor
Adds a new metadata tab to layer properties, representing the new metadata model from QEP #91
This commit is contained in:
parent
e2678936df
commit
ba81068f49
@ -229,6 +229,13 @@ Returns the path to the translation directory.
|
||||
:rtype: str
|
||||
%End
|
||||
|
||||
static QString metadataPath();
|
||||
%Docstring
|
||||
Returns the path to the metadata directory.
|
||||
.. versionadded:: 3.0
|
||||
:rtype: str
|
||||
%End
|
||||
|
||||
static QString qgisMasterDatabaseFilePath();
|
||||
%Docstring
|
||||
Returns the path to the master qgis.db file.
|
||||
|
@ -150,6 +150,7 @@
|
||||
%Include qgsmessagebaritem.sip
|
||||
%Include qgsmessagelogviewer.sip
|
||||
%Include qgsmessageviewer.sip
|
||||
%Include qgsmetadatawidget.sip
|
||||
%Include qgsnewhttpconnection.sip
|
||||
%Include qgsnewmemorylayerdialog.sip
|
||||
%Include qgsnewnamedialog.sip
|
||||
|
88
python/gui/qgsmetadatawidget.sip
Normal file
88
python/gui/qgsmetadatawidget.sip
Normal file
@ -0,0 +1,88 @@
|
||||
/************************************************************************
|
||||
* This file has been generated automatically from *
|
||||
* *
|
||||
* src/gui/qgsmetadatawidget.h *
|
||||
* *
|
||||
* Do not edit manually ! Edit header and run scripts/sipify.pl again *
|
||||
************************************************************************/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
class QgsMetadataWidget : QWidget
|
||||
{
|
||||
%Docstring
|
||||
A wizard to edit metadata on a map layer.
|
||||
|
||||
.. versionadded:: 3.0
|
||||
%End
|
||||
|
||||
%TypeHeaderCode
|
||||
#include "qgsmetadatawidget.h"
|
||||
%End
|
||||
public:
|
||||
|
||||
QgsMetadataWidget( QWidget *parent, QgsMapLayer *layer = 0 );
|
||||
%Docstring
|
||||
Constructor for the wizard.
|
||||
%End
|
||||
~QgsMetadataWidget();
|
||||
|
||||
void saveMetadata( QgsLayerMetadata &layerMetadata ) const;
|
||||
%Docstring
|
||||
Save all fields in a QgsLayerMetadata object.
|
||||
%End
|
||||
|
||||
bool checkMetadata() const;
|
||||
%Docstring
|
||||
Check if values in the wizard are correct.
|
||||
:rtype: bool
|
||||
%End
|
||||
|
||||
void acceptMetadata();
|
||||
%Docstring
|
||||
Saves the metadata to the layer.
|
||||
%End
|
||||
|
||||
static QMap<QString, QString> parseLanguages();
|
||||
%Docstring
|
||||
Returns a list of languages available by default in the wizard.
|
||||
:rtype: QMap<str, QString>
|
||||
%End
|
||||
|
||||
static QStringList parseLicenses();
|
||||
%Docstring
|
||||
Returns a list of licences available by default in the wizard.
|
||||
:rtype: list of str
|
||||
%End
|
||||
|
||||
static QStringList parseLinkTypes();
|
||||
%Docstring
|
||||
Returns a list of link types available by default in the wizard.
|
||||
.. seealso:: https://github.com/OSGeo/Cat-Interop/blob/master/LinkPropertyLookupTable.csv
|
||||
:rtype: list of str
|
||||
%End
|
||||
|
||||
static QStringList parseMimeTypes();
|
||||
%Docstring
|
||||
Returns a list of MIME types available by default in the wizard.
|
||||
.. seealso:: https://fr.wikipedia.org/wiki/Type_MIME
|
||||
:rtype: list of str
|
||||
%End
|
||||
|
||||
static QMap<QString, QString> parseTypes();
|
||||
%Docstring
|
||||
Returns a list of types available by default in the wizard.
|
||||
:rtype: QMap<str, QString>
|
||||
%End
|
||||
|
||||
};
|
||||
|
||||
/************************************************************************
|
||||
* This file has been generated automatically from *
|
||||
* *
|
||||
* src/gui/qgsmetadatawidget.h *
|
||||
* *
|
||||
* Do not edit manually ! Edit header and run scripts/sipify.pl again *
|
||||
************************************************************************/
|
68
resources/metadata-ISO/LinkPropertyLookupTable.csv
Normal file
68
resources/metadata-ISO/LinkPropertyLookupTable.csv
Normal file
@ -0,0 +1,68 @@
|
||||
identifier,uri,label,url,target,owner,resource_type,registrant,comments,deprecated
|
||||
OGC:CSW,http://www.opengis.net/def/serviceType/ogc/csw,OGC Catalog Service for the Web,http://www.opengeospatial.org/standards/cat,srv:serviceType;gmd:protocol;usgin:overlayAPI,,service,@tomkralidis,gmd:protocol value that indicates CI_OnlineResource URL is for an OGC Catalog service for the web v2.0.2 endpoint (should use different protocol identifier if the endpoint is not v2.0.2; these are not yet defined here). The gmd:function value in the CI_Online resource should be 'information' if the provided URL is a getCapabilities request. ,
|
||||
OGC:SOS,http://www.opengis.net/def/serviceType/ogc/sos,OGC Sensor Observation Service,http://www.opengeospatial.org/standards/sos,srv:serviceType;gmd:protocol;usgin:overlayAPI,,service,@tomkralidis,"gmd:protocol value that indicates CI_OnlineResource URL is for an OGC Sensor Observation service v?? endpoint (should use different protocol identifier if the endpoint is not that version; these are not yet defined here). The gmd:function value in the CI_Online resource should be 'information' if the provided URL is a getCapabilities request. Note that if the service offers multiple datasets in different offerings, the parameters necessary to access the correct offering should be specified in the gmd:CI_OnlineResource/gmd:description element; recommended practice is to use a JSON object with keys that are parameter names and values that are the necessary parameters.",urn:x-esri:specification:ServiceType:SOS; urn:x-esri:specification:ServiceType:sos:url
|
||||
OGC:SPS,http://www.opengeospatial.org/standards/sps,OGC Sensor Planning Service,http://www.opengeospatial.org/standards/sps,srv:serviceType;gmd:protocol;usgin:overlayAPI,,service,@pvgenuchten,gmd:protocol value that indicates CI_OnlineResource URL is for an Sensor Planning Service ,
|
||||
OGC:SAS,http://www.ogcnetwork.net/SAS,OGC Sensor Alert Service,http://www.ogcnetwork.net/SAS,srv:serviceType;gmd:protocol;usgin:overlayAPI,,service,@pvgenuchten,gmd:protocol value that indicates CI_OnlineResource URL is for an Sensor Alert Service,
|
||||
OGC:WNS,http://www.ogcnetwork.net/WNS,OGC Web Notification Service,http://portal.opengeospatial.org/files/?artifact_id=1367,srv:serviceType;gmd:protocol;usgin:overlayAPI,,service,@pvgenuchten,gmd:protocol value that indicates CI_OnlineResource URL is for an Web Notification Service ,
|
||||
OGC:WCS,http://www.opengis.net/def/serviceType/ogc/wcs,OGC Web Coverage Service,http://www.opengeospatial.org/standards/wcs,srv:serviceType;gmd:protocol;usgin:overlayAPI,,service,@tomkralidis,"gmd:protocol value that indicates CI_OnlineResource URL is for an OGC Web coverage service v?? endpoint (should use different protocol identifier if the endpoint is not that version; these are not yet defined here). The gmd:function value in the CI_Online resource should be 'information' if the provided URL is a getCapabilities request. Note that if the service offers multiple datasets in different coverages, the parameters necessary to access the correct coverage should be specified in the gmd:CI_OnlineResource/gmd:description element; recommended practice is to use a JSON object with keys that are parameter names and values that are the necessary parameters.",urn:x-esri:specification:ServiceType:WCS; urn:x-esri:specification:ServiceType:wcs:url
|
||||
OGC:WFS,http://www.opengis.net/def/serviceType/ogc/wfs,OGC Web Feature Service,http://www.opengeospatial.org/standards/wfs,srv:serviceType;gmd:protocol;usgin:overlayAPI,,service,@tomkralidis,gmd:protocol value that indicates CI_OnlineResource URL is for an OGC Web Feature Service v?? endpoint (should use different protocol identifier if the endpoint is not that version; these are not yet defined here). The gmd:function value in the CI_Online resource should be 'information' if the provided URL is a getCapabilities request. Note that if the service offers multiple datasets in different feature types the typeName parameter necessary to access the correct data should be specified in the gmd:CI_OnlineResource/gmd:description element; recommended practice is to use a JSON object with keys that are parameter names and values that are the necessary parameters.,urn:x-esri:specification:ServiceType:WFS; urn:x-esri:specification:ServiceType:wfs:url
|
||||
OGC:WMS,http://www.opengis.net/def/serviceType/ogc/wms,OGC Web Map Service,http://www.opengeospatial.org/standards/wms,srv:serviceType;gmd:protocol;usgin:overlayAPI,,service,@tomkralidis,"gmd:protocol value that indicates CI_OnlineResource URL is for an OGC Web Map Service v?? endpoint (should use different protocol identifier if the endpoint is not that version; these are not yet defined here). The gmd:function value in the CI_Online resource should be 'information' if the provided URL is a getCapabilities request. Note that if the service offers multiple datasets in different map layers, the layers parameters necessary to access the correct data should be specified in the gmd:CI_OnlineResource/gmd:description element; recommended practice is to use a JSON object with keys that are parameter names and values that are the necessary parameters.",urn:x-esri:specification:ServiceType:WMS; urn:x-esri:specification:ServiceType:wms:url
|
||||
OGC:WMS-C,http://www.opengis.net/def/serviceType/ogc/wms,OGC Web Map Service - Cached,https://wiki.osgeo.org/wiki/WMS_Tile_Caching,srv:serviceType;gmd:protocol;usgin:overlayAPI,,service,@pacioos,"This is an unofficial profile of WMS using OSGeo recommendations to pull cached map tiles from the server when available. Often this is specified with a 'tiled=true' URL parameter in the GetMap request.", "While WMS-C has been superseded by the OSGeo Tile Map Service specification (TMS) and the OGC Web Map Tile Service standard (WMTS), it is still widely supported."
|
||||
OGC:WMTS,http://www.opengeospatial.org/standards/wmts,OGC Web Map Tile Service,http://www.opengeospatial.org/standards/wmts,srv:serviceType;gmd:protocol;usgin:overlayAPI,,service,@pvgenuchten,gmd:protocol value that indicates CI_OnlineResource URL is for an OGC Web Map Tile Service,
|
||||
OGC:WPS,http://www.opengis.net/def/serviceType/ogc/wps,OGC Web Processing Service,http://www.opengeospatial.org/standards/wps,srv:serviceType;gmd:protocol;usgin:overlayAPI,,service,@tomkralidis,gmd:protocol value that indicates CI_OnlineResource URL is for an OGC Web Processing Service v?? endpoint (should use different protocol identifier if the endpoint is not that version; these are not yet defined here). The gmd:function value in the CI_Online resource should be 'information' if the provided URL is a getCapabilities request. Other parameters necessary to access the correct processing service should be specified in the gmd:CI_OnlineResource/gmd:description element; recommended practice is to use a JSON object with keys that are parameter names and values that are the necessary parameters.,
|
||||
OGC:ODS,http://www.opengeospatial.org/standards/ols#ods,OGC OpenLS Directory Service,http://www.opengeospatial.org/standards/ols,srv:serviceType;gmd:protocol;usgin:overlayAPI,,service,@pvgenuchten,gmd:protocol value that indicates CI_OnlineResource URL is for an OGC OpenLS Directory Service ,
|
||||
OGC:OGS,http://www.opengeospatial.org/standards/ols#ogs,OGC OpenLS Gateway Service,http://www.opengeospatial.org/standards/ols,srv:serviceType;gmd:protocol;usgin:overlayAPI,,service,@pvgenuchten,gmd:protocol value that indicates CI_OnlineResource URL is for an OGC OpenLS Gateway Service,
|
||||
OGC:OUS,http://www.opengeospatial.org/standards/ols#ous,OGC OpenLS Utility Service,http://www.opengeospatial.org/standards/ols,srv:serviceType;gmd:protocol;usgin:overlayAPI,,service,@pvgenuchten,gmd:protocol value that indicates CI_OnlineResource URL is for an OGC OpenLS Utility Service,
|
||||
OGC:OPS,http://www.opengeospatial.org/standards/ols#ops,OGC OpenLS Presentation Service,http://www.opengeospatial.org/standards/ols,srv:serviceType;gmd:protocol;usgin:overlayAPI,,service,@pvgenuchten,gmd:protocol value that indicates CI_OnlineResource URL is for an OGC OpenLS Presentation Service ,
|
||||
OGC:ORS,http://www.opengeospatial.org/standards/ols#ors,OGC OpenLS Route Service,http://www.opengeospatial.org/standards/ols,srv:serviceType;gmd:protocol;usgin:overlayAPI,,service,@pvgenuchten,gmd:protocol value that indicates CI_OnlineResource URL is for an OGC OpenLS Route Service,
|
||||
OGC:CT,http://www.opengeospatial.org/standards/ct,OGC Coordinate Transformation Service,http://www.opengeospatial.org/standards/ct,srv:serviceType;gmd:protocol;usgin:overlayAPI,,service,@pvgenuchten,gmd:protocol value that indicates CI_OnlineResource URL is for an OGC Coordinate Transformation Service,
|
||||
OGC:WFS-G,http://www.opengeospatial.org/standards/wfs-g,Gazetteer Service Profile of the Web Feature Service Implementation Specification,http://portal.opengeospatial.org/files/?artifact_id=7175,srv:serviceType;gmd:protocol;usgin:overlayAPI,,service,@pvgenuchten,gmd:protocol value that indicates CI_OnlineResource URL is for an OGC Gazetteer Service Profile of the Web Feature Service Implementation Specification,
|
||||
OGC:OWC,http://www.opengeospatial.org/standards/owc,OGC OWS Context,http://www.opengeospatial.org/standards/owc,gmd:MD_Format/gmd:name;gmd:applicationProfile,,data,@pvgenuchten,Specifies a fully configured service set which can be exchanged,
|
||||
OGC:GPKG,http://www.opengeospatial.org/standards/geopackage,OGC Geopackage,http://www.opengeospatial.org/standards/geopackage,gmd:MD_Format/gmd:name;gmd:applicationProfile,,data,@pvgenuchten,SQLite Extension for exchange or direct use of vector geospatial features and / or tile matrix sets of earth images and raster maps at various scales,
|
||||
OGC:IoT,http://www.ogcnetwork.net/IoT,OGC SensorThings API,http://ogc-iot.github.io/ogc-iot-api,srv:serviceType;gmd:protocol;usgin:overlayAPI,,service,@pvgenuchten,gmd:protocol value that indicates CI_OnlineResource URL is for a SensorThings API,
|
||||
ESRI:ArcIMS,urn:x-esri:serviceType:ArcIMS,ESRI ArcIMS Service,,srv:serviceType;gmd:protocol;usgin:overlayAPI,Esri Inc.,service,@tomkralidis,gmd:protocol value that indicates CI_OnlineResource URL is for an ArcIMS endpoint. ArcIMS requests are tunneled via HTTP Get URL's,
|
||||
ESRI:ArcGIS,urn:x-esri:serviceType:ArcGIS,ESRI ArcGIS Service,,srv:serviceType;gmd:protocol;usgin:overlayAPI,Esri Inc.,service,@tomkralidis,gmd:protocol value that indicates CI_OnlineResource URL is for an ESRI Map service endpoint. ESRI REST requests are tunneled via HTTP Get URL's,
|
||||
ESRI:MPK,http://esriurl.com/mpk.xml,ArcGIS Map Package, http://esriurl.com/mpk.xml,gmd:MD_Format/gmd:name;gmd:applicationProfile,Esri Inc.,data,@mhogeweg,"Example URI for ArcGIS Map Package. Mpk is a file format. A map package contains a map document (.mxd) and the data referenced by the layers it contains, packaged into one convenient, portable file.",
|
||||
OPeNDAP:OPeNDAP,,OPeNDAP root URL,http://docs.opendap.org/index.php/UserGuideOPeNDAPMessages,srv:serviceType;gmd:protocol;usgin:overlayAPI,,service,@tomkralidis,"Link is the root URL for an OpenDAP endpoint. An OPeNDAP server replies to queries for data and other services in the form of specially formed URLs that start with a root URL, and use a suffix on the root URL and a constraint expression to indicate which service is requested and what the parameters are. Example suffixes are dods, das, dds, nc. OpenDAP defines a syntax for constraint expressions as well.",urn:x-esri:specification:ServiceType:OPeNDAP; urn:x-esri:specification:ServiceType:odp:url
|
||||
OPeNDAP:Hyrax,,OPeNDAP Hyrax server,http://docs.opendap.org/index.php/Hyrax,srv:serviceType;gmd:protocol;usgin:overlayAPI,,service,@amilan17,"Link is the root URL for an This is the OPeNDAP 4 Data Server, also known as Hyrax. Hyrax is a data server that implements the DAP2 and DAP4 protocols, works with a number of different data formats and supports a wide variety of customization options from tailoring the look of the server's web pages to complex server-side processing operations.",
|
||||
UNIDATA:NCSS,,NetCDF Subset Service,https://www.unidata.ucar.edu/software/thredds/current/tds/interfaceSpec/NetcdfSubsetService.html,gmd:protocol; usgin:overlayAPI,,service,@tomkralidis,"Link is the root URL for a THREDDS datasets. The NetCDF Subset Service enables subsetting CDM scientific datasets using earth coordinates, such as lat/lon bounding boxes and date ranges; requests are made via HTTP GET with key-value pairs (KVP) for parameters encoded in HTTP URIs. The resources identified are THREDDS datasets. The resource URIs have a root host name and path, typically something like http://servername:8080/thredds/ncss/, followed by a path that identifies a particular dataset {path/dataset}. A subset of the dataset is considered a view of a resource, specified by query parameters following the character '?' after the dataset path: http://servername:8080/thredds/ncss/{path/dataset}?{subset}. An 'accept' parameter may be used to specify the desired resource representation.",
|
||||
UNIDATA:CDM,,Common Data Model Remote Web Service,https://www.unidata.ucar.edu/software/thredds/current/netcdf-java/stream/CdmRemote.html,srv:serviceType;gmd:protocol;usgin:overlayAPI,Unidata,service,@tomkralidis,Example,
|
||||
UNIDATA:CdmRemote,,Common Data Model index subsetting,https://www.unidata.ucar.edu/software/thredds/current/netcdf-java/stream/CdmRemote.html,gmd:protocol; usgin:overlayAPI,Unidata,service,@smrazgs,"CDM Remote provides remote access to UNIDATA Common Data Model (CDM) datasets, using ncstream as the on-the-wire protocol. Client requests are of the form endpoint?query, and the specification defines a vocabulary of valid query parameters. There are two levels of service: 1) CdmRemote provides index subsetting on remote CDM datasets; 2) CdmrFeature provides coordinate subsetting on remote CDM Feature Datasets",
|
||||
UNIDATA:CdmrFeature,,Common Data Model coordinate subsetting,https://www.unidata.ucar.edu/software/thredds/current/netcdf-java/stream/CdmRemote.html,gmd:protocol; usgin:overlayAPI,Unidata,,@smrazgs,"Link is endpoint URL that provides coordinate subsetting on UNIDATA Common Data Model (CDM) datasets, using ncstream as the on-the-wire protocol. Client requests are of the form endpoint?query, and the specification defines a vocabulary of valid query parameters.",
|
||||
UNIDATA:THREDDS,http://www.unidata.ucar.edu/namespaces/thredds/InvCatalog/v1.0,THREDDS Catalog,http://www.unidata.ucar.edu/software/thredds/current/tds/catalog/InvCatalogSpec.html,srv:serviceType;gmd:protocol;usgin:overlayAPI,Unidata,service,@kwilcox,"Link is a THREDDS Catalog URL that provides the XML for traversing programmatically. Can be used for datasets and collections of datasets.",
|
||||
OGC:GML,http://www.opengis.net/gml,OGC Geography Markup Language,,gmd:MD_Format/gmd:name;gmd:applicationProfile,,data,@tomkralidis,Example,
|
||||
WWW:LINK,http://www.w3.org/TR/xlink/,Web Address (URL),,dct:references/@scheme,,information,@tomkralidis @smrazgs,Indicates that XLINK properties are encoded as key-value pairs in content of a dct:references element to provide a machine actionable link. ,
|
||||
WWW:WSDL,http://www.w3.org/TR/wsdl,Web Service Description Language XML document describing service operation,http://www.w3.org/TR/wsdl,gmd:applicationProfile,W3C,,@smrazgs,,
|
||||
WWW:SPARQL:1.1,http://www.w3.org/TR/sparql11-protocol,SPARQL protocol for HTTP,http://www.w3.org/TR/rdf-sparql-query,srv:serviceType;gmd:protocol;usgin:overlayAPI,,service,@pvgenuchten,SPARQL Protocol specifies a means for conveying SPARQL queries and updates to a SPARQL processing service and returning the results via HTTP to the entity that requested them,
|
||||
OpenSearch1.1,http://www.opensearch.org/Specifications/OpenSearch/1.1#OpenSearch_URL_template_syntax,OpenSearch template,http://www.opensearch.org/Specifications/OpenSearch/1.1#OpenSearch_URL_template_syntax,usgin:template;gmd:applicationProfile,OpenSearch.org,,@smrazgs,use to indicate link is a template conforming to the OpenSearch specification,
|
||||
OpenSearch1.1:Description,http://www.opensearch.org/Specifications/OpenSearch/1.1#OpenSearch_description_document,OpenSearch description document,http://www.opensearch.org/Specifications/OpenSearch/1.1#OpenSearch_description_document,gmd:applicationProfile,OpenSearch.org,,@smrazgs,indicates a link to get an openSearch description document,
|
||||
information,,link provides information about resource,,gmd:function,ISO TC211,,@smrazgs,function of link it to http:GET information about resource,
|
||||
template,http://tools.ietf.org/html/rfc6570,link provides template to access resource,http://tools.ietf.org/html/rfc6570,gmd:function,USGIN,,@smrazgs,Link text is a URI template; applicationProfile attribute value associated with the link should indicate the specification for the template scheme (e.g. OpenSearch1.1).,
|
||||
download,,link will get resource,,gmd:function,ISO TC211,,@smrazgs,function of link it to http:GET a representation of the resource; the link type attribute value(s) should indicate the MIME types of available representations,
|
||||
service,,link is service endpoint,,gmd:function,ISO TC211,,@smrazgs,"Link value is the URL of a service endpoint; the link protocol and applicationProfile (and possibly other link properties like overlayAPI, depending on the link attributes profile in use) attribute values should identify the service protocol specification",
|
||||
order,,link provides form to obtain resource,,gmd:function,ISO TC211,,@smrazgs,link value is URL of web application requiring user interaction to order/request access to the resource,
|
||||
search,,link provides form for searching resource,,gmd:function,ISO TC211,,@smrazgs,link value is URL of web application requiring user interaction to search/browse/subset the resource.,
|
||||
esip:CollectionCast,http://commons.esipfed.org/ns/discovery/1.2/collectionCast# ,ESIP collection cast,,gmd:applicationProfile,ESIP,,@smrazgs,,
|
||||
tilejson:2.0.0,,tile mill map service description,https://github.com/mapbox/tilejson-spec,gmd:applicationProfile,MapBox,,@smrazgs,link is description of a TileMill map service endpoint. Link type would be application/json; function would be information.,
|
||||
iris:fdsnws-event,http://service.iris.edu/fdsnws/event/1/,IRIS Seismic event service,http://service.iris.edu/fdsnws/event/1,gmd:applicationProfile;usgin:overlayAPI,IRIS,,@smrazgs,Link returns event (earthquake) information from the catalogs submitted to the IRIS DMC,
|
||||
QuakeML1.2,http://quakeml.org /xmlns /quakeml/1.2,Earthquake markup language,https://quake.ethz.ch/quakeml,gmd:MD_Format/gmd:name;gmd:applicationProfile,quakeml@sed.ethz.ch,,@smrazgs,XML markup language for earthquake hypocenter data,
|
||||
file,,a file,http://docs.ckan.org/en/ckan-1.8/domain-model-resource.html,gmd:function,OKFN,,@smrazgs,CKAN metadata vocabulary for populating the type attribute on a CKAN resource; indicates that an http GET of this url should yield a bitstream,
|
||||
ISO 19115:2003/19139,,ISO 19115 metadata in ISO19139 encoding,,gmd:metadataStandardName,GeoNetwork,,@smrazgs,This is the CharacterString value used by Geonetwork OpenSource to identify ISO metadata record instances; apparently have to assume that its using the 2006 corrigendum with no specific profile conventions.,
|
||||
ISO-USGIN,,USGIN-profile ISO 19115 metadata,http://repository.usgin.org/uri_gin/usgin/dlio/337,gmd:metadataStandardName,USGIN,,@smrazgs,This is the CharacterString Value mandated by the USGIN profile of ISO19115/19139 for instance documents to self-identify. ,
|
||||
http,https://www.ietf.org/rfc/rfc2616,"Hypertext transfer Protocol, v1.1",https://www.ietf.org/rfc/rfc2616.txt,gmd:protocol,IETF,,@smrazgs,Use to indicate gmd:CI_OnlineResource URLs that are simple http links to a target resource representation for download; redundant as the URL prefix 'http:' conveys the same information.,
|
||||
https,https://tools.ietf.org/html/rfc2818,HTTP over TLS,https://www.ietf.org/rfc/rfc2818.txt,gmd:protocol,IETF,,@amilan17,Use to indicate gmd:CI_OnlineResource URLs that are simple https links to a target resource representation for download; redundant as the URL prefix 'https:' conveys the same information.,
|
||||
ftp,https://tools.ietf.org/html/rfc959,FILE TRANSFER PROTOCOL (FTP),https://www.ietf.org/rfc/rfc959.txt,gmd:protocol,IETF,,@amilan17,Use to indicate gmd:CI_OnlineResource URLs that are simple ftp links to a target resource representation for download; redundant as the URL prefix 'ftp:' conveys the same information.,
|
||||
IETF:GeoJSON,http://geojson.org,GeoJSON,https://datatracker.ietf.org/doc/draft-butler-geojson,gmd:MD_Format/gmd:name;gmd:applicationProfile,,data,@pvgenuchten,GeoJSON is a geospatial data interchange format based on JavaScript Object Notation (JSON),
|
||||
GIT,http://git-scm.com/,GIT,http://git-scm.com/book/commands,srv:serviceType;gmd:protocol;usgin:overlayAPI,,service,@pvgenuchten,gmd:protocol value that indicates CI_OnlineResource URL is for a GIT repository,
|
||||
OKFN:datapackage,http://data.okfn.org/doc/data-package,OKFN Data Package,http://dataprotocols.org/data-packages,gmd:MD_Format/gmd:name;gmd:applicationProfile,,data,@pvgenuchten,A Data Package is a simple way of packaging up data,
|
||||
boundless:geogig,http://geogig.org,Boundless GeoGig,http://geogig.org/docs/interaction/web-api.html,srv:serviceType;gmd:protocol;usgin:overlayAPI,Boundless,service,@pvgenuchten,gmd:protocol value that indicates CI_OnlineResource URL is for a GeoGig REST API,
|
||||
OASIS:OData:4.0,http://docs.oasis-open.org/odata/odata/v4.0,OData v4.0,http://docs.oasis-open.org/odata/odata/v4.0/odata-v4.0-part1-protocol.html,srv:serviceType;gmd:protocol;usgin:overlayAPI,,service,@pvgenuchten,gmd:protocol value that indicates CI_OnlineResource URL is for an OData JSON endpoint,
|
||||
maxogden:dat,http://dat-data.com,dat REST API,https://github.com/maxogden/dat/blob/master/docs/rest-api.md,srv:serviceType;gmd:protocol;usgin:overlayAPI,,service,@pvgenuchten,gmd:protocol value that indicates CI_OnlineResource URL is for a dat REST API,
|
||||
geoserver:rest,http://docs.geoserver.org/latest/en/user/rest,GeoServer REST configuration API,http://docs.geoserver.org/latest/en/user/rest,srv:serviceType;gmd:protocol;usgin:overlayAPI,,service,@pvgenuchten,gmd:protocol value that indicates CI_OnlineResource URL is for a Geoserver rest API to configure featuretypes in Geoserver (and mapserver) remotely,
|
||||
google:protocol-buffers,https://developers.google.com/protocol-buffers,Google Protocol Buffers,https://developers.google.com/protocol-buffers,gmd:MD_Format/gmd:name;gmd:applicationProfile,Google,data,@pvgenuchten,Googles mechanism for serializing structured data,
|
||||
google:fusion-tables,http://google.com/fusiontables,Google Fusion Tables,https://developers.google.com/fusiontables,gmd:MD_Format/gmd:name;gmd:applicationProfile,Google,data,@pvgenuchten,Google mechanism for interating with online data tables,
|
||||
NOAA:LAS,http://ferret.pmel.noaa.gov/LAS,Live Access Server,http://ferret.pmel.noaa.gov/LAS/documentation/developer-documentation/the-xml-messages-used-by-las,srv:serviceType;gmd:protocol;usgin:overlayAPI,,service,@pvgenuchten,gmd:protocol value that indicates CI_OnlineResource URL is a LAS endpoint,
|
||||
OSM,http://wiki.openstreetmap.org/wiki/API,Open Street Map API,http://wiki.openstreetmap.org/wiki/API,srv:serviceType;gmd:protocol;usgin:overlayAPI,,service,@pvgenuchten,gmd:protocol value that indicates CI_OnlineResource URL is for a OSM APIfor fetching and saving raw geodata from/to an OpenStreetMap database ,
|
||||
ERDDAP:griddap,http://coastwatch.pfeg.noaa.gov/erddap/griddap/documentation.html,ERDDAP Data Service for Gridded Datasets,http://coastwatch.pfeg.noaa.gov/erddap/griddap/documentation.html,srv:serviceType;gmd:protocol;usgin:overlayAPI,@BobSimons,service,@BobSimons,"griddap lets you request a data subset, graph, or map from a gridded dataset (for example, sea surface temperature data from a satellite), via a specially formed URL. griddap uses the OPeNDAP (external link) Data Access Protocol (DAP) (external link) and its projection constraints (external link). Link is the root URL for an ERDDAP griddap service endpoint. The service responds to OPeNDAP requests and related ERDDAP-specific requests to a gridded dataset. A request starts with this root URL, adds a file type extension, and sometimes a constraint expression to specify a subset of data. Example file type extensions which don't require a constraint are .das, .dds, .html, and .graph. Example file type extensions which do require a constraint are .dods, .nc, .mat, .json, and .htmlTable. Full documentation for ERDDAP API at http://coastwatch.pfeg.noaa.gov/erddap/rest.html",
|
||||
ERDDAP:tabledap,http://coastwatch.pfeg.noaa.gov/erddap/tabledap/documentation.html,ERDDAP Data Service for Tabular Datasets,http://coastwatch.pfeg.noaa.gov/erddap/tabledap/documentation.html,srv:serviceType;gmd:protocol;usgin:overlayAPI,@BobSimons,service,@BobSimons,"Tabledap lets you request a data subset, a graph, or a map from a tabular dataset (for example, buoy data), via a specially formed URL. tabledap uses the OPeNDAP (external link) Data Access Protocol (DAP) (external link) and its selection constraints (external link). Link is the root URL for an ERDDAP tabledap service endpoint. The service responds to OPeNDAP requests and related ERDDAP-specific requests to a tabular (sequence) dataset. A request starts with this root URL, adds a file type extension, and sometimes a constraint expression to specify a subset of data. Example file type extensions which don't require a constraint are .das, .dds, .html, and .graph. Example file type extensions which do require a constraint are .dods, .nc, .mat, .json, and .htmlTable. Full documentation for ERDDAP API at http://coastwatch.pfeg.noaa.gov/erddap/rest.html",
|
||||
OASIS:AMQP,https://amqp.org,Advanced Message Queuing Protocol,https://amqp.org,gmd:protocol,,service,@tomkralidis,gmd:protocol value that indicates CI_OnlineResource URL is for an AMQP broker,
|
|
250
resources/metadata-ISO/country_code_ISO_3166.csv
Normal file
250
resources/metadata-ISO/country_code_ISO_3166.csv
Normal file
@ -0,0 +1,250 @@
|
||||
name,alpha-2,alpha-3,country-code,iso_3166-2,region,sub-region,region-code,sub-region-code
|
||||
Afghanistan,AF,AFG,004,ISO 3166-2:AF,Asia,Southern Asia,142,034
|
||||
Åland Islands,AX,ALA,248,ISO 3166-2:AX,Europe,Northern Europe,150,154
|
||||
Albania,AL,ALB,008,ISO 3166-2:AL,Europe,Southern Europe,150,039
|
||||
Algeria,DZ,DZA,012,ISO 3166-2:DZ,Africa,Northern Africa,002,015
|
||||
American Samoa,AS,ASM,016,ISO 3166-2:AS,Oceania,Polynesia,009,061
|
||||
Andorra,AD,AND,020,ISO 3166-2:AD,Europe,Southern Europe,150,039
|
||||
Angola,AO,AGO,024,ISO 3166-2:AO,Africa,Middle Africa,002,017
|
||||
Anguilla,AI,AIA,660,ISO 3166-2:AI,Americas,Caribbean,019,029
|
||||
Antarctica,AQ,ATA,010,ISO 3166-2:AQ,,,,
|
||||
Antigua and Barbuda,AG,ATG,028,ISO 3166-2:AG,Americas,Caribbean,019,029
|
||||
Argentina,AR,ARG,032,ISO 3166-2:AR,Americas,South America,019,005
|
||||
Armenia,AM,ARM,051,ISO 3166-2:AM,Asia,Western Asia,142,145
|
||||
Aruba,AW,ABW,533,ISO 3166-2:AW,Americas,Caribbean,019,029
|
||||
Australia,AU,AUS,036,ISO 3166-2:AU,Oceania,Australia and New Zealand,009,053
|
||||
Austria,AT,AUT,040,ISO 3166-2:AT,Europe,Western Europe,150,155
|
||||
Azerbaijan,AZ,AZE,031,ISO 3166-2:AZ,Asia,Western Asia,142,145
|
||||
Bahamas,BS,BHS,044,ISO 3166-2:BS,Americas,Caribbean,019,029
|
||||
Bahrain,BH,BHR,048,ISO 3166-2:BH,Asia,Western Asia,142,145
|
||||
Bangladesh,BD,BGD,050,ISO 3166-2:BD,Asia,Southern Asia,142,034
|
||||
Barbados,BB,BRB,052,ISO 3166-2:BB,Americas,Caribbean,019,029
|
||||
Belarus,BY,BLR,112,ISO 3166-2:BY,Europe,Eastern Europe,150,151
|
||||
Belgium,BE,BEL,056,ISO 3166-2:BE,Europe,Western Europe,150,155
|
||||
Belize,BZ,BLZ,084,ISO 3166-2:BZ,Americas,Central America,019,013
|
||||
Benin,BJ,BEN,204,ISO 3166-2:BJ,Africa,Western Africa,002,011
|
||||
Bermuda,BM,BMU,060,ISO 3166-2:BM,Americas,Northern America,019,021
|
||||
Bhutan,BT,BTN,064,ISO 3166-2:BT,Asia,Southern Asia,142,034
|
||||
Bolivia (Plurinational State of),BO,BOL,068,ISO 3166-2:BO,Americas,South America,019,005
|
||||
"Bonaire, Sint Eustatius and Saba",BQ,BES,535,ISO 3166-2:BQ,Americas,Caribbean,019,029
|
||||
Bosnia and Herzegovina,BA,BIH,070,ISO 3166-2:BA,Europe,Southern Europe,150,039
|
||||
Botswana,BW,BWA,072,ISO 3166-2:BW,Africa,Southern Africa,002,018
|
||||
Bouvet Island,BV,BVT,074,ISO 3166-2:BV,,,,
|
||||
Brazil,BR,BRA,076,ISO 3166-2:BR,Americas,South America,019,005
|
||||
British Indian Ocean Territory,IO,IOT,086,ISO 3166-2:IO,,,,
|
||||
Brunei Darussalam,BN,BRN,096,ISO 3166-2:BN,Asia,South-Eastern Asia,142,035
|
||||
Bulgaria,BG,BGR,100,ISO 3166-2:BG,Europe,Eastern Europe,150,151
|
||||
Burkina Faso,BF,BFA,854,ISO 3166-2:BF,Africa,Western Africa,002,011
|
||||
Burundi,BI,BDI,108,ISO 3166-2:BI,Africa,Eastern Africa,002,014
|
||||
Cambodia,KH,KHM,116,ISO 3166-2:KH,Asia,South-Eastern Asia,142,035
|
||||
Cameroon,CM,CMR,120,ISO 3166-2:CM,Africa,Middle Africa,002,017
|
||||
Canada,CA,CAN,124,ISO 3166-2:CA,Americas,Northern America,019,021
|
||||
Cabo Verde,CV,CPV,132,ISO 3166-2:CV,Africa,Western Africa,002,011
|
||||
Cayman Islands,KY,CYM,136,ISO 3166-2:KY,Americas,Caribbean,019,029
|
||||
Central African Republic,CF,CAF,140,ISO 3166-2:CF,Africa,Middle Africa,002,017
|
||||
Chad,TD,TCD,148,ISO 3166-2:TD,Africa,Middle Africa,002,017
|
||||
Chile,CL,CHL,152,ISO 3166-2:CL,Americas,South America,019,005
|
||||
China,CN,CHN,156,ISO 3166-2:CN,Asia,Eastern Asia,142,030
|
||||
Christmas Island,CX,CXR,162,ISO 3166-2:CX,,,,
|
||||
Cocos (Keeling) Islands,CC,CCK,166,ISO 3166-2:CC,,,,
|
||||
Colombia,CO,COL,170,ISO 3166-2:CO,Americas,South America,019,005
|
||||
Comoros,KM,COM,174,ISO 3166-2:KM,Africa,Eastern Africa,002,014
|
||||
Congo,CG,COG,178,ISO 3166-2:CG,Africa,Middle Africa,002,017
|
||||
Congo (Democratic Republic of the),CD,COD,180,ISO 3166-2:CD,Africa,Middle Africa,002,017
|
||||
Cook Islands,CK,COK,184,ISO 3166-2:CK,Oceania,Polynesia,009,061
|
||||
Costa Rica,CR,CRI,188,ISO 3166-2:CR,Americas,Central America,019,013
|
||||
Côte d'Ivoire,CI,CIV,384,ISO 3166-2:CI,Africa,Western Africa,002,011
|
||||
Croatia,HR,HRV,191,ISO 3166-2:HR,Europe,Southern Europe,150,039
|
||||
Cuba,CU,CUB,192,ISO 3166-2:CU,Americas,Caribbean,019,029
|
||||
Curaçao,CW,CUW,531,ISO 3166-2:CW,Americas,Caribbean,019,029
|
||||
Cyprus,CY,CYP,196,ISO 3166-2:CY,Asia,Western Asia,142,145
|
||||
Czech Republic,CZ,CZE,203,ISO 3166-2:CZ,Europe,Eastern Europe,150,151
|
||||
Denmark,DK,DNK,208,ISO 3166-2:DK,Europe,Northern Europe,150,154
|
||||
Djibouti,DJ,DJI,262,ISO 3166-2:DJ,Africa,Eastern Africa,002,014
|
||||
Dominica,DM,DMA,212,ISO 3166-2:DM,Americas,Caribbean,019,029
|
||||
Dominican Republic,DO,DOM,214,ISO 3166-2:DO,Americas,Caribbean,019,029
|
||||
Ecuador,EC,ECU,218,ISO 3166-2:EC,Americas,South America,019,005
|
||||
Egypt,EG,EGY,818,ISO 3166-2:EG,Africa,Northern Africa,002,015
|
||||
El Salvador,SV,SLV,222,ISO 3166-2:SV,Americas,Central America,019,013
|
||||
Equatorial Guinea,GQ,GNQ,226,ISO 3166-2:GQ,Africa,Middle Africa,002,017
|
||||
Eritrea,ER,ERI,232,ISO 3166-2:ER,Africa,Eastern Africa,002,014
|
||||
Estonia,EE,EST,233,ISO 3166-2:EE,Europe,Northern Europe,150,154
|
||||
Ethiopia,ET,ETH,231,ISO 3166-2:ET,Africa,Eastern Africa,002,014
|
||||
Falkland Islands (Malvinas),FK,FLK,238,ISO 3166-2:FK,Americas,South America,019,005
|
||||
Faroe Islands,FO,FRO,234,ISO 3166-2:FO,Europe,Northern Europe,150,154
|
||||
Fiji,FJ,FJI,242,ISO 3166-2:FJ,Oceania,Melanesia,009,054
|
||||
Finland,FI,FIN,246,ISO 3166-2:FI,Europe,Northern Europe,150,154
|
||||
France,FR,FRA,250,ISO 3166-2:FR,Europe,Western Europe,150,155
|
||||
French Guiana,GF,GUF,254,ISO 3166-2:GF,Americas,South America,019,005
|
||||
French Polynesia,PF,PYF,258,ISO 3166-2:PF,Oceania,Polynesia,009,061
|
||||
French Southern Territories,TF,ATF,260,ISO 3166-2:TF,,,,
|
||||
Gabon,GA,GAB,266,ISO 3166-2:GA,Africa,Middle Africa,002,017
|
||||
Gambia,GM,GMB,270,ISO 3166-2:GM,Africa,Western Africa,002,011
|
||||
Georgia,GE,GEO,268,ISO 3166-2:GE,Asia,Western Asia,142,145
|
||||
Germany,DE,DEU,276,ISO 3166-2:DE,Europe,Western Europe,150,155
|
||||
Ghana,GH,GHA,288,ISO 3166-2:GH,Africa,Western Africa,002,011
|
||||
Gibraltar,GI,GIB,292,ISO 3166-2:GI,Europe,Southern Europe,150,039
|
||||
Greece,GR,GRC,300,ISO 3166-2:GR,Europe,Southern Europe,150,039
|
||||
Greenland,GL,GRL,304,ISO 3166-2:GL,Americas,Northern America,019,021
|
||||
Grenada,GD,GRD,308,ISO 3166-2:GD,Americas,Caribbean,019,029
|
||||
Guadeloupe,GP,GLP,312,ISO 3166-2:GP,Americas,Caribbean,019,029
|
||||
Guam,GU,GUM,316,ISO 3166-2:GU,Oceania,Micronesia,009,057
|
||||
Guatemala,GT,GTM,320,ISO 3166-2:GT,Americas,Central America,019,013
|
||||
Guernsey,GG,GGY,831,ISO 3166-2:GG,Europe,Northern Europe,150,154
|
||||
Guinea,GN,GIN,324,ISO 3166-2:GN,Africa,Western Africa,002,011
|
||||
Guinea-Bissau,GW,GNB,624,ISO 3166-2:GW,Africa,Western Africa,002,011
|
||||
Guyana,GY,GUY,328,ISO 3166-2:GY,Americas,South America,019,005
|
||||
Haiti,HT,HTI,332,ISO 3166-2:HT,Americas,Caribbean,019,029
|
||||
Heard Island and McDonald Islands,HM,HMD,334,ISO 3166-2:HM,,,,
|
||||
Holy See,VA,VAT,336,ISO 3166-2:VA,Europe,Southern Europe,150,039
|
||||
Honduras,HN,HND,340,ISO 3166-2:HN,Americas,Central America,019,013
|
||||
Hong Kong,HK,HKG,344,ISO 3166-2:HK,Asia,Eastern Asia,142,030
|
||||
Hungary,HU,HUN,348,ISO 3166-2:HU,Europe,Eastern Europe,150,151
|
||||
Iceland,IS,ISL,352,ISO 3166-2:IS,Europe,Northern Europe,150,154
|
||||
India,IN,IND,356,ISO 3166-2:IN,Asia,Southern Asia,142,034
|
||||
Indonesia,ID,IDN,360,ISO 3166-2:ID,Asia,South-Eastern Asia,142,035
|
||||
Iran (Islamic Republic of),IR,IRN,364,ISO 3166-2:IR,Asia,Southern Asia,142,034
|
||||
Iraq,IQ,IRQ,368,ISO 3166-2:IQ,Asia,Western Asia,142,145
|
||||
Ireland,IE,IRL,372,ISO 3166-2:IE,Europe,Northern Europe,150,154
|
||||
Isle of Man,IM,IMN,833,ISO 3166-2:IM,Europe,Northern Europe,150,154
|
||||
Israel,IL,ISR,376,ISO 3166-2:IL,Asia,Western Asia,142,145
|
||||
Italy,IT,ITA,380,ISO 3166-2:IT,Europe,Southern Europe,150,039
|
||||
Jamaica,JM,JAM,388,ISO 3166-2:JM,Americas,Caribbean,019,029
|
||||
Japan,JP,JPN,392,ISO 3166-2:JP,Asia,Eastern Asia,142,030
|
||||
Jersey,JE,JEY,832,ISO 3166-2:JE,Europe,Northern Europe,150,154
|
||||
Jordan,JO,JOR,400,ISO 3166-2:JO,Asia,Western Asia,142,145
|
||||
Kazakhstan,KZ,KAZ,398,ISO 3166-2:KZ,Asia,Central Asia,142,143
|
||||
Kenya,KE,KEN,404,ISO 3166-2:KE,Africa,Eastern Africa,002,014
|
||||
Kiribati,KI,KIR,296,ISO 3166-2:KI,Oceania,Micronesia,009,057
|
||||
Korea (Democratic People's Republic of),KP,PRK,408,ISO 3166-2:KP,Asia,Eastern Asia,142,030
|
||||
Korea (Republic of),KR,KOR,410,ISO 3166-2:KR,Asia,Eastern Asia,142,030
|
||||
Kuwait,KW,KWT,414,ISO 3166-2:KW,Asia,Western Asia,142,145
|
||||
Kyrgyzstan,KG,KGZ,417,ISO 3166-2:KG,Asia,Central Asia,142,143
|
||||
Lao People's Democratic Republic,LA,LAO,418,ISO 3166-2:LA,Asia,South-Eastern Asia,142,035
|
||||
Latvia,LV,LVA,428,ISO 3166-2:LV,Europe,Northern Europe,150,154
|
||||
Lebanon,LB,LBN,422,ISO 3166-2:LB,Asia,Western Asia,142,145
|
||||
Lesotho,LS,LSO,426,ISO 3166-2:LS,Africa,Southern Africa,002,018
|
||||
Liberia,LR,LBR,430,ISO 3166-2:LR,Africa,Western Africa,002,011
|
||||
Libya,LY,LBY,434,ISO 3166-2:LY,Africa,Northern Africa,002,015
|
||||
Liechtenstein,LI,LIE,438,ISO 3166-2:LI,Europe,Western Europe,150,155
|
||||
Lithuania,LT,LTU,440,ISO 3166-2:LT,Europe,Northern Europe,150,154
|
||||
Luxembourg,LU,LUX,442,ISO 3166-2:LU,Europe,Western Europe,150,155
|
||||
Macao,MO,MAC,446,ISO 3166-2:MO,Asia,Eastern Asia,142,030
|
||||
Macedonia (the former Yugoslav Republic of),MK,MKD,807,ISO 3166-2:MK,Europe,Southern Europe,150,039
|
||||
Madagascar,MG,MDG,450,ISO 3166-2:MG,Africa,Eastern Africa,002,014
|
||||
Malawi,MW,MWI,454,ISO 3166-2:MW,Africa,Eastern Africa,002,014
|
||||
Malaysia,MY,MYS,458,ISO 3166-2:MY,Asia,South-Eastern Asia,142,035
|
||||
Maldives,MV,MDV,462,ISO 3166-2:MV,Asia,Southern Asia,142,034
|
||||
Mali,ML,MLI,466,ISO 3166-2:ML,Africa,Western Africa,002,011
|
||||
Malta,MT,MLT,470,ISO 3166-2:MT,Europe,Southern Europe,150,039
|
||||
Marshall Islands,MH,MHL,584,ISO 3166-2:MH,Oceania,Micronesia,009,057
|
||||
Martinique,MQ,MTQ,474,ISO 3166-2:MQ,Americas,Caribbean,019,029
|
||||
Mauritania,MR,MRT,478,ISO 3166-2:MR,Africa,Western Africa,002,011
|
||||
Mauritius,MU,MUS,480,ISO 3166-2:MU,Africa,Eastern Africa,002,014
|
||||
Mayotte,YT,MYT,175,ISO 3166-2:YT,Africa,Eastern Africa,002,014
|
||||
Mexico,MX,MEX,484,ISO 3166-2:MX,Americas,Central America,019,013
|
||||
Micronesia (Federated States of),FM,FSM,583,ISO 3166-2:FM,Oceania,Micronesia,009,057
|
||||
Moldova (Republic of),MD,MDA,498,ISO 3166-2:MD,Europe,Eastern Europe,150,151
|
||||
Monaco,MC,MCO,492,ISO 3166-2:MC,Europe,Western Europe,150,155
|
||||
Mongolia,MN,MNG,496,ISO 3166-2:MN,Asia,Eastern Asia,142,030
|
||||
Montenegro,ME,MNE,499,ISO 3166-2:ME,Europe,Southern Europe,150,039
|
||||
Montserrat,MS,MSR,500,ISO 3166-2:MS,Americas,Caribbean,019,029
|
||||
Morocco,MA,MAR,504,ISO 3166-2:MA,Africa,Northern Africa,002,015
|
||||
Mozambique,MZ,MOZ,508,ISO 3166-2:MZ,Africa,Eastern Africa,002,014
|
||||
Myanmar,MM,MMR,104,ISO 3166-2:MM,Asia,South-Eastern Asia,142,035
|
||||
Namibia,NA,NAM,516,ISO 3166-2:NA,Africa,Southern Africa,002,018
|
||||
Nauru,NR,NRU,520,ISO 3166-2:NR,Oceania,Micronesia,009,057
|
||||
Nepal,NP,NPL,524,ISO 3166-2:NP,Asia,Southern Asia,142,034
|
||||
Netherlands,NL,NLD,528,ISO 3166-2:NL,Europe,Western Europe,150,155
|
||||
New Caledonia,NC,NCL,540,ISO 3166-2:NC,Oceania,Melanesia,009,054
|
||||
New Zealand,NZ,NZL,554,ISO 3166-2:NZ,Oceania,Australia and New Zealand,009,053
|
||||
Nicaragua,NI,NIC,558,ISO 3166-2:NI,Americas,Central America,019,013
|
||||
Niger,NE,NER,562,ISO 3166-2:NE,Africa,Western Africa,002,011
|
||||
Nigeria,NG,NGA,566,ISO 3166-2:NG,Africa,Western Africa,002,011
|
||||
Niue,NU,NIU,570,ISO 3166-2:NU,Oceania,Polynesia,009,061
|
||||
Norfolk Island,NF,NFK,574,ISO 3166-2:NF,Oceania,Australia and New Zealand,009,053
|
||||
Northern Mariana Islands,MP,MNP,580,ISO 3166-2:MP,Oceania,Micronesia,009,057
|
||||
Norway,NO,NOR,578,ISO 3166-2:NO,Europe,Northern Europe,150,154
|
||||
Oman,OM,OMN,512,ISO 3166-2:OM,Asia,Western Asia,142,145
|
||||
Pakistan,PK,PAK,586,ISO 3166-2:PK,Asia,Southern Asia,142,034
|
||||
Palau,PW,PLW,585,ISO 3166-2:PW,Oceania,Micronesia,009,057
|
||||
"Palestine, State of",PS,PSE,275,ISO 3166-2:PS,Asia,Western Asia,142,145
|
||||
Panama,PA,PAN,591,ISO 3166-2:PA,Americas,Central America,019,013
|
||||
Papua New Guinea,PG,PNG,598,ISO 3166-2:PG,Oceania,Melanesia,009,054
|
||||
Paraguay,PY,PRY,600,ISO 3166-2:PY,Americas,South America,019,005
|
||||
Peru,PE,PER,604,ISO 3166-2:PE,Americas,South America,019,005
|
||||
Philippines,PH,PHL,608,ISO 3166-2:PH,Asia,South-Eastern Asia,142,035
|
||||
Pitcairn,PN,PCN,612,ISO 3166-2:PN,Oceania,Polynesia,009,061
|
||||
Poland,PL,POL,616,ISO 3166-2:PL,Europe,Eastern Europe,150,151
|
||||
Portugal,PT,PRT,620,ISO 3166-2:PT,Europe,Southern Europe,150,039
|
||||
Puerto Rico,PR,PRI,630,ISO 3166-2:PR,Americas,Caribbean,019,029
|
||||
Qatar,QA,QAT,634,ISO 3166-2:QA,Asia,Western Asia,142,145
|
||||
Réunion,RE,REU,638,ISO 3166-2:RE,Africa,Eastern Africa,002,014
|
||||
Romania,RO,ROU,642,ISO 3166-2:RO,Europe,Eastern Europe,150,151
|
||||
Russian Federation,RU,RUS,643,ISO 3166-2:RU,Europe,Eastern Europe,150,151
|
||||
Rwanda,RW,RWA,646,ISO 3166-2:RW,Africa,Eastern Africa,002,014
|
||||
Saint Barthélemy,BL,BLM,652,ISO 3166-2:BL,Americas,Caribbean,019,029
|
||||
"Saint Helena, Ascension and Tristan da Cunha",SH,SHN,654,ISO 3166-2:SH,Africa,Western Africa,002,011
|
||||
Saint Kitts and Nevis,KN,KNA,659,ISO 3166-2:KN,Americas,Caribbean,019,029
|
||||
Saint Lucia,LC,LCA,662,ISO 3166-2:LC,Americas,Caribbean,019,029
|
||||
Saint Martin (French part),MF,MAF,663,ISO 3166-2:MF,Americas,Caribbean,019,029
|
||||
Saint Pierre and Miquelon,PM,SPM,666,ISO 3166-2:PM,Americas,Northern America,019,021
|
||||
Saint Vincent and the Grenadines,VC,VCT,670,ISO 3166-2:VC,Americas,Caribbean,019,029
|
||||
Samoa,WS,WSM,882,ISO 3166-2:WS,Oceania,Polynesia,009,061
|
||||
San Marino,SM,SMR,674,ISO 3166-2:SM,Europe,Southern Europe,150,039
|
||||
Sao Tome and Principe,ST,STP,678,ISO 3166-2:ST,Africa,Middle Africa,002,017
|
||||
Saudi Arabia,SA,SAU,682,ISO 3166-2:SA,Asia,Western Asia,142,145
|
||||
Senegal,SN,SEN,686,ISO 3166-2:SN,Africa,Western Africa,002,011
|
||||
Serbia,RS,SRB,688,ISO 3166-2:RS,Europe,Southern Europe,150,039
|
||||
Seychelles,SC,SYC,690,ISO 3166-2:SC,Africa,Eastern Africa,002,014
|
||||
Sierra Leone,SL,SLE,694,ISO 3166-2:SL,Africa,Western Africa,002,011
|
||||
Singapore,SG,SGP,702,ISO 3166-2:SG,Asia,South-Eastern Asia,142,035
|
||||
Sint Maarten (Dutch part),SX,SXM,534,ISO 3166-2:SX,Americas,Caribbean,019,029
|
||||
Slovakia,SK,SVK,703,ISO 3166-2:SK,Europe,Eastern Europe,150,151
|
||||
Slovenia,SI,SVN,705,ISO 3166-2:SI,Europe,Southern Europe,150,039
|
||||
Solomon Islands,SB,SLB,090,ISO 3166-2:SB,Oceania,Melanesia,009,054
|
||||
Somalia,SO,SOM,706,ISO 3166-2:SO,Africa,Eastern Africa,002,014
|
||||
South Africa,ZA,ZAF,710,ISO 3166-2:ZA,Africa,Southern Africa,002,018
|
||||
South Georgia and the South Sandwich Islands,GS,SGS,239,ISO 3166-2:GS,,,,
|
||||
South Sudan,SS,SSD,728,ISO 3166-2:SS,Africa,Eastern Africa,002,014
|
||||
Spain,ES,ESP,724,ISO 3166-2:ES,Europe,Southern Europe,150,039
|
||||
Sri Lanka,LK,LKA,144,ISO 3166-2:LK,Asia,Southern Asia,142,034
|
||||
Sudan,SD,SDN,729,ISO 3166-2:SD,Africa,Northern Africa,002,015
|
||||
Suriname,SR,SUR,740,ISO 3166-2:SR,Americas,South America,019,005
|
||||
Svalbard and Jan Mayen,SJ,SJM,744,ISO 3166-2:SJ,Europe,Northern Europe,150,154
|
||||
Swaziland,SZ,SWZ,748,ISO 3166-2:SZ,Africa,Southern Africa,002,018
|
||||
Sweden,SE,SWE,752,ISO 3166-2:SE,Europe,Northern Europe,150,154
|
||||
Switzerland,CH,CHE,756,ISO 3166-2:CH,Europe,Western Europe,150,155
|
||||
Syrian Arab Republic,SY,SYR,760,ISO 3166-2:SY,Asia,Western Asia,142,145
|
||||
"Taiwan, Province of China",TW,TWN,158,ISO 3166-2:TW,Asia,Eastern Asia,142,030
|
||||
Tajikistan,TJ,TJK,762,ISO 3166-2:TJ,Asia,Central Asia,142,143
|
||||
"Tanzania, United Republic of",TZ,TZA,834,ISO 3166-2:TZ,Africa,Eastern Africa,002,014
|
||||
Thailand,TH,THA,764,ISO 3166-2:TH,Asia,South-Eastern Asia,142,035
|
||||
Timor-Leste,TL,TLS,626,ISO 3166-2:TL,Asia,South-Eastern Asia,142,035
|
||||
Togo,TG,TGO,768,ISO 3166-2:TG,Africa,Western Africa,002,011
|
||||
Tokelau,TK,TKL,772,ISO 3166-2:TK,Oceania,Polynesia,009,061
|
||||
Tonga,TO,TON,776,ISO 3166-2:TO,Oceania,Polynesia,009,061
|
||||
Trinidad and Tobago,TT,TTO,780,ISO 3166-2:TT,Americas,Caribbean,019,029
|
||||
Tunisia,TN,TUN,788,ISO 3166-2:TN,Africa,Northern Africa,002,015
|
||||
Turkey,TR,TUR,792,ISO 3166-2:TR,Asia,Western Asia,142,145
|
||||
Turkmenistan,TM,TKM,795,ISO 3166-2:TM,Asia,Central Asia,142,143
|
||||
Turks and Caicos Islands,TC,TCA,796,ISO 3166-2:TC,Americas,Caribbean,019,029
|
||||
Tuvalu,TV,TUV,798,ISO 3166-2:TV,Oceania,Polynesia,009,061
|
||||
Uganda,UG,UGA,800,ISO 3166-2:UG,Africa,Eastern Africa,002,014
|
||||
Ukraine,UA,UKR,804,ISO 3166-2:UA,Europe,Eastern Europe,150,151
|
||||
United Arab Emirates,AE,ARE,784,ISO 3166-2:AE,Asia,Western Asia,142,145
|
||||
United Kingdom of Great Britain and Northern Ireland,GB,GBR,826,ISO 3166-2:GB,Europe,Northern Europe,150,154
|
||||
United States of America,US,USA,840,ISO 3166-2:US,Americas,Northern America,019,021
|
||||
United States Minor Outlying Islands,UM,UMI,581,ISO 3166-2:UM,,,,
|
||||
Uruguay,UY,URY,858,ISO 3166-2:UY,Americas,South America,019,005
|
||||
Uzbekistan,UZ,UZB,860,ISO 3166-2:UZ,Asia,Central Asia,142,143
|
||||
Vanuatu,VU,VUT,548,ISO 3166-2:VU,Oceania,Melanesia,009,054
|
||||
Venezuela (Bolivarian Republic of),VE,VEN,862,ISO 3166-2:VE,Americas,South America,019,005
|
||||
Viet Nam,VN,VNM,704,ISO 3166-2:VN,Asia,South-Eastern Asia,142,035
|
||||
Virgin Islands (British),VG,VGB,092,ISO 3166-2:VG,Americas,Caribbean,019,029
|
||||
Virgin Islands (U.S.),VI,VIR,850,ISO 3166-2:VI,Americas,Caribbean,019,029
|
||||
Wallis and Futuna,WF,WLF,876,ISO 3166-2:WF,Oceania,Polynesia,009,061
|
||||
Western Sahara,EH,ESH,732,ISO 3166-2:EH,Africa,Northern Africa,002,015
|
||||
Yemen,YE,YEM,887,ISO 3166-2:YE,Asia,Western Asia,142,145
|
||||
Zambia,ZM,ZMB,894,ISO 3166-2:ZM,Africa,Eastern Africa,002,014
|
||||
Zimbabwe,ZW,ZWE,716,ISO 3166-2:ZW,Africa,Eastern Africa,002,014
|
|
185
resources/metadata-ISO/language_codes_ISO_639.csv
Normal file
185
resources/metadata-ISO/language_codes_ISO_639.csv
Normal file
@ -0,0 +1,185 @@
|
||||
alpha2,English
|
||||
aa,Afar
|
||||
ab,Abkhazian
|
||||
ae,Avestan
|
||||
af,Afrikaans
|
||||
ak,Akan
|
||||
am,Amharic
|
||||
an,Aragonese
|
||||
ar,Arabic
|
||||
as,Assamese
|
||||
av,Avaric
|
||||
ay,Aymara
|
||||
az,Azerbaijani
|
||||
ba,Bashkir
|
||||
be,Belarusian
|
||||
bg,Bulgarian
|
||||
bh,Bihari languages
|
||||
bi,Bislama
|
||||
bm,Bambara
|
||||
bn,Bengali
|
||||
bo,Tibetan
|
||||
br,Breton
|
||||
bs,Bosnian
|
||||
ca,Catalan; Valencian
|
||||
ce,Chechen
|
||||
ch,Chamorro
|
||||
co,Corsican
|
||||
cr,Cree
|
||||
cs,Czech
|
||||
cu,Church Slavic; Old Slavonic; Church Slavonic; Old Bulgarian; Old Church Slavonic
|
||||
cv,Chuvash
|
||||
cy,Welsh
|
||||
da,Danish
|
||||
de,German
|
||||
dv,Divehi; Dhivehi; Maldivian
|
||||
dz,Dzongkha
|
||||
ee,Ewe
|
||||
el,"Greek, Modern (1453-)"
|
||||
en,English
|
||||
eo,Esperanto
|
||||
es,Spanish; Castilian
|
||||
et,Estonian
|
||||
eu,Basque
|
||||
fa,Persian
|
||||
ff,Fulah
|
||||
fi,Finnish
|
||||
fj,Fijian
|
||||
fo,Faroese
|
||||
fr,French
|
||||
fy,Western Frisian
|
||||
ga,Irish
|
||||
gd,Gaelic; Scottish Gaelic
|
||||
gl,Galician
|
||||
gn,Guarani
|
||||
gu,Gujarati
|
||||
gv,Manx
|
||||
ha,Hausa
|
||||
he,Hebrew
|
||||
hi,Hindi
|
||||
ho,Hiri Motu
|
||||
hr,Croatian
|
||||
ht,Haitian; Haitian Creole
|
||||
hu,Hungarian
|
||||
hy,Armenian
|
||||
hz,Herero
|
||||
ia,Interlingua (International Auxiliary Language Association)
|
||||
id,Indonesian
|
||||
ie,Interlingue; Occidental
|
||||
ig,Igbo
|
||||
ii,Sichuan Yi; Nuosu
|
||||
ik,Inupiaq
|
||||
io,Ido
|
||||
is,Icelandic
|
||||
it,Italian
|
||||
iu,Inuktitut
|
||||
ja,Japanese
|
||||
jv,Javanese
|
||||
ka,Georgian
|
||||
kg,Kongo
|
||||
ki,Kikuyu; Gikuyu
|
||||
kj,Kuanyama; Kwanyama
|
||||
kk,Kazakh
|
||||
kl,Kalaallisut; Greenlandic
|
||||
km,Central Khmer
|
||||
kn,Kannada
|
||||
ko,Korean
|
||||
kr,Kanuri
|
||||
ks,Kashmiri
|
||||
ku,Kurdish
|
||||
kv,Komi
|
||||
kw,Cornish
|
||||
ky,Kirghiz; Kyrgyz
|
||||
la,Latin
|
||||
lb,Luxembourgish; Letzeburgesch
|
||||
lg,Ganda
|
||||
li,Limburgan; Limburger; Limburgish
|
||||
ln,Lingala
|
||||
lo,Lao
|
||||
lt,Lithuanian
|
||||
lu,Luba-Katanga
|
||||
lv,Latvian
|
||||
mg,Malagasy
|
||||
mh,Marshallese
|
||||
mi,Maori
|
||||
mk,Macedonian
|
||||
ml,Malayalam
|
||||
mn,Mongolian
|
||||
mr,Marathi
|
||||
ms,Malay
|
||||
mt,Maltese
|
||||
my,Burmese
|
||||
na,Nauru
|
||||
nb,"Bokmål, Norwegian; Norwegian Bokmål"
|
||||
nd,"Ndebele, North; North Ndebele"
|
||||
ne,Nepali
|
||||
ng,Ndonga
|
||||
nl,Dutch; Flemish
|
||||
nn,"Norwegian Nynorsk; Nynorsk, Norwegian"
|
||||
no,Norwegian
|
||||
nr,"Ndebele, South; South Ndebele"
|
||||
nv,Navajo; Navaho
|
||||
ny,Chichewa; Chewa; Nyanja
|
||||
oc,Occitan (post 1500); Provençal
|
||||
oj,Ojibwa
|
||||
om,Oromo
|
||||
or,Oriya
|
||||
os,Ossetian; Ossetic
|
||||
pa,Panjabi; Punjabi
|
||||
pi,Pali
|
||||
pl,Polish
|
||||
ps,Pushto; Pashto
|
||||
pt,Portuguese
|
||||
qu,Quechua
|
||||
rm,Romansh
|
||||
rn,Rundi
|
||||
ro,Romanian; Moldavian; Moldovan
|
||||
ru,Russian
|
||||
rw,Kinyarwanda
|
||||
sa,Sanskrit
|
||||
sc,Sardinian
|
||||
sd,Sindhi
|
||||
se,Northern Sami
|
||||
sg,Sango
|
||||
si,Sinhala; Sinhalese
|
||||
sk,Slovak
|
||||
sl,Slovenian
|
||||
sm,Samoan
|
||||
sn,Shona
|
||||
so,Somali
|
||||
sq,Albanian
|
||||
sr,Serbian
|
||||
ss,Swati
|
||||
st,"Sotho, Southern"
|
||||
su,Sundanese
|
||||
sv,Swedish
|
||||
sw,Swahili
|
||||
ta,Tamil
|
||||
te,Telugu
|
||||
tg,Tajik
|
||||
th,Thai
|
||||
ti,Tigrinya
|
||||
tk,Turkmen
|
||||
tl,Tagalog
|
||||
tn,Tswana
|
||||
to,Tonga (Tonga Islands)
|
||||
tr,Turkish
|
||||
ts,Tsonga
|
||||
tt,Tatar
|
||||
tw,Twi
|
||||
ty,Tahitian
|
||||
ug,Uighur; Uyghur
|
||||
uk,Ukrainian
|
||||
ur,Urdu
|
||||
uz,Uzbek
|
||||
ve,Venda
|
||||
vi,Vietnamese
|
||||
vo,Volapük
|
||||
wa,Walloon
|
||||
wo,Wolof
|
||||
xh,Xhosa
|
||||
yi,Yiddish
|
||||
yo,Yoruba
|
||||
za,Zhuang; Chuang
|
||||
zh,Chinese
|
||||
zu,Zulu
|
|
7
resources/metadata-ISO/licenses.csv
Normal file
7
resources/metadata-ISO/licenses.csv
Normal file
@ -0,0 +1,7 @@
|
||||
name,code
|
||||
Creative Commons CC Zero,CC0
|
||||
Open Data Commons Public Domain Dedication and Licence,PDDL
|
||||
Creative Commons Attribution 4.0,CC-BY-4.0
|
||||
Open Data Commons Attribution License,ODC-BY
|
||||
Creative Commons Attribution Share-Alike 4.0,CC-BY-SA-4.0
|
||||
Open Data Commons Open Database License,ODBL
|
|
16
resources/metadata-ISO/md_scope_codes.csv
Normal file
16
resources/metadata-ISO/md_scope_codes.csv
Normal file
@ -0,0 +1,16 @@
|
||||
attribute;information applies to the attribute class
|
||||
attributeType;information applies to the characteristic of a feature
|
||||
collectionHardware;information applies to the collection hardware class
|
||||
collectionSession;information applies to the collection session
|
||||
dataset;information applies to the dataset
|
||||
series;information applies to the series
|
||||
nonGeographicDataset;information applies to non-geographic data
|
||||
dimensionGroup;information applies to a dimension group
|
||||
feature;information applies to a feature
|
||||
featureType;information applies to a feature type
|
||||
propertyType;information applies to a property type
|
||||
fieldSession;information applies to a field session
|
||||
software;information applies to a computer program or routine
|
||||
service;information applies to a capability which a service provider entity makes available to a service user entity through a set of interfaces that define a behavior, such as a use case
|
||||
model;information applies to a copy or imitation of an existing or hypothetical object
|
||||
tile;information applies to a tile, a spatial subset of geographic data
|
|
25
resources/metadata-ISO/mime.csv
Normal file
25
resources/metadata-ISO/mime.csv
Normal file
@ -0,0 +1,25 @@
|
||||
application/octet-stream
|
||||
application/pdf
|
||||
application/xhtml+xml
|
||||
application/json
|
||||
application/xml
|
||||
application/zip
|
||||
image/gif
|
||||
image/jpeg
|
||||
image/png
|
||||
image/tiff
|
||||
image/svg+xml
|
||||
text/csv
|
||||
text/html
|
||||
text/plain
|
||||
text/xml
|
||||
application/vnd.oasis.opendocument.text
|
||||
application/vnd.oasis.opendocument.spreadsheet
|
||||
application/vnd.oasis.opendocument.presentation
|
||||
application/vnd.oasis.opendocument.graphics
|
||||
application/vnd.ms-excel
|
||||
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
|
||||
application/vnd.ms-powerpoint
|
||||
application/vnd.openxmlformats-officedocument.presentationml.presentation
|
||||
application/msword
|
||||
application/vnd.openxmlformats-officedocument.wordprocessingml.document
|
|
@ -31,6 +31,7 @@
|
||||
#include "qgsmaplayerstyleguiutils.h"
|
||||
#include "qgsmaptoolemitpoint.h"
|
||||
#include "qgsmaptopixel.h"
|
||||
#include "qgsmetadatawidget.h"
|
||||
#include "qgsmultibandcolorrenderer.h"
|
||||
#include "qgsmultibandcolorrendererwidget.h"
|
||||
#include "qgspalettedrendererwidget.h"
|
||||
@ -231,6 +232,13 @@ QgsRasterLayerProperties::QgsRasterLayerProperties( QgsMapLayer *lyr, QgsMapCanv
|
||||
mOptsPage_Histogram->setEnabled( false );
|
||||
}
|
||||
|
||||
QVBoxLayout *layout = new QVBoxLayout( metadataFrame );
|
||||
layout->setMargin( 0 );
|
||||
mMetadataWidget = new QgsMetadataWidget( this, mRasterLayer );
|
||||
mMetadataWidget->layout()->setContentsMargins( -1, 0, -1, 0 );
|
||||
layout->addWidget( mMetadataWidget );
|
||||
metadataFrame->setLayout( layout );
|
||||
|
||||
QgsDebugMsg( "Setting crs to " + mRasterLayer->crs().toWkt() );
|
||||
QgsDebugMsg( "Setting crs to " + mRasterLayer->crs().authid() + " - " + mRasterLayer->crs().description() );
|
||||
mCrsSelector->setCrs( mRasterLayer->crs() );
|
||||
@ -829,6 +837,9 @@ void QgsRasterLayerProperties::apply()
|
||||
mRasterLayer->setRenderer( rendererWidget->renderer() );
|
||||
}
|
||||
|
||||
mMetadataWidget->acceptMetadata();
|
||||
mMetadataFilled = false;
|
||||
|
||||
//transparency settings
|
||||
QgsRasterRenderer *rasterRenderer = mRasterLayer->renderer();
|
||||
if ( rasterRenderer )
|
||||
|
@ -31,6 +31,7 @@ class QgsMapLayer;
|
||||
class QgsMapCanvas;
|
||||
class QgsRasterLayer;
|
||||
class QgsMapToolEmitPoint;
|
||||
class QgsMetadataWidget;
|
||||
class QgsRasterRenderer;
|
||||
class QgsRasterRendererWidget;
|
||||
class QgsRasterHistogramWidget;
|
||||
@ -154,6 +155,7 @@ class APP_EXPORT QgsRasterLayerProperties : public QgsOptionsDialogBase, private
|
||||
//bool mRasterLayerIsInternal;
|
||||
|
||||
QgsRasterRendererWidget *mRendererWidget = nullptr;
|
||||
QgsMetadataWidget *mMetadataWidget = nullptr;
|
||||
|
||||
bool rasterIsMultiBandColor();
|
||||
|
||||
|
@ -37,6 +37,7 @@
|
||||
#include "qgsmapcanvas.h"
|
||||
#include "qgsmaplayerconfigwidgetfactory.h"
|
||||
#include "qgsmaplayerstyleguiutils.h"
|
||||
#include "qgsmetadatawidget.h"
|
||||
#include "qgspluginmetadata.h"
|
||||
#include "qgspluginregistry.h"
|
||||
#include "qgsproject.h"
|
||||
@ -247,6 +248,14 @@ QgsVectorLayerProperties::QgsVectorLayerProperties(
|
||||
diagLayout->addWidget( diagramPropertiesDialog );
|
||||
mDiagramFrame->setLayout( diagLayout );
|
||||
|
||||
// Metadata tab
|
||||
QVBoxLayout *metadataLayout = new QVBoxLayout( metadataFrame );
|
||||
metadataLayout->setMargin( 0 );
|
||||
mMetadataWidget = new QgsMetadataWidget( this, mLayer );
|
||||
mMetadataWidget->layout()->setContentsMargins( -1, 0, -1, 0 );
|
||||
metadataLayout->addWidget( mMetadataWidget );
|
||||
metadataFrame->setLayout( metadataLayout );
|
||||
|
||||
// Legend tab
|
||||
mLegendConfigEmbeddedWidget->setLayer( mLayer );
|
||||
|
||||
@ -489,6 +498,10 @@ void QgsVectorLayerProperties::apply()
|
||||
// apply legend settings
|
||||
mLegendConfigEmbeddedWidget->applyToLayer();
|
||||
|
||||
// save metadata
|
||||
mMetadataWidget->acceptMetadata();
|
||||
mMetadataFilled = false;
|
||||
|
||||
//
|
||||
// Set up sql subset query if applicable
|
||||
//
|
||||
|
@ -42,6 +42,7 @@ class QgsFieldsProperties;
|
||||
class QgsRendererPropertiesDialog;
|
||||
class QgsMapLayerConfigWidgetFactory;
|
||||
class QgsMapLayerConfigWidget;
|
||||
class QgsMetadataWidget;
|
||||
class QgsPanelWidget;
|
||||
|
||||
class APP_EXPORT QgsVectorLayerProperties : public QgsOptionsDialogBase, private Ui::QgsVectorLayerPropertiesBase, private QgsExpressionContextGenerator
|
||||
@ -212,6 +213,8 @@ class APP_EXPORT QgsVectorLayerProperties : public QgsOptionsDialogBase, private
|
||||
|
||||
void showHelp();
|
||||
|
||||
QgsMetadataWidget *mMetadataWidget = nullptr;
|
||||
|
||||
private slots:
|
||||
void openPanel( QgsPanelWidget *panel );
|
||||
};
|
||||
|
@ -626,6 +626,11 @@ QString QgsApplication::i18nPath()
|
||||
return ABISYM( mPkgDataPath ) + QStringLiteral( "/i18n/" );
|
||||
}
|
||||
|
||||
QString QgsApplication::metadataPath()
|
||||
{
|
||||
return ABISYM( mPkgDataPath ) + QStringLiteral( "/resources/metadata-ISO/" );
|
||||
}
|
||||
|
||||
QString QgsApplication::qgisMasterDatabaseFilePath()
|
||||
{
|
||||
return ABISYM( mPkgDataPath ) + QStringLiteral( "/resources/qgis.db" );
|
||||
|
@ -237,6 +237,11 @@ class CORE_EXPORT QgsApplication : public QApplication
|
||||
//! Returns the path to the translation directory.
|
||||
static QString i18nPath();
|
||||
|
||||
/** Returns the path to the metadata directory.
|
||||
* \since QGIS 3.0
|
||||
*/
|
||||
static QString metadataPath();
|
||||
|
||||
//! Returns the path to the master qgis.db file.
|
||||
static QString qgisMasterDatabaseFilePath();
|
||||
|
||||
|
@ -293,6 +293,7 @@ SET(QGIS_GUI_SRCS
|
||||
qgsmessagebaritem.cpp
|
||||
qgsmessagelogviewer.cpp
|
||||
qgsmessageviewer.cpp
|
||||
qgsmetadatawidget.cpp
|
||||
qgsnewhttpconnection.cpp
|
||||
qgsnewmemorylayerdialog.cpp
|
||||
qgsnewnamedialog.cpp
|
||||
@ -452,6 +453,7 @@ SET(QGIS_GUI_MOC_HDRS
|
||||
qgsmessagebaritem.h
|
||||
qgsmessagelogviewer.h
|
||||
qgsmessageviewer.h
|
||||
qgsmetadatawidget.h
|
||||
qgsnewhttpconnection.h
|
||||
qgsnewmemorylayerdialog.h
|
||||
qgsnewnamedialog.h
|
||||
|
840
src/gui/qgsmetadatawidget.cpp
Normal file
840
src/gui/qgsmetadatawidget.cpp
Normal file
@ -0,0 +1,840 @@
|
||||
/***************************************************************************
|
||||
qgsmetadatawidget.h - description
|
||||
-------------------
|
||||
begin : 17/05/2017
|
||||
copyright : (C) 2017 by Etienne Trimaille
|
||||
email : etienne at kartoza.com
|
||||
***************************************************************************/
|
||||
|
||||
/***************************************************************************
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
***************************************************************************/
|
||||
|
||||
#include <QtWidgets>
|
||||
#include <QIcon>
|
||||
#include <QPushButton>
|
||||
#include <QComboBox>
|
||||
#include <QString>
|
||||
#include <QInputDialog>
|
||||
#include <QStringListModel>
|
||||
|
||||
#include "qgsmetadatawidget.h"
|
||||
#include "qgslogger.h"
|
||||
#include "qgslayermetadatavalidator.h"
|
||||
#include "qgsapplication.h"
|
||||
|
||||
QgsMetadataWidget::QgsMetadataWidget( QWidget *parent, QgsMapLayer *layer )
|
||||
: QWidget( parent ),
|
||||
mLayer( layer )
|
||||
{
|
||||
setupUi( this );
|
||||
mMetadata = layer->metadata();
|
||||
tabWidget->setCurrentIndex( 0 );
|
||||
|
||||
// Disable the encoding and contacts
|
||||
encodingFrame->setHidden( true );
|
||||
tabWidget->removeTab( 5 );
|
||||
|
||||
// Default categories, we want them translated, so we are not using a CSV.
|
||||
mDefaultCategories << tr( "Farming" ) << tr( "Climatology Meteorology Atmosphere" ) << tr( "Location" ) << tr( "Intelligence Military" ) << tr( "Transportation" ) << tr( "Structure" ) << tr( "Boundaries" );
|
||||
mDefaultCategories << tr( "Inland Waters" ) << tr( "Planning Cadastre" ) << tr( "Geoscientific Information" ) << tr( "Elevation" ) << tr( "Health" ) << tr( "Biota" ) << tr( "Oceans" ) << tr( "Environment" );
|
||||
mDefaultCategories << tr( "Utilities Communication" ) << tr( "Economy" ) << tr( "Society" ) << tr( "Imagery Base Maps Earth Cover" );
|
||||
mDefaultCategoriesModel = new QStringListModel( mDefaultCategories );
|
||||
mDefaultCategoriesModel->sort( 0 ); // Sorting using translations
|
||||
listDefaultCategories->setModel( mDefaultCategoriesModel );
|
||||
|
||||
// Categories
|
||||
mCategoriesModel = new QStringListModel( listCategories );
|
||||
listCategories->setModel( mCategoriesModel );
|
||||
|
||||
// Rights
|
||||
mRightsModel = new QStringListModel( listRights );
|
||||
listRights->setModel( mRightsModel );
|
||||
|
||||
// Setup the constraints view
|
||||
mConstraintsModel = new QStandardItemModel( tabConstraints );
|
||||
mConstraintsModel->setColumnCount( 2 );
|
||||
QStringList constraintheaders;
|
||||
constraintheaders << tr( "Type" ) << tr( "Constraint" );
|
||||
mConstraintsModel->setHorizontalHeaderLabels( constraintheaders );
|
||||
tabConstraints->setModel( mConstraintsModel );
|
||||
tabConstraints->setItemDelegate( new ConstraintItemDelegate() );
|
||||
|
||||
// Setup the link view
|
||||
mLinksModel = new QStandardItemModel( tabLinks );
|
||||
mLinksModel->setColumnCount( 7 );
|
||||
QStringList headers = QStringList();
|
||||
headers << tr( "Name" ) << tr( "Type" ) << tr( "URL" ) << tr( "Description" ) << tr( "Format" ) << tr( "MIME" ) << tr( "Size" );
|
||||
mLinksModel->setHorizontalHeaderLabels( headers );
|
||||
tabLinks->setModel( mLinksModel );
|
||||
tabLinks->setItemDelegate( new LinkItemDelegate() );
|
||||
|
||||
// History
|
||||
mHistoryModel = new QStringListModel( listHistory );
|
||||
listHistory->setModel( mHistoryModel );
|
||||
|
||||
// Connect signals and slots
|
||||
connect( tabWidget, &QTabWidget::currentChanged, this, &QgsMetadataWidget::updatePanel );
|
||||
connect( btnAutoSource, &QPushButton::clicked, this, &QgsMetadataWidget::fillSourceFromLayer );
|
||||
connect( btnAddVocabulary, &QPushButton::clicked, this, &QgsMetadataWidget::addVocabulary );
|
||||
connect( btnRemoveVocabulary, &QPushButton::clicked, this, &QgsMetadataWidget::removeSelectedVocabulary );
|
||||
connect( btnAddRight, &QPushButton::clicked, this, &QgsMetadataWidget::addRight );
|
||||
connect( btnRemoveRight, &QPushButton::clicked, this, &QgsMetadataWidget::removeSelectedRight );
|
||||
connect( btnAddLicence, &QPushButton::clicked, this, &QgsMetadataWidget::addLicence );
|
||||
connect( btnRemoveLicence, &QPushButton::clicked, this, &QgsMetadataWidget::removeSelectedLicence );
|
||||
connect( btnAddConstraint, &QPushButton::clicked, this, &QgsMetadataWidget::addConstraint );
|
||||
connect( btnRemoveConstraint, &QPushButton::clicked, this, &QgsMetadataWidget::removeSelectedConstraint );
|
||||
connect( btnAutoCrs, &QPushButton::clicked, this, &QgsMetadataWidget::fillCrsFromLayer );
|
||||
connect( btnAddContact, &QPushButton::clicked, this, &QgsMetadataWidget::addContact );
|
||||
connect( btnRemoveContact, &QPushButton::clicked, this, &QgsMetadataWidget::removeSelectedContact );
|
||||
connect( tabContacts, &QTableWidget::itemSelectionChanged, this, &QgsMetadataWidget::updateContactDetails );
|
||||
connect( btnAddLink, &QPushButton::clicked, this, &QgsMetadataWidget::addLink );
|
||||
connect( btnRemoveLink, &QPushButton::clicked, this, &QgsMetadataWidget::removeSelectedLink );
|
||||
connect( btnAddHistory, &QPushButton::clicked, this, &QgsMetadataWidget::addHistory );
|
||||
connect( btnRemoveHistory, &QPushButton::clicked, this, &QgsMetadataWidget::removeSelectedHistory );
|
||||
connect( btnNewCategory, &QPushButton::clicked, this, &QgsMetadataWidget::addNewCategory );
|
||||
connect( btnAddDefaultCategory, &QPushButton::clicked, this, &QgsMetadataWidget::addDefaultCategory );
|
||||
connect( btnRemoveCategory, &QPushButton::clicked, this, &QgsMetadataWidget::removeSelectedCategory );
|
||||
|
||||
fillComboBox();
|
||||
setPropertiesFromLayer();
|
||||
updateContactDetails();
|
||||
}
|
||||
|
||||
QgsMetadataWidget::~QgsMetadataWidget()
|
||||
{
|
||||
}
|
||||
|
||||
void QgsMetadataWidget::fillSourceFromLayer() const
|
||||
{
|
||||
lineEditIdentifier->setText( mLayer->publicSource() );
|
||||
}
|
||||
|
||||
void QgsMetadataWidget::addVocabulary() const
|
||||
{
|
||||
int row = tabKeywords->rowCount();
|
||||
tabKeywords->setRowCount( row + 1 );
|
||||
QTableWidgetItem *pCell = nullptr;
|
||||
|
||||
// Vocabulary
|
||||
pCell = new QTableWidgetItem( QString( tr( "undefined %1" ) ).arg( row + 1 ) );
|
||||
tabKeywords->setItem( row, 0, pCell );
|
||||
|
||||
// Keywords
|
||||
pCell = new QTableWidgetItem();
|
||||
tabKeywords->setItem( row, 1, pCell );
|
||||
}
|
||||
|
||||
void QgsMetadataWidget::removeSelectedVocabulary() const
|
||||
{
|
||||
QItemSelectionModel *selectionModel = tabKeywords->selectionModel();
|
||||
const QModelIndexList selectedRows = selectionModel->selectedRows();
|
||||
for ( int i = 0 ; i < selectedRows.size() ; i++ )
|
||||
{
|
||||
tabKeywords->model()->removeRow( selectedRows[i].row() );
|
||||
}
|
||||
}
|
||||
|
||||
void QgsMetadataWidget::addLicence()
|
||||
{
|
||||
QString newLicence = QInputDialog::getItem( this, tr( "New Licence" ), tr( "New Licence" ), parseLicenses(), 0, true );
|
||||
if ( tabLicenses->findItems( newLicence, Qt::MatchExactly ).isEmpty() )
|
||||
{
|
||||
int row = tabLicenses->rowCount();
|
||||
tabLicenses->setRowCount( row + 1 );
|
||||
QTableWidgetItem *pCell = new QTableWidgetItem( newLicence );
|
||||
tabLicenses->setItem( row, 0, pCell );
|
||||
}
|
||||
}
|
||||
|
||||
void QgsMetadataWidget::removeSelectedLicence() const
|
||||
{
|
||||
QItemSelectionModel *selectionModel = tabLicenses->selectionModel();
|
||||
const QModelIndexList selectedRows = selectionModel->selectedRows();
|
||||
for ( int i = 0 ; i < selectedRows.size() ; i++ )
|
||||
{
|
||||
tabLicenses->model()->removeRow( selectedRows[i].row() );
|
||||
}
|
||||
}
|
||||
|
||||
void QgsMetadataWidget::addRight()
|
||||
{
|
||||
QString newRight = QInputDialog::getText( this, tr( "New Right" ), tr( "New Right" ) );
|
||||
QStringList existingRights = mRightsModel->stringList();
|
||||
if ( ! existingRights.contains( newRight ) )
|
||||
{
|
||||
existingRights.append( newRight );
|
||||
mRightsModel->setStringList( existingRights );
|
||||
}
|
||||
}
|
||||
|
||||
void QgsMetadataWidget::removeSelectedRight() const
|
||||
{
|
||||
QItemSelectionModel *selection = listRights->selectionModel();
|
||||
if ( selection->hasSelection() )
|
||||
{
|
||||
QModelIndex indexElementSelectionne = selection->currentIndex();
|
||||
|
||||
QVariant item = mRightsModel->data( indexElementSelectionne, Qt::DisplayRole );
|
||||
QStringList list = mRightsModel->stringList();
|
||||
list.removeOne( item.toString() );
|
||||
mRightsModel->setStringList( list );
|
||||
}
|
||||
}
|
||||
|
||||
void QgsMetadataWidget::addConstraint() const
|
||||
{
|
||||
int row = mConstraintsModel->rowCount();
|
||||
mConstraintsModel->setItem( row, 0, new QStandardItem( QString( tr( "undefined %1" ) ).arg( row + 1 ) ) );
|
||||
mConstraintsModel->setItem( row, 1, new QStandardItem( QString( tr( "undefined %1" ) ).arg( row + 1 ) ) );
|
||||
}
|
||||
|
||||
void QgsMetadataWidget::removeSelectedConstraint() const
|
||||
{
|
||||
const QModelIndexList selectedRows = tabConstraints->selectionModel()->selectedRows();
|
||||
mConstraintsModel->removeRow( selectedRows[0].row() );
|
||||
}
|
||||
|
||||
void QgsMetadataWidget::fillCrsFromLayer() const
|
||||
{
|
||||
selectionCrs->setCrs( mLayer->crs() );
|
||||
}
|
||||
|
||||
void QgsMetadataWidget::addContact() const
|
||||
{
|
||||
int row = tabContacts->rowCount();
|
||||
tabContacts->setRowCount( row + 1 );
|
||||
QTableWidgetItem *pCell;
|
||||
|
||||
// Name
|
||||
pCell = new QTableWidgetItem( QString( tr( "unnamed %1" ) ).arg( row + 1 ) );
|
||||
tabContacts->setItem( row, 0, pCell );
|
||||
|
||||
// Organization
|
||||
pCell = new QTableWidgetItem();
|
||||
tabContacts->setItem( row, 1, pCell );
|
||||
|
||||
// Set last item selected
|
||||
tabContacts->selectRow( row );
|
||||
}
|
||||
|
||||
void QgsMetadataWidget::removeSelectedContact() const
|
||||
{
|
||||
QItemSelectionModel *selectionModel = tabContacts->selectionModel();
|
||||
const QModelIndexList selectedRows = selectionModel->selectedRows();
|
||||
for ( int i = 0 ; i < selectedRows.size() ; i++ )
|
||||
{
|
||||
tabContacts->model()->removeRow( selectedRows[i].row() );
|
||||
}
|
||||
}
|
||||
|
||||
void QgsMetadataWidget::updateContactDetails() const
|
||||
{
|
||||
QItemSelectionModel *selectionModel = tabContacts->selectionModel();
|
||||
const QModelIndexList selectedRows = selectionModel->selectedRows();
|
||||
|
||||
if ( ! selectedRows.isEmpty() )
|
||||
{
|
||||
panelDetails->setDisabled( false );
|
||||
lineEditContactName->setText( tabContacts->item( selectedRows[0].row(), 0 )->text() );
|
||||
lineEditContactOrganization->setText( tabContacts->item( selectedRows[0].row(), 1 )->text() );
|
||||
}
|
||||
else
|
||||
{
|
||||
panelDetails->setDisabled( true );
|
||||
lineEditContactName->clear();
|
||||
lineEditContactOrganization->clear();
|
||||
}
|
||||
}
|
||||
|
||||
void QgsMetadataWidget::addLink() const
|
||||
{
|
||||
int row = mLinksModel->rowCount();
|
||||
mLinksModel->setItem( row, 0, new QStandardItem( QString( tr( "undefined %1" ) ).arg( row + 1 ) ) );
|
||||
mLinksModel->setItem( row, 1, new QStandardItem() );
|
||||
mLinksModel->setItem( row, 2, new QStandardItem() );
|
||||
mLinksModel->setItem( row, 3, new QStandardItem() );
|
||||
mLinksModel->setItem( row, 4, new QStandardItem() );
|
||||
mLinksModel->setItem( row, 5, new QStandardItem() );
|
||||
mLinksModel->setItem( row, 6, new QStandardItem() );
|
||||
}
|
||||
|
||||
void QgsMetadataWidget::removeSelectedLink() const
|
||||
{
|
||||
const QModelIndexList selectedRows = tabLinks->selectionModel()->selectedRows();
|
||||
mLinksModel->removeRow( selectedRows[0].row() );
|
||||
}
|
||||
|
||||
void QgsMetadataWidget::addHistory()
|
||||
{
|
||||
QString newHistory = QInputDialog::getText( this, tr( "New History" ), tr( "New History" ) );
|
||||
QStringList existingHistory = mHistoryModel->stringList();
|
||||
if ( ! existingHistory.contains( newHistory ) )
|
||||
{
|
||||
existingHistory.append( newHistory );
|
||||
mHistoryModel->setStringList( existingHistory );
|
||||
}
|
||||
}
|
||||
|
||||
void QgsMetadataWidget::removeSelectedHistory() const
|
||||
{
|
||||
QItemSelectionModel *selection = listHistory->selectionModel();
|
||||
if ( selection->hasSelection() )
|
||||
{
|
||||
QModelIndex indexElementSelectionne = selection->currentIndex();
|
||||
|
||||
QVariant item = mHistoryModel->data( indexElementSelectionne, Qt::DisplayRole );
|
||||
QStringList list = mHistoryModel->stringList();
|
||||
list.removeOne( item.toString() );
|
||||
mHistoryModel->setStringList( list );
|
||||
}
|
||||
}
|
||||
|
||||
void QgsMetadataWidget::fillComboBox() const
|
||||
{
|
||||
// Set default values in type combobox
|
||||
// It is advised to use the ISO 19115 MD_ScopeCode values. E.g. 'dataset' or 'series'.
|
||||
// http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml
|
||||
comboType->setEditable( true );
|
||||
comboType->clear();
|
||||
QMap<QString, QString> types = parseTypes();
|
||||
const QStringList &keys = types.keys();
|
||||
int i = 0;
|
||||
for ( const QString &type : keys )
|
||||
{
|
||||
comboType->insertItem( i, type );
|
||||
comboType->setItemData( i, types.value( type ), Qt::ToolTipRole );
|
||||
i++;
|
||||
}
|
||||
|
||||
// Set default values in language combobox
|
||||
// It is advised to use the ISO 639.2 or ISO 3166 specifications, e.g. 'ENG' or 'SPA',
|
||||
comboLanguage->setEditable( true );
|
||||
comboLanguage->clear();
|
||||
QMap<QString, QString> countries = parseLanguages();
|
||||
const QStringList &k = countries.keys();
|
||||
i = 0;
|
||||
for ( const QString &countryCode : k )
|
||||
{
|
||||
comboLanguage->insertItem( i, countryCode );
|
||||
comboLanguage->setItemData( i, countries.value( countryCode ), Qt::ToolTipRole );
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
void QgsMetadataWidget::setPropertiesFromLayer() const
|
||||
{
|
||||
// Parent ID
|
||||
lineEditParentId->setText( mMetadata.parentIdentifier() );
|
||||
|
||||
// Identifier
|
||||
if ( ! mMetadata.identifier().isEmpty() )
|
||||
{
|
||||
lineEditIdentifier->setText( mMetadata.identifier() );
|
||||
}
|
||||
|
||||
// Title
|
||||
if ( ! mMetadata.title().isEmpty() )
|
||||
{
|
||||
lineEditTitle->setText( mMetadata.title() );
|
||||
}
|
||||
|
||||
// Type
|
||||
if ( ! mMetadata.type().isEmpty() )
|
||||
{
|
||||
if ( comboType->findText( mMetadata.type() ) == -1 )
|
||||
{
|
||||
comboType->addItem( mMetadata.type() );
|
||||
}
|
||||
comboType->setCurrentIndex( comboType->findText( mMetadata.type() ) );
|
||||
}
|
||||
|
||||
// Language
|
||||
if ( ! mMetadata.language().isEmpty() )
|
||||
{
|
||||
if ( comboLanguage->findText( mMetadata.language() ) == -1 )
|
||||
{
|
||||
comboLanguage->addItem( mMetadata.language() );
|
||||
}
|
||||
comboLanguage->setCurrentIndex( comboLanguage->findText( mMetadata.language() ) );
|
||||
}
|
||||
|
||||
// Abstract
|
||||
textEditAbstract->setPlainText( mMetadata.abstract() );
|
||||
|
||||
// Categories
|
||||
mCategoriesModel->setStringList( mMetadata.categories() );
|
||||
|
||||
// Keywords
|
||||
tabKeywords->setRowCount( 0 );
|
||||
QMapIterator<QString, QStringList> i( mMetadata.keywords() );
|
||||
while ( i.hasNext() )
|
||||
{
|
||||
i.next();
|
||||
addVocabulary();
|
||||
int currentRow = tabKeywords->rowCount() - 1;
|
||||
tabKeywords->item( currentRow, 0 )->setText( i.key() );
|
||||
tabKeywords->item( currentRow, 1 )->setText( i.value().join( "," ) );
|
||||
}
|
||||
|
||||
// Fees
|
||||
lineEditFees->setText( mMetadata.fees() );
|
||||
|
||||
// Licenses
|
||||
tabLicenses->setRowCount( 0 );
|
||||
const QStringList &licenses = mMetadata.licenses();
|
||||
for ( const QString &licence : licenses )
|
||||
{
|
||||
int currentRow = tabLicenses->rowCount();
|
||||
tabLicenses->setRowCount( currentRow + 1 );
|
||||
QTableWidgetItem *pCell = tabLicenses->item( currentRow, 0 );
|
||||
if ( !pCell )
|
||||
{
|
||||
pCell = new QTableWidgetItem;
|
||||
tabLicenses->setItem( currentRow, 0, pCell );
|
||||
}
|
||||
pCell->setText( licence );
|
||||
}
|
||||
|
||||
// Rights
|
||||
mRightsModel->setStringList( mMetadata.rights() );
|
||||
|
||||
// Constraints
|
||||
const QList<QgsLayerMetadata::Constraint> &constraints = mMetadata.constraints();
|
||||
for ( const QgsLayerMetadata::Constraint &constraint : constraints )
|
||||
{
|
||||
int row = mConstraintsModel->rowCount();
|
||||
mConstraintsModel->setItem( row, 0, new QStandardItem( constraint.type ) );
|
||||
mConstraintsModel->setItem( row, 1, new QStandardItem( constraint.constraint ) );
|
||||
}
|
||||
|
||||
// CRS
|
||||
if ( mMetadata.crs().isValid() )
|
||||
{
|
||||
selectionCrs->setCrs( mMetadata.crs() );
|
||||
}
|
||||
|
||||
// Links
|
||||
const QList<QgsLayerMetadata::Link> &links = mMetadata.links();
|
||||
for ( const QgsLayerMetadata::Link &link : links )
|
||||
{
|
||||
int row = mLinksModel->rowCount();
|
||||
mLinksModel->setItem( row, 0, new QStandardItem( link.name ) );
|
||||
mLinksModel->setItem( row, 1, new QStandardItem( link.type ) );
|
||||
mLinksModel->setItem( row, 2, new QStandardItem( link.url ) );
|
||||
mLinksModel->setItem( row, 3, new QStandardItem( link.description ) );
|
||||
mLinksModel->setItem( row, 4, new QStandardItem( link.format ) );
|
||||
mLinksModel->setItem( row, 5, new QStandardItem( link.mimeType ) );
|
||||
mLinksModel->setItem( row, 6, new QStandardItem( link.size ) );
|
||||
}
|
||||
|
||||
// History
|
||||
mHistoryModel->setStringList( mMetadata.history() );
|
||||
}
|
||||
|
||||
void QgsMetadataWidget::saveMetadata( QgsLayerMetadata &layerMetadata ) const
|
||||
{
|
||||
layerMetadata.setParentIdentifier( lineEditParentId->text() );
|
||||
layerMetadata.setIdentifier( lineEditIdentifier->text() );
|
||||
layerMetadata.setTitle( lineEditTitle->text() );
|
||||
layerMetadata.setType( comboType->currentText() );
|
||||
layerMetadata.setLanguage( comboLanguage->currentText() );
|
||||
layerMetadata.setAbstract( textEditAbstract->toPlainText() );
|
||||
|
||||
// Keywords, it will save categories too.
|
||||
syncFromCategoriesTabToKeywordsTab();
|
||||
QMap<QString, QStringList> keywords;
|
||||
for ( int i = 0 ; i < tabKeywords->rowCount() ; i++ )
|
||||
{
|
||||
keywords.insert( tabKeywords->item( i, 0 )->text(), tabKeywords->item( i, 1 )->text().split( ',' ) );
|
||||
}
|
||||
layerMetadata.setKeywords( keywords );
|
||||
|
||||
// Fees
|
||||
layerMetadata.setFees( lineEditFees->text() );
|
||||
|
||||
// Licenses
|
||||
QStringList licenses;
|
||||
for ( int i = 0 ; i < tabLicenses->rowCount() ; i++ )
|
||||
{
|
||||
licenses.append( tabLicenses->item( i, 0 )->text() );
|
||||
}
|
||||
layerMetadata.setLicenses( licenses );
|
||||
|
||||
// Rights
|
||||
layerMetadata.setRights( mRightsModel->stringList() );
|
||||
|
||||
// Constraints
|
||||
QList<QgsLayerMetadata::Constraint> constraints;
|
||||
for ( int row = 0 ; row < mConstraintsModel->rowCount() ; row++ )
|
||||
{
|
||||
struct QgsLayerMetadata::Constraint constraint = QgsLayerMetadata::Constraint();
|
||||
constraint.type = mConstraintsModel->item( row, 0 )->text();
|
||||
constraint.constraint = mConstraintsModel->item( row, 1 )->text();
|
||||
constraints.append( constraint );
|
||||
}
|
||||
layerMetadata.setConstraints( constraints );
|
||||
|
||||
// CRS
|
||||
layerMetadata.setCrs( selectionCrs->crs() );
|
||||
|
||||
// Links
|
||||
QList<QgsLayerMetadata::Link> links;
|
||||
for ( int row = 0 ; row < mLinksModel->rowCount() ; row++ )
|
||||
{
|
||||
struct QgsLayerMetadata::Link link = QgsLayerMetadata::Link();
|
||||
link.name = mLinksModel->item( row, 0 )->text();
|
||||
link.type = mLinksModel->item( row, 1 )->text();
|
||||
link.url = mLinksModel->item( row, 2 )->text();
|
||||
link.description = mLinksModel->item( row, 3 )->text();
|
||||
link.format = mLinksModel->item( row, 4 )->text();
|
||||
link.mimeType = mLinksModel->item( row, 5 )->text();
|
||||
link.size = mLinksModel->item( row, 6 )->text();
|
||||
links.append( link );
|
||||
}
|
||||
layerMetadata.setLinks( links );
|
||||
|
||||
// History
|
||||
layerMetadata.setHistory( mHistoryModel->stringList() );
|
||||
}
|
||||
|
||||
bool QgsMetadataWidget::checkMetadata() const
|
||||
{
|
||||
QgsLayerMetadata metadata = QgsLayerMetadata();
|
||||
saveMetadata( metadata );
|
||||
QgsNativeMetadataValidator validator;
|
||||
QList<QgsMetadataValidator::ValidationResult> validationResults;
|
||||
bool results = validator.validate( metadata, validationResults );
|
||||
|
||||
QString errors;
|
||||
if ( results == false )
|
||||
{
|
||||
errors = QStringLiteral();
|
||||
for ( const QgsMetadataValidator::ValidationResult &result : validationResults )
|
||||
{
|
||||
errors += QLatin1String( "<b>" ) % result.section;
|
||||
if ( ! result.identifier.isNull() )
|
||||
{
|
||||
errors += QLatin1String( " " ) % QVariant( result.identifier.toInt() + 1 ).toString();
|
||||
}
|
||||
errors += QLatin1String( "</b>: " ) % result.note % QLatin1String( "<br />" );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
errors = QString( tr( "Ok, it seems valid according to the QGIS Schema." ) );
|
||||
}
|
||||
|
||||
QString myStyle = QgsApplication::reportStyleSheet();
|
||||
myStyle.append( QStringLiteral( "body { margin: 10px; }\n " ) );
|
||||
resultsCheckMetadata->clear();
|
||||
resultsCheckMetadata->document()->setDefaultStyleSheet( myStyle );
|
||||
resultsCheckMetadata->setHtml( errors );
|
||||
|
||||
return results;
|
||||
}
|
||||
|
||||
QMap<QString, QString> QgsMetadataWidget::parseLanguages()
|
||||
{
|
||||
QMap<QString, QString> countries;
|
||||
countries.insert( QString(), QString() ); // We add an empty line, because it's not compulsory.
|
||||
|
||||
QString path = QDir( QgsApplication::metadataPath() ).absoluteFilePath( QStringLiteral( "language_codes_ISO_639.csv" ) );
|
||||
QFile file( path );
|
||||
if ( !file.open( QIODevice::ReadOnly ) )
|
||||
{
|
||||
QgsDebugMsg( QString( "Error while opening the CSV file: %1, %2 " ).arg( path, file.errorString() ) );
|
||||
return countries;
|
||||
}
|
||||
|
||||
// Skip the first line of the CSV
|
||||
file.readLine();
|
||||
while ( !file.atEnd() )
|
||||
{
|
||||
QByteArray line = file.readLine();
|
||||
QList<QByteArray> items = line.split( ',' );
|
||||
countries.insert( QString( items.at( 0 ).constData() ).trimmed(), QString( items.at( 1 ).constData() ).trimmed() );
|
||||
}
|
||||
file.close();
|
||||
|
||||
path = QDir( QgsApplication::metadataPath() ).absoluteFilePath( QStringLiteral( "country_code_ISO_3166.csv" ) );
|
||||
QFile secondFile( path );
|
||||
if ( !secondFile.open( QIODevice::ReadOnly ) )
|
||||
{
|
||||
QgsDebugMsg( QString( "Error while opening the CSV file: %1, %2 " ).arg( path, file.errorString() ) );
|
||||
return countries;
|
||||
}
|
||||
|
||||
// Skip the first line of the CSV
|
||||
secondFile.readLine();
|
||||
while ( !secondFile.atEnd() )
|
||||
{
|
||||
QByteArray line = secondFile.readLine();
|
||||
QList<QByteArray> items = line.split( ',' );
|
||||
countries.insert( QString( items.at( 2 ).constData() ).trimmed(), QString( items.at( 0 ).constData() ).trimmed() );
|
||||
}
|
||||
secondFile.close();
|
||||
return countries;
|
||||
}
|
||||
|
||||
QStringList QgsMetadataWidget::parseLicenses()
|
||||
{
|
||||
QStringList wordList;
|
||||
wordList.append( QString() ); // We add an empty line, because it's not compulsory.
|
||||
|
||||
QString path = QDir( QgsApplication::metadataPath() ).absoluteFilePath( QStringLiteral( "licenses.csv" ) );
|
||||
QFile file( path );
|
||||
if ( !file.open( QIODevice::ReadOnly ) )
|
||||
{
|
||||
QgsDebugMsg( QString( "Error while opening the CSV file: %1, %2 " ).arg( path, file.errorString() ) );
|
||||
return wordList;
|
||||
}
|
||||
|
||||
// Skip the first line of the CSV
|
||||
file.readLine();
|
||||
while ( !file.atEnd() )
|
||||
{
|
||||
QByteArray line = file.readLine();
|
||||
wordList.append( line.split( ',' ).at( 0 ).trimmed() );
|
||||
}
|
||||
file.close();
|
||||
return wordList;
|
||||
}
|
||||
|
||||
QStringList QgsMetadataWidget::parseLinkTypes()
|
||||
{
|
||||
QStringList wordList;
|
||||
wordList.append( QString() ); // We add an empty line, because it's not compulsory.
|
||||
|
||||
QString path = QDir( QgsApplication::metadataPath() ).absoluteFilePath( QStringLiteral( "LinkPropertyLookupTable.csv" ) );
|
||||
QFile file( path );
|
||||
if ( !file.open( QIODevice::ReadOnly ) )
|
||||
{
|
||||
QgsDebugMsg( QString( "Error while opening the CSV file: %1, %2 " ).arg( path, file.errorString() ) );
|
||||
return wordList;
|
||||
}
|
||||
|
||||
// Skip the first line of the CSV
|
||||
file.readLine();
|
||||
while ( !file.atEnd() )
|
||||
{
|
||||
QByteArray line = file.readLine();
|
||||
wordList.append( line.split( ',' ).at( 0 ).trimmed() );
|
||||
}
|
||||
file.close();
|
||||
return wordList;
|
||||
}
|
||||
|
||||
QStringList QgsMetadataWidget::parseMimeTypes()
|
||||
{
|
||||
QStringList wordList;
|
||||
wordList.append( QString() ); // We add an empty line, because it's not compulsory.
|
||||
|
||||
QString path = QDir( QgsApplication::metadataPath() ).absoluteFilePath( QString( "mime.csv" ) );
|
||||
QFile file( path );
|
||||
if ( !file.open( QIODevice::ReadOnly ) )
|
||||
{
|
||||
QgsDebugMsg( QString( "Error while opening the CSV file: %1, %2 " ).arg( path, file.errorString() ) );
|
||||
return wordList;
|
||||
}
|
||||
|
||||
while ( !file.atEnd() )
|
||||
{
|
||||
QByteArray line = file.readLine();
|
||||
wordList.append( line.split( ',' ).at( 0 ).trimmed() );
|
||||
}
|
||||
file.close();
|
||||
return wordList;
|
||||
}
|
||||
|
||||
QMap<QString, QString> QgsMetadataWidget::parseTypes()
|
||||
{
|
||||
QMap<QString, QString> types;
|
||||
types.insert( QString(), QString() ); // We add an empty line, because it's not compulsory.
|
||||
QString path = QDir( QgsApplication::metadataPath() ).absoluteFilePath( QStringLiteral( "md_scope_codes.csv" ) );
|
||||
QFile file( path );
|
||||
if ( !file.open( QIODevice::ReadOnly ) )
|
||||
{
|
||||
QgsDebugMsg( QString( "Error while opening the CSV file: %1, %2 " ).arg( path, file.errorString() ) );
|
||||
return types;
|
||||
}
|
||||
|
||||
types.insert( QString(), QString() ); // We add an empty line, because it's not compulsory.
|
||||
while ( !file.atEnd() )
|
||||
{
|
||||
QByteArray line = file.readLine();
|
||||
QList<QByteArray> items = line.split( ';' );
|
||||
types.insert( items.at( 0 ).constData(), items.at( 1 ).constData() );
|
||||
}
|
||||
file.close();
|
||||
return types;
|
||||
}
|
||||
|
||||
void QgsMetadataWidget::acceptMetadata()
|
||||
{
|
||||
saveMetadata( mMetadata );
|
||||
|
||||
// Save layer metadata properties
|
||||
mLayer->setMetadata( mMetadata );
|
||||
}
|
||||
|
||||
void QgsMetadataWidget::syncFromCategoriesTabToKeywordsTab() const
|
||||
{
|
||||
if ( mCategoriesModel->rowCount() > 0 )
|
||||
{
|
||||
QList<QTableWidgetItem *> categories = tabKeywords->findItems( QStringLiteral( "gmd:topicCategory" ), Qt::MatchExactly );
|
||||
int row;
|
||||
if ( !categories.isEmpty() )
|
||||
{
|
||||
row = categories.at( 0 )->row();
|
||||
}
|
||||
else
|
||||
{
|
||||
// Create a new line with 'gmd:topicCategory'
|
||||
addVocabulary();
|
||||
row = tabKeywords->rowCount() - 1;
|
||||
tabKeywords->item( row, 0 )->setText( QStringLiteral( "gmd:topicCategory" ) );
|
||||
}
|
||||
tabKeywords->item( row, 1 )->setText( mCategoriesModel->stringList().join( "," ) );
|
||||
}
|
||||
}
|
||||
|
||||
void QgsMetadataWidget::updatePanel() const
|
||||
{
|
||||
int index = tabWidget->currentIndex();
|
||||
QString currentTabText = tabWidget->widget( index )->objectName();
|
||||
if ( currentTabText == QStringLiteral( "tabCategoriesDialog" ) )
|
||||
{
|
||||
// Categories tab
|
||||
// We need to take keywords and insert them into the list
|
||||
QList<QTableWidgetItem *> categories = tabKeywords->findItems( QStringLiteral( "gmd:topicCategory" ), Qt::MatchExactly );
|
||||
if ( !categories.isEmpty() )
|
||||
{
|
||||
int row = categories.at( 0 )->row();
|
||||
mCategoriesModel->setStringList( tabKeywords->item( row, 1 )->text().split( "," ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
mCategoriesModel->setStringList( QStringList() );
|
||||
}
|
||||
}
|
||||
else if ( currentTabText == QStringLiteral( "tabKeywordsDialog" ) )
|
||||
{
|
||||
// Keywords tab
|
||||
// We need to take categories and insert them into the table
|
||||
syncFromCategoriesTabToKeywordsTab();
|
||||
}
|
||||
else if ( currentTabText == QStringLiteral( "tabValidationDialog" ) )
|
||||
{
|
||||
checkMetadata();
|
||||
}
|
||||
}
|
||||
|
||||
void QgsMetadataWidget::addNewCategory()
|
||||
{
|
||||
bool ok;
|
||||
QString text = QInputDialog::getText( this, tr( "New Category" ),
|
||||
tr( "New Category:" ), QLineEdit::Normal,
|
||||
QString(), &ok );
|
||||
if ( ok && !text.isEmpty() )
|
||||
{
|
||||
QStringList list = mCategoriesModel->stringList();
|
||||
if ( ! list.contains( text ) )
|
||||
{
|
||||
list.append( text );
|
||||
mCategoriesModel->setStringList( list );
|
||||
mCategoriesModel->sort( 0 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void QgsMetadataWidget::addDefaultCategory() const
|
||||
{
|
||||
QItemSelectionModel *selection = listDefaultCategories->selectionModel();
|
||||
if ( selection->hasSelection() )
|
||||
{
|
||||
QModelIndex indexElementSelectionne = selection->currentIndex();
|
||||
|
||||
QVariant item = mDefaultCategoriesModel->data( indexElementSelectionne, Qt::DisplayRole );
|
||||
QStringList list = mDefaultCategoriesModel->stringList();
|
||||
list.removeOne( item.toString() );
|
||||
mDefaultCategoriesModel->setStringList( list );
|
||||
|
||||
list = mCategoriesModel->stringList();
|
||||
list.append( item.toString() );
|
||||
mCategoriesModel->setStringList( list );
|
||||
mCategoriesModel->sort( 0 );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void QgsMetadataWidget::removeSelectedCategory() const
|
||||
{
|
||||
QItemSelectionModel *selection = listCategories->selectionModel();
|
||||
if ( selection->hasSelection() )
|
||||
{
|
||||
QModelIndex indexElementSelectionne = listCategories->selectionModel()->currentIndex();
|
||||
|
||||
QVariant item = mCategoriesModel->data( indexElementSelectionne, Qt::DisplayRole );
|
||||
QStringList list = mCategoriesModel->stringList();
|
||||
list.removeOne( item.toString() );
|
||||
mCategoriesModel->setStringList( list );
|
||||
|
||||
if ( mDefaultCategories.contains( item.toString() ) )
|
||||
{
|
||||
list = mDefaultCategoriesModel->stringList();
|
||||
list.append( item.toString() );
|
||||
mDefaultCategoriesModel->setStringList( list );
|
||||
mDefaultCategoriesModel->sort( 0 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
QWidget *LinkItemDelegate::createEditor( QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index ) const
|
||||
{
|
||||
if ( index.column() == 1 )
|
||||
{
|
||||
// Link type
|
||||
QComboBox *typeEditor = new QComboBox( parent );
|
||||
typeEditor->setEditable( true );
|
||||
QStringListModel *model = new QStringListModel( parent );
|
||||
model->setStringList( QgsMetadataWidget::parseLinkTypes() );
|
||||
typeEditor->setModel( model );
|
||||
return typeEditor;
|
||||
}
|
||||
else if ( index.column() == 5 )
|
||||
{
|
||||
// MIME
|
||||
QComboBox *mimeEditor = new QComboBox( parent );
|
||||
mimeEditor->setEditable( true );
|
||||
QStringListModel *model = new QStringListModel( parent );
|
||||
model->setStringList( QgsMetadataWidget::parseMimeTypes() );
|
||||
mimeEditor->setModel( model );
|
||||
return mimeEditor;
|
||||
}
|
||||
|
||||
return QStyledItemDelegate::createEditor( parent, option, index );
|
||||
}
|
||||
|
||||
QWidget *ConstraintItemDelegate::createEditor( QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index ) const
|
||||
{
|
||||
if ( index.column() == 0 )
|
||||
{
|
||||
// Constraint type
|
||||
QComboBox *typeEditor = new QComboBox( parent );
|
||||
typeEditor->setEditable( true );
|
||||
QStringList types;
|
||||
types << QString( "access" ) << QString( "use" ) << QString( "other" );
|
||||
QStringListModel *model = new QStringListModel( parent );
|
||||
model->setStringList( types );
|
||||
typeEditor->setModel( model );
|
||||
return typeEditor;
|
||||
}
|
||||
|
||||
return QStyledItemDelegate::createEditor( parent, option, index );
|
||||
}
|
175
src/gui/qgsmetadatawidget.h
Normal file
175
src/gui/qgsmetadatawidget.h
Normal file
@ -0,0 +1,175 @@
|
||||
/***************************************************************************
|
||||
qgsmetadatawidget.h - description
|
||||
-------------------
|
||||
begin : 17/05/2017
|
||||
copyright : (C) 2017 by Etienne Trimaille
|
||||
email : etienne at kartoza.com
|
||||
***************************************************************************/
|
||||
|
||||
/***************************************************************************
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
***************************************************************************/
|
||||
#ifndef QGSMETADATAWIDGET_H
|
||||
#define QGSMETADATAWIDGET_H
|
||||
|
||||
#include "QStandardItemModel"
|
||||
#include "QStyledItemDelegate"
|
||||
|
||||
#include "qgis_gui.h"
|
||||
#include "qgsmaplayer.h"
|
||||
#include "qgslayermetadata.h"
|
||||
#include "ui_qgsmetadatawidget.h"
|
||||
|
||||
/**
|
||||
* \ingroup gui
|
||||
* \class QgsMetadataWidget
|
||||
* \brief A wizard to edit metadata on a map layer.
|
||||
*
|
||||
* \since QGIS 3.0
|
||||
*/
|
||||
|
||||
class GUI_EXPORT QgsMetadataWidget : public QWidget, private Ui::QgsMetadataWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
|
||||
/**
|
||||
* Constructor for the wizard.
|
||||
*/
|
||||
QgsMetadataWidget( QWidget *parent, QgsMapLayer *layer = nullptr );
|
||||
~QgsMetadataWidget();
|
||||
|
||||
/**
|
||||
* Save all fields in a QgsLayerMetadata object.
|
||||
*/
|
||||
void saveMetadata( QgsLayerMetadata &layerMetadata ) const;
|
||||
|
||||
/**
|
||||
* Check if values in the wizard are correct.
|
||||
*/
|
||||
bool checkMetadata() const;
|
||||
|
||||
/**
|
||||
* Saves the metadata to the layer.
|
||||
*/
|
||||
void acceptMetadata();
|
||||
|
||||
/**
|
||||
* Returns a list of languages available by default in the wizard.
|
||||
*/
|
||||
static QMap<QString, QString> parseLanguages();
|
||||
|
||||
/**
|
||||
* Returns a list of licences available by default in the wizard.
|
||||
*/
|
||||
static QStringList parseLicenses();
|
||||
|
||||
/**
|
||||
* Returns a list of link types available by default in the wizard.
|
||||
* \see https://github.com/OSGeo/Cat-Interop/blob/master/LinkPropertyLookupTable.csv
|
||||
*/
|
||||
static QStringList parseLinkTypes();
|
||||
|
||||
/**
|
||||
* Returns a list of MIME types available by default in the wizard.
|
||||
* \see https://fr.wikipedia.org/wiki/Type_MIME
|
||||
*/
|
||||
static QStringList parseMimeTypes();
|
||||
|
||||
/**
|
||||
* Returns a list of types available by default in the wizard.
|
||||
*/
|
||||
static QMap<QString, QString> parseTypes();
|
||||
|
||||
private:
|
||||
void updatePanel() const;
|
||||
void fillSourceFromLayer() const;
|
||||
void fillCrsFromLayer() const;
|
||||
void addDefaultCategory() const;
|
||||
void addNewCategory();
|
||||
void removeSelectedCategory() const;
|
||||
void addVocabulary() const;
|
||||
void removeSelectedVocabulary() const;
|
||||
void addLicence();
|
||||
void removeSelectedLicence() const;
|
||||
void addRight();
|
||||
void removeSelectedRight() const;
|
||||
void addConstraint() const;
|
||||
void removeSelectedConstraint() const;
|
||||
void addContact() const;
|
||||
void removeSelectedContact() const;
|
||||
void addLink() const;
|
||||
void removeSelectedLink() const;
|
||||
void addHistory();
|
||||
void removeSelectedHistory() const;
|
||||
void updateContactDetails() const;
|
||||
void fillComboBox() const;
|
||||
void setPropertiesFromLayer() const;
|
||||
void syncFromCategoriesTabToKeywordsTab() const;
|
||||
QStringList mDefaultCategories;
|
||||
QgsMapLayer *mLayer = nullptr;
|
||||
QgsLayerMetadata mMetadata;
|
||||
QStandardItemModel *mConstraintsModel = nullptr;
|
||||
QStandardItemModel *mLinksModel = nullptr;
|
||||
QStringListModel *mCategoriesModel = nullptr;
|
||||
QStringListModel *mDefaultCategoriesModel = nullptr;
|
||||
QStringListModel *mRightsModel = nullptr;
|
||||
QStringListModel *mHistoryModel = nullptr;
|
||||
};
|
||||
|
||||
#ifndef SIP_RUN
|
||||
|
||||
|
||||
/**
|
||||
\\\@cond PRIVATE
|
||||
* \ingroup gui
|
||||
* \class LinkItemDelegate
|
||||
* \brief Special delegate for the link view in the metadata wizard.
|
||||
*
|
||||
* \since QGIS 3.0
|
||||
*/
|
||||
class LinkItemDelegate : public QStyledItemDelegate
|
||||
{
|
||||
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
|
||||
/**
|
||||
* Create a special editor with a QCombobox in the link view.
|
||||
*/
|
||||
QWidget *createEditor( QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index ) const;
|
||||
};
|
||||
|
||||
/**
|
||||
* \ingroup gui
|
||||
* \class ConstraintItemDelegate
|
||||
* \brief Special delegate for the constraint view in the metadata wizard.
|
||||
*
|
||||
* \since QGIS 3.0
|
||||
*/
|
||||
class ConstraintItemDelegate : public QStyledItemDelegate
|
||||
{
|
||||
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
|
||||
/**
|
||||
* Create a special editor with a QCombobox in the constraint view.
|
||||
*/
|
||||
QWidget *createEditor( QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index ) const;
|
||||
};
|
||||
|
||||
/**
|
||||
\\\@endcond
|
||||
*/
|
||||
|
||||
#endif
|
||||
#endif
|
1272
src/ui/qgsmetadatawidget.ui
Normal file
1272
src/ui/qgsmetadatawidget.ui
Normal file
File diff suppressed because it is too large
Load Diff
@ -110,6 +110,15 @@
|
||||
<normaloff>:/images/themes/default/propertyicons/system.svg</normaloff>:/images/themes/default/propertyicons/system.svg</iconset>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Metadata</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../images/images.qrc">
|
||||
<normaloff>:/images/themes/default/propertyicons/editmetadata.svg</normaloff>:/images/themes/default/propertyicons/editmetadata.svg</iconset>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Style</string>
|
||||
@ -227,7 +236,7 @@
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="currentIndex">
|
||||
<number>1</number>
|
||||
<number>2</number>
|
||||
</property>
|
||||
<widget class="QWidget" name="mOptsPage_Information">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_20">
|
||||
@ -342,6 +351,20 @@ border-radius: 2px;</string>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="mOptsPage_Metadata">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_13">
|
||||
<item>
|
||||
<widget class="QFrame" name="metadataFrame">
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::NoFrame</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Raised</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="mOptsPage_Style">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_14">
|
||||
<property name="leftMargin">
|
||||
|
@ -46,7 +46,16 @@
|
||||
<enum>QFrame::Raised</enum>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<property name="margin">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
@ -111,6 +120,15 @@
|
||||
<normaloff>:/images/themes/default/propertyicons/system.svg</normaloff>:/images/themes/default/propertyicons/system.svg</iconset>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Metadata</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../images/images.qrc">
|
||||
<normaloff>:/images/themes/default/propertyicons/editmetadata.svg</normaloff>:/images/themes/default/propertyicons/editmetadata.svg</iconset>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Symbology</string>
|
||||
@ -273,7 +291,16 @@
|
||||
<enum>QFrame::Raised</enum>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||
<property name="margin">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
@ -285,11 +312,20 @@
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="currentIndex">
|
||||
<number>5</number>
|
||||
<number>2</number>
|
||||
</property>
|
||||
<widget class="QWidget" name="mOptsPage_Information">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_5">
|
||||
<property name="margin">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
@ -301,7 +337,16 @@
|
||||
<enum>QFrame::Raised</enum>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_7">
|
||||
<property name="margin">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
@ -318,7 +363,16 @@
|
||||
</widget>
|
||||
<widget class="QWidget" name="mOptsPage_Source">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_6">
|
||||
<property name="margin">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
@ -334,12 +388,21 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>651</width>
|
||||
<height>537</height>
|
||||
<width>644</width>
|
||||
<height>522</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_9">
|
||||
<property name="margin">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
@ -394,7 +457,16 @@ border-radius: 2px;</string>
|
||||
<enum>QFrame::Raised</enum>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_4">
|
||||
<property name="margin">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
@ -443,7 +515,7 @@ border-radius: 2px;</string>
|
||||
<property name="checkable">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="syncGroup">
|
||||
<property name="syncGroup" stdset="0">
|
||||
<string notr="true">vectorgeneral</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_28">
|
||||
@ -458,7 +530,7 @@ border-radius: 2px;</string>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QgsProjectionSelectionWidget" name="mCrsSelector">
|
||||
<widget class="QgsProjectionSelectionWidget" name="mCrsSelector" native="true">
|
||||
<property name="focusPolicy">
|
||||
<enum>Qt::StrongFocus</enum>
|
||||
</property>
|
||||
@ -564,9 +636,32 @@ border-radius: 2px;</string>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="mOptsPage_Metadata">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_27">
|
||||
<item>
|
||||
<widget class="QFrame" name="metadataFrame">
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::NoFrame</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Raised</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="mOptsPage_Style">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_11">
|
||||
<property name="margin">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
@ -582,12 +677,21 @@ border-radius: 2px;</string>
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>651</width>
|
||||
<height>537</height>
|
||||
<width>644</width>
|
||||
<height>522</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_18">
|
||||
<property name="margin">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
@ -617,7 +721,16 @@ border-radius: 2px;</string>
|
||||
</widget>
|
||||
<widget class="QWidget" name="mOptsPage_Labels">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_12">
|
||||
<property name="margin">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
@ -640,7 +753,16 @@ border-radius: 2px;</string>
|
||||
</widget>
|
||||
<widget class="QWidget" name="mOptsPage_Fields">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_15">
|
||||
<property name="margin">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
@ -656,12 +778,21 @@ border-radius: 2px;</string>
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>651</width>
|
||||
<height>537</height>
|
||||
<width>644</width>
|
||||
<height>522</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_20">
|
||||
<property name="margin">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
@ -682,7 +813,16 @@ border-radius: 2px;</string>
|
||||
</widget>
|
||||
<widget class="QWidget" name="mOptsPage_Rendering">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_19">
|
||||
<property name="margin">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
@ -698,12 +838,21 @@ border-radius: 2px;</string>
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>651</width>
|
||||
<height>537</height>
|
||||
<width>673</width>
|
||||
<height>507</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_32">
|
||||
<property name="margin">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
@ -716,7 +865,7 @@ border-radius: 2px;</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_6">
|
||||
<item row="0" column="0">
|
||||
<widget class="QgsScaleRangeWidget" name="mScaleRangeWidget">
|
||||
<widget class="QgsScaleRangeWidget" name="mScaleRangeWidget" native="true">
|
||||
<property name="focusPolicy">
|
||||
<enum>Qt::StrongFocus</enum>
|
||||
</property>
|
||||
@ -980,7 +1129,16 @@ border-radius: 2px;</string>
|
||||
</widget>
|
||||
<widget class="QWidget" name="mOptsPage_Display">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_25">
|
||||
<property name="margin">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
@ -989,7 +1147,16 @@ border-radius: 2px;</string>
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_10">
|
||||
<property name="margin">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item row="0" column="0">
|
||||
@ -1000,7 +1167,7 @@ border-radius: 2px;</string>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QgsFieldExpressionWidget" name="mDisplayExpressionWidget">
|
||||
<widget class="QgsFieldExpressionWidget" name="mDisplayExpressionWidget" native="true">
|
||||
<property name="focusPolicy">
|
||||
<enum>Qt::StrongFocus</enum>
|
||||
</property>
|
||||
@ -1051,7 +1218,7 @@ border-radius: 2px;</string>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0" colspan="2">
|
||||
<widget class="QgsFieldExpressionWidget" name="mMapTipExpressionFieldWidget">
|
||||
<widget class="QgsFieldExpressionWidget" name="mMapTipExpressionFieldWidget" native="true">
|
||||
<property name="focusPolicy">
|
||||
<enum>Qt::StrongFocus</enum>
|
||||
</property>
|
||||
@ -1070,7 +1237,16 @@ border-radius: 2px;</string>
|
||||
</widget>
|
||||
<widget class="QWidget" name="mOptsPage_Actions">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_16">
|
||||
<property name="margin">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
@ -1091,7 +1267,16 @@ border-radius: 2px;</string>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_21">
|
||||
<property name="margin">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
@ -1118,7 +1303,16 @@ border-radius: 2px;</string>
|
||||
</widget>
|
||||
<widget class="QWidget" name="mOptsPage_Joins">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_17">
|
||||
<property name="margin">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
@ -1134,12 +1328,21 @@ border-radius: 2px;</string>
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>128</width>
|
||||
<height>116</height>
|
||||
<width>199</width>
|
||||
<height>123</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_23">
|
||||
<property name="margin">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
@ -1223,7 +1426,16 @@ border-radius: 2px;</string>
|
||||
</widget>
|
||||
<widget class="QWidget" name="mOptsPage_Diagrams">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_10">
|
||||
<property name="margin">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
@ -1246,7 +1458,16 @@ border-radius: 2px;</string>
|
||||
</widget>
|
||||
<widget class="QWidget" name="mOptsPage_Variables">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_4">
|
||||
<property name="margin">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
@ -1269,7 +1490,16 @@ border-radius: 2px;</string>
|
||||
</widget>
|
||||
<widget class="QWidget" name="mOptsPage_Legend">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_8">
|
||||
<property name="margin">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
@ -1288,7 +1518,16 @@ border-radius: 2px;</string>
|
||||
</widget>
|
||||
<widget class="QWidget" name="mOptsPage_DataDependencies">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_29">
|
||||
<property name="margin">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
@ -1344,7 +1583,16 @@ border-radius: 2px;</string>
|
||||
</widget>
|
||||
<widget class="QWidget" name="mOptsPage_Server">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_14">
|
||||
<property name="margin">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
@ -1360,12 +1608,21 @@ border-radius: 2px;</string>
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>651</width>
|
||||
<height>537</height>
|
||||
<width>359</width>
|
||||
<height>527</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_13">
|
||||
<property name="margin">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
@ -1373,7 +1630,7 @@ border-radius: 2px;</string>
|
||||
<property name="title">
|
||||
<string>Description</string>
|
||||
</property>
|
||||
<property name="syncGroup">
|
||||
<property name="syncGroup" stdset="0">
|
||||
<string notr="true">vectormeta</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_5">
|
||||
@ -1515,7 +1772,7 @@ border-radius: 2px;</string>
|
||||
<property name="title">
|
||||
<string>Attribution</string>
|
||||
</property>
|
||||
<property name="syncGroup">
|
||||
<property name="syncGroup" stdset="0">
|
||||
<string notr="true">vectormeta</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_7">
|
||||
@ -1561,7 +1818,7 @@ border-radius: 2px;</string>
|
||||
<property name="title">
|
||||
<string>MetadataUrl</string>
|
||||
</property>
|
||||
<property name="syncGroup">
|
||||
<property name="syncGroup" stdset="0">
|
||||
<string notr="true">vectormeta</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_9">
|
||||
@ -1759,7 +2016,16 @@ border-radius: 2px;</string>
|
||||
<enum>QFrame::Raised</enum>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_btnbox">
|
||||
<property name="margin">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item row="2" column="1" colspan="4">
|
||||
|
Loading…
x
Reference in New Issue
Block a user