QGIS API Documentation 3.28.0-Firenze (ed3ad0430f)
qgsmaplayer.h
Go to the documentation of this file.
1/***************************************************************************
2 qgsmaplayer.h - description
3 -------------------
4 begin : Fri Jun 28 2002
5 copyright : (C) 2002 by Gary E.Sherman
6 email : sherman at mrcc.com
7***************************************************************************/
8
9/***************************************************************************
10 * *
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License as published by *
13 * the Free Software Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
15 * *
16 ***************************************************************************/
17
18#ifndef QGSMAPLAYER_H
19#define QGSMAPLAYER_H
20
21#include "qgis_core.h"
22#include <QDateTime>
23#include <QDomNode>
24#include <QImage>
25#include <QObject>
26#include <QPainter>
27#include <QUndoStack>
28#include <QVariant>
29#include <QIcon>
30#include <QSet>
31
32#include "qgis_sip.h"
33#include "qgserror.h"
35#include "qgsrectangle.h"
38#include "qgslayermetadata.h"
40#include "qgsmaplayerstyle.h"
41#include "qgsreadwritecontext.h"
42#include "qgsdataprovider.h"
43#include "qgis.h"
44#include "qgslogger.h"
45
47class QgsDataProvider;
51class QgsProject;
55
56class QDomDocument;
57class QKeyEvent;
58class QPainter;
60
61/*
62 * Constants used to describe copy-paste MIME types
63 */
64#define QGSCLIPBOARD_MAPLAYER_MIME "application/qgis.maplayer"
65
66
72class CORE_EXPORT QgsMapLayer : public QObject
73{
74 Q_OBJECT
75
76 Q_PROPERTY( QString name READ name WRITE setName NOTIFY nameChanged )
77 Q_PROPERTY( int autoRefreshInterval READ autoRefreshInterval WRITE setAutoRefreshInterval NOTIFY autoRefreshIntervalChanged )
78 Q_PROPERTY( QgsLayerMetadata metadata READ metadata WRITE setMetadata NOTIFY metadataChanged )
79 Q_PROPERTY( QgsCoordinateReferenceSystem crs READ crs WRITE setCrs NOTIFY crsChanged )
80 Q_PROPERTY( QgsMapLayerType type READ type CONSTANT )
81 Q_PROPERTY( bool isValid READ isValid NOTIFY isValidChanged )
82 Q_PROPERTY( double opacity READ opacity WRITE setOpacity NOTIFY opacityChanged )
83
84#ifdef SIP_RUN
86 QgsMapLayer *layer = qobject_cast<QgsMapLayer *>( sipCpp );
87
88 sipType = 0;
89
90 if ( layer )
91 {
92 switch ( layer->type() )
93 {
95 sipType = sipType_QgsVectorLayer;
96 break;
98 sipType = sipType_QgsRasterLayer;
99 break;
101 sipType = sipType_QgsPluginLayer;
102 break;
104 sipType = sipType_QgsMeshLayer;
105 break;
107 sipType = sipType_QgsVectorTileLayer;
108 break;
110 sipType = sipType_QgsAnnotationLayer;
111 break;
113 sipType = sipType_QgsPointCloudLayer;
114 break;
116 sipType = sipType_QgsGroupLayer;
117 break;
118 default:
119 sipType = nullptr;
120 break;
121 }
122 }
123 SIP_END
124#endif
125
126 public:
127
133 {
134 Style = 0,
136 };
137
144 {
145 Identifiable = 1 << 0,
146 Removable = 1 << 1,
147 Searchable = 1 << 2,
148 Private = 1 << 3,
149 };
150 Q_ENUM( LayerFlag )
151 Q_DECLARE_FLAGS( LayerFlags, LayerFlag )
152 Q_FLAG( LayerFlags )
153
154
159 {
160 LayerConfiguration = 1 << 0,
161 Symbology = 1 << 1,
162 Symbology3D = 1 << 2,
163 Labeling = 1 << 3,
164 Fields = 1 << 4,
165 Forms = 1 << 5,
166 Actions = 1 << 6,
167 MapTips = 1 << 7,
168 Diagrams = 1 << 8,
169 AttributeTable = 1 << 9,
170 Rendering = 1 << 10,
171 CustomProperties = 1 << 11,
172 GeometryOptions = 1 << 12,
173 Relations = 1 << 13,
174 Temporal = 1 << 14,
175 Legend = 1 << 15,
176 Elevation = 1 << 16,
177 Notes = 1 << 17,
178 AllStyleCategories = LayerConfiguration | Symbology | Symbology3D | Labeling | Fields | Forms | Actions |
179 MapTips | Diagrams | AttributeTable | Rendering | CustomProperties | GeometryOptions | Relations | Temporal | Legend | Elevation | Notes,
180 };
181 Q_ENUM( StyleCategory )
182 Q_DECLARE_FLAGS( StyleCategories, StyleCategory )
183 Q_FLAG( StyleCategories )
184
185
191 QgsMapLayer( QgsMapLayerType type = QgsMapLayerType::VectorLayer, const QString &name = QString(), const QString &source = QString() );
192
193 ~QgsMapLayer() override;
194
196 QgsMapLayer( QgsMapLayer const & ) = delete;
198 QgsMapLayer &operator=( QgsMapLayer const & ) = delete;
199
206 virtual QgsMapLayer *clone() const = 0;
207
211 QgsMapLayerType type() const;
212
223 QgsMapLayer::LayerFlags flags() const;
224
235 void setFlags( QgsMapLayer::LayerFlags flags );
236
246 virtual Qgis::MapLayerProperties properties() const;
247
253 static QString extensionPropertyType( PropertyType type );
254
256 QString id() const;
257
263 void setName( const QString &name );
264
269 QString name() const;
270
274 Q_INVOKABLE virtual QgsDataProvider *dataProvider();
275
280 virtual const QgsDataProvider *dataProvider() const SIP_SKIP;
281
288 void setShortName( const QString &shortName ) { mShortName = shortName; }
289
295 QString shortName() const;
296
302 void setTitle( const QString &title ) { mTitle = title; }
303
310 QString title() const { return mTitle; }
311
318 void setAbstract( const QString &abstract ) { mAbstract = abstract; }
319
326 QString abstract() const { return mAbstract; }
327
334 void setKeywordList( const QString &keywords ) { mKeywordList = keywords; }
335
342 QString keywordList() const { return mKeywordList; }
343
344 /* Layer dataUrl information */
345
353 void setDataUrl( const QString &dataUrl ) { mDataUrl = dataUrl; }
354
362 QString dataUrl() const { return mDataUrl; }
363
371 void setDataUrlFormat( const QString &dataUrlFormat ) { mDataUrlFormat = dataUrlFormat; }
372
380 QString dataUrlFormat() const { return mDataUrlFormat; }
381
382 /* Layer attribution information */
383
391 void setAttribution( const QString &attrib ) { mAttribution = attrib; }
392
400 QString attribution() const { return mAttribution; }
401
409 void setAttributionUrl( const QString &attribUrl ) { mAttributionUrl = attribUrl; }
410
418 QString attributionUrl() const { return mAttributionUrl; }
419
420 /* Layer metadataUrl information */
421
426 QgsMapLayerServerProperties *serverProperties() { return mServerProperties.get(); };
427
432 const QgsMapLayerServerProperties *serverProperties() const { return mServerProperties.get(); } SIP_SKIP;
433
442 Q_DECL_DEPRECATED void setMetadataUrl( const QString &metaUrl ) SIP_DEPRECATED;
443
453 Q_DECL_DEPRECATED QString metadataUrl() const SIP_DEPRECATED;
454
464 Q_DECL_DEPRECATED void setMetadataUrlType( const QString &metaUrlType ) SIP_DEPRECATED;
465
475 Q_DECL_DEPRECATED QString metadataUrlType() const SIP_DEPRECATED;
476
485 Q_DECL_DEPRECATED void setMetadataUrlFormat( const QString &metaUrlFormat ) SIP_DEPRECATED;
486
496 Q_DECL_DEPRECATED QString metadataUrlFormat() const SIP_DEPRECATED;
497
503 void setBlendMode( QPainter::CompositionMode blendMode );
504
509 QPainter::CompositionMode blendMode() const;
510
519 virtual void setOpacity( double opacity );
520
529 virtual double opacity() const;
530
532 bool readOnly() const { return isReadOnly(); }
533
537 Q_INVOKABLE virtual void reload() {}
538
544
546 virtual QgsRectangle extent() const;
547
556 QgsRectangle wgs84Extent( bool forceRecalculate = false ) const;
557
563 bool isValid() const;
564
571 QString publicSource() const;
572
578 QString source() const;
579
584 virtual QStringList subLayers() const;
585
590 virtual void setLayerOrder( const QStringList &layers );
591
597 virtual void setSubLayerVisibility( const QString &name, bool visible );
598
605 virtual bool supportsEditing() const;
606
608 virtual bool isEditable() const;
609
615 virtual bool isModified() const;
616
621 virtual bool isSpatial() const;
622
632 virtual bool isTemporary() const;
633
639 {
640 FlagDontResolveLayers = 1 << 0,
641 FlagTrustLayerMetadata = 1 << 1,
642 FlagReadExtentFromXml = 1 << 2,
643 FlagForceReadOnly = 1 << 3,
644 };
645 Q_DECLARE_FLAGS( ReadFlags, ReadFlag )
646
647
664 bool readLayerXml( const QDomElement &layerElement, QgsReadWriteContext &context, QgsMapLayer::ReadFlags flags = QgsMapLayer::ReadFlags() );
665
683 bool writeLayerXml( QDomElement &layerElement, QDomDocument &document, const QgsReadWriteContext &context ) const;
684
689 virtual void resolveReferences( QgsProject *project );
690
696 Q_INVOKABLE QStringList customPropertyKeys() const;
697
703 Q_INVOKABLE void setCustomProperty( const QString &key, const QVariant &value );
704
709 Q_INVOKABLE QVariant customProperty( const QString &value, const QVariant &defaultValue = QVariant() ) const;
710
715 void setCustomProperties( const QgsObjectCustomProperties &properties );
716
722 const QgsObjectCustomProperties &customProperties() const;
723
724#ifndef SIP_RUN
725
736 template <class T>
737 T customEnumProperty( const QString &key, const T &defaultValue )
738 {
739 const QMetaEnum metaEnum = QMetaEnum::fromType<T>();
740 Q_ASSERT( metaEnum.isValid() );
741 if ( !metaEnum.isValid() )
742 {
743 QgsDebugMsg( QStringLiteral( "Invalid metaenum. Enum probably misses Q_ENUM or Q_FLAG declaration." ) );
744 }
745
746 T v;
747 bool ok = false;
748
749 if ( metaEnum.isValid() )
750 {
751 // read as string
752 QByteArray ba = customProperty( key, metaEnum.valueToKey( static_cast<int>( defaultValue ) ) ).toString().toUtf8();
753 const char *vs = ba.data();
754 v = static_cast<T>( metaEnum.keyToValue( vs, &ok ) );
755 if ( ok )
756 return v;
757 }
758
759 // if failed, try to read as int (old behavior)
760 // this code shall be removed later
761 // then the method could be marked as const
762 v = static_cast<T>( customProperty( key, static_cast<int>( defaultValue ) ).toInt( &ok ) );
763 if ( metaEnum.isValid() )
764 {
765 if ( !ok || !metaEnum.valueToKey( static_cast<int>( v ) ) )
766 {
767 v = defaultValue;
768 }
769 else
770 {
771 // found property as an integer
772 // convert the property to the new form (string)
773 setCustomEnumProperty( key, v );
774 }
775 }
776
777 return v;
778 }
779
788 template <class T>
789 void setCustomEnumProperty( const QString &key, const T &value )
790 {
791 const QMetaEnum metaEnum = QMetaEnum::fromType<T>();
792 Q_ASSERT( metaEnum.isValid() );
793 if ( metaEnum.isValid() )
794 {
795 setCustomProperty( key, metaEnum.valueToKey( static_cast<int>( value ) ) );
796 }
797 else
798 {
799 QgsDebugMsg( QStringLiteral( "Invalid metaenum. Enum probably misses Q_ENUM or Q_FLAG declaration." ) );
800 }
801 }
802
814 template <class T>
815 T customFlagProperty( const QString &key, const T &defaultValue )
816 {
817 const QMetaEnum metaEnum = QMetaEnum::fromType<T>();
818 Q_ASSERT( metaEnum.isValid() );
819 if ( !metaEnum.isValid() )
820 {
821 QgsDebugMsg( QStringLiteral( "Invalid metaenum. Enum probably misses Q_ENUM or Q_FLAG declaration." ) );
822 }
823
824 T v = defaultValue;
825 bool ok = false;
826
827 if ( metaEnum.isValid() )
828 {
829 // read as string
830 QByteArray ba = customProperty( key, metaEnum.valueToKeys( defaultValue ) ).toString().toUtf8();
831 const char *vs = ba.data();
832 v = static_cast<T>( metaEnum.keysToValue( vs, &ok ) );
833 }
834 if ( !ok )
835 {
836 // if failed, try to read as int
837 const int intValue = customProperty( key, static_cast<int>( defaultValue ) ).toInt( &ok );
838 if ( metaEnum.isValid() )
839 {
840 if ( ok )
841 {
842 // check that the int value does correspond to a flag
843 // see https://stackoverflow.com/a/68495949/1548052
844 const QByteArray keys = metaEnum.valueToKeys( intValue );
845 const int intValueCheck = metaEnum.keysToValue( keys );
846 if ( intValue != intValueCheck )
847 {
848 v = defaultValue;
849 }
850 else
851 {
852 // found property as an integer
853 v = T( intValue );
854 // convert the property to the new form (string)
855 // this code could be removed
856 // then the method could be marked as const
857 setCustomFlagProperty( key, v );
858 }
859 }
860 else
861 {
862 v = defaultValue;
863 }
864 }
865 }
866
867 return v;
868 }
869
878 template <class T>
879 void setCustomFlagProperty( const QString &key, const T &value )
880 {
881 const QMetaEnum metaEnum = QMetaEnum::fromType<T>();
882 Q_ASSERT( metaEnum.isValid() );
883 if ( metaEnum.isValid() )
884 {
885 setCustomProperty( key, metaEnum.valueToKeys( value ) );
886 }
887 else
888 {
889 QgsDebugMsg( QStringLiteral( "Invalid metaenum. Enum probably misses Q_ENUM or Q_FLAG declaration." ) );
890 }
891 }
892#endif
893
894
899 void removeCustomProperty( const QString &key );
900
906 virtual QgsError error() const;
907
913
915 void setCrs( const QgsCoordinateReferenceSystem &srs, bool emitSignal = true );
916
922 QgsCoordinateTransformContext transformContext( ) const;
923
924
930 static QString formatLayerName( const QString &name );
931
939 virtual QString metadataUri() const;
940
947 void exportNamedMetadata( QDomDocument &doc, QString &errorMsg ) const;
948
958 virtual QString saveDefaultMetadata( bool &resultFlag SIP_OUT );
959
974 QString saveNamedMetadata( const QString &uri, bool &resultFlag );
975
990 virtual QString loadNamedMetadata( const QString &uri, bool &resultFlag SIP_OUT );
991
1001 virtual QString loadDefaultMetadata( bool &resultFlag );
1002
1011 bool loadNamedMetadataFromDatabase( const QString &db, const QString &uri, QString &qmd );
1012
1020 bool importNamedMetadata( QDomDocument &document, QString &errorMessage );
1021
1029 virtual QString styleURI() const;
1030
1040 virtual QString loadDefaultStyle( bool &resultFlag SIP_OUT );
1041
1057 virtual QString loadNamedStyle( const QString &uri, bool &resultFlag SIP_OUT, QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories );
1058
1066 virtual bool loadNamedStyleFromDatabase( const QString &db, const QString &uri, QString &qml SIP_OUT );
1067
1077 virtual bool importNamedStyle( QDomDocument &doc, QString &errorMsg SIP_OUT,
1078 QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories );
1079
1088 virtual void exportNamedStyle( QDomDocument &doc, QString &errorMsg SIP_OUT, const QgsReadWriteContext &context = QgsReadWriteContext(),
1089 QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories ) const;
1090
1091
1098 virtual void exportSldStyle( QDomDocument &doc, QString &errorMsg ) const;
1099
1110 virtual QString saveDefaultStyle( bool &resultFlag SIP_OUT, StyleCategories categories );
1111
1122 Q_DECL_DEPRECATED virtual QString saveDefaultStyle( bool &resultFlag SIP_OUT ) SIP_DEPRECATED;
1123
1139 virtual QString saveNamedStyle( const QString &uri, bool &resultFlag SIP_OUT, StyleCategories categories = AllStyleCategories );
1140
1149 virtual QString saveSldStyle( const QString &uri, bool &resultFlag ) const;
1150
1159 virtual QString loadSldStyle( const QString &uri, bool &resultFlag );
1160
1161 virtual bool readSld( const QDomNode &node, QString &errorMessage )
1162 { Q_UNUSED( node ) errorMessage = QStringLiteral( "Layer type %1 not supported" ).arg( static_cast<int>( type() ) ); return false; }
1163
1164
1165
1174 virtual bool readSymbology( const QDomNode &node, QString &errorMessage,
1175 QgsReadWriteContext &context, StyleCategories categories = AllStyleCategories ) = 0;
1176
1187 virtual bool readStyle( const QDomNode &node, QString &errorMessage,
1188 QgsReadWriteContext &context, StyleCategories categories = AllStyleCategories );
1189
1200 virtual bool writeSymbology( QDomNode &node, QDomDocument &doc, QString &errorMessage, const QgsReadWriteContext &context,
1201 StyleCategories categories = AllStyleCategories ) const = 0;
1202
1215 virtual bool writeStyle( QDomNode &node, QDomDocument &doc, QString &errorMessage, const QgsReadWriteContext &context,
1216 StyleCategories categories = AllStyleCategories ) const;
1217
1218
1233 void setDataSource( const QString &dataSource, const QString &baseName, const QString &provider, bool loadDefaultStyleFlag = false );
1234
1248 void setDataSource( const QString &dataSource, const QString &baseName, const QString &provider, const QgsDataProvider::ProviderOptions &options, bool loadDefaultStyleFlag = false );
1249
1264 void setDataSource( const QString &dataSource, const QString &baseName, const QString &provider, const QgsDataProvider::ProviderOptions &options, QgsDataProvider::ReadFlags flags );
1265
1269 QString providerType() const;
1270
1272 QUndoStack *undoStack();
1273
1278 QUndoStack *undoStackStyles();
1279
1283 void setLegendUrl( const QString &legendUrl ) { mLegendUrl = legendUrl; }
1284
1288 QString legendUrl() const { return mLegendUrl; }
1289
1293 void setLegendUrlFormat( const QString &legendUrlFormat ) { mLegendUrlFormat = legendUrlFormat; }
1294
1298 QString legendUrlFormat() const { return mLegendUrlFormat; }
1299
1305 void setLegend( QgsMapLayerLegend *legend SIP_TRANSFER );
1306
1311 QgsMapLayerLegend *legend() const;
1312
1317 QgsMapLayerStyleManager *styleManager() const;
1318
1323 void setRenderer3D( QgsAbstract3DRenderer *renderer SIP_TRANSFER );
1324
1329 QgsAbstract3DRenderer *renderer3D() const;
1330
1340 bool isInScaleRange( double scale ) const;
1341
1352 double minimumScale() const;
1353
1364 double maximumScale() const;
1365
1374 bool hasScaleBasedVisibility() const;
1375
1382 bool hasAutoRefreshEnabled() const;
1383
1391 int autoRefreshInterval() const;
1392
1404 void setAutoRefreshInterval( int interval );
1405
1412 void setAutoRefreshEnabled( bool enabled );
1413
1420 virtual const QgsLayerMetadata &metadata() const;
1421
1428 virtual void setMetadata( const QgsLayerMetadata &metadata );
1429
1434 virtual QString htmlMetadata() const;
1435
1437 virtual QDateTime timestamp() const;
1438
1446 virtual QSet<QgsMapLayerDependency> dependencies() const;
1447
1453 QString refreshOnNotifyMessage() const { return mRefreshOnNofifyMessage; }
1454
1460 bool isRefreshOnNotifyEnabled() const { return mIsRefreshOnNofifyEnabled; }
1461
1470 QString originalXmlProperties() const;
1471
1479 void setOriginalXmlProperties( const QString &originalXmlProperties );
1480
1485 static QString generateId( const QString &layerName );
1486
1496 virtual bool accept( QgsStyleEntityVisitorInterface *visitor ) const;
1497
1504
1511
1517 QString legendPlaceholderImage() const { return mLegendPlaceholderImage;}
1518
1524 void setLegendPlaceholderImage( const QString &imgPath ) { mLegendPlaceholderImage = imgPath; }
1525
1526 public slots:
1527
1537 void setMinimumScale( double scale );
1538
1548 void setMaximumScale( double scale );
1549
1557 void setScaleBasedVisibility( bool enabled );
1558
1567 void triggerRepaint( bool deferredUpdate = false );
1568
1575 void trigger3DUpdate();
1576
1581 void emitStyleChanged();
1582
1591 virtual bool setDependencies( const QSet<QgsMapLayerDependency> &layers );
1592
1598 void setRefreshOnNotifyEnabled( bool enabled );
1599
1607 void setRefreshOnNofifyMessage( const QString &message ) { mRefreshOnNofifyMessage = message; }
1608
1614 virtual void setTransformContext( const QgsCoordinateTransformContext &transformContext ) = 0;
1615
1616#ifdef SIP_RUN
1617 SIP_PYOBJECT __repr__();
1618 % MethodCode
1619 QString str = QStringLiteral( "<QgsMapLayer: '%1' (%2)>" ).arg( sipCpp->name(), sipCpp->dataProvider() ? sipCpp->dataProvider()->name() : QStringLiteral( "Invalid" ) );
1620 sipRes = PyUnicode_FromString( str.toUtf8().constData() );
1621 % End
1622#endif
1623
1630 QgsProject *project() const;
1631
1632 signals:
1633
1641
1643 void statusChanged( const QString &status );
1644
1651
1654
1661 void repaintRequested( bool deferredUpdate = false );
1662
1665
1668
1670 void blendModeChanged( QPainter::CompositionMode blendMode );
1671
1680 void opacityChanged( double opacity );
1681
1687
1700
1706
1712
1719
1725
1730
1738
1744 void autoRefreshIntervalChanged( int interval );
1745
1753
1761
1770
1776 void styleLoaded( QgsMapLayer::StyleCategories categories );
1777
1784
1790 void customPropertyChanged( const QString &key );
1791
1797
1803
1809
1810 private slots:
1811
1812 void onNotified( const QString &message );
1813
1829 virtual void setDataSourcePrivate( const QString &dataSource, const QString &baseName, const QString &provider, const QgsDataProvider::ProviderOptions &options, QgsDataProvider::ReadFlags flags );
1830
1831 protected:
1832
1838 void clone( QgsMapLayer *layer ) const;
1839
1841 virtual void setExtent( const QgsRectangle &rect );
1842
1844 void setValid( bool valid );
1845
1850 virtual bool readXml( const QDomNode &layer_node, QgsReadWriteContext &context );
1851
1856 virtual bool writeXml( QDomNode &layer_node, QDomDocument &document, const QgsReadWriteContext &context ) const;
1857
1869 virtual QString encodedSource( const QString &source, const QgsReadWriteContext &context ) const;
1870
1883 virtual QString decodedSource( const QString &source, const QString &dataProvider, const QgsReadWriteContext &context ) const;
1884
1890 void readCustomProperties( const QDomNode &layerNode, const QString &keyStartsWith = QString() );
1891
1893 void writeCustomProperties( QDomNode &layerNode, QDomDocument &doc ) const;
1894
1896 void readStyleManager( const QDomNode &layerNode );
1898 void writeStyleManager( QDomNode &layerNode, QDomDocument &doc ) const;
1899
1904 void writeCommonStyle( QDomElement &layerElement, QDomDocument &document,
1905 const QgsReadWriteContext &context,
1906 StyleCategories categories = AllStyleCategories ) const;
1907
1912 void readCommonStyle( const QDomElement &layerElement, const QgsReadWriteContext &context,
1913 StyleCategories categories = AllStyleCategories );
1914
1916 void setProviderType( const QString &providerType );
1917
1918#ifndef SIP_RUN
1919#if 0
1921 void connectNotify( const char *signal ) override;
1922#endif
1923#endif
1924
1926 void appendError( const QgsErrorMessage &error ) { mError.append( error );}
1928 void setError( const QgsError &error ) { mError = error;}
1929
1936 void invalidateWgs84Extent();
1937
1939 bool mValid = false;
1940
1943
1945 QString mLayerName;
1946
1947 QString mShortName;
1948 QString mTitle;
1949
1951 QString mAbstract;
1953
1955 QString mDataUrl;
1957
1961
1963 QString mLegendUrl;
1965
1968
1970 QSet<QgsMapLayerDependency> mDependencies;
1971
1977 Q_DECL_DEPRECATED bool hasDependencyCycle( const QSet<QgsMapLayerDependency> & ) const {return false;}
1978
1979 bool mIsRefreshOnNofifyEnabled = false;
1981
1984
1985 //TODO QGIS 4 - move to readXml as a new argument (breaks API)
1986
1988 QgsMapLayer::ReadFlags mReadFlags = QgsMapLayer::ReadFlags();
1989
1995 bool mShouldValidateCrs = true;
1996
2002 double mLayerOpacity = 1.0;
2003
2009 int mBlockStyleChangedSignal = 0;
2010
2011#ifndef SIP_RUN
2012
2021 QString crsHtmlMetadata() const;
2022#endif
2023
2024#ifndef SIP_RUN
2025
2034 QString generalHtmlMetadata() const;
2035#endif
2036
2037 private:
2038
2039 virtual QString baseURI( PropertyType type ) const;
2040 QString saveNamedProperty( const QString &uri, QgsMapLayer::PropertyType type,
2041 bool &resultFlag, StyleCategories categories = AllStyleCategories );
2042 QString loadNamedProperty( const QString &uri, QgsMapLayer::PropertyType type,
2043 bool &resultFlag, StyleCategories categories = AllStyleCategories );
2044 bool loadNamedPropertyFromDatabase( const QString &db, const QString &uri, QString &xml, QgsMapLayer::PropertyType type );
2045
2046 // const method because extents are mutable
2047 void updateExtent( const QgsRectangle &extent ) const;
2048
2053 virtual bool isReadOnly() const;
2054
2060
2062 QString mID;
2063
2065 QgsMapLayerType mLayerType;
2066
2067 LayerFlags mFlags = LayerFlags( Identifiable | Removable | Searchable );
2068
2070 QPainter::CompositionMode mBlendMode = QPainter::CompositionMode_SourceOver;
2071
2073 QString mTag;
2074
2075 //set some generous defaults for scale based visibility
2076
2078 double mMinScale = 0;
2080 double mMaxScale = 100000000;
2082 bool mScaleBasedVisibility = false;
2083
2087 std::unique_ptr< QgsMapLayerServerProperties > mServerProperties;
2088
2090 QUndoStack *mUndoStack = nullptr;
2091
2092 QUndoStack *mUndoStackStyles = nullptr;
2093
2095 QgsObjectCustomProperties mCustomProperties;
2096
2098 QgsMapLayerLegend *mLegend = nullptr;
2099
2101 QgsMapLayerStyleManager *mStyleManager = nullptr;
2102
2104 QTimer *mRefreshTimer = nullptr;
2105
2106 QgsLayerMetadata mMetadata;
2107
2109 QgsAbstract3DRenderer *m3DRenderer = nullptr;
2110
2112 mutable QgsRectangle mExtent;
2113
2115 mutable QgsRectangle mWgs84Extent;
2116
2122 QString mOriginalXmlProperties;
2123
2125 bool mRepaintRequestedFired = false;
2126
2128 QString mLegendPlaceholderImage;
2129
2130 friend class QgsVectorLayer;
2131 friend class TestQgsMapLayer;
2132};
2133
2135Q_DECLARE_OPERATORS_FOR_FLAGS( QgsMapLayer::LayerFlags )
2136Q_DECLARE_OPERATORS_FOR_FLAGS( QgsMapLayer::StyleCategories )
2137Q_DECLARE_OPERATORS_FOR_FLAGS( QgsMapLayer::ReadFlags )
2138
2139
2140#ifndef SIP_RUN
2141
2147typedef QPointer< QgsMapLayer > QgsWeakMapLayerPointer;
2148
2154typedef QList< QgsWeakMapLayerPointer > QgsWeakMapLayerPointerList;
2155#endif
2156
2157#endif
Base class for all renderers that may to participate in 3D view.
This class represents a coordinate reference system (CRS).
Contains information about the context in which a coordinate transform is executed.
Abstract base class for spatial data provider implementations.
QgsErrorMessage represents single error message.
Definition: qgserror.h:33
QgsError is container for error messages (report).
Definition: qgserror.h:81
A structured metadata store for a map layer.
Base class for storage of map layer elevation properties.
The QgsMapLayerLegend class is abstract interface for implementations of legends for one map layer.
Base class for utility classes that encapsulate information necessary for rendering of map layers.
Manages QGIS Server properties for a map layer.
Management of styles for use with one map layer.
Base class for storage of map layer temporal properties.
Base class for all map layer types.
Definition: qgsmaplayer.h:73
QString mKeywordList
Definition: qgsmaplayer.h:1952
virtual bool writeSymbology(QDomNode &node, QDomDocument &doc, QString &errorMessage, const QgsReadWriteContext &context, StyleCategories categories=AllStyleCategories) const =0
Write the style for the layer into the document provided.
QString legendUrlFormat() const
Returns the format for a URL based layer legend.
Definition: qgsmaplayer.h:1298
void dependenciesChanged()
Emitted when dependencies are changed.
void setError(const QgsError &error)
Sets error message.
Definition: qgsmaplayer.h:1928
void legendChanged()
Signal emitted when legend of the layer has changed.
void setAbstract(const QString &abstract)
Sets the abstract of the layer used by QGIS Server in GetCapabilities request.
Definition: qgsmaplayer.h:318
void editingStopped()
Emitted when edited changes have been successfully written to the data provider.
void recalculateExtents() const
This is used to send a request that any mapcanvas using this layer update its extents.
void metadataChanged()
Emitted when the layer's metadata is changed.
void setLegendUrl(const QString &legendUrl)
Sets the URL for the layer's legend.
Definition: qgsmaplayer.h:1283
void request3DUpdate()
Signal emitted when a layer requires an update in any 3D maps.
QgsError mError
Error.
Definition: qgsmaplayer.h:1967
void configChanged()
Emitted whenever the configuration is changed.
void autoRefreshIntervalChanged(int interval)
Emitted when the auto refresh interval changes.
T customFlagProperty(const QString &key, const T &defaultValue)
Returns the property value for a property based on a flag.
Definition: qgsmaplayer.h:815
Q_DECL_DEPRECATED bool hasDependencyCycle(const QSet< QgsMapLayerDependency > &) const
Checks whether a new set of dependencies will introduce a cycle this method is now deprecated and alw...
Definition: qgsmaplayer.h:1977
void editingStarted()
Emitted when editing on this layer has started.
void isValidChanged()
Emitted when the validity of this layer changed.
QString legendPlaceholderImage() const
Returns path to the placeholder image or an empty string if a generated legend is shown.
Definition: qgsmaplayer.h:1517
QgsMapLayerServerProperties * serverProperties()
Returns QGIS Server Properties for the map layer.
Definition: qgsmaplayer.h:426
QString attribution() const
Returns the attribution of the layer used by QGIS Server in GetCapabilities request.
Definition: qgsmaplayer.h:400
QString mRefreshOnNofifyMessage
Definition: qgsmaplayer.h:1980
QString mLegendUrl
WMS legend.
Definition: qgsmaplayer.h:1963
QString mLayerName
Name of the layer - used for display.
Definition: qgsmaplayer.h:1945
void setCustomFlagProperty(const QString &key, const T &value)
Set the value of a property based on a flag.
Definition: qgsmaplayer.h:879
void setAttributionUrl(const QString &attribUrl)
Sets the attribution URL of the layer used by QGIS Server in GetCapabilities request.
Definition: qgsmaplayer.h:409
void renderer3DChanged()
Signal emitted when 3D renderer associated with the layer has changed.
QString abstract() const
Returns the abstract of the layer used by QGIS Server in GetCapabilities request.
Definition: qgsmaplayer.h:326
QString dataUrlFormat() const
Returns the DataUrl format of the layer used by QGIS Server in GetCapabilities request.
Definition: qgsmaplayer.h:380
void statusChanged(const QString &status)
Emit a signal with status (e.g. to be caught by QgisApp and display a msg on status bar)
QString mTitle
Definition: qgsmaplayer.h:1948
void setDataUrl(const QString &dataUrl)
Sets the DataUrl of the layer used by QGIS Server in GetCapabilities request.
Definition: qgsmaplayer.h:353
QgsMapLayer(QgsMapLayer const &)=delete
QgsMapLayer cannot be copied.
void setKeywordList(const QString &keywords)
Sets the keyword list of the layer used by QGIS Server in GetCapabilities request.
Definition: qgsmaplayer.h:334
void setAttribution(const QString &attrib)
Sets the attribution of the layer used by QGIS Server in GetCapabilities request.
Definition: qgsmaplayer.h:391
bool isRefreshOnNotifyEnabled() const
Returns true if the refresh on provider nofification is enabled.
Definition: qgsmaplayer.h:1460
QSet< QgsMapLayerDependency > mDependencies
List of layers that may modify this layer on modification.
Definition: qgsmaplayer.h:1970
void setDataUrlFormat(const QString &dataUrlFormat)
Sets the DataUrl format of the layer used by QGIS Server in GetCapabilities request.
Definition: qgsmaplayer.h:371
QString mLegendUrlFormat
Definition: qgsmaplayer.h:1964
const QgsMapLayerServerProperties * serverProperties() const
Returns QGIS Server Properties const for the map layer.
Definition: qgsmaplayer.h:432
QString mProviderKey
Data provider key (name of the data provider)
Definition: qgsmaplayer.h:1983
void styleChanged()
Signal emitted whenever a change affects the layer's style.
void rendererChanged()
Signal emitted when renderer is changed.
QString title() const
Returns the title of the layer used by QGIS Server in GetCapabilities request.
Definition: qgsmaplayer.h:310
void crsChanged()
Emit a signal that layer's CRS has been reset.
QString mAttributionUrl
Definition: qgsmaplayer.h:1960
void dataSourceChanged()
Emitted whenever the layer's data source has been changed.
QString dataUrl() const
Returns the DataUrl of the layer used by QGIS Server in GetCapabilities request.
Definition: qgsmaplayer.h:362
QgsMapLayer & operator=(QgsMapLayer const &)=delete
QgsMapLayer cannot be copied.
void setRefreshOnNofifyMessage(const QString &message)
Set the notification message that triggers repaint If refresh on notification is enabled,...
Definition: qgsmaplayer.h:1607
void opacityChanged(double opacity)
Emitted when the layer's opacity is changed, where opacity is a value between 0 (transparent) and 1 (...
void styleLoaded(QgsMapLayer::StyleCategories categories)
Emitted when a style has been loaded.
virtual QgsMapLayerTemporalProperties * temporalProperties()
Returns the layer's temporal properties.
Definition: qgsmaplayer.h:1503
QString mShortName
Definition: qgsmaplayer.h:1947
void dataChanged()
Data of layer changed.
virtual QgsMapLayerRenderer * createMapRenderer(QgsRenderContext &rendererContext)=0
Returns new instance of QgsMapLayerRenderer that will be used for rendering of given context.
void willBeDeleted()
Emitted in the destructor when the layer is about to be deleted, but it is still in a perfectly valid...
virtual QgsMapLayer * clone() const =0
Returns a new instance equivalent to this one except for the id which is still unique.
void blendModeChanged(QPainter::CompositionMode blendMode)
Signal emitted when the blend mode is changed, through QgsMapLayer::setBlendMode()
virtual bool readSymbology(const QDomNode &node, QString &errorMessage, QgsReadWriteContext &context, StyleCategories categories=AllStyleCategories)=0
Read the symbology for the current layer from the DOM node supplied.
LayerFlag
Flags for the map layer.
Definition: qgsmaplayer.h:144
void setLegendPlaceholderImage(const QString &imgPath)
Set placeholder image for legend.
Definition: qgsmaplayer.h:1524
void appendError(const QgsErrorMessage &error)
Add error message.
Definition: qgsmaplayer.h:1926
QString mDataSource
Data source description string, varies by layer type.
Definition: qgsmaplayer.h:1942
QString refreshOnNotifyMessage() const
Returns the message that should be notified by the provider to triggerRepaint.
Definition: qgsmaplayer.h:1453
virtual bool readSld(const QDomNode &node, QString &errorMessage)
Definition: qgsmaplayer.h:1161
ReadFlag
Flags which control project read behavior.
Definition: qgsmaplayer.h:639
QString attributionUrl() const
Returns the attribution URL of the layer used by QGIS Server in GetCapabilities request.
Definition: qgsmaplayer.h:418
QString mAbstract
Description of the layer.
Definition: qgsmaplayer.h:1951
void customPropertyChanged(const QString &key)
Emitted when a custom property of the layer has been changed or removed.
QString legendUrl() const
Returns the URL for the layer's legend.
Definition: qgsmaplayer.h:1288
QString mDataUrlFormat
Definition: qgsmaplayer.h:1956
void flagsChanged()
Emitted when layer's flags have been modified.
void repaintRequested(bool deferredUpdate=false)
By emitting this signal the layer tells that either appearance or content have been changed and any v...
void setLegendUrlFormat(const QString &legendUrlFormat)
Sets the format for a URL based layer legend.
Definition: qgsmaplayer.h:1293
void beforeResolveReferences(QgsProject *project)
Emitted when all layers are loaded and references can be resolved, just before the references of this...
virtual QgsMapLayerElevationProperties * elevationProperties()
Returns the layer's elevation properties.
Definition: qgsmaplayer.h:1510
virtual void setTransformContext(const QgsCoordinateTransformContext &transformContext)=0
Sets the coordinate transform context to transformContext.
void nameChanged()
Emitted when the name has been changed.
QString mDataUrl
DataUrl of the layer.
Definition: qgsmaplayer.h:1955
T customEnumProperty(const QString &key, const T &defaultValue)
Returns the property value for a property based on an enum.
Definition: qgsmaplayer.h:737
StyleCategory
Categories of style to distinguish appropriate sections for import/export.
Definition: qgsmaplayer.h:159
@ AllStyleCategories
Definition: qgsmaplayer.h:178
void layerModified()
Emitted when modifications has been done on layer.
virtual Q_INVOKABLE void reload()
Synchronises with changes in the datasource.
Definition: qgsmaplayer.h:537
QString mAttribution
Attribution of the layer.
Definition: qgsmaplayer.h:1959
void setCustomEnumProperty(const QString &key, const T &value)
Set the value of a property based on an enum.
Definition: qgsmaplayer.h:789
QString keywordList() const
Returns the keyword list of the layer used by QGIS Server in GetCapabilities request.
Definition: qgsmaplayer.h:342
void setTitle(const QString &title)
Sets the title of the layer used by QGIS Server in GetCapabilities request.
Definition: qgsmaplayer.h:302
PropertyType
Maplayer has a style and a metadata property.
Definition: qgsmaplayer.h:133
Simple key-value store (keys = strings, values = variants) that supports loading/saving to/from XML i...
Encapsulates a QGIS project, including sets of map layers and their styles, layouts,...
Definition: qgsproject.h:104
The class is used as a container of context for various read/write operations on other objects.
A rectangle specified with double values.
Definition: qgsrectangle.h:42
Contains information about the context of a rendering operation.
An interface for classes which can visit style entity (e.g.
Represents a vector layer which manages a vector based data sets.
QgsMapLayerType
Types of layers that can be added to a map.
Definition: qgis.h:47
@ PointCloudLayer
Point cloud layer. Added in QGIS 3.18.
@ MeshLayer
Mesh layer. Added in QGIS 3.2.
@ VectorLayer
Vector layer.
@ RasterLayer
Raster layer.
@ GroupLayer
Composite group layer. Added in QGIS 3.24.
@ VectorTileLayer
Vector tile layer. Added in QGIS 3.14.
@ AnnotationLayer
Contains freeform, georeferenced annotations. Added in QGIS 3.16.
@ PluginLayer
Plugin based layer.
#define str(x)
Definition: qgis.cpp:37
#define SIP_CONVERT_TO_SUBCLASS_CODE(code)
Definition: qgis_sip.h:186
#define SIP_DEPRECATED
Definition: qgis_sip.h:106
#define SIP_SKIP
Definition: qgis_sip.h:126
#define SIP_TRANSFER
Definition: qgis_sip.h:36
#define SIP_OUT
Definition: qgis_sip.h:58
#define SIP_FACTORY
Definition: qgis_sip.h:76
#define SIP_END
Definition: qgis_sip.h:203
Q_DECLARE_METATYPE(QgsDatabaseQueryLogEntry)
Q_DECLARE_OPERATORS_FOR_FLAGS(QgsField::ConfigurationFlags) CORE_EXPORT QDataStream &operator<<(QDataStream &out
Writes the field to stream out. QGIS version compatibility is not guaranteed.
#define QgsDebugMsg(str)
Definition: qgslogger.h:38
QPointer< QgsMapLayer > QgsWeakMapLayerPointer
Weak pointer for QgsMapLayer.
Definition: qgsmaplayer.h:2147
QList< QgsWeakMapLayerPointer > QgsWeakMapLayerPointerList
A list of weak pointers to QgsMapLayers.
Definition: qgsmaplayer.h:2154
const QgsCoordinateReferenceSystem & crs
Setting options for creating vector data providers.