26#include "moc_qgsmaplayerstore.cpp"
41 return mMapLayers.size();
49 const QList<QgsMapLayer *> cLayers = mMapLayers.values();
50 for (
const auto l : cLayers )
63 return mMapLayers.value( layerId );
70 QList<QgsMapLayer *> myResultList;
71 const auto constMMapLayers = mMapLayers;
74 if ( layer->name() == layerName )
76 myResultList << layer;
86 QList<QgsMapLayer *> myResultList;
87 const auto constLayers =
layers;
99 if ( mMapLayers.contains( myLayer->id() ) && ! mMapLayers[myLayer->id()]->isValid() && myLayer->isValid() && myLayer->dataProvider() )
101 mMapLayers[myLayer->id()]->setDataSource( myLayer->dataProvider()->dataSourceUri(), myLayer->name(), myLayer->providerType(),
QgsDataProvider::ProviderOptions() );
104 if ( !mMapLayers.contains( myLayer->id() ) )
106 mMapLayers[myLayer->id()] = myLayer;
107 myResultList << mMapLayers[myLayer->id()];
110 myLayer->setParent(
this );
112 connect( myLayer, &QObject::destroyed,
this, &QgsMapLayerStore::onMapLayerDeleted );
116 if ( !myResultList.isEmpty() )
128 QList<QgsMapLayer *> addedLayers;
129 addedLayers =
addMapLayers( QList<QgsMapLayer *>() << layer, takeOwnership );
130 return addedLayers.isEmpty() ? nullptr : addedLayers[0];
137 QList<QgsMapLayer *>
layers;
138 const auto constLayerIds = layerIds;
139 for (
const QString &myId : constLayerIds )
141 layers << mMapLayers.value( myId );
154 QStringList layerIds;
155 QList<QgsMapLayer *> layerList;
157 const auto constLayers =
layers;
161 if ( layer && mMapLayers.contains( layer->id() ) )
163 layerIds << layer->id();
168 if ( layerIds.isEmpty() )
174 const auto constLayerList = layerList;
177 const QString myId( lyr->id() );
180 mMapLayers.remove( myId );
181 if ( lyr->parent() ==
this )
195 removeMapLayers( QList<QgsMapLayer *>() << mMapLayers.value( layerId ) );
213 if ( mMapLayers.contains( layer->
id() ) )
220 mMapLayers.remove( layer->
id() );
221 layer->setParent(
nullptr );
244 if ( !other || other ==
this )
247 Q_ASSERT_X( other->thread() == thread(),
"QgsMapLayerStore::transferLayersFromStore",
"Cannot transfer layers from store with different thread affinity" );
249 const QMap<QString, QgsMapLayer *> otherLayers = other->
mapLayers();
250 QMap<QString, QgsMapLayer *>::const_iterator it = otherLayers.constBegin();
251 for ( ; it != otherLayers.constEnd(); ++it )
259void QgsMapLayerStore::onMapLayerDeleted( QObject *obj )
263 const QString
id = mMapLayers.key(
static_cast<QgsMapLayer *
>( obj ) );
267 QgsDebugError( QStringLiteral(
"Map layer deleted without unregistering! %1" ).arg(
id ) );
268 mMapLayers.remove(
id );
285 QMap<QString, QgsMapLayer *> validLayers;
286 for (
auto it = mMapLayers.constBegin(); it != mMapLayers.constEnd(); it++ )
288 if ( it.value()->isValid() )
289 validLayers[it.key()] = it.value();
int count() const
Returns the number of layers contained in the store.
QMap< QString, QgsMapLayer * > mapLayers() const
Returns a map of all layers by layer ID.
void removeAllMapLayers()
Removes all registered layers.
~QgsMapLayerStore() override
QgsMapLayerStore(QObject *parent=nullptr)
Constructor for QgsMapLayerStore.
void layersWillBeRemoved(const QStringList &layerIds)
Emitted when one or more layers are about to be removed from the store.
int validCount() const
Returns the number of valid layers contained in the store.
void removeMapLayer(const QString &id)
Remove a layer from the store by layer id.
void layerWillBeRemoved(const QString &layerId)
Emitted when a layer is about to be removed from the store.
QVector< T > layers() const
Returns a list of registered map layers with a specified layer type.
void layersRemoved(const QStringList &layerIds)
Emitted after one or more layers were removed from the store.
void allLayersRemoved()
Emitted when all layers are removed, before layersWillBeRemoved() and layerWillBeRemoved() signals ar...
void layerRemoved(const QString &layerId)
Emitted after a layer was removed from the store.
QgsMapLayer * takeMapLayer(QgsMapLayer *layer)
Takes a layer from the store.
void layerWasAdded(QgsMapLayer *layer)
Emitted when a layer was added to the store.
QList< QgsMapLayer * > mapLayersByName(const QString &name) const
Retrieve a list of matching layers by layer name.
void removeMapLayers(const QStringList &layerIds)
Remove a set of layers from the store by layer ID.
QMap< QString, QgsMapLayer * > validMapLayers() const
Returns a map of all valid layers by layer ID.
QgsMapLayer * mapLayer(const QString &id) const
Retrieve a pointer to a layer by layer id.
QgsMapLayer * addMapLayer(QgsMapLayer *layer, bool takeOwnership=true)
Add a layer to the store.
void transferLayersFromStore(QgsMapLayerStore *other)
Transfers all the map layers contained within another map layer store and adds them to this store.
void layersAdded(const QList< QgsMapLayer * > &layers)
Emitted when one or more layers were added to the store.
QList< QgsMapLayer * > addMapLayers(const QList< QgsMapLayer * > &layers, bool takeOwnership=true)
Add a list of layers to the store.
Base class for all map layer types.
#define QgsDebugError(str)
#define QGIS_CHECK_QOBJECT_THREAD_EQUALITY(other)
#define QGIS_PROTECT_QOBJECT_THREAD_ACCESS_NON_FATAL
#define QGIS_PROTECT_QOBJECT_THREAD_ACCESS
Setting options for creating vector data providers.