46
46
#include " qgssettings.h"
47
47
#include " qgsmaplayerlistutils.h"
48
48
#include " qgslayoutmanager.h"
49
+ #include " qgsmaplayerstore.h"
49
50
50
51
#include < QApplication>
51
52
#include < QFileInfo>
@@ -322,6 +323,7 @@ void removeKey_( const QString &scope,
322
323
323
324
QgsProject::QgsProject ( QObject *parent )
324
325
: QObject( parent )
326
+ , mLayerStore( new QgsMapLayerStore( this ) )
325
327
, mBadLayerHandler( new QgsProjectBadLayerHandler() )
326
328
, mSnappingConfig( this )
327
329
, mRelationManager( new QgsRelationManager( this ) )
@@ -343,6 +345,21 @@ QgsProject::QgsProject( QObject *parent )
343
345
connect ( this , &QgsProject::layersAdded, this , &QgsProject::onMapLayersAdded );
344
346
connect ( this , &QgsProject::layersRemoved, this , [ = ] { cleanTransactionGroups (); } );
345
347
connect ( this , static_cast < void ( QgsProject::* )( const QList<QgsMapLayer *> & ) >( &QgsProject::layersWillBeRemoved ), this , &QgsProject::onMapLayersRemoved );
348
+
349
+ // proxy map layer store signals to this
350
+ connect ( mLayerStore .get (), static_cast <void ( QgsMapLayerStore::* )( const QStringList & )>( &QgsMapLayerStore::layersWillBeRemoved ),
351
+ this , static_cast <void ( QgsProject::* )( const QStringList & )>( &QgsProject::layersWillBeRemoved ) );
352
+ connect ( mLayerStore .get (), static_cast <void ( QgsMapLayerStore::* )( const QList<QgsMapLayer *> & )>( &QgsMapLayerStore::layersWillBeRemoved ),
353
+ this , static_cast <void ( QgsProject::* )( const QList<QgsMapLayer *> & )>( &QgsProject::layersWillBeRemoved ) );
354
+ connect ( mLayerStore .get (), static_cast <void ( QgsMapLayerStore::* )( const QString & )>( &QgsMapLayerStore::layerWillBeRemoved ),
355
+ this , static_cast <void ( QgsProject::* )( const QString & )>( &QgsProject::layerWillBeRemoved ) );
356
+ connect ( mLayerStore .get (), static_cast <void ( QgsMapLayerStore::* )( QgsMapLayer * )>( &QgsMapLayerStore::layerWillBeRemoved ),
357
+ this , static_cast <void ( QgsProject::* )( QgsMapLayer * )>( &QgsProject::layerWillBeRemoved ) );
358
+ connect ( mLayerStore .get (), static_cast <void ( QgsMapLayerStore::* )( const QStringList & )>( &QgsMapLayerStore::layersRemoved ), this , &QgsProject::layersRemoved );
359
+ connect ( mLayerStore .get (), &QgsMapLayerStore::layerRemoved, this , &QgsProject::layerRemoved );
360
+ connect ( mLayerStore .get (), &QgsMapLayerStore::allLayersRemoved, this , &QgsProject::removeAll );
361
+ connect ( mLayerStore .get (), &QgsMapLayerStore::layersAdded, this , &QgsProject::layersAdded );
362
+ connect ( mLayerStore .get (), &QgsMapLayerStore::layerWasAdded, this , &QgsProject::layerWasAdded );
346
363
}
347
364
348
365
@@ -884,7 +901,8 @@ bool QgsProject::read()
884
901
885
902
// Resolve references to other vector layers
886
903
// Needs to be done here once all dependent layers are loaded
887
- for ( QMap<QString, QgsMapLayer *>::iterator it = mMapLayers .begin (); it != mMapLayers .end (); it++ )
904
+ QMap<QString, QgsMapLayer *> layers = mLayerStore ->mapLayers ();
905
+ for ( QMap<QString, QgsMapLayer *>::iterator it = layers.begin (); it != layers.end (); it++ )
888
906
{
889
907
if ( QgsVectorLayer *vl = qobject_cast<QgsVectorLayer *>( it.value () ) )
890
908
vl->resolveReferences ( this );
@@ -2066,63 +2084,33 @@ QMap<QPair<QString, QString>, QgsTransactionGroup *> QgsProject::transactionGrou
2066
2084
2067
2085
2068
2086
//
2069
- // QgsMapLayerRegistry methods
2087
+ // QgsMapLayerStore methods
2070
2088
//
2071
2089
2072
2090
2073
2091
int QgsProject::count () const
2074
2092
{
2075
- return mMapLayers . size ();
2093
+ return mLayerStore -> count ();
2076
2094
}
2077
2095
2078
2096
QgsMapLayer *QgsProject::mapLayer ( const QString &layerId ) const
2079
2097
{
2080
- return mMapLayers . value ( layerId );
2098
+ return mLayerStore -> mapLayer ( layerId );
2081
2099
}
2082
2100
2083
2101
QList<QgsMapLayer *> QgsProject::mapLayersByName ( const QString &layerName ) const
2084
2102
{
2085
- QList<QgsMapLayer *> myResultList;
2086
- Q_FOREACH ( QgsMapLayer *layer, mMapLayers )
2087
- {
2088
- if ( layer->name () == layerName )
2089
- {
2090
- myResultList << layer;
2091
- }
2092
- }
2093
- return myResultList;
2103
+ return mLayerStore ->mapLayersByName ( layerName );
2094
2104
}
2095
2105
2096
2106
QList<QgsMapLayer *> QgsProject::addMapLayers (
2097
2107
const QList<QgsMapLayer *> &layers,
2098
2108
bool addToLegend,
2099
2109
bool takeOwnership )
2100
2110
{
2101
- QList<QgsMapLayer *> myResultList;
2102
- Q_FOREACH ( QgsMapLayer *myLayer, layers )
2103
- {
2104
- if ( !myLayer || !myLayer->isValid () )
2105
- {
2106
- QgsDebugMsg ( " Cannot add invalid layers" );
2107
- continue ;
2108
- }
2109
- // check the layer is not already registered!
2110
- if ( !mMapLayers .contains ( myLayer->id () ) )
2111
- {
2112
- mMapLayers [myLayer->id ()] = myLayer;
2113
- myResultList << mMapLayers [myLayer->id ()];
2114
- if ( takeOwnership )
2115
- {
2116
- myLayer->setParent ( this );
2117
- }
2118
- connect ( myLayer, &QObject::destroyed, this , &QgsProject::onMapLayerDeleted );
2119
- emit layerWasAdded ( myLayer );
2120
- }
2121
- }
2111
+ QList<QgsMapLayer *> myResultList = mLayerStore ->addMapLayers ( layers, takeOwnership );
2122
2112
if ( !myResultList.isEmpty () )
2123
2113
{
2124
- emit layersAdded ( myResultList );
2125
-
2126
2114
if ( addToLegend )
2127
2115
emit legendLayersAdded ( myResultList );
2128
2116
}
@@ -2141,116 +2129,47 @@ QgsProject::addMapLayer( QgsMapLayer *layer,
2141
2129
2142
2130
void QgsProject::removeMapLayers ( const QStringList &layerIds )
2143
2131
{
2144
- QList<QgsMapLayer *> layers;
2145
- Q_FOREACH ( const QString &myId, layerIds )
2146
- {
2147
- layers << mMapLayers .value ( myId );
2148
- }
2149
-
2150
- removeMapLayers ( layers );
2132
+ mLayerStore ->removeMapLayers ( layerIds );
2151
2133
}
2152
2134
2153
2135
void QgsProject::removeMapLayers ( const QList<QgsMapLayer *> &layers )
2154
2136
{
2155
- if ( layers.isEmpty () )
2156
- return ;
2157
-
2158
- QStringList layerIds;
2159
- QList<QgsMapLayer *> layerList;
2160
-
2161
- Q_FOREACH ( QgsMapLayer *layer, layers )
2162
- {
2163
- // check layer and the registry contains it
2164
- if ( layer && mMapLayers .contains ( layer->id () ) )
2165
- {
2166
- layerIds << layer->id ();
2167
- layerList << layer;
2168
- }
2169
- }
2170
-
2171
- if ( layerIds.isEmpty () )
2172
- return ;
2173
-
2174
- emit layersWillBeRemoved ( layerIds );
2175
- emit layersWillBeRemoved ( layerList );
2176
-
2177
- Q_FOREACH ( QgsMapLayer *lyr, layerList )
2178
- {
2179
- QString myId ( lyr->id () );
2180
- emit layerWillBeRemoved ( myId );
2181
- emit layerWillBeRemoved ( lyr );
2182
- mMapLayers .remove ( myId );
2183
- if ( lyr->parent () == this )
2184
- {
2185
- delete lyr;
2186
- }
2187
- emit layerRemoved ( myId );
2188
- }
2189
-
2190
- emit layersRemoved ( layerIds );
2137
+ mLayerStore ->removeMapLayers ( layers );
2191
2138
}
2192
2139
2193
2140
void QgsProject::removeMapLayer ( const QString &layerId )
2194
2141
{
2195
- removeMapLayers ( QList<QgsMapLayer *>() << mMapLayers . value ( layerId ) );
2142
+ mLayerStore -> removeMapLayer ( layerId );
2196
2143
}
2197
2144
2198
2145
void QgsProject::removeMapLayer ( QgsMapLayer *layer )
2199
2146
{
2200
- if ( layer )
2201
- removeMapLayers ( QList<QgsMapLayer *>() << layer );
2147
+ mLayerStore ->removeMapLayer ( layer );
2202
2148
}
2203
2149
2204
2150
QgsMapLayer *QgsProject::takeMapLayer ( QgsMapLayer *layer )
2205
2151
{
2206
- if ( !layer )
2207
- return nullptr ;
2208
-
2209
- if ( mMapLayers .contains ( layer->id () ) )
2210
- {
2211
- emit layersWillBeRemoved ( QStringList () << layer->id () );
2212
- emit layersWillBeRemoved ( QList<QgsMapLayer *>() << layer );
2213
- emit layerWillBeRemoved ( layer->id () );
2214
- emit layerWillBeRemoved ( layer );
2215
-
2216
- mMapLayers .remove ( layer->id () );
2217
- layer->setParent ( nullptr );
2218
- emit layerRemoved ( layer->id () );
2219
- emit layersRemoved ( QStringList () << layer->id () );
2220
- return layer;
2221
- }
2222
- return nullptr ; // don't return layer - it wasn't owned and accordingly we aren't transferring ownership
2152
+ return mLayerStore ->takeMapLayer ( layer );
2223
2153
}
2224
2154
2225
2155
void QgsProject::removeAllMapLayers ()
2226
2156
{
2227
- emit removeAll ();
2228
- // now let all observers know to clear themselves,
2229
- // and then consequently any of their map legends
2230
- removeMapLayers ( mMapLayers .keys () );
2231
- mMapLayers .clear ();
2157
+ mLayerStore ->removeAllMapLayers ();
2232
2158
}
2233
2159
2234
2160
void QgsProject::reloadAllLayers ()
2235
2161
{
2236
- Q_FOREACH ( QgsMapLayer *layer, mMapLayers )
2237
- {
2238
- layer->reload ();
2239
- }
2240
- }
2241
-
2242
- void QgsProject::onMapLayerDeleted ( QObject *obj )
2243
- {
2244
- QString id = mMapLayers .key ( static_cast <QgsMapLayer *>( obj ) );
2245
-
2246
- if ( !id.isNull () )
2162
+ QMap<QString, QgsMapLayer *> layers = mLayerStore ->mapLayers ();
2163
+ QMap<QString, QgsMapLayer *>::const_iterator it = layers.constBegin ();
2164
+ for ( ; it != layers.constEnd (); ++it )
2247
2165
{
2248
- QgsDebugMsg ( QString ( " Map layer deleted without unregistering! %1" ).arg ( id ) );
2249
- mMapLayers .remove ( id );
2166
+ it.value ()->reload ();
2250
2167
}
2251
2168
}
2252
2169
2253
2170
QMap<QString, QgsMapLayer *> QgsProject::mapLayers () const
2254
2171
{
2255
- return mMapLayers ;
2172
+ return mLayerStore -> mapLayers () ;
2256
2173
}
2174
+
2175
+
0 commit comments