QGIS API Documentation 3.99.0-Master (2fe06baccd8)
Loading...
Searching...
No Matches
qgswmsrestorer.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgswmsrestorer.cpp
3 ------------------
4 begin : April 24, 2017
5 copyright : (C) 2017 by Paul Blottiere
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#include "qgswmsrestorer.h"
19
20#include "qgsmaplayer.h"
22#include "qgsmessagelog.h"
23#include "qgsrasterlayer.h"
24#include "qgsrasterrenderer.h"
25#include "qgsreadwritecontext.h"
26#include "qgsvectorlayer.h"
27
28QgsLayerRestorer::QgsLayerRestorer( const QList<QgsMapLayer *> &layers )
29{
30 for ( QgsMapLayer *layer : layers )
31 {
32 mLayerSettings.emplace( layer, QgsLayerSettings() );
33 QgsLayerSettings &settings = mLayerSettings[layer];
34
35 settings.name = layer->name();
36 settings.mNamedStyle = layer->styleManager()->currentStyle();
37
38 switch ( layer->type() )
39 {
41 {
42 QgsVectorLayer *vLayer = qobject_cast<QgsVectorLayer *>( layer );
43
44 if ( vLayer )
45 {
46 settings.mOpacity = vLayer->opacity();
47 settings.mSelectedFeatureIds = vLayer->selectedFeatureIds();
48 settings.mFilter = vLayer->subsetString();
49 // Labeling opacity
50 if ( vLayer->labelsEnabled() && vLayer->labeling() )
51 {
52 settings.mLabeling.reset( vLayer->labeling()->clone() );
53 }
54 }
55 break;
56 }
58 {
59 QgsRasterLayer *rLayer = qobject_cast<QgsRasterLayer *>( layer );
60
61 if ( rLayer && rLayer->renderer() )
62 {
63 settings.mOpacity = rLayer->renderer()->opacity();
64 }
65 break;
66 }
67
75 break;
76 }
77 }
78}
79
81{
82 for ( auto it = mLayerSettings.begin(); it != mLayerSettings.end(); it++ )
83 {
84 QgsMapLayer *layer = it->first;
85
86 // Firstly check if a SLD file has been loaded for rendering and removed it
87 const QString sldStyleName { layer->customProperty( "sldStyleName", "" ).toString() };
88 if ( !sldStyleName.isEmpty() )
89 {
90 layer->styleManager()->removeStyle( sldStyleName );
91 layer->removeCustomProperty( "sldStyleName" );
92 }
93
94 // Then restore the previous style
95 QgsLayerSettings &settings = it->second;
96 layer->styleManager()->setCurrentStyle( settings.mNamedStyle );
97 layer->setName( settings.name );
98
99 switch ( layer->type() )
100 {
102 {
103 QgsVectorLayer *vLayer = qobject_cast<QgsVectorLayer *>( layer );
104
105 if ( vLayer )
106 {
107 vLayer->setOpacity( settings.mOpacity );
108 vLayer->selectByIds( settings.mSelectedFeatureIds );
109 vLayer->setSubsetString( settings.mFilter );
110 if ( settings.mLabeling )
111 {
112 vLayer->setLabeling( settings.mLabeling.release() );
113 }
114 }
115 break;
116 }
118 {
119 QgsRasterLayer *rLayer = qobject_cast<QgsRasterLayer *>( layer );
120
121 if ( rLayer && rLayer->renderer() )
122 {
123 rLayer->renderer()->setOpacity( settings.mOpacity );
124 }
125 break;
126 }
127
135 break;
136 }
137 }
138}
139
140namespace QgsWms
141{
143 : mLayerRestorer( context.layers() )
144 {
145 }
146} // namespace QgsWms
@ Group
Composite group layer. Added in QGIS 3.24.
Definition qgis.h:198
@ Plugin
Plugin based layer.
Definition qgis.h:193
@ TiledScene
Tiled scene layer. Added in QGIS 3.34.
Definition qgis.h:199
@ Annotation
Contains freeform, georeferenced annotations. Added in QGIS 3.16.
Definition qgis.h:196
@ Vector
Vector layer.
Definition qgis.h:191
@ VectorTile
Vector tile layer. Added in QGIS 3.14.
Definition qgis.h:195
@ Mesh
Mesh layer. Added in QGIS 3.2.
Definition qgis.h:194
@ Raster
Raster layer.
Definition qgis.h:192
@ PointCloud
Point cloud layer. Added in QGIS 3.18.
Definition qgis.h:197
virtual QgsAbstractVectorLayerLabeling * clone() const =0
Returns a new copy of the object.
~QgsLayerRestorer()
Destructor.
QgsLayerRestorer(const QList< QgsMapLayer * > &layers)
Constructor for QgsLayerRestorer.
bool removeStyle(const QString &name)
Remove a stored style.
bool setCurrentStyle(const QString &name)
Set a different style as the current style - will apply it to the layer.
Base class for all map layer types.
Definition qgsmaplayer.h:80
Q_INVOKABLE QVariant customProperty(const QString &value, const QVariant &defaultValue=QVariant()) const
Read a custom property from layer.
void removeCustomProperty(const QString &key)
Remove a custom property from layer.
Qgis::LayerType type
Definition qgsmaplayer.h:90
virtual void setOpacity(double opacity)
Sets the opacity for the layer, where opacity is a value between 0 (totally transparent) and 1....
void setName(const QString &name)
Set the display name of the layer.
QgsMapLayerStyleManager * styleManager() const
Gets access to the layer's style manager.
double opacity
Definition qgsmaplayer.h:92
Represents a raster layer.
QgsRasterRenderer * renderer() const
Returns the raster's renderer.
double opacity() const
Returns the opacity for the renderer, where opacity is a value between 0 (totally transparent) and 1....
void setOpacity(double opacity)
Sets the opacity for the renderer, where opacity is a value between 0 (totally transparent) and 1....
Represents a vector layer which manages a vector based dataset.
void setLabeling(QgsAbstractVectorLayerLabeling *labeling)
Sets labeling configuration.
bool labelsEnabled() const
Returns whether the layer contains labels which are enabled and should be drawn.
Q_INVOKABLE const QgsFeatureIds & selectedFeatureIds() const
Returns a list of the selected features IDs in this layer.
const QgsAbstractVectorLayerLabeling * labeling() const
Access to const labeling configuration.
Q_INVOKABLE void selectByIds(const QgsFeatureIds &ids, Qgis::SelectBehavior behavior=Qgis::SelectBehavior::SetSelection)
Selects matching features using a list of feature IDs.
virtual bool setSubsetString(const QString &subset)
Sets the string (typically sql) used to define a subset of the layer.
Rendering context for the WMS renderer.
QgsWmsRestorer(const QgsWmsRenderContext &context)
Constructor for QgsWmsRestorer.
Median cut implementation.