Skip to content

Commit 4d67951

Browse files
committed
Add API to QgsMapLayerRegistry to rely less on ids
1 parent 17bd46e commit 4d67951

File tree

3 files changed

+126
-12
lines changed

3 files changed

+126
-12
lines changed

python/core/qgsmaplayerregistry.sip

+47-1
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,21 @@ class QgsMapLayerRegistry : QObject
9595
*/
9696
void removeMapLayers( const QStringList& theLayerIds );
9797

98+
/**
99+
* @brief
100+
* Remove a set of layers from the registry
101+
*
102+
* Any canvases using the affected layers will need to remove them
103+
*
104+
* The layers being removed are deleted as well as the registry
105+
* table entries.
106+
*
107+
* @param layers The layers to remove
108+
*
109+
* @note As a side-effect QgsProject is made dirty.
110+
*/
111+
void removeMapLayers( const QList<QgsMapLayer*>& theLayerIds );
112+
98113
/**
99114
* @brief
100115
* Remove a layer from qgis
@@ -110,6 +125,21 @@ class QgsMapLayerRegistry : QObject
110125
*/
111126
void removeMapLayer( const QString& theLayerId );
112127

128+
/**
129+
* @brief
130+
* Remove a layer from qgis
131+
*
132+
* Any canvases using the affected layers will need to remove them
133+
*
134+
* The layer being removed is deleted as well as the registry
135+
* table entry.
136+
*
137+
* @param layer The layer to remove
138+
*
139+
* @note As a side-effect QgsProject is made dirty.
140+
*/
141+
void removeMapLayer( QgsMapLayer* layer );
142+
113143
/**
114144
* Remove all registered layers
115145
*
@@ -141,14 +171,30 @@ class QgsMapLayerRegistry : QObject
141171
void layersWillBeRemoved( const QStringList& theLayerIds );
142172

143173
/**
144-
* Emitted when a layer is removed from the registry
174+
* Emitted when one or more layers are removed from the registry
175+
*
176+
* @param theLayerIds A list layers which are removed.
177+
*/
178+
void layersWillBeRemoved( const QList<QgsMapLayer*>& layer );
179+
180+
/**
181+
* Emitted when an owned layer is removed from the registry
145182
*
146183
* @param theLayerId The id of the layer being removed
147184
*
148185
* @note Consider using {@link layersWillBeRemoved()} instead
149186
*/
150187
void layerWillBeRemoved( const QString& theLayerId );
151188

189+
/**
190+
* Emitted when an owned layer is removed from the registry
191+
*
192+
* @param layer The layer being removed
193+
*
194+
* @note Consider using {@link layersWillBeRemoved()} instead
195+
*/
196+
void layerWillBeRemoved( QgsMapLayer* layer );
197+
152198
/**
153199
* Emitted after one or more layers were removed from the registry
154200
*

src/core/qgsmaplayerregistry.cpp

+31-9
Original file line numberDiff line numberDiff line change
@@ -116,26 +116,52 @@ QgsMapLayerRegistry::addMapLayer( QgsMapLayer* theMapLayer,
116116
//introduced in 1.8
117117
void QgsMapLayerRegistry::removeMapLayers( const QStringList& theLayerIds )
118118
{
119-
emit layersWillBeRemoved( theLayerIds );
120-
119+
QList<QgsMapLayer*> layers;
121120
Q_FOREACH ( const QString &myId, theLayerIds )
122121
{
123-
QgsMapLayer* lyr = mMapLayers[myId];
122+
layers << mMapLayers[myId];
123+
}
124+
125+
removeMapLayers( layers );
126+
}
127+
128+
void QgsMapLayerRegistry::removeMapLayers( const QList<QgsMapLayer*>& layers )
129+
{
130+
QStringList layerIds;
131+
132+
Q_FOREACH ( QgsMapLayer* layer, layers )
133+
{
134+
layerIds << layer->id();
135+
}
136+
137+
emit layersWillBeRemoved( layerIds );
138+
emit layersWillBeRemoved( layers );
139+
140+
Q_FOREACH ( QgsMapLayer* lyr, layers )
141+
{
142+
QString myId( lyr->id() );
124143
if ( mOwnedLayers.contains( lyr ) )
125144
{
126145
emit layerWillBeRemoved( myId );
146+
emit layerWillBeRemoved( lyr );
127147
delete lyr;
128148
mOwnedLayers.remove( lyr );
129149
}
130150
mMapLayers.remove( myId );
131151
emit layerRemoved( myId );
132152
}
133-
emit layersRemoved( theLayerIds );
153+
154+
emit layersRemoved( layerIds );
134155
}
135156

136157
void QgsMapLayerRegistry::removeMapLayer( const QString& theLayerId )
137158
{
138-
removeMapLayers( QStringList( theLayerId ) );
159+
removeMapLayers( QList<QgsMapLayer*>() << mMapLayers[theLayerId] );
160+
}
161+
162+
void QgsMapLayerRegistry::removeMapLayer( QgsMapLayer* layer )
163+
{
164+
removeMapLayers( QList<QgsMapLayer*>() << layer );
139165
}
140166

141167
void QgsMapLayerRegistry::removeAllMapLayers()
@@ -147,10 +173,6 @@ void QgsMapLayerRegistry::removeAllMapLayers()
147173
mMapLayers.clear();
148174
} // QgsMapLayerRegistry::removeAllMapLayers()
149175

150-
void QgsMapLayerRegistry::clearAllLayerCaches()
151-
{
152-
}
153-
154176
void QgsMapLayerRegistry::reloadAllLayers()
155177
{
156178
QMap<QString, QgsMapLayer *>::iterator it;

src/core/qgsmaplayerregistry.h

+48-2
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,21 @@ class CORE_EXPORT QgsMapLayerRegistry : public QObject
120120
*/
121121
void removeMapLayers( const QStringList& theLayerIds );
122122

123+
/**
124+
* @brief
125+
* Remove a set of layers from the registry
126+
*
127+
* Any canvases using the affected layers will need to remove them
128+
*
129+
* The layers being removed are deleted as well as the registry
130+
* table entries.
131+
*
132+
* @param layers The layers to remove
133+
*
134+
* @note As a side-effect QgsProject is made dirty.
135+
*/
136+
void removeMapLayers( const QList<QgsMapLayer*>& theLayerIds );
137+
123138
/**
124139
* @brief
125140
* Remove a layer from qgis
@@ -135,6 +150,21 @@ class CORE_EXPORT QgsMapLayerRegistry : public QObject
135150
*/
136151
void removeMapLayer( const QString& theLayerId );
137152

153+
/**
154+
* @brief
155+
* Remove a layer from qgis
156+
*
157+
* Any canvases using the affected layers will need to remove them
158+
*
159+
* The layer being removed is deleted as well as the registry
160+
* table entry.
161+
*
162+
* @param layer The layer to remove
163+
*
164+
* @note As a side-effect QgsProject is made dirty.
165+
*/
166+
void removeMapLayer( QgsMapLayer* layer );
167+
138168
/**
139169
* Remove all registered layers
140170
*
@@ -150,7 +180,7 @@ class CORE_EXPORT QgsMapLayerRegistry : public QObject
150180
* see ticket #1974 for more details.
151181
*/
152182
//! @deprecated since 2.4 - does nothing
153-
Q_DECL_DEPRECATED void clearAllLayerCaches();
183+
Q_DECL_DEPRECATED void clearAllLayerCaches() {}
154184

155185
/**
156186
* Reload all provider data caches (currently used for WFS and WMS providers)
@@ -166,14 +196,30 @@ class CORE_EXPORT QgsMapLayerRegistry : public QObject
166196
void layersWillBeRemoved( const QStringList& theLayerIds );
167197

168198
/**
169-
* Emitted when a layer is removed from the registry
199+
* Emitted when one or more layers are removed from the registry
200+
*
201+
* @param theLayerIds A list layers which are removed.
202+
*/
203+
void layersWillBeRemoved( const QList<QgsMapLayer*>& layer );
204+
205+
/**
206+
* Emitted when an owned layer is removed from the registry
170207
*
171208
* @param theLayerId The id of the layer being removed
172209
*
173210
* @note Consider using {@link layersWillBeRemoved()} instead
174211
*/
175212
void layerWillBeRemoved( const QString& theLayerId );
176213

214+
/**
215+
* Emitted when an owned layer is removed from the registry
216+
*
217+
* @param layer The layer being removed
218+
*
219+
* @note Consider using {@link layersWillBeRemoved()} instead
220+
*/
221+
void layerWillBeRemoved( QgsMapLayer* layer );
222+
177223
/**
178224
* Emitted after one or more layers were removed from the registry
179225
*

0 commit comments

Comments
 (0)