|
52 | 52 | #include "qgsdatasourceuri.h"
|
53 | 53 | #include "qgsrenderer.h"
|
54 | 54 | #include "qgsexpressioncontext.h"
|
| 55 | +#include "layertree/qgslayertreelayer.h" |
55 | 56 |
|
56 | 57 | #include <QMessageBox>
|
57 | 58 | #include <QDir>
|
@@ -291,6 +292,27 @@ QgsVectorLayerProperties::QgsVectorLayerProperties(
|
291 | 292 |
|
292 | 293 | QString title = QString( tr( "Layer Properties - %1" ) ).arg( mLayer->name() );
|
293 | 294 | restoreOptionsBaseUi( title );
|
| 295 | + |
| 296 | + mLayersDependenciesTreeGroup.reset( QgsProject::instance()->layerTreeRoot()->clone() ); |
| 297 | + QgsLayerTreeLayer* layer = mLayersDependenciesTreeGroup->findLayer( mLayer->id() ); |
| 298 | + layer->parent()->takeChild( layer ); |
| 299 | + mLayersDependenciesTreeModel.reset( new QgsLayerTreeModel( mLayersDependenciesTreeGroup.data() ) ); |
| 300 | + // use visibility as selection |
| 301 | + mLayersDependenciesTreeModel->setFlag( QgsLayerTreeModel::AllowNodeChangeVisibility ); |
| 302 | + |
| 303 | + mLayersDependenciesTreeGroup->setVisible( Qt::Unchecked ); |
| 304 | + |
| 305 | + QSet<QString> dependencySources; |
| 306 | + Q_FOREACH ( const QgsMapLayerDependency& dep, mLayer->dependencies() ) |
| 307 | + { |
| 308 | + dependencySources << dep.layerId(); |
| 309 | + } |
| 310 | + Q_FOREACH ( QgsLayerTreeLayer* layer, mLayersDependenciesTreeGroup->findLayers() ) |
| 311 | + { |
| 312 | + layer->setVisible( dependencySources.contains( layer->layerId() ) ? Qt::Checked : Qt::Unchecked ); |
| 313 | + } |
| 314 | + |
| 315 | + mLayersDependenciesTreeView->setModel( mLayersDependenciesTreeModel.data() ); |
294 | 316 | } // QgsVectorLayerProperties ctor
|
295 | 317 |
|
296 | 318 |
|
@@ -558,6 +580,18 @@ void QgsVectorLayerProperties::apply()
|
558 | 580 | QgsExpressionContextUtils::setLayerVariables( mLayer, mVariableEditor->variablesInActiveScope() );
|
559 | 581 | updateVariableEditor();
|
560 | 582 |
|
| 583 | + // save layer dependencies |
| 584 | + QSet<QString> deps; |
| 585 | + Q_FOREACH ( const QgsLayerTreeLayer* layer, mLayersDependenciesTreeGroup->findLayers() ) |
| 586 | + { |
| 587 | + if ( layer->isVisible() ) |
| 588 | + deps << layer->layerId(); |
| 589 | + } |
| 590 | + if ( ! mLayer->setDataDependencies( deps ) ) |
| 591 | + { |
| 592 | + QMessageBox::warning( nullptr, tr( "Dependency cycle" ), tr( "This configuration introduces a cycle in data dependencies and will be ignored" ) ); |
| 593 | + } |
| 594 | + |
561 | 595 | // update symbology
|
562 | 596 | emit refreshLegend( mLayer->id() );
|
563 | 597 |
|
|
0 commit comments