QGIS API Documentation 3.34.0-Prizren (ffbdd678812)
Loading...
Searching...
No Matches
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 "qgsreadwritecontext.h"
41#include "qgsdataprovider.h"
42#include "qgis.h"
43#include "qgslogger.h"
44
46class QgsDataProvider;
50class QgsProject;
56
57class QDomDocument;
58class QKeyEvent;
59class QPainter;
61
62/*
63 * Constants used to describe copy-paste MIME types
64 */
65#define QGSCLIPBOARD_MAPLAYER_MIME "application/qgis.maplayer"
66
67
73class CORE_EXPORT QgsMapLayer : public QObject
74{
75 Q_OBJECT
76
77 Q_PROPERTY( QString name READ name WRITE setName NOTIFY nameChanged )
78 Q_PROPERTY( int autoRefreshInterval READ autoRefreshInterval WRITE setAutoRefreshInterval NOTIFY autoRefreshIntervalChanged )
79 Q_PROPERTY( QgsLayerMetadata metadata READ metadata WRITE setMetadata NOTIFY metadataChanged )
80 Q_PROPERTY( QgsCoordinateReferenceSystem crs READ crs WRITE setCrs NOTIFY crsChanged )
81 Q_PROPERTY( Qgis::LayerType type READ type CONSTANT )
82 Q_PROPERTY( bool isValid READ isValid NOTIFY isValidChanged )
83 Q_PROPERTY( double opacity READ opacity WRITE setOpacity NOTIFY opacityChanged )
84 Q_PROPERTY( QString mapTipTemplate READ mapTipTemplate WRITE setMapTipTemplate NOTIFY mapTipTemplateChanged )
85 Q_PROPERTY( bool mapTipsEnabled READ mapTipsEnabled WRITE setMapTipsEnabled NOTIFY mapTipsEnabledChanged )
86
87#ifdef SIP_RUN
89 QgsMapLayer *layer = qobject_cast<QgsMapLayer *>( sipCpp );
90
91 sipType = 0;
92
93 if ( layer )
94 {
95 switch ( layer->type() )
96 {
98 sipType = sipType_QgsVectorLayer;
99 break;
101 sipType = sipType_QgsRasterLayer;
102 break;
104 sipType = sipType_QgsPluginLayer;
105 break;
107 sipType = sipType_QgsMeshLayer;
108 break;
110 sipType = sipType_QgsVectorTileLayer;
111 break;
113 sipType = sipType_QgsAnnotationLayer;
114 break;
116 sipType = sipType_QgsPointCloudLayer;
117 break;
119 sipType = sipType_QgsGroupLayer;
120 break;
122 sipType = sipType_QgsTiledSceneLayer;
123 break;
124 default:
125 sipType = nullptr;
126 break;
127 }
128 }
129 SIP_END
130#endif
131
132 public:
133
139 {
140 Style = 0,
142 };
143
150 {
151 Identifiable = 1 << 0,
152 Removable = 1 << 1,
153 Searchable = 1 << 2,
154 Private = 1 << 3,
155 };
156 Q_ENUM( LayerFlag )
157 Q_DECLARE_FLAGS( LayerFlags, LayerFlag )
158 Q_FLAG( LayerFlags )
159
160
165 {
166 LayerConfiguration = 1 << 0,
167 Symbology = 1 << 1,
168 Symbology3D = 1 << 2,
169 Labeling = 1 << 3,
170 Fields = 1 << 4,
171 Forms = 1 << 5,
172 Actions = 1 << 6,
173 MapTips = 1 << 7,
174 Diagrams = 1 << 8,
175 AttributeTable = 1 << 9,
176 Rendering = 1 << 10,
177 CustomProperties = 1 << 11,
178 GeometryOptions = 1 << 12,
179 Relations = 1 << 13,
180 Temporal = 1 << 14,
181 Legend = 1 << 15,
182 Elevation = 1 << 16,
183 Notes = 1 << 17,
184 AllStyleCategories = LayerConfiguration | Symbology | Symbology3D | Labeling | Fields | Forms | Actions |
185 MapTips | Diagrams | AttributeTable | Rendering | CustomProperties | GeometryOptions | Relations | Temporal | Legend | Elevation | Notes,
186 };
187 Q_ENUM( StyleCategory )
188 Q_DECLARE_FLAGS( StyleCategories, StyleCategory )
189 Q_FLAG( StyleCategories )
190
191
197 QgsMapLayer( Qgis::LayerType type = Qgis::LayerType::Vector, const QString &name = QString(), const QString &source = QString() );
198
199 ~QgsMapLayer() override;
200
202 QgsMapLayer( QgsMapLayer const & ) = delete;
204 QgsMapLayer &operator=( QgsMapLayer const & ) = delete;
205
212 virtual QgsMapLayer *clone() const = 0;
213
217 Qgis::LayerType type() const;
218
229 QgsMapLayer::LayerFlags flags() const;
230
241 void setFlags( QgsMapLayer::LayerFlags flags );
242
252 virtual Qgis::MapLayerProperties properties() const;
253
259 static QString extensionPropertyType( PropertyType type );
260
262 QString id() const;
263
269 void setName( const QString &name );
270
275 QString name() const;
276
280 Q_INVOKABLE virtual QgsDataProvider *dataProvider();
281
286 virtual const QgsDataProvider *dataProvider() const SIP_SKIP;
287
293 void setShortName( const QString &shortName ) { mShortName = shortName; }
294
300 QString shortName() const;
301
307 void setTitle( const QString &title ) { mTitle = title; }
308
315 QString title() const { return mTitle; }
316
322 void setAbstract( const QString &abstract ) { mAbstract = abstract; }
323
330 QString abstract() const { return mAbstract; }
331
337 void setKeywordList( const QString &keywords ) { mKeywordList = keywords; }
338
345 QString keywordList() const { return mKeywordList; }
346
347 /* Layer dataUrl information */
348
355 void setDataUrl( const QString &dataUrl ) { mDataUrl = dataUrl; }
356
364 QString dataUrl() const { return mDataUrl; }
365
372 void setDataUrlFormat( const QString &dataUrlFormat ) { mDataUrlFormat = dataUrlFormat; }
373
381 QString dataUrlFormat() const { return mDataUrlFormat; }
382
383 /* Layer attribution information */
384
391 void setAttribution( const QString &attrib ) { mAttribution = attrib; }
392
400 QString attribution() const { return mAttribution; }
401
408 void setAttributionUrl( const QString &attribUrl ) { mAttributionUrl = attribUrl; }
409
417 QString attributionUrl() const { return mAttributionUrl; }
418
419 /* Layer metadataUrl information */
420
425 QgsMapLayerServerProperties *serverProperties() { return mServerProperties.get(); };
426
431 const QgsMapLayerServerProperties *serverProperties() const { return mServerProperties.get(); } SIP_SKIP;
432
441 Q_DECL_DEPRECATED void setMetadataUrl( const QString &metaUrl ) SIP_DEPRECATED;
442
452 Q_DECL_DEPRECATED QString metadataUrl() const SIP_DEPRECATED;
453
462 Q_DECL_DEPRECATED void setMetadataUrlType( const QString &metaUrlType ) SIP_DEPRECATED;
463
473 Q_DECL_DEPRECATED QString metadataUrlType() const SIP_DEPRECATED;
474
483 Q_DECL_DEPRECATED void setMetadataUrlFormat( const QString &metaUrlFormat ) SIP_DEPRECATED;
484
494 Q_DECL_DEPRECATED QString metadataUrlFormat() const SIP_DEPRECATED;
495
501 void setBlendMode( QPainter::CompositionMode blendMode );
502
507 QPainter::CompositionMode blendMode() const;
508
517 virtual void setOpacity( double opacity );
518
527 virtual double opacity() const;
528
530 bool readOnly() const { return isReadOnly(); }
531
535 Q_INVOKABLE virtual void reload() {}
536
542
544 virtual QgsRectangle extent() const;
545
554 QgsRectangle wgs84Extent( bool forceRecalculate = false ) const;
555
561 bool isValid() const;
562
570 QString publicSource( bool hidePassword = false ) const;
571
577 QString source() const;
578
583 virtual QStringList subLayers() const;
584
589 virtual void setLayerOrder( const QStringList &layers );
590
596 virtual void setSubLayerVisibility( const QString &name, bool visible );
597
604 virtual bool supportsEditing() const;
605
607 virtual bool isEditable() const;
608
614 virtual bool isModified() const;
615
620 virtual bool isSpatial() const;
621
631 virtual bool isTemporary() const;
632
638 {
639 FlagDontResolveLayers = 1 << 0,
640 FlagTrustLayerMetadata = 1 << 1,
641 FlagReadExtentFromXml = 1 << 2,
642 FlagForceReadOnly = 1 << 3,
643 };
644 Q_DECLARE_FLAGS( ReadFlags, ReadFlag )
645
646
664 bool readLayerXml( const QDomElement &layerElement, QgsReadWriteContext &context,
665 QgsMapLayer::ReadFlags flags = QgsMapLayer::ReadFlags(), QgsDataProvider *preloadedProvider SIP_TRANSFER = nullptr );
666
684 bool writeLayerXml( QDomElement &layerElement, QDomDocument &document, const QgsReadWriteContext &context ) const;
685
690 virtual void resolveReferences( QgsProject *project );
691
697 Q_INVOKABLE QStringList customPropertyKeys() const;
698
704 Q_INVOKABLE void setCustomProperty( const QString &key, const QVariant &value );
705
710 Q_INVOKABLE QVariant customProperty( const QString &value, const QVariant &defaultValue = QVariant() ) const;
711
716 void setCustomProperties( const QgsObjectCustomProperties &properties );
717
723 const QgsObjectCustomProperties &customProperties() const;
724
734 virtual int listStylesInDatabase( QStringList &ids SIP_OUT, QStringList &names SIP_OUT,
735 QStringList &descriptions SIP_OUT, QString &msgError SIP_OUT );
736
740 virtual QString getStyleFromDatabase( const QString &styleId, QString &msgError SIP_OUT );
741
749 virtual bool deleteStyleFromDatabase( const QString &styleId, QString &msgError SIP_OUT );
750
767 virtual void saveStyleToDatabase( const QString &name, const QString &description,
768 bool useAsDefault, const QString &uiFileContent,
769 QString &msgError SIP_OUT,
770 QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories );
771
779 virtual QString loadNamedStyle( const QString &theURI, bool &resultFlag SIP_OUT, bool loadFromLocalDb,
780 QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories );
781
782#ifndef SIP_RUN
783
794 template <class T>
795 T customEnumProperty( const QString &key, const T &defaultValue )
796 {
797 const QMetaEnum metaEnum = QMetaEnum::fromType<T>();
798 Q_ASSERT( metaEnum.isValid() );
799 if ( !metaEnum.isValid() )
800 {
801 QgsDebugError( QStringLiteral( "Invalid metaenum. Enum probably misses Q_ENUM or Q_FLAG declaration." ) );
802 }
803
804 T v;
805 bool ok = false;
806
807 if ( metaEnum.isValid() )
808 {
809 // read as string
810 QByteArray ba = customProperty( key, metaEnum.valueToKey( static_cast<int>( defaultValue ) ) ).toString().toUtf8();
811 const char *vs = ba.data();
812 v = static_cast<T>( metaEnum.keyToValue( vs, &ok ) );
813 if ( ok )
814 return v;
815 }
816
817 // if failed, try to read as int (old behavior)
818 // this code shall be removed later
819 // then the method could be marked as const
820 v = static_cast<T>( customProperty( key, static_cast<int>( defaultValue ) ).toInt( &ok ) );
821 if ( metaEnum.isValid() )
822 {
823 if ( !ok || !metaEnum.valueToKey( static_cast<int>( v ) ) )
824 {
825 v = defaultValue;
826 }
827 else
828 {
829 // found property as an integer
830 // convert the property to the new form (string)
831 setCustomEnumProperty( key, v );
832 }
833 }
834
835 return v;
836 }
837
846 template <class T>
847 void setCustomEnumProperty( const QString &key, const T &value )
848 {
849 const QMetaEnum metaEnum = QMetaEnum::fromType<T>();
850 Q_ASSERT( metaEnum.isValid() );
851 if ( metaEnum.isValid() )
852 {
853 setCustomProperty( key, metaEnum.valueToKey( static_cast<int>( value ) ) );
854 }
855 else
856 {
857 QgsDebugError( QStringLiteral( "Invalid metaenum. Enum probably misses Q_ENUM or Q_FLAG declaration." ) );
858 }
859 }
860
872 template <class T>
873 T customFlagProperty( const QString &key, const T &defaultValue )
874 {
875 const QMetaEnum metaEnum = QMetaEnum::fromType<T>();
876 Q_ASSERT( metaEnum.isValid() );
877 if ( !metaEnum.isValid() )
878 {
879 QgsDebugError( QStringLiteral( "Invalid metaenum. Enum probably misses Q_ENUM or Q_FLAG declaration." ) );
880 }
881
882 T v = defaultValue;
883 bool ok = false;
884
885 if ( metaEnum.isValid() )
886 {
887 // read as string
888 QByteArray ba = customProperty( key, metaEnum.valueToKeys( defaultValue ) ).toString().toUtf8();
889 const char *vs = ba.data();
890 v = static_cast<T>( metaEnum.keysToValue( vs, &ok ) );
891 }
892 if ( !ok )
893 {
894 // if failed, try to read as int
895 const int intValue = customProperty( key, static_cast<int>( defaultValue ) ).toInt( &ok );
896 if ( metaEnum.isValid() )
897 {
898 if ( ok )
899 {
900 // check that the int value does correspond to a flag
901 // see https://stackoverflow.com/a/68495949/1548052
902 const QByteArray keys = metaEnum.valueToKeys( intValue );
903 const int intValueCheck = metaEnum.keysToValue( keys );
904 if ( intValue != intValueCheck )
905 {
906 v = defaultValue;
907 }
908 else
909 {
910 // found property as an integer
911 v = T( intValue );
912 // convert the property to the new form (string)
913 // this code could be removed
914 // then the method could be marked as const
915 setCustomFlagProperty( key, v );
916 }
917 }
918 else
919 {
920 v = defaultValue;
921 }
922 }
923 }
924
925 return v;
926 }
927
936 template <class T>
937 void setCustomFlagProperty( const QString &key, const T &value )
938 {
939 const QMetaEnum metaEnum = QMetaEnum::fromType<T>();
940 Q_ASSERT( metaEnum.isValid() );
941 if ( metaEnum.isValid() )
942 {
943 setCustomProperty( key, metaEnum.valueToKeys( value ) );
944 }
945 else
946 {
947 QgsDebugError( QStringLiteral( "Invalid metaenum. Enum probably misses Q_ENUM or Q_FLAG declaration." ) );
948 }
949 }
950#endif
951
952
957 void removeCustomProperty( const QString &key );
958
964 virtual QgsError error() const;
965
971
973 void setCrs( const QgsCoordinateReferenceSystem &srs, bool emitSignal = true );
974
980 QgsCoordinateTransformContext transformContext( ) const;
981
982
988 static QString formatLayerName( const QString &name );
989
997 virtual QString metadataUri() const;
998
1005 void exportNamedMetadata( QDomDocument &doc, QString &errorMsg ) const;
1006
1016 virtual QString saveDefaultMetadata( bool &resultFlag SIP_OUT );
1017
1032 QString saveNamedMetadata( const QString &uri, bool &resultFlag );
1033
1048 virtual QString loadNamedMetadata( const QString &uri, bool &resultFlag SIP_OUT );
1049
1059 virtual QString loadDefaultMetadata( bool &resultFlag );
1060
1069 bool loadNamedMetadataFromDatabase( const QString &db, const QString &uri, QString &qmd );
1070
1078 bool importNamedMetadata( QDomDocument &document, QString &errorMessage );
1079
1088 virtual QString styleURI() const;
1089
1099 virtual QString loadDefaultStyle( bool &resultFlag SIP_OUT );
1100
1116 virtual QString loadNamedStyle( const QString &uri, bool &resultFlag SIP_OUT, QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories );
1117
1125 virtual bool loadNamedStyleFromDatabase( const QString &db, const QString &uri, QString &qml SIP_OUT );
1126
1136 virtual bool importNamedStyle( QDomDocument &doc, QString &errorMsg SIP_OUT,
1137 QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories );
1138
1147 virtual void exportNamedStyle( QDomDocument &doc, QString &errorMsg SIP_OUT, const QgsReadWriteContext &context = QgsReadWriteContext(),
1148 QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories ) const;
1149
1150
1158 virtual void exportSldStyle( QDomDocument &doc, QString &errorMsg ) const;
1159
1168 virtual void exportSldStyleV2( QDomDocument &doc, QString &errorMsg, const QgsSldExportContext &exportContext ) const;
1169
1181 virtual QString saveDefaultStyle( bool &resultFlag SIP_OUT, StyleCategories categories );
1182
1194 Q_DECL_DEPRECATED virtual QString saveDefaultStyle( bool &resultFlag SIP_OUT ) SIP_DEPRECATED;
1195
1211 virtual QString saveNamedStyle( const QString &uri, bool &resultFlag SIP_OUT, StyleCategories categories = AllStyleCategories );
1212
1222 virtual QString saveSldStyle( const QString &uri, bool &resultFlag ) const;
1223
1234 virtual QString saveSldStyleV2( bool &resultFlag SIP_OUT, const QgsSldExportContext &exportContext ) const;
1235
1244 virtual QString loadSldStyle( const QString &uri, bool &resultFlag );
1245
1246 virtual bool readSld( const QDomNode &node, QString &errorMessage )
1247 { Q_UNUSED( node ) errorMessage = QStringLiteral( "Layer type %1 not supported" ).arg( static_cast<int>( type() ) ); return false; }
1248
1249
1250
1259 virtual bool readSymbology( const QDomNode &node, QString &errorMessage,
1260 QgsReadWriteContext &context, StyleCategories categories = AllStyleCategories ) = 0;
1261
1272 virtual bool readStyle( const QDomNode &node, QString &errorMessage,
1273 QgsReadWriteContext &context, StyleCategories categories = AllStyleCategories );
1274
1285 virtual bool writeSymbology( QDomNode &node, QDomDocument &doc, QString &errorMessage, const QgsReadWriteContext &context,
1286 StyleCategories categories = AllStyleCategories ) const = 0;
1287
1300 virtual bool writeStyle( QDomNode &node, QDomDocument &doc, QString &errorMessage, const QgsReadWriteContext &context,
1301 StyleCategories categories = AllStyleCategories ) const;
1302
1303
1333 void setDataSource( const QString &dataSource, const QString &baseName, const QString &provider, bool loadDefaultStyleFlag = false );
1334
1364 void setDataSource( const QString &dataSource, const QString &baseName, const QString &provider, const QgsDataProvider::ProviderOptions &options, bool loadDefaultStyleFlag = false );
1365
1395 void setDataSource( const QString &dataSource, const QString &baseName, const QString &provider, const QgsDataProvider::ProviderOptions &options, QgsDataProvider::ReadFlags flags );
1396
1400 QString providerType() const;
1401
1403 QUndoStack *undoStack();
1404
1409 QUndoStack *undoStackStyles();
1410
1414 void setLegendUrl( const QString &legendUrl ) { mLegendUrl = legendUrl; }
1415
1419 QString legendUrl() const { return mLegendUrl; }
1420
1424 void setLegendUrlFormat( const QString &legendUrlFormat ) { mLegendUrlFormat = legendUrlFormat; }
1425
1429 QString legendUrlFormat() const { return mLegendUrlFormat; }
1430
1436 void setLegend( QgsMapLayerLegend *legend SIP_TRANSFER );
1437
1442 QgsMapLayerLegend *legend() const;
1443
1448 QgsMapLayerStyleManager *styleManager() const;
1449
1454 void setRenderer3D( QgsAbstract3DRenderer *renderer SIP_TRANSFER );
1455
1460 QgsAbstract3DRenderer *renderer3D() const;
1461
1471 bool isInScaleRange( double scale ) const;
1472
1483 double minimumScale() const;
1484
1495 double maximumScale() const;
1496
1505 bool hasScaleBasedVisibility() const;
1506
1513 Q_DECL_DEPRECATED bool hasAutoRefreshEnabled() const SIP_DEPRECATED;
1514
1521 Qgis::AutoRefreshMode autoRefreshMode() const;
1522
1530 int autoRefreshInterval() const;
1531
1543 void setAutoRefreshInterval( int interval );
1544
1551 Q_DECL_DEPRECATED void setAutoRefreshEnabled( bool enabled ) SIP_DEPRECATED;
1552
1559 void setAutoRefreshMode( Qgis::AutoRefreshMode mode );
1560
1567 virtual const QgsLayerMetadata &metadata() const;
1568
1575 virtual void setMetadata( const QgsLayerMetadata &metadata );
1576
1581 virtual QString htmlMetadata() const;
1582
1584 virtual QDateTime timestamp() const;
1585
1593 virtual QSet<QgsMapLayerDependency> dependencies() const;
1594
1600 QString refreshOnNotifyMessage() const { return mRefreshOnNofifyMessage; }
1601
1607 bool isRefreshOnNotifyEnabled() const { return mIsRefreshOnNofifyEnabled; }
1608
1617 QString originalXmlProperties() const;
1618
1626 void setOriginalXmlProperties( const QString &originalXmlProperties );
1627
1632 static QString generateId( const QString &layerName );
1633
1643 virtual bool accept( QgsStyleEntityVisitorInterface *visitor ) const;
1644
1651
1658
1665
1671 QString legendPlaceholderImage() const { return mLegendPlaceholderImage;}
1672
1678 void setLegendPlaceholderImage( const QString &imgPath ) { mLegendPlaceholderImage = imgPath; }
1679
1686 virtual bool hasMapTips() const;
1687
1696 QString mapTipTemplate() const;
1697
1706 void setMapTipTemplate( const QString &mapTipTemplate );
1707
1714 void setMapTipsEnabled( bool enabled );
1715
1720 bool mapTipsEnabled() const;
1721
1729 static QgsDataProvider::ReadFlags providerReadFlags( const QDomNode &layerNode, QgsMapLayer::ReadFlags layerReadFlags );
1730
1731 public slots:
1732
1742 void setMinimumScale( double scale );
1743
1753 void setMaximumScale( double scale );
1754
1762 void setScaleBasedVisibility( bool enabled );
1763
1772 void triggerRepaint( bool deferredUpdate = false );
1773
1780 void trigger3DUpdate();
1781
1786 void emitStyleChanged();
1787
1796 virtual bool setDependencies( const QSet<QgsMapLayerDependency> &layers );
1797
1803 void setRefreshOnNotifyEnabled( bool enabled );
1804
1812 void setRefreshOnNofifyMessage( const QString &message ) { mRefreshOnNofifyMessage = message; }
1813
1819 virtual void setTransformContext( const QgsCoordinateTransformContext &transformContext ) = 0;
1820
1821#ifdef SIP_RUN
1822 SIP_PYOBJECT __repr__();
1823 % MethodCode
1824 QString str = QStringLiteral( "<QgsMapLayer: '%1' (%2)>" ).arg( sipCpp->name(), sipCpp->dataProvider() ? sipCpp->dataProvider()->name() : QStringLiteral( "Invalid" ) );
1825 sipRes = PyUnicode_FromString( str.toUtf8().constData() );
1826 % End
1827#endif
1828
1835 QgsProject *project() const;
1836
1837 signals:
1838
1846
1848 void statusChanged( const QString &status );
1849
1856
1859
1866 void repaintRequested( bool deferredUpdate = false );
1867
1870
1873
1875 void blendModeChanged( QPainter::CompositionMode blendMode );
1876
1885 void opacityChanged( double opacity );
1886
1892
1905
1911
1917
1924
1930
1935
1943
1949 void autoRefreshIntervalChanged( int interval );
1950
1958
1966
1975
1981 void styleLoaded( QgsMapLayer::StyleCategories categories );
1982
1989
1995 void customPropertyChanged( const QString &key );
1996
2002
2008
2014
2022
2030
2031 private slots:
2032
2033 void onNotified( const QString &message );
2034
2050 virtual void setDataSourcePrivate( const QString &dataSource, const QString &baseName, const QString &provider, const QgsDataProvider::ProviderOptions &options, QgsDataProvider::ReadFlags flags );
2051
2052 protected:
2053
2059 void clone( QgsMapLayer *layer ) const;
2060
2062 virtual void setExtent( const QgsRectangle &rect );
2063
2065 void setValid( bool valid );
2066
2071 virtual bool readXml( const QDomNode &layer_node, QgsReadWriteContext &context );
2072
2077 virtual bool writeXml( QDomNode &layer_node, QDomDocument &document, const QgsReadWriteContext &context ) const;
2078
2090 virtual QString encodedSource( const QString &source, const QgsReadWriteContext &context ) const;
2091
2104 virtual QString decodedSource( const QString &source, const QString &dataProvider, const QgsReadWriteContext &context ) const;
2105
2111 void readCustomProperties( const QDomNode &layerNode, const QString &keyStartsWith = QString() );
2112
2114 void writeCustomProperties( QDomNode &layerNode, QDomDocument &doc ) const;
2115
2117 void readStyleManager( const QDomNode &layerNode );
2119 void writeStyleManager( QDomNode &layerNode, QDomDocument &doc ) const;
2120
2125 void writeCommonStyle( QDomElement &layerElement, QDomDocument &document,
2126 const QgsReadWriteContext &context,
2127 StyleCategories categories = AllStyleCategories ) const;
2128
2133 void readCommonStyle( const QDomElement &layerElement, const QgsReadWriteContext &context,
2134 StyleCategories categories = AllStyleCategories );
2135
2137 void setProviderType( const QString &providerType );
2138
2139#ifndef SIP_RUN
2140#if 0
2142 void connectNotify( const char *signal ) override;
2143#endif
2144#endif
2145
2147 void appendError( const QgsErrorMessage &error ) { mError.append( error );}
2149 void setError( const QgsError &error ) { mError = error;}
2150
2157 void invalidateWgs84Extent();
2158
2160 bool mValid = false;
2161
2164
2166 QString mLayerName;
2167
2168 QString mShortName;
2169 QString mTitle;
2170
2172 QString mAbstract;
2174
2176 QString mDataUrl;
2178
2182
2184 QString mLegendUrl;
2186
2189
2191 QSet<QgsMapLayerDependency> mDependencies;
2192
2198 Q_DECL_DEPRECATED bool hasDependencyCycle( const QSet<QgsMapLayerDependency> & ) const {return false;}
2199
2200 bool mIsRefreshOnNofifyEnabled = false;
2202
2205
2206 //TODO QGIS 4 - move to readXml as a new argument (breaks API)
2207
2209 QgsMapLayer::ReadFlags mReadFlags = QgsMapLayer::ReadFlags();
2210
2216 bool mShouldValidateCrs = true;
2217
2223 double mLayerOpacity = 1.0;
2224
2230 int mBlockStyleChangedSignal = 0;
2231
2232#ifndef SIP_RUN
2233
2242 QString crsHtmlMetadata() const;
2243#endif
2244
2245#ifndef SIP_RUN
2246
2255 QString generalHtmlMetadata() const;
2256#endif
2257
2258#ifndef SIP_RUN
2259
2267 std::unique_ptr<QgsDataProvider> mPreloadedProvider;
2268#endif
2269
2270 private:
2271
2272 virtual QString baseURI( PropertyType type ) const;
2273 QString saveNamedProperty( const QString &uri, QgsMapLayer::PropertyType type,
2274 bool &resultFlag, StyleCategories categories = AllStyleCategories );
2275 QString loadNamedProperty( const QString &uri, QgsMapLayer::PropertyType type,
2276 bool &resultFlag, StyleCategories categories = AllStyleCategories );
2277 bool loadNamedPropertyFromDatabase( const QString &db, const QString &uri, QString &xml, QgsMapLayer::PropertyType type );
2278
2279 // const method because extents are mutable
2280 void updateExtent( const QgsRectangle &extent ) const;
2281
2286 virtual bool isReadOnly() const;
2287
2293
2295 QString mID;
2296
2298 Qgis::LayerType mLayerType;
2299
2300 LayerFlags mFlags = LayerFlags( Identifiable | Removable | Searchable );
2301
2303 QPainter::CompositionMode mBlendMode = QPainter::CompositionMode_SourceOver;
2304
2306 QString mTag;
2307
2308 //set some generous defaults for scale based visibility
2309
2311 double mMinScale = 0;
2313 double mMaxScale = 100000000;
2315 bool mScaleBasedVisibility = false;
2316
2320 std::unique_ptr< QgsMapLayerServerProperties > mServerProperties;
2321
2323 QUndoStack *mUndoStack = nullptr;
2324
2325 QUndoStack *mUndoStackStyles = nullptr;
2326
2328 QgsObjectCustomProperties mCustomProperties;
2329
2331 QgsMapLayerLegend *mLegend = nullptr;
2332
2334 QgsMapLayerStyleManager *mStyleManager = nullptr;
2335
2337
2339 QTimer *mRefreshTimer = nullptr;
2340
2341 QgsLayerMetadata mMetadata;
2342
2344 QgsAbstract3DRenderer *m3DRenderer = nullptr;
2345
2347 mutable QgsRectangle mExtent;
2348
2350 mutable QgsRectangle mWgs84Extent;
2351
2357 QString mOriginalXmlProperties;
2358
2360 bool mRepaintRequestedFired = false;
2361
2363 QString mLegendPlaceholderImage;
2364
2366 QString mMapTipTemplate;
2367
2369 bool mMapTipsEnabled = true;
2370
2371 friend class QgsVectorLayer;
2372 friend class TestQgsMapLayer;
2373};
2374
2376Q_DECLARE_OPERATORS_FOR_FLAGS( QgsMapLayer::LayerFlags )
2377Q_DECLARE_OPERATORS_FOR_FLAGS( QgsMapLayer::StyleCategories )
2378Q_DECLARE_OPERATORS_FOR_FLAGS( QgsMapLayer::ReadFlags )
2379
2380
2381#ifndef SIP_RUN
2382
2388typedef QPointer< QgsMapLayer > QgsWeakMapLayerPointer;
2389
2395typedef QList< QgsWeakMapLayerPointer > QgsWeakMapLayerPointerList;
2396#endif
2397
2398#endif
The Qgis class provides global constants for use throughout the application.
Definition qgis.h:54
LayerType
Types of layers that can be added to a map.
Definition qgis.h:114
@ Group
Composite group layer. Added in QGIS 3.24.
@ Plugin
Plugin based layer.
@ TiledScene
Tiled scene layer. Added in QGIS 3.34.
@ Annotation
Contains freeform, georeferenced annotations. Added in QGIS 3.16.
@ Vector
Vector layer.
@ VectorTile
Vector tile layer. Added in QGIS 3.14.
@ Mesh
Mesh layer. Added in QGIS 3.2.
@ Raster
Raster layer.
@ PointCloud
Point cloud layer. Added in QGIS 3.18.
AutoRefreshMode
Map layer properties.
Definition qgis.h:1667
@ Disabled
Automatic refreshing is disabled.
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.
This class models dependencies with or between map layers.
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.
Base class for storage of map layer selection properties.
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:74
QString mKeywordList
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.
void dependenciesChanged()
Emitted when dependencies are changed.
void setError(const QgsError &error)
Sets error message.
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.
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.
void request3DUpdate()
Signal emitted when a layer requires an update in any 3D maps.
QgsError mError
Error.
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.
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...
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.
QgsMapLayerServerProperties * serverProperties()
Returns QGIS Server Properties for the map layer.
QString attribution() const
Returns the attribution of the layer used by QGIS Server in GetCapabilities request.
QString mRefreshOnNofifyMessage
QString mLegendUrl
WMS legend.
QString mLayerName
Name of the layer - used for display.
void setCustomFlagProperty(const QString &key, const T &value)
Set the value of a property based on a flag.
void mapTipTemplateChanged()
Emitted when the map tip template changes.
void setAttributionUrl(const QString &attribUrl)
Sets the attribution URL of the layer used by QGIS Server in GetCapabilities request.
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.
virtual QgsMapLayerSelectionProperties * selectionProperties()
Returns the layer's selection properties.
QString dataUrlFormat() const
Returns the DataUrl format of the layer used by QGIS Server in GetCapabilities request.
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
void setDataUrl(const QString &dataUrl)
Sets the DataUrl of the layer used by QGIS Server in GetCapabilities request.
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.
void setAttribution(const QString &attrib)
Sets the attribution of the layer used by QGIS Server in GetCapabilities request.
bool isRefreshOnNotifyEnabled() const
Returns true if the refresh on provider nofification is enabled.
QSet< QgsMapLayerDependency > mDependencies
List of layers that may modify this layer on modification.
void setDataUrlFormat(const QString &dataUrlFormat)
Sets the DataUrl format of the layer used by QGIS Server in GetCapabilities request.
QString mLegendUrlFormat
const QgsMapLayerServerProperties * serverProperties() const
Returns QGIS Server Properties const for the map layer.
QString mProviderKey
Data provider key (name of the data provider)
void styleChanged()
Signal emitted whenever a change affects the layer's style.
std::unique_ptr< QgsDataProvider > mPreloadedProvider
Optionally used when loading a project, it is released when the layer is effectively created.
void rendererChanged()
Signal emitted when renderer is changed.
QString title() const
Returns the title of the layer used by QGIS Server in GetCapabilities request.
void crsChanged()
Emit a signal that layer's CRS has been reset.
QString mAttributionUrl
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.
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,...
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.
QString mShortName
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.
void setLegendPlaceholderImage(const QString &imgPath)
Set placeholder image for legend.
void appendError(const QgsErrorMessage &error)
Add error message.
QString mDataSource
Data source description string, varies by layer type.
virtual bool readSld(const QDomNode &node, QString &errorMessage)
ReadFlag
Flags which control project read behavior.
QString attributionUrl() const
Returns the attribution URL of the layer used by QGIS Server in GetCapabilities request.
QString mAbstract
Description of the layer.
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.
QString mDataUrlFormat
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.
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.
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.
T customEnumProperty(const QString &key, const T &defaultValue)
Returns the property value for a property based on an enum.
StyleCategory
Categories of style to distinguish appropriate sections for import/export.
void layerModified()
Emitted when modifications has been done on layer.
virtual Q_INVOKABLE void reload()
Synchronises with changes in the datasource.
void mapTipsEnabledChanged()
Emitted when map tips are enabled or disabled for the layer.
QString mAttribution
Attribution of the layer.
void setCustomEnumProperty(const QString &key, const T &value)
Set the value of a property based on an enum.
QString keywordList() const
Returns the keyword list of the layer used by QGIS Server in GetCapabilities request.
void setTitle(const QString &title)
Sets the title of the layer used by QGIS Server in GetCapabilities request.
PropertyType
Maplayer has a style and a metadata property.
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:107
The class is used as a container of context for various read/write operations on other objects.
A rectangle specified with double values.
Contains information about the context of a rendering operation.
The QgsSldExportContext class holds SLD export options and other information related to SLD export of...
An interface for classes which can visit style entity (e.g.
Represents a vector layer which manages a vector based data sets.
#define str(x)
Definition qgis.cpp:38
#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)
#define QgsDebugError(str)
Definition qgslogger.h:38
QPointer< QgsMapLayer > QgsWeakMapLayerPointer
Weak pointer for QgsMapLayer.
QList< QgsWeakMapLayerPointer > QgsWeakMapLayerPointerList
A list of weak pointers to QgsMapLayers.
Q_DECLARE_OPERATORS_FOR_FLAGS(QgsTextRendererUtils::CurvedTextFlags)
const QgsCoordinateReferenceSystem & crs
Setting options for creating vector data providers.