Skip to content

Commit 90a88ea

Browse files
committed
Further replacements of legend by layer tree within application
1 parent 0e8b79f commit 90a88ea

File tree

3 files changed

+44
-41
lines changed

3 files changed

+44
-41
lines changed

src/app/qgisapp.cpp

+33-40
Original file line numberDiff line numberDiff line change
@@ -1963,7 +1963,13 @@ void QgisApp::setupConnections()
19631963
this, SLOT( activateDeactivateLayerRelatedActions( QgsMapLayer * ) ) );
19641964
connect( mLayerTreeView->selectionModel(), SIGNAL( selectionChanged(QItemSelection,QItemSelection) ),
19651965
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) ),
19671973
this, SLOT( markDirty() ) );
19681974

19691975
// connect map layer registry
@@ -4698,7 +4704,7 @@ void QgisApp::saveAsFile()
46984704

46994705
void QgisApp::saveAsLayerDefinition()
47004706
{
4701-
QList<QgsMapLayer*> layers = mMapLegend->selectedLayers();
4707+
QList<QgsMapLayer*> layers = mLayerTreeView->selectedLayers();
47024708

47034709
if ( layers.isEmpty() )
47044710
return;
@@ -6044,7 +6050,7 @@ void QgisApp::pasteStyle( QgsMapLayer * destinationLayer )
60446050
return;
60456051
}
60466052

6047-
mMapLegend->refreshLayerSymbology( selectionLayer->id(), false );
6053+
mLayerTreeView->refreshLayerSymbology( selectionLayer->id() );
60486054
mMapCanvas->clearCache();
60496055
mMapCanvas->refresh();
60506056
}
@@ -6438,9 +6444,9 @@ void QgisApp::layerSubsetString()
64386444
if ( subsetBefore != qb->sql() )
64396445
{
64406446
mMapCanvas->refresh();
6441-
if ( mMapLegend )
6447+
if ( mLayerTreeView )
64426448
{
6443-
mMapLegend->refreshLayerSymbology( vlayer->id(), false );
6449+
mLayerTreeView->refreshLayerSymbology( vlayer->id() );
64446450
}
64456451
}
64466452
}
@@ -6694,45 +6700,32 @@ void QgisApp::duplicateLayers( QList<QgsMapLayer *> lyrList )
66946700
// add layer to layer registry and legend
66956701
QList<QgsMapLayer *> myList;
66966702
myList << dupLayer;
6703+
QgsProject::instance()->layerTreeRegistryBridge()->setEnabled(false);
66976704
QgsMapLayerRegistry::instance()->addMapLayers( myList );
6705+
QgsProject::instance()->layerTreeRegistryBridge()->setEnabled(true);
66986706

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());
67116711

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);
67176713

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);
67216716

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() )
67256726
{
6726-
foreach ( const QgsVectorJoinInfo join, vLayer->vectorJoins() )
6727-
{
6728-
vDupLayer->addJoin( join );
6729-
}
6727+
vDupLayer->addJoin( join );
67306728
}
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 );
67366729
}
67376730
}
67386731

@@ -6869,7 +6862,7 @@ void QgisApp::legendLayerStretchUsingCurrentExtent()
68696862
myRectangle = mMapCanvas->mapSettings().outputExtentToLayerExtent( layer, mMapCanvas->extent() );
68706863
layer->setContrastEnhancement( contrastEnhancementAlgorithm, QgsRaster::ContrastEnhancementMinMax, myRectangle );
68716864

6872-
mMapLegend->refreshLayerSymbology( layer->id() );
6865+
mLayerTreeView->refreshLayerSymbology( layer->id() );
68736866
mMapCanvas->refresh();
68746867
}
68756868
}
@@ -9499,7 +9492,7 @@ void QgisApp::showLayerProperties( QgsMapLayer *ml )
94999492
else
95009493
{
95019494
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 ) ) );
95039496
}
95049497

95059498
rlp->exec();
@@ -9517,7 +9510,7 @@ void QgisApp::showLayerProperties( QgsMapLayer *ml )
95179510
else
95189511
{
95199512
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 ) ) );
95219514
}
95229515

95239516
if ( vlp->exec() )

src/gui/layertree/qgslayertreeview.cpp

+8
Original file line numberDiff line numberDiff line change
@@ -204,3 +204,11 @@ QList<QgsMapLayer*> QgsLayerTreeView::selectedLayers() const
204204
}
205205
return list;
206206
}
207+
208+
209+
void QgsLayerTreeView::refreshLayerSymbology( const QString& layerId )
210+
{
211+
QgsLayerTreeLayer* nodeLayer = layerTreeModel()->rootGroup()->findLayer(layerId);
212+
if (nodeLayer)
213+
layerTreeModel()->refreshLayerSymbology( nodeLayer );
214+
}

src/gui/layertree/qgslayertreeview.h

+3-1
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@ class GUI_EXPORT QgsLayerTreeView : public QTreeView
3838

3939
QList<QgsMapLayer*> selectedLayers() const;
4040

41+
public slots:
42+
void refreshLayerSymbology( const QString& layerId );
43+
4144
protected:
4245
void contextMenuEvent(QContextMenuEvent* event);
4346

@@ -48,7 +51,6 @@ class GUI_EXPORT QgsLayerTreeView : public QTreeView
4851
signals:
4952
void currentLayerChanged(QgsMapLayer* layer);
5053

51-
public slots:
5254

5355
protected slots:
5456

0 commit comments

Comments
 (0)