Skip to content

Commit 46490d4

Browse files
committedJan 22, 2015
Preserve legend tree structure when creating offline project
1 parent cb48948 commit 46490d4

File tree

1 file changed

+27
-11
lines changed

1 file changed

+27
-11
lines changed
 

‎src/core/qgsofflineediting.cpp

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,17 @@
1717
***************************************************************************/
1818

1919

20-
#include <qgsapplication.h>
21-
#include <qgsdatasourceuri.h>
22-
#include <qgsgeometry.h>
23-
#include <qgsmaplayer.h>
24-
#include <qgsmaplayerregistry.h>
25-
#include <qgsofflineediting.h>
26-
#include <qgsproject.h>
27-
#include <qgsvectordataprovider.h>
28-
#include <qgsvectorlayereditbuffer.h>
20+
#include "qgsapplication.h"
21+
#include "qgsdatasourceuri.h"
22+
#include "qgsgeometry.h"
23+
#include "qgsmaplayer.h"
24+
#include "qgsmaplayerregistry.h"
25+
#include "qgsofflineediting.h"
26+
#include "qgsproject.h"
27+
#include "qgsvectordataprovider.h"
28+
#include "qgsvectorlayereditbuffer.h"
29+
#include "qgslayertreegroup.h"
30+
#include "qgslayertreelayer.h"
2931

3032
#include <QDir>
3133
#include <QDomDocument>
@@ -509,6 +511,20 @@ void QgsOfflineEditing::copyVectorLayer( QgsVectorLayer* layer, sqlite3* db, con
509511
QgsMapLayerRegistry::instance()->addMapLayers(
510512
QList<QgsMapLayer *>() << newLayer );
511513

514+
QgsLayerTreeGroup* layerTreeRoot = QgsProject::instance()->layerTreeRoot();
515+
// Find the parent group of the original layer
516+
QgsLayerTreeLayer* layerTreeLayer = layerTreeRoot->findLayer( layer->id() );
517+
QgsLayerTreeGroup* parentTreeGroup = qobject_cast<QgsLayerTreeGroup*>( layerTreeLayer->parent() );
518+
if ( parentTreeGroup )
519+
{
520+
int index = parentTreeGroup->children().indexOf( layerTreeLayer );
521+
// Move the new layer from the root group to the new group
522+
QgsLayerTreeLayer* newLayerTreeLayer = layerTreeRoot->findLayer( newLayer->id() );
523+
QgsLayerTreeNode* newLayerTreeLayerClone = newLayerTreeLayer->clone();
524+
parentTreeGroup->insertChildNode( index, newLayerTreeLayerClone );
525+
layerTreeRoot->removeChildNode( newLayerTreeLayer );
526+
}
527+
512528
if ( hasLabels )
513529
{
514530
// NOTE: copy symbology of layers with labels enabled after adding to project, as it will crash otherwise (WORKAROUND)
@@ -526,7 +542,7 @@ void QgsOfflineEditing::copyVectorLayer( QgsVectorLayer* layer, sqlite3* db, con
526542

527543
QgsFeatureIterator fit = layer->dataProvider()->getFeatures();
528544

529-
emit progressModeSet( QgsOfflineEditing::CopyFeatures, layer->featureCount() );
545+
emit progressModeSet( QgsOfflineEditing::CopyFeatures, layer->dataProvider()->featureCount() );
530546
int featureCount = 1;
531547

532548
QList<QgsFeatureId> remoteFeatureIds;
@@ -551,7 +567,7 @@ void QgsOfflineEditing::copyVectorLayer( QgsVectorLayer* layer, sqlite3* db, con
551567
}
552568
if ( newLayer->commitChanges() )
553569
{
554-
emit progressModeSet( QgsOfflineEditing::ProcessFeatures, layer->featureCount() );
570+
emit progressModeSet( QgsOfflineEditing::ProcessFeatures, layer->dataProvider()->featureCount() );
555571
featureCount = 1;
556572

557573
// update feature id lookup

0 commit comments

Comments
 (0)
Please sign in to comment.