Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsvectortilebasiclabeling.h 3 : : -------------------------------------- 4 : : Date : April 2020 5 : : Copyright : (C) 2020 by Martin Dobias 6 : : Email : wonder dot sk at gmail dot com 7 : : *************************************************************************** 8 : : * * 9 : : * This program is free software; you can redistribute it and/or modify * 10 : : * it under the terms of the GNU General Public License as published by * 11 : : * the Free Software Foundation; either version 2 of the License, or * 12 : : * (at your option) any later version. * 13 : : * * 14 : : ***************************************************************************/ 15 : : 16 : : #ifndef QGSVECTORTILEBASICLABELING_H 17 : : #define QGSVECTORTILEBASICLABELING_H 18 : : 19 : : 20 : : #include "qgsvectortilelabeling.h" 21 : : 22 : : 23 : : class QgsPalLayerSettings; 24 : : 25 : : /** 26 : : * \ingroup core 27 : : * \brief Configuration of a single style within QgsVectorTileBasicLabeling 28 : : * 29 : : * \since QGIS 3.14 30 : : */ 31 : 0 : class CORE_EXPORT QgsVectorTileBasicLabelingStyle 32 : : { 33 : : public: 34 : : 35 : : //! Sets labeling configuration of this style 36 : 0 : void setLabelSettings( const QgsPalLayerSettings &settings ) { mLabelSettings = settings; } 37 : : //! Returns labeling configuration of this style 38 : 0 : QgsPalLayerSettings labelSettings() const { return mLabelSettings; } 39 : : 40 : : //! Sets human readable name of this style 41 : 0 : void setStyleName( const QString &name ) { mStyleName = name; } 42 : : //! Returns human readable name of this style 43 : : QString styleName() const { return mStyleName; } 44 : : 45 : : //! Sets name of the sub-layer to render (empty layer means that all layers match) 46 : 0 : void setLayerName( const QString &name ) { mLayerName = name; } 47 : : //! Returns name of the sub-layer to render (empty layer means that all layers match) 48 : 0 : QString layerName() const { return mLayerName; } 49 : : 50 : : //! Sets type of the geometry that will be used (point / line / polygon) 51 : 0 : void setGeometryType( QgsWkbTypes::GeometryType geomType ) { mGeometryType = geomType; } 52 : : //! Returns type of the geometry that will be used (point / line / polygon) 53 : 0 : QgsWkbTypes::GeometryType geometryType() const { return mGeometryType; } 54 : : 55 : : //! Sets filter expression (empty filter means that all features match) 56 : 0 : void setFilterExpression( const QString &expr ) { mExpression = expr; } 57 : : //! Returns filter expression (empty filter means that all features match) 58 : 0 : QString filterExpression() const { return mExpression; } 59 : : 60 : : //! Sets whether this style is enabled (used for rendering) 61 : 0 : void setEnabled( bool enabled ) { mEnabled = enabled; } 62 : : //! Returns whether this style is enabled (used for rendering) 63 : : bool isEnabled() const { return mEnabled; } 64 : : 65 : : //! Sets minimum zoom level index (negative number means no limit) 66 : 0 : void setMinZoomLevel( int minZoom ) { mMinZoomLevel = minZoom; } 67 : : //! Returns minimum zoom level index (negative number means no limit) 68 : : int minZoomLevel() const { return mMinZoomLevel; } 69 : : 70 : : //! Sets maximum zoom level index (negative number means no limit) 71 : 0 : void setMaxZoomLevel( int maxZoom ) { mMaxZoomLevel = maxZoom; } 72 : : //! Returns maxnimum zoom level index (negative number means no limit) 73 : : int maxZoomLevel() const { return mMaxZoomLevel; } 74 : : 75 : : //! Returns whether the style is active at given zoom level (also checks "enabled" flag) 76 : 0 : bool isActive( int zoomLevel ) const 77 : : { 78 : 0 : return mEnabled && ( mMinZoomLevel == -1 || zoomLevel >= mMinZoomLevel ) && ( mMaxZoomLevel == -1 || zoomLevel <= mMaxZoomLevel ); 79 : : } 80 : : 81 : : //! Writes object content to given DOM element 82 : : void writeXml( QDomElement &elem, const QgsReadWriteContext &context ) const; 83 : : //! Reads object content from given DOM element 84 : : void readXml( const QDomElement &elem, const QgsReadWriteContext &context ); 85 : : 86 : : private: 87 : : QString mStyleName; 88 : : QString mLayerName; 89 : : QgsWkbTypes::GeometryType mGeometryType; 90 : 0 : bool mEnabled = true; 91 : : QString mExpression; 92 : 0 : int mMinZoomLevel = -1; 93 : 0 : int mMaxZoomLevel = -1; 94 : : 95 : : QgsPalLayerSettings mLabelSettings; 96 : : }; 97 : : 98 : : 99 : : /** 100 : : * \ingroup core 101 : : * \brief Basic labeling configuration for vector tile layers. It contains a definition 102 : : * of a list of labeling styles, where each labeling style is a combination of 103 : : * sub-layer name, geometry type, filter expression, zoom range and label settings. 104 : : * 105 : : * \since QGIS 3.14 106 : : */ 107 : 0 : class CORE_EXPORT QgsVectorTileBasicLabeling : public QgsVectorTileLabeling 108 : : { 109 : : public: 110 : : QgsVectorTileBasicLabeling(); 111 : : 112 : : QString type() const override; 113 : : QgsVectorTileLabeling *clone() const override SIP_FACTORY; 114 : : QgsVectorTileLabelProvider *provider( QgsVectorTileLayer *layer ) const override SIP_SKIP; 115 : : void writeXml( QDomElement &elem, const QgsReadWriteContext &context ) const override; 116 : : void readXml( const QDomElement &elem, const QgsReadWriteContext &context ) override; 117 : : 118 : : //! Sets list of styles of the renderer 119 : 0 : void setStyles( const QList<QgsVectorTileBasicLabelingStyle> &styles ) { mStyles = styles; } 120 : : //! Returns list of styles of the renderer 121 : 0 : QList<QgsVectorTileBasicLabelingStyle> styles() const { return mStyles; } 122 : : //! Updates style definition at the paricular index of the list (the index must be in interval [0,N-1] otherwise this function does nothing) 123 : : void setStyle( int index, const QgsVectorTileBasicLabelingStyle &style ) { mStyles[index] = style; } 124 : : //! Returns style definition at the particular index 125 : : QgsVectorTileBasicLabelingStyle style( int index ) const { return mStyles[index]; } 126 : : 127 : : private: 128 : : //! List of rendering styles 129 : : QList<QgsVectorTileBasicLabelingStyle> mStyles; 130 : : }; 131 : : 132 : : 133 : : #ifndef SIP_RUN 134 : : 135 : : /** 136 : : * \ingroup core 137 : : * \brief Implementation class for QgsVectorTileBasicLabeling 138 : : * 139 : : * \since QGIS 3.14 140 : : */ 141 : 0 : class QgsVectorTileBasicLabelProvider : public QgsVectorTileLabelProvider 142 : : { 143 : : public: 144 : : //! Constructs a label provider for the given vector tile layer and using styling from QgsVectorTileBasicLabeling 145 : : QgsVectorTileBasicLabelProvider( QgsVectorTileLayer *layer, const QList<QgsVectorTileBasicLabelingStyle> &styles ); 146 : : 147 : : QList<QgsAbstractLabelProvider *> subProviders() override; 148 : : bool prepare( QgsRenderContext &context, QSet<QString> &attributeNames ) override; 149 : : 150 : : // virtual functions from QgsVectorTileLabelProvider 151 : : void registerTileFeatures( const QgsVectorTileRendererData &tile, QgsRenderContext &context ) override; 152 : : QMap<QString, QSet<QString> > usedAttributes( const QgsRenderContext &context, int tileZoom ) const override; 153 : : QSet< QString > requiredLayers( QgsRenderContext &context, int tileZoom ) const override; 154 : : void setFields( const QMap<QString, QgsFields> &perLayerFields ) override; 155 : : 156 : : private: 157 : : QList<QgsVectorTileBasicLabelingStyle> mStyles; 158 : : 159 : : //! Label providers - one for each style 160 : : QList<QgsVectorLayerLabelProvider *> mSubProviders; 161 : : 162 : : public: 163 : : //! Names of required fields for each sub-layer (only valid between startRender/stopRender calls) 164 : : QMap<QString, QgsFields> mPerLayerFields; 165 : : }; 166 : : 167 : : /// @endcond 168 : : #endif 169 : : 170 : : 171 : : #endif // QGSVECTORTILEBASICLABELING_H