QGIS API Documentation  3.26.3-Buenos Aires (65e4edfdad)
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
6  email : [email protected]
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 
27 QgsLayerRestorer::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 
127 namespace QgsWms
128 {
130  : mLayerRestorer( context.layers() )
131  {
132  }
133 }
QgsVectorLayer::selectByIds
Q_INVOKABLE void selectByIds(const QgsFeatureIds &ids, Qgis::SelectBehavior behavior=Qgis::SelectBehavior::SetSelection)
Selects matching features using a list of feature IDs.
Definition: qgsvectorlayer.cpp:572
qgsmaplayerstylemanager.h
qgsrasterlayer.h
QgsMapLayerType::MeshLayer
@ MeshLayer
Mesh layer. Added in QGIS 3.2.
QgsMapLayerType::VectorLayer
@ VectorLayer
Vector layer.
QgsMapLayer::opacity
double opacity
Definition: qgsmaplayer.h:82
qgsreadwritecontext.h
QgsMapLayerType::AnnotationLayer
@ AnnotationLayer
Contains freeform, georeferenced annotations. Added in QGIS 3.16.
qgsrasterrenderer.h
QgsWms::QgsWmsRenderContext
Rendering context for the WMS renderer.
Definition: qgswmsrendercontext.h:47
qgswmsrestorer.h
QgsRasterLayer::renderer
QgsRasterRenderer * renderer() const
Returns the raster's renderer.
Definition: qgsrasterlayer.cpp:1758
QgsMapLayerType::GroupLayer
@ GroupLayer
Composite group layer. Added in QGIS 3.24.
qgsmaplayer.h
QgsMapLayerType::RasterLayer
@ RasterLayer
Raster layer.
QgsVectorLayer::selectedFeatureIds
const Q_INVOKABLE QgsFeatureIds & selectedFeatureIds() const
Returns a list of the selected features IDs in this layer.
Definition: qgsvectorlayer.cpp:3621
QgsMapLayer::setOpacity
virtual void setOpacity(double opacity)
Sets the opacity for the layer, where opacity is a value between 0 (totally transparent) and 1....
Definition: qgsmaplayer.cpp:325
QgsRasterLayer
Represents a raster layer.
Definition: qgsrasterlayer.h:76
qgsvectorlayer.h
QgsWms
Median cut implementation.
Definition: qgsdxfwriter.cpp:22
QgsWms::QgsWmsRestorer::QgsWmsRestorer
QgsWmsRestorer(const QgsWmsRenderContext &context)
Constructor for QgsWmsRestorer.
Definition: qgswmsrestorer.cpp:129
QgsLayerRestorer::QgsLayerRestorer
QgsLayerRestorer(const QList< QgsMapLayer * > &layers)
Constructor for QgsLayerRestorer.
Definition: qgswmsrestorer.cpp:27
QgsVectorLayer
Represents a vector layer which manages a vector based data sets.
Definition: qgsvectorlayer.h:391
QgsMapLayer
Base class for all map layer types. This is the base class for all map layer types (vector,...
Definition: qgsmaplayer.h:72
QgsMapLayerType::VectorTileLayer
@ VectorTileLayer
Vector tile layer. Added in QGIS 3.14.
QgsVectorLayer::subsetString
QString subsetString
Definition: qgsvectorlayer.h:395
QgsLayerRestorer::~QgsLayerRestorer
~QgsLayerRestorer()
Destructor.
Definition: qgswmsrestorer.cpp:74
QgsRasterRenderer::setOpacity
void setOpacity(double opacity)
Sets the opacity for the renderer, where opacity is a value between 0 (totally transparent) and 1....
Definition: qgsrasterrenderer.h:83
QgsMapLayerType::PointCloudLayer
@ PointCloudLayer
Point cloud layer. Added in QGIS 3.18.
QgsMapLayerType::PluginLayer
@ PluginLayer
Plugin based layer.
QgsVectorLayer::setSubsetString
virtual bool setSubsetString(const QString &subset)
Sets the string (typically sql) used to define a subset of the layer.
Definition: qgsvectorlayer.cpp:1002
qgsmessagelog.h
QgsRasterRenderer::opacity
double opacity() const
Returns the opacity for the renderer, where opacity is a value between 0 (totally transparent) and 1....
Definition: qgsrasterrenderer.h:90