@@ -1963,7 +1963,13 @@ void QgisApp::setupConnections()
1963
1963
this , SLOT ( activateDeactivateLayerRelatedActions ( QgsMapLayer * ) ) );
1964
1964
connect ( mLayerTreeView ->selectionModel (), SIGNAL ( selectionChanged (QItemSelection,QItemSelection) ),
1965
1965
this , SLOT ( legendLayerSelectionChanged () ) );
1966
- connect ( mMapLegend , SIGNAL ( zOrderChanged () ),
1966
+ connect ( mLayerTreeView ->layerTreeModel ()->rootGroup (), SIGNAL ( addedChildren (QgsLayerTreeNode*,int ,int ) ),
1967
+ this , SLOT ( markDirty () ) );
1968
+ connect ( mLayerTreeView ->layerTreeModel ()->rootGroup (), SIGNAL ( removedChildren (QgsLayerTreeNode*,int ,int ) ),
1969
+ this , SLOT ( markDirty () ) );
1970
+ connect ( mLayerTreeView ->layerTreeModel ()->rootGroup (), SIGNAL ( visibilityChanged (QgsLayerTreeNode*,Qt::CheckState) ),
1971
+ this , SLOT ( markDirty () ) );
1972
+ connect ( mLayerTreeView ->layerTreeModel ()->rootGroup (), SIGNAL ( customPropertyChanged (QgsLayerTreeNode*,QString) ),
1967
1973
this , SLOT ( markDirty () ) );
1968
1974
1969
1975
// connect map layer registry
@@ -4698,7 +4704,7 @@ void QgisApp::saveAsFile()
4698
4704
4699
4705
void QgisApp::saveAsLayerDefinition ()
4700
4706
{
4701
- QList<QgsMapLayer*> layers = mMapLegend ->selectedLayers ();
4707
+ QList<QgsMapLayer*> layers = mLayerTreeView ->selectedLayers ();
4702
4708
4703
4709
if ( layers.isEmpty () )
4704
4710
return ;
@@ -6044,7 +6050,7 @@ void QgisApp::pasteStyle( QgsMapLayer * destinationLayer )
6044
6050
return ;
6045
6051
}
6046
6052
6047
- mMapLegend ->refreshLayerSymbology ( selectionLayer->id (), false );
6053
+ mLayerTreeView ->refreshLayerSymbology ( selectionLayer->id () );
6048
6054
mMapCanvas ->clearCache ();
6049
6055
mMapCanvas ->refresh ();
6050
6056
}
@@ -6438,9 +6444,9 @@ void QgisApp::layerSubsetString()
6438
6444
if ( subsetBefore != qb->sql () )
6439
6445
{
6440
6446
mMapCanvas ->refresh ();
6441
- if ( mMapLegend )
6447
+ if ( mLayerTreeView )
6442
6448
{
6443
- mMapLegend ->refreshLayerSymbology ( vlayer->id (), false );
6449
+ mLayerTreeView ->refreshLayerSymbology ( vlayer->id () );
6444
6450
}
6445
6451
}
6446
6452
}
@@ -6694,45 +6700,32 @@ void QgisApp::duplicateLayers( QList<QgsMapLayer *> lyrList )
6694
6700
// add layer to layer registry and legend
6695
6701
QList<QgsMapLayer *> myList;
6696
6702
myList << dupLayer;
6703
+ QgsProject::instance ()->layerTreeRegistryBridge ()->setEnabled (false );
6697
6704
QgsMapLayerRegistry::instance ()->addMapLayers ( myList );
6705
+ QgsProject::instance ()->layerTreeRegistryBridge ()->setEnabled (true );
6698
6706
6699
- // verify layer has been added to legend
6700
- QgsLegendLayer *duplLayer = 0 ;
6701
- duplLayer = mMapLegend ->findLegendLayer ( dupLayer );
6702
- if ( !duplLayer )
6703
- {
6704
- // some source layers, like items > 4th in a container, have their layer
6705
- // registered but do not show up in the legend, so manually add them
6706
- QgsLegendLayer* llayer = new QgsLegendLayer ( dupLayer );
6707
- mMapLegend ->insertTopLevelItem ( 0 , llayer );
6708
- // double-check, or move of non-existent legend layer will segfault
6709
- duplLayer = mMapLegend ->findLegendLayer ( dupLayer );
6710
- }
6707
+ QgsLayerTreeLayer* nodeSelectedLyr = mLayerTreeView ->layerTreeModel ()->rootGroup ()->findLayer (selectedLyr->id ());
6708
+ Q_ASSERT (nodeSelectedLyr);
6709
+ Q_ASSERT (QgsLayerTree::isGroup (nodeSelectedLyr->parent ()));
6710
+ QgsLayerTreeGroup* parentGroup = QgsLayerTree::toGroup (nodeSelectedLyr->parent ());
6711
6711
6712
- QgsLegendLayer *srclLayer = mMapLegend ->findLegendLayer ( selectedLyr );
6713
- if ( duplLayer && srclLayer )
6714
- {
6715
- // move layer to just below source layer
6716
- mMapLegend ->moveItem ( duplLayer, srclLayer );
6712
+ QgsLayerTreeLayer* nodeDupLayer = parentGroup->insertLayer (parentGroup->children ().indexOf (nodeSelectedLyr)+1 , dupLayer);
6717
6713
6718
- // duplicate the layer style
6719
- copyStyle ( selectedLyr );
6720
- pasteStyle ( dupLayer );
6714
+ // always set duplicated layers to not visible so layer can be configured before being turned on
6715
+ nodeDupLayer->setVisible (Qt::Unchecked);
6721
6716
6722
- QgsVectorLayer* vLayer = dynamic_cast <QgsVectorLayer*>( selectedLyr );
6723
- QgsVectorLayer* vDupLayer = dynamic_cast <QgsVectorLayer*>( dupLayer );
6724
- if ( vLayer && vDupLayer )
6717
+ // duplicate the layer style
6718
+ copyStyle ( selectedLyr );
6719
+ pasteStyle ( dupLayer );
6720
+
6721
+ QgsVectorLayer* vLayer = dynamic_cast <QgsVectorLayer*>( selectedLyr );
6722
+ QgsVectorLayer* vDupLayer = dynamic_cast <QgsVectorLayer*>( dupLayer );
6723
+ if ( vLayer && vDupLayer )
6724
+ {
6725
+ foreach ( const QgsVectorJoinInfo join, vLayer->vectorJoins () )
6725
6726
{
6726
- foreach ( const QgsVectorJoinInfo join, vLayer->vectorJoins () )
6727
- {
6728
- vDupLayer->addJoin ( join );
6729
- }
6727
+ vDupLayer->addJoin ( join );
6730
6728
}
6731
-
6732
- // always set duplicated layers to not visible
6733
- // so layer can be configured before being turned on,
6734
- // and no map canvas refresh needed when doing multiple duplications
6735
- mMapLegend ->setLayerVisible ( dupLayer, false );
6736
6729
}
6737
6730
}
6738
6731
@@ -6869,7 +6862,7 @@ void QgisApp::legendLayerStretchUsingCurrentExtent()
6869
6862
myRectangle = mMapCanvas ->mapSettings ().outputExtentToLayerExtent ( layer, mMapCanvas ->extent () );
6870
6863
layer->setContrastEnhancement ( contrastEnhancementAlgorithm, QgsRaster::ContrastEnhancementMinMax, myRectangle );
6871
6864
6872
- mMapLegend ->refreshLayerSymbology ( layer->id () );
6865
+ mLayerTreeView ->refreshLayerSymbology ( layer->id () );
6873
6866
mMapCanvas ->refresh ();
6874
6867
}
6875
6868
}
@@ -9499,7 +9492,7 @@ void QgisApp::showLayerProperties( QgsMapLayer *ml )
9499
9492
else
9500
9493
{
9501
9494
rlp = new QgsRasterLayerProperties ( ml, mMapCanvas , this );
9502
- connect ( rlp, SIGNAL ( refreshLegend ( QString, bool ) ), mMapLegend , SLOT ( refreshLayerSymbology ( QString, bool ) ) );
9495
+ connect ( rlp, SIGNAL ( refreshLegend ( QString, bool ) ), mLayerTreeView , SLOT ( refreshLayerSymbology ( QString ) ) );
9503
9496
}
9504
9497
9505
9498
rlp->exec ();
@@ -9517,7 +9510,7 @@ void QgisApp::showLayerProperties( QgsMapLayer *ml )
9517
9510
else
9518
9511
{
9519
9512
vlp = new QgsVectorLayerProperties ( vlayer, this );
9520
- connect ( vlp, SIGNAL ( refreshLegend ( QString, QgsLegendItem::Expansion ) ), mMapLegend , SLOT ( refreshLayerSymbology ( QString, QgsLegendItem::Expansion ) ) );
9513
+ connect ( vlp, SIGNAL ( refreshLegend ( QString, QgsLegendItem::Expansion ) ), mLayerTreeView , SLOT ( refreshLayerSymbology ( QString ) ) );
9521
9514
}
9522
9515
9523
9516
if ( vlp->exec () )
0 commit comments