QGIS API Documentation  3.22.4-Białowieża (ce8e65e95e)
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"
37 #include "qgsmaplayerdependency.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 
47 class QgsDataProvider;
48 class QgsMapLayerLegend;
51 class QgsProject;
55 
56 class QDomDocument;
57 class QKeyEvent;
58 class QPainter;
59 class QgsRenderContext;
60 
61 /*
62  * Constants used to describe copy-paste MIME types
63  */
64 #define QGSCLIPBOARD_MAPLAYER_MIME "application/qgis.maplayer"
65 
66 
72 class 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;
115  default:
116  sipType = nullptr;
117  break;
118  }
119  }
120  SIP_END
121 #endif
122 
123  public:
124 
130  {
131  Style = 0,
133  };
134 
141  {
142  Identifiable = 1 << 0,
143  Removable = 1 << 1,
144  Searchable = 1 << 2,
145  Private = 1 << 3,
146  };
147  Q_ENUM( LayerFlag )
148  Q_DECLARE_FLAGS( LayerFlags, LayerFlag )
149  Q_FLAG( LayerFlags )
150 
151 
156  {
157  LayerConfiguration = 1 << 0,
158  Symbology = 1 << 1,
159  Symbology3D = 1 << 2,
160  Labeling = 1 << 3,
161  Fields = 1 << 4,
162  Forms = 1 << 5,
163  Actions = 1 << 6,
164  MapTips = 1 << 7,
165  Diagrams = 1 << 8,
166  AttributeTable = 1 << 9,
167  Rendering = 1 << 10,
168  CustomProperties = 1 << 11,
169  GeometryOptions = 1 << 12,
170  Relations = 1 << 13,
171  Temporal = 1 << 14,
172  Legend = 1 << 15,
173  Elevation = 1 << 16,
174  Notes = 1 << 17,
175  AllStyleCategories = LayerConfiguration | Symbology | Symbology3D | Labeling | Fields | Forms | Actions |
176  MapTips | Diagrams | AttributeTable | Rendering | CustomProperties | GeometryOptions | Relations | Temporal | Legend | Elevation | Notes,
177  };
178  Q_ENUM( StyleCategory )
179  Q_DECLARE_FLAGS( StyleCategories, StyleCategory )
180  Q_FLAG( StyleCategories )
181 
182 
188  QgsMapLayer( QgsMapLayerType type = QgsMapLayerType::VectorLayer, const QString &name = QString(), const QString &source = QString() );
189 
190  ~QgsMapLayer() override;
191 
193  QgsMapLayer( QgsMapLayer const & ) = delete;
195  QgsMapLayer &operator=( QgsMapLayer const & ) = delete;
196 
203  virtual QgsMapLayer *clone() const = 0;
204 
208  QgsMapLayerType type() const;
209 
220  QgsMapLayer::LayerFlags flags() const;
221 
232  void setFlags( QgsMapLayer::LayerFlags flags );
233 
243  virtual Qgis::MapLayerProperties properties() const;
244 
250  static QString extensionPropertyType( PropertyType type );
251 
253  QString id() const;
254 
260  void setName( const QString &name );
261 
266  QString name() const;
267 
271  Q_INVOKABLE virtual QgsDataProvider *dataProvider();
272 
277  virtual const QgsDataProvider *dataProvider() const SIP_SKIP;
278 
285  void setShortName( const QString &shortName ) { mShortName = shortName; }
286 
292  QString shortName() const;
293 
299  void setTitle( const QString &title ) { mTitle = title; }
300 
307  QString title() const { return mTitle; }
308 
315  void setAbstract( const QString &abstract ) { mAbstract = abstract; }
316 
323  QString abstract() const { return mAbstract; }
324 
331  void setKeywordList( const QString &keywords ) { mKeywordList = keywords; }
332 
339  QString keywordList() const { return mKeywordList; }
340 
341  /* Layer dataUrl information */
342 
350  void setDataUrl( const QString &dataUrl ) { mDataUrl = dataUrl; }
351 
359  QString dataUrl() const { return mDataUrl; }
360 
368  void setDataUrlFormat( const QString &dataUrlFormat ) { mDataUrlFormat = dataUrlFormat; }
369 
377  QString dataUrlFormat() const { return mDataUrlFormat; }
378 
379  /* Layer attribution information */
380 
388  void setAttribution( const QString &attrib ) { mAttribution = attrib; }
389 
397  QString attribution() const { return mAttribution; }
398 
406  void setAttributionUrl( const QString &attribUrl ) { mAttributionUrl = attribUrl; }
407 
415  QString attributionUrl() const { return mAttributionUrl; }
416 
417  /* Layer metadataUrl information */
418 
423  QgsMapLayerServerProperties *serverProperties() { return mServerProperties.get(); };
424 
429  const QgsMapLayerServerProperties *serverProperties() const { return mServerProperties.get(); } SIP_SKIP;
430 
439  Q_DECL_DEPRECATED void setMetadataUrl( const QString &metaUrl ) SIP_DEPRECATED;
440 
450  Q_DECL_DEPRECATED QString metadataUrl() const SIP_DEPRECATED;
451 
461  Q_DECL_DEPRECATED void setMetadataUrlType( const QString &metaUrlType ) SIP_DEPRECATED;
462 
472  Q_DECL_DEPRECATED QString metadataUrlType() const SIP_DEPRECATED;
473 
482  Q_DECL_DEPRECATED void setMetadataUrlFormat( const QString &metaUrlFormat ) SIP_DEPRECATED;
483 
493  Q_DECL_DEPRECATED QString metadataUrlFormat() const SIP_DEPRECATED;
494 
500  void setBlendMode( QPainter::CompositionMode blendMode );
501 
506  QPainter::CompositionMode blendMode() const;
507 
516  virtual void setOpacity( double opacity );
517 
526  virtual double opacity() const;
527 
529  bool readOnly() const { return isReadOnly(); }
530 
534  Q_INVOKABLE virtual void reload() {}
535 
541 
543  virtual QgsRectangle extent() const;
544 
553  QgsRectangle wgs84Extent( bool forceRecalculate = false ) const;
554 
560  bool isValid() const;
561 
568  QString publicSource() const;
569 
575  QString source() const;
576 
581  virtual QStringList subLayers() const;
582 
587  virtual void setLayerOrder( const QStringList &layers );
588 
594  virtual void setSubLayerVisibility( const QString &name, bool visible );
595 
602  virtual bool supportsEditing() const;
603 
605  virtual bool isEditable() const;
606 
612  virtual bool isModified() const;
613 
618  virtual bool isSpatial() const;
619 
629  virtual bool isTemporary() const;
630 
635  enum ReadFlag
636  {
637  FlagDontResolveLayers = 1 << 0,
638  FlagTrustLayerMetadata = 1 << 1,
639  FlagReadExtentFromXml = 1 << 2,
640  };
641  Q_DECLARE_FLAGS( ReadFlags, ReadFlag )
642 
643 
660  bool readLayerXml( const QDomElement &layerElement, QgsReadWriteContext &context, QgsMapLayer::ReadFlags flags = QgsMapLayer::ReadFlags() );
661 
679  bool writeLayerXml( QDomElement &layerElement, QDomDocument &document, const QgsReadWriteContext &context ) const;
680 
685  virtual void resolveReferences( QgsProject *project );
686 
692  Q_INVOKABLE QStringList customPropertyKeys() const;
693 
699  Q_INVOKABLE void setCustomProperty( const QString &key, const QVariant &value );
700 
705  Q_INVOKABLE QVariant customProperty( const QString &value, const QVariant &defaultValue = QVariant() ) const;
706 
711  void setCustomProperties( const QgsObjectCustomProperties &properties );
712 
718  const QgsObjectCustomProperties &customProperties() const;
719 
720 #ifndef SIP_RUN
721 
732  template <class T>
733  T customEnumProperty( const QString &key, const T &defaultValue )
734  {
735  const QMetaEnum metaEnum = QMetaEnum::fromType<T>();
736  Q_ASSERT( metaEnum.isValid() );
737  if ( !metaEnum.isValid() )
738  {
739  QgsDebugMsg( QStringLiteral( "Invalid metaenum. Enum probably misses Q_ENUM or Q_FLAG declaration." ) );
740  }
741 
742  T v;
743  bool ok = false;
744 
745  if ( metaEnum.isValid() )
746  {
747  // read as string
748  QByteArray ba = customProperty( key, metaEnum.valueToKey( static_cast<int>( defaultValue ) ) ).toString().toUtf8();
749  const char *vs = ba.data();
750  v = static_cast<T>( metaEnum.keyToValue( vs, &ok ) );
751  if ( ok )
752  return v;
753  }
754 
755  // if failed, try to read as int (old behavior)
756  // this code shall be removed later
757  // then the method could be marked as const
758  v = static_cast<T>( customProperty( key, static_cast<int>( defaultValue ) ).toInt( &ok ) );
759  if ( metaEnum.isValid() )
760  {
761  if ( !ok || !metaEnum.valueToKey( static_cast<int>( v ) ) )
762  {
763  v = defaultValue;
764  }
765  else
766  {
767  // found property as an integer
768  // convert the property to the new form (string)
769  setCustomEnumProperty( key, v );
770  }
771  }
772 
773  return v;
774  }
775 
784  template <class T>
785  void setCustomEnumProperty( const QString &key, const T &value )
786  {
787  const QMetaEnum metaEnum = QMetaEnum::fromType<T>();
788  Q_ASSERT( metaEnum.isValid() );
789  if ( metaEnum.isValid() )
790  {
791  setCustomProperty( key, metaEnum.valueToKey( static_cast<int>( value ) ) );
792  }
793  else
794  {
795  QgsDebugMsg( QStringLiteral( "Invalid metaenum. Enum probably misses Q_ENUM or Q_FLAG declaration." ) );
796  }
797  }
798 
810  template <class T>
811  T customFlagProperty( const QString &key, const T &defaultValue )
812  {
813  const QMetaEnum metaEnum = QMetaEnum::fromType<T>();
814  Q_ASSERT( metaEnum.isValid() );
815  if ( !metaEnum.isValid() )
816  {
817  QgsDebugMsg( QStringLiteral( "Invalid metaenum. Enum probably misses Q_ENUM or Q_FLAG declaration." ) );
818  }
819 
820  T v = defaultValue;
821  bool ok = false;
822 
823  if ( metaEnum.isValid() )
824  {
825  // read as string
826  QByteArray ba = customProperty( key, metaEnum.valueToKeys( defaultValue ) ).toString().toUtf8();
827  const char *vs = ba.data();
828  v = static_cast<T>( metaEnum.keysToValue( vs, &ok ) );
829  }
830  if ( !ok )
831  {
832  // if failed, try to read as int
833  const int intValue = customProperty( key, static_cast<int>( defaultValue ) ).toInt( &ok );
834  if ( metaEnum.isValid() )
835  {
836  if ( ok )
837  {
838  // check that the int value does correspond to a flag
839  // see https://stackoverflow.com/a/68495949/1548052
840  const QByteArray keys = metaEnum.valueToKeys( intValue );
841  const int intValueCheck = metaEnum.keysToValue( keys );
842  if ( intValue != intValueCheck )
843  {
844  v = defaultValue;
845  }
846  else
847  {
848  // found property as an integer
849  v = T( intValue );
850  // convert the property to the new form (string)
851  // this code could be removed
852  // then the method could be marked as const
853  setCustomFlagProperty( key, v );
854  }
855  }
856  else
857  {
858  v = defaultValue;
859  }
860  }
861  }
862 
863  return v;
864  }
865 
874  template <class T>
875  void setCustomFlagProperty( const QString &key, const T &value )
876  {
877  const QMetaEnum metaEnum = QMetaEnum::fromType<T>();
878  Q_ASSERT( metaEnum.isValid() );
879  if ( metaEnum.isValid() )
880  {
881  setCustomProperty( key, metaEnum.valueToKeys( value ) );
882  }
883  else
884  {
885  QgsDebugMsg( QStringLiteral( "Invalid metaenum. Enum probably misses Q_ENUM or Q_FLAG declaration." ) );
886  }
887  }
888 #endif
889 
890 
895  void removeCustomProperty( const QString &key );
896 
902  virtual QgsError error() const;
903 
909 
911  void setCrs( const QgsCoordinateReferenceSystem &srs, bool emitSignal = true );
912 
918  QgsCoordinateTransformContext transformContext( ) const;
919 
920 
926  static QString formatLayerName( const QString &name );
927 
935  virtual QString metadataUri() const;
936 
943  void exportNamedMetadata( QDomDocument &doc, QString &errorMsg ) const;
944 
954  virtual QString saveDefaultMetadata( bool &resultFlag SIP_OUT );
955 
970  QString saveNamedMetadata( const QString &uri, bool &resultFlag );
971 
986  virtual QString loadNamedMetadata( const QString &uri, bool &resultFlag SIP_OUT );
987 
997  virtual QString loadDefaultMetadata( bool &resultFlag );
998 
1007  bool loadNamedMetadataFromDatabase( const QString &db, const QString &uri, QString &qmd );
1008 
1016  bool importNamedMetadata( QDomDocument &document, QString &errorMessage );
1017 
1025  virtual QString styleURI() const;
1026 
1036  virtual QString loadDefaultStyle( bool &resultFlag SIP_OUT );
1037 
1053  virtual QString loadNamedStyle( const QString &uri, bool &resultFlag SIP_OUT, QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories );
1054 
1062  virtual bool loadNamedStyleFromDatabase( const QString &db, const QString &uri, QString &qml SIP_OUT );
1063 
1073  virtual bool importNamedStyle( QDomDocument &doc, QString &errorMsg SIP_OUT,
1074  QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories );
1075 
1084  virtual void exportNamedStyle( QDomDocument &doc, QString &errorMsg SIP_OUT, const QgsReadWriteContext &context = QgsReadWriteContext(),
1085  QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories ) const;
1086 
1087 
1094  virtual void exportSldStyle( QDomDocument &doc, QString &errorMsg ) const;
1095 
1105  virtual QString saveDefaultStyle( bool &resultFlag SIP_OUT );
1106 
1122  virtual QString saveNamedStyle( const QString &uri, bool &resultFlag SIP_OUT, StyleCategories categories = AllStyleCategories );
1123 
1132  virtual QString saveSldStyle( const QString &uri, bool &resultFlag ) const;
1133 
1142  virtual QString loadSldStyle( const QString &uri, bool &resultFlag );
1143 
1144  virtual bool readSld( const QDomNode &node, QString &errorMessage )
1145  { Q_UNUSED( node ) errorMessage = QStringLiteral( "Layer type %1 not supported" ).arg( static_cast<int>( type() ) ); return false; }
1146 
1147 
1148 
1157  virtual bool readSymbology( const QDomNode &node, QString &errorMessage,
1158  QgsReadWriteContext &context, StyleCategories categories = AllStyleCategories ) = 0;
1159 
1170  virtual bool readStyle( const QDomNode &node, QString &errorMessage,
1171  QgsReadWriteContext &context, StyleCategories categories = AllStyleCategories );
1172 
1183  virtual bool writeSymbology( QDomNode &node, QDomDocument &doc, QString &errorMessage, const QgsReadWriteContext &context,
1184  StyleCategories categories = AllStyleCategories ) const = 0;
1185 
1198  virtual bool writeStyle( QDomNode &node, QDomDocument &doc, QString &errorMessage, const QgsReadWriteContext &context,
1199  StyleCategories categories = AllStyleCategories ) const;
1200 
1201 
1216  void setDataSource( const QString &dataSource, const QString &baseName, const QString &provider, bool loadDefaultStyleFlag = false );
1217 
1231  void setDataSource( const QString &dataSource, const QString &baseName, const QString &provider, const QgsDataProvider::ProviderOptions &options, bool loadDefaultStyleFlag = false );
1232 
1247  void setDataSource( const QString &dataSource, const QString &baseName, const QString &provider, const QgsDataProvider::ProviderOptions &options, QgsDataProvider::ReadFlags flags );
1248 
1252  QString providerType() const;
1253 
1255  QUndoStack *undoStack();
1256 
1261  QUndoStack *undoStackStyles();
1262 
1266  void setLegendUrl( const QString &legendUrl ) { mLegendUrl = legendUrl; }
1267 
1271  QString legendUrl() const { return mLegendUrl; }
1272 
1276  void setLegendUrlFormat( const QString &legendUrlFormat ) { mLegendUrlFormat = legendUrlFormat; }
1277 
1281  QString legendUrlFormat() const { return mLegendUrlFormat; }
1282 
1288  void setLegend( QgsMapLayerLegend *legend SIP_TRANSFER );
1289 
1294  QgsMapLayerLegend *legend() const;
1295 
1300  QgsMapLayerStyleManager *styleManager() const;
1301 
1306  void setRenderer3D( QgsAbstract3DRenderer *renderer SIP_TRANSFER );
1307 
1312  QgsAbstract3DRenderer *renderer3D() const;
1313 
1323  bool isInScaleRange( double scale ) const;
1324 
1335  double minimumScale() const;
1336 
1347  double maximumScale() const;
1348 
1357  bool hasScaleBasedVisibility() const;
1358 
1365  bool hasAutoRefreshEnabled() const;
1366 
1374  int autoRefreshInterval() const;
1375 
1387  void setAutoRefreshInterval( int interval );
1388 
1395  void setAutoRefreshEnabled( bool enabled );
1396 
1403  virtual const QgsLayerMetadata &metadata() const;
1404 
1411  virtual void setMetadata( const QgsLayerMetadata &metadata );
1412 
1417  virtual QString htmlMetadata() const;
1418 
1420  virtual QDateTime timestamp() const;
1421 
1429  virtual QSet<QgsMapLayerDependency> dependencies() const;
1430 
1436  QString refreshOnNotifyMessage() const { return mRefreshOnNofifyMessage; }
1437 
1443  bool isRefreshOnNotifyEnabled() const { return mIsRefreshOnNofifyEnabled; }
1444 
1453  QString originalXmlProperties() const;
1454 
1462  void setOriginalXmlProperties( const QString &originalXmlProperties );
1463 
1468  static QString generateId( const QString &layerName );
1469 
1479  virtual bool accept( QgsStyleEntityVisitorInterface *visitor ) const;
1480 
1486  virtual QgsMapLayerTemporalProperties *temporalProperties() { return nullptr; }
1487 
1494 
1500  QString legendPlaceholderImage() const { return mLegendPlaceholderImage;}
1501 
1507  void setLegendPlaceholderImage( const QString &imgPath ) { mLegendPlaceholderImage = imgPath; }
1508 
1509  public slots:
1510 
1520  void setMinimumScale( double scale );
1521 
1531  void setMaximumScale( double scale );
1532 
1540  void setScaleBasedVisibility( bool enabled );
1541 
1550  void triggerRepaint( bool deferredUpdate = false );
1551 
1558  void trigger3DUpdate();
1559 
1564  void emitStyleChanged();
1565 
1574  virtual bool setDependencies( const QSet<QgsMapLayerDependency> &layers );
1575 
1581  void setRefreshOnNotifyEnabled( bool enabled );
1582 
1590  void setRefreshOnNofifyMessage( const QString &message ) { mRefreshOnNofifyMessage = message; }
1591 
1597  virtual void setTransformContext( const QgsCoordinateTransformContext &transformContext ) = 0;
1598 
1599 #ifdef SIP_RUN
1600  SIP_PYOBJECT __repr__();
1601  % MethodCode
1602  QString str = QStringLiteral( "<QgsMapLayer: '%1' (%2)>" ).arg( sipCpp->name(), sipCpp->dataProvider() ? sipCpp->dataProvider()->name() : QStringLiteral( "Invalid" ) );
1603  sipRes = PyUnicode_FromString( str.toUtf8().constData() );
1604  % End
1605 #endif
1606 
1613  QgsProject *project() const;
1614 
1615  signals:
1616 
1624 
1626  void statusChanged( const QString &status );
1627 
1633  void nameChanged();
1634 
1636  void crsChanged();
1637 
1644  void repaintRequested( bool deferredUpdate = false );
1645 
1647  void recalculateExtents() const;
1648 
1650  void dataChanged();
1651 
1653  void blendModeChanged( QPainter::CompositionMode blendMode );
1654 
1663  void opacityChanged( double opacity );
1664 
1670 
1683 
1689 
1695 
1702 
1708 
1713 
1721 
1727  void autoRefreshIntervalChanged( int interval );
1728 
1736 
1744 
1753 
1759  void styleLoaded( QgsMapLayer::StyleCategories categories );
1760 
1767 
1773  void customPropertyChanged( const QString &key );
1774 
1780 
1786 
1792 
1793  private slots:
1794 
1795  void onNotified( const QString &message );
1796 
1812  virtual void setDataSourcePrivate( const QString &dataSource, const QString &baseName, const QString &provider, const QgsDataProvider::ProviderOptions &options, QgsDataProvider::ReadFlags flags );
1813 
1814  protected:
1815 
1821  void clone( QgsMapLayer *layer ) const;
1822 
1824  virtual void setExtent( const QgsRectangle &rect );
1825 
1827  void setValid( bool valid );
1828 
1833  virtual bool readXml( const QDomNode &layer_node, QgsReadWriteContext &context );
1834 
1839  virtual bool writeXml( QDomNode &layer_node, QDomDocument &document, const QgsReadWriteContext &context ) const;
1840 
1852  virtual QString encodedSource( const QString &source, const QgsReadWriteContext &context ) const;
1853 
1866  virtual QString decodedSource( const QString &source, const QString &dataProvider, const QgsReadWriteContext &context ) const;
1867 
1873  void readCustomProperties( const QDomNode &layerNode, const QString &keyStartsWith = QString() );
1874 
1876  void writeCustomProperties( QDomNode &layerNode, QDomDocument &doc ) const;
1877 
1879  void readStyleManager( const QDomNode &layerNode );
1881  void writeStyleManager( QDomNode &layerNode, QDomDocument &doc ) const;
1882 
1887  void writeCommonStyle( QDomElement &layerElement, QDomDocument &document,
1888  const QgsReadWriteContext &context,
1889  StyleCategories categories = AllStyleCategories ) const;
1890 
1895  void readCommonStyle( const QDomElement &layerElement, const QgsReadWriteContext &context,
1896  StyleCategories categories = AllStyleCategories );
1897 
1899  void setProviderType( const QString &providerType );
1900 
1901 #ifndef SIP_RUN
1902 #if 0
1904  void connectNotify( const char *signal ) override;
1905 #endif
1906 #endif
1907 
1909  void appendError( const QgsErrorMessage &error ) { mError.append( error );}
1911  void setError( const QgsError &error ) { mError = error;}
1912 
1919  void invalidateWgs84Extent();
1920 
1922  bool mValid = false;
1923 
1925  QString mDataSource;
1926 
1928  QString mLayerName;
1929 
1930  QString mShortName;
1931  QString mTitle;
1932 
1934  QString mAbstract;
1935  QString mKeywordList;
1936 
1938  QString mDataUrl;
1940 
1942  QString mAttribution;
1944 
1946  QString mLegendUrl;
1948 
1951 
1953  QSet<QgsMapLayerDependency> mDependencies;
1954 
1960  Q_DECL_DEPRECATED bool hasDependencyCycle( const QSet<QgsMapLayerDependency> & ) const {return false;}
1961 
1962  bool mIsRefreshOnNofifyEnabled = false;
1964 
1966  QString mProviderKey;
1967 
1968  //TODO QGIS 4 - move to readXml as a new argument (breaks API)
1969 
1971  QgsMapLayer::ReadFlags mReadFlags = QgsMapLayer::ReadFlags();
1972 
1978  bool mShouldValidateCrs = true;
1979 
1985  double mLayerOpacity = 1.0;
1986 
1992  int mBlockStyleChangedSignal = 0;
1993 
1994 #ifndef SIP_RUN
1995 
2004  QString crsHtmlMetadata() const;
2005 #endif
2006 
2007 #ifndef SIP_RUN
2008 
2017  QString generalHtmlMetadata() const;
2018 #endif
2019 
2020  private:
2021 
2022  virtual QString baseURI( PropertyType type ) const;
2023  QString saveNamedProperty( const QString &uri, QgsMapLayer::PropertyType type,
2024  bool &resultFlag, StyleCategories categories = AllStyleCategories );
2025  QString loadNamedProperty( const QString &uri, QgsMapLayer::PropertyType type,
2026  bool &resultFlag, StyleCategories categories = AllStyleCategories );
2027  bool loadNamedPropertyFromDatabase( const QString &db, const QString &uri, QString &xml, QgsMapLayer::PropertyType type );
2028 
2029  // const method because extents are mutable
2030  void updateExtent( const QgsRectangle &extent ) const;
2031 
2036  virtual bool isReadOnly() const;
2037 
2043 
2045  QString mID;
2046 
2048  QgsMapLayerType mLayerType;
2049 
2050  LayerFlags mFlags = LayerFlags( Identifiable | Removable | Searchable );
2051 
2053  QPainter::CompositionMode mBlendMode = QPainter::CompositionMode_SourceOver;
2054 
2056  QString mTag;
2057 
2058  //set some generous defaults for scale based visibility
2059 
2061  double mMinScale = 0;
2063  double mMaxScale = 100000000;
2065  bool mScaleBasedVisibility = false;
2066 
2070  std::unique_ptr< QgsMapLayerServerProperties > mServerProperties;
2071 
2073  QUndoStack *mUndoStack = nullptr;
2074 
2075  QUndoStack *mUndoStackStyles = nullptr;
2076 
2078  QgsObjectCustomProperties mCustomProperties;
2079 
2081  QgsMapLayerLegend *mLegend = nullptr;
2082 
2084  QgsMapLayerStyleManager *mStyleManager = nullptr;
2085 
2087  QTimer *mRefreshTimer = nullptr;
2088 
2089  QgsLayerMetadata mMetadata;
2090 
2092  QgsAbstract3DRenderer *m3DRenderer = nullptr;
2093 
2095  mutable QgsRectangle mExtent;
2096 
2098  mutable QgsRectangle mWgs84Extent;
2099 
2105  QString mOriginalXmlProperties;
2106 
2108  bool mRepaintRequestedFired = false;
2109 
2111  QString mLegendPlaceholderImage;
2112 
2113  friend class QgsVectorLayer;
2114  friend class TestQgsMapLayer;
2115 };
2116 
2118 Q_DECLARE_OPERATORS_FOR_FLAGS( QgsMapLayer::LayerFlags )
2119 Q_DECLARE_OPERATORS_FOR_FLAGS( QgsMapLayer::StyleCategories )
2120 Q_DECLARE_OPERATORS_FOR_FLAGS( QgsMapLayer::ReadFlags )
2121 
2122 
2123 #ifndef SIP_RUN
2124 
2130 typedef QPointer< QgsMapLayer > QgsWeakMapLayerPointer;
2131 
2137 typedef QList< QgsWeakMapLayerPointer > QgsWeakMapLayerPointerList;
2138 #endif
2139 
2140 #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:1935
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:1281
void dependenciesChanged()
Emitted when dependencies are changed.
void setError(const QgsError &error)
Sets error message.
Definition: qgsmaplayer.h:1911
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:315
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:1266
void request3DUpdate()
Signal emitted when a layer requires an update in any 3D maps.
QgsError mError
Error.
Definition: qgsmaplayer.h:1950
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:811
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:1960
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:1500
QString attribution() const
Returns the attribution of the layer used by QGIS Server in GetCapabilities request.
Definition: qgsmaplayer.h:397
QString mRefreshOnNofifyMessage
Definition: qgsmaplayer.h:1963
QString mLegendUrl
WMS legend.
Definition: qgsmaplayer.h:1946
QString mLayerName
Name of the layer - used for display.
Definition: qgsmaplayer.h:1928
void setCustomFlagProperty(const QString &key, const T &value)
Set the value of a property based on a flag.
Definition: qgsmaplayer.h:875
void setAttributionUrl(const QString &attribUrl)
Sets the attribution URL of the layer used by QGIS Server in GetCapabilities request.
Definition: qgsmaplayer.h:406
const QgsMapLayerServerProperties * serverProperties() const
Returns QGIS Server Properties const for the map layer.
Definition: qgsmaplayer.h:429
void renderer3DChanged()
Signal emitted when 3D renderer associated with the layer has changed.
QString dataUrlFormat() const
Returns the DataUrl format of the layer used by QGIS Server in GetCapabilities request.
Definition: qgsmaplayer.h:377
QgsMapLayerServerProperties * serverProperties()
Returns QGIS Server Properties for the map layer.
Definition: qgsmaplayer.h:423
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:1931
void setDataUrl(const QString &dataUrl)
Sets the DataUrl of the layer used by QGIS Server in GetCapabilities request.
Definition: qgsmaplayer.h:350
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:331
void setAttribution(const QString &attrib)
Sets the attribution of the layer used by QGIS Server in GetCapabilities request.
Definition: qgsmaplayer.h:388
bool isRefreshOnNotifyEnabled() const
Returns true if the refresh on provider nofification is enabled.
Definition: qgsmaplayer.h:1443
QSet< QgsMapLayerDependency > mDependencies
List of layers that may modify this layer on modification.
Definition: qgsmaplayer.h:1953
void setDataUrlFormat(const QString &dataUrlFormat)
Sets the DataUrl format of the layer used by QGIS Server in GetCapabilities request.
Definition: qgsmaplayer.h:368
QString mLegendUrlFormat
Definition: qgsmaplayer.h:1947
virtual QgsMapLayerRenderer * createMapRenderer(QgsRenderContext &rendererContext)=0
Returns new instance of QgsMapLayerRenderer that will be used for rendering of given context.
QString mProviderKey
Data provider key (name of the data provider)
Definition: qgsmaplayer.h:1966
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:307
void crsChanged()
Emit a signal that layer's CRS has been reset.
QString mAttributionUrl
Definition: qgsmaplayer.h:1943
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:359
virtual QgsMapLayer * clone() const =0
Returns a new instance equivalent to this one except for the id which is still unique.
void setRefreshOnNofifyMessage(const QString &message)
Set the notification message that triggers repaint If refresh on notification is enabled,...
Definition: qgsmaplayer.h:1590
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.
QString mShortName
Definition: qgsmaplayer.h:1930
void dataChanged()
Data of layer changed.
void willBeDeleted()
Emitted in the destructor when the layer is about to be deleted, but it is still in a perfectly valid...
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:141
void setLegendPlaceholderImage(const QString &imgPath)
Set placeholder image for legend.
Definition: qgsmaplayer.h:1507
void appendError(const QgsErrorMessage &error)
Add error message.
Definition: qgsmaplayer.h:1909
QgsMapLayer & operator=(QgsMapLayer const &)=delete
QgsMapLayer cannot be copied.
QString mDataSource
Data source description string, varies by layer type.
Definition: qgsmaplayer.h:1925
QString refreshOnNotifyMessage() const
Returns the message that should be notified by the provider to triggerRepaint.
Definition: qgsmaplayer.h:1436
virtual bool readSld(const QDomNode &node, QString &errorMessage)
Definition: qgsmaplayer.h:1144
ReadFlag
Flags which control project read behavior.
Definition: qgsmaplayer.h:636
QString attributionUrl() const
Returns the attribution URL of the layer used by QGIS Server in GetCapabilities request.
Definition: qgsmaplayer.h:415
QString mAbstract
Description of the layer.
Definition: qgsmaplayer.h:1934
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:1271
QString mDataUrlFormat
Definition: qgsmaplayer.h:1939
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:1276
void beforeResolveReferences(QgsProject *project)
Emitted when all layers are loaded and references can be resolved, just before the references of this...
virtual void setTransformContext(const QgsCoordinateTransformContext &transformContext)=0
Sets the coordinate transform context to transformContext.
virtual QgsMapLayerElevationProperties * elevationProperties()
Returns the layer's elevation properties.
Definition: qgsmaplayer.h:1493
void nameChanged()
Emitted when the name has been changed.
QString mDataUrl
DataUrl of the layer.
Definition: qgsmaplayer.h:1938
T customEnumProperty(const QString &key, const T &defaultValue)
Returns the property value for a property based on an enum.
Definition: qgsmaplayer.h:733
StyleCategory
Categories of style to distinguish appropriate sections for import/export.
Definition: qgsmaplayer.h:156
@ AllStyleCategories
Definition: qgsmaplayer.h:175
void layerModified()
Emitted when modifications has been done on layer.
virtual Q_INVOKABLE void reload()
Synchronises with changes in the datasource.
Definition: qgsmaplayer.h:534
virtual QgsMapLayerTemporalProperties * temporalProperties()
Returns the layer's temporal properties.
Definition: qgsmaplayer.h:1486
QString mAttribution
Attribution of the layer.
Definition: qgsmaplayer.h:1942
void setCustomEnumProperty(const QString &key, const T &value)
Set the value of a property based on an enum.
Definition: qgsmaplayer.h:785
QString keywordList() const
Returns the keyword list of the layer used by QGIS Server in GetCapabilities request.
Definition: qgsmaplayer.h:339
void setTitle(const QString &title)
Sets the title of the layer used by QGIS Server in GetCapabilities request.
Definition: qgsmaplayer.h:299
PropertyType
Maplayer has a style and a metadata property.
Definition: qgsmaplayer.h:130
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:101
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
Added in 3.18.
@ MeshLayer
Added in 3.2.
@ VectorTileLayer
Added in 3.14.
@ AnnotationLayer
Contains freeform, georeferenced annotations. Added in QGIS 3.16.
#define str(x)
Definition: qgis.cpp:37
#define SIP_CONVERT_TO_SUBCLASS_CODE(code)
Definition: qgis_sip.h:177
#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:194
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:2130
QList< QgsWeakMapLayerPointer > QgsWeakMapLayerPointerList
A list of weak pointers to QgsMapLayers.
Definition: qgsmaplayer.h:2137
Q_DECLARE_METATYPE(QgsMeshTimeSettings)
const QgsCoordinateReferenceSystem & crs
Setting options for creating vector data providers.