QGIS API Documentation 3.28.0-Firenze (ed3ad0430f)
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#include "qgsmessagelog.h"
20#include "qgsmaplayer.h"
21#include "qgsvectorlayer.h"
22#include "qgsrasterlayer.h"
23#include "qgsrasterrenderer.h"
25#include "qgsreadwritecontext.h"
26
27QgsLayerRestorer::QgsLayerRestorer( const QList<QgsMapLayer *> &layers )
28{
29 for ( QgsMapLayer *layer : layers )
30 {
31 QgsLayerSettings settings;
32 settings.name = layer->name();
33
34 settings.mNamedStyle = layer->styleManager()->currentStyle();
35
36 switch ( layer->type() )
37 {
39 {
40 QgsVectorLayer *vLayer = qobject_cast<QgsVectorLayer *>( layer );
41
42 if ( vLayer )
43 {
44 settings.mOpacity = vLayer->opacity();
45 settings.mSelectedFeatureIds = vLayer->selectedFeatureIds();
46 settings.mFilter = vLayer->subsetString();
47 }
48 break;
49 }
51 {
52 QgsRasterLayer *rLayer = qobject_cast<QgsRasterLayer *>( layer );
53
54 if ( rLayer )
55 {
56 settings.mOpacity = rLayer->renderer()->opacity();
57 }
58 break;
59 }
60
67 break;
68 }
69
70 mLayerSettings[layer] = settings;
71 }
72}
73
75{
76 for ( QgsMapLayer *layer : mLayerSettings.keys() )
77 {
78 // Firstly check if a SLD file has been loaded for rendering and removed it
79 const QString sldStyleName { layer->customProperty( "sldStyleName", "" ).toString() };
80 if ( !sldStyleName.isEmpty() )
81 {
82 layer->styleManager()->removeStyle( sldStyleName );
83 layer->removeCustomProperty( "sldStyleName" );
84 }
85
86 // Then restore the previous style
87 const QgsLayerSettings settings = mLayerSettings[layer];
88 layer->styleManager()->setCurrentStyle( settings.mNamedStyle );
89 layer->setName( mLayerSettings[layer].name );
90
91 switch ( layer->type() )
92 {
94 {
95 QgsVectorLayer *vLayer = qobject_cast<QgsVectorLayer *>( layer );
96
97 if ( vLayer )
98 {
99 vLayer->setOpacity( settings.mOpacity );
100 vLayer->selectByIds( settings.mSelectedFeatureIds );
101 vLayer->setSubsetString( settings.mFilter );
102 }
103 break;
104 }
106 {
107 QgsRasterLayer *rLayer = qobject_cast<QgsRasterLayer *>( layer );
108
109 if ( rLayer )
110 {
111 rLayer->renderer()->setOpacity( settings.mOpacity );
112 }
113 break;
114 }
115
122 break;
123 }
124 }
125}
126
127namespace QgsWms
128{
130 : mLayerRestorer( context.layers() )
131 {
132 }
133}
~QgsLayerRestorer()
Destructor.
QgsLayerRestorer(const QList< QgsMapLayer * > &layers)
Constructor for QgsLayerRestorer.
Base class for all map layer types.
Definition: qgsmaplayer.h:73
virtual void setOpacity(double opacity)
Sets the opacity for the layer, where opacity is a value between 0 (totally transparent) and 1....
double opacity
Definition: qgsmaplayer.h:82
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 data sets.
Q_INVOKABLE const QgsFeatureIds & selectedFeatureIds() const
Returns a list of the selected features IDs in this layer.
QString subsetString
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.
@ 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.
Median cut implementation.