From 1237d944057d10ac68236405b7bcba9c686cf94c Mon Sep 17 00:00:00 2001 From: Hugo Mercier Date: Fri, 3 Apr 2020 16:11:58 +0200 Subject: [PATCH] Defer mask source widget population (fixes #34942) --- src/gui/qgsmaskingwidget.cpp | 19 +++++- src/gui/qgsmaskingwidget.h | 4 +- src/gui/qgsmasksourceselectionwidget.cpp | 1 + src/gui/qgssymbollayerselectionwidget.cpp | 1 + src/ui/qgsmaskingwidgetbase.ui | 73 ++++++++++++----------- 5 files changed, 61 insertions(+), 37 deletions(-) diff --git a/src/gui/qgsmaskingwidget.cpp b/src/gui/qgsmaskingwidget.cpp index 053020bcc54..4ff23ace0bc 100644 --- a/src/gui/qgsmaskingwidget.cpp +++ b/src/gui/qgsmaskingwidget.cpp @@ -14,6 +14,7 @@ ***************************************************************************/ #include +#include #include "qgsmaskingwidget.h" #include "qgsmasksourceselectionwidget.h" @@ -42,6 +43,14 @@ QgsMaskingWidget::QgsMaskingWidget( QWidget *parent ) : { emit widgetChanged(); } ); + + connect( mEditMaskSettingsGroup, &QGroupBox::toggled, this, [&]( bool on ) + { + if ( on && mLayer ) + { + populate(); + } + } ); } /** @@ -133,8 +142,16 @@ QList>> symbolLayerMasks( void QgsMaskingWidget::setLayer( QgsVectorLayer *layer ) { mLayer = layer; + if ( mEditMaskSettingsGroup->isChecked() ) + { + populate(); + } +} + +void QgsMaskingWidget::populate() +{ mMaskSourcesWidget->update(); - mMaskTargetsWidget->setLayer( layer ); + mMaskTargetsWidget->setLayer( mLayer ); // collect masks and filter on those which have the current layer as destination QSet maskedSymbolLayers; diff --git a/src/gui/qgsmaskingwidget.h b/src/gui/qgsmaskingwidget.h index 4d13a9d2893..13cb7af486b 100644 --- a/src/gui/qgsmaskingwidget.h +++ b/src/gui/qgsmaskingwidget.h @@ -48,7 +48,9 @@ class GUI_EXPORT QgsMaskingWidget: public QgsPanelWidget, private Ui::QgsMasking void widgetChanged(); private: - QgsVectorLayer *mLayer; + QgsVectorLayer *mLayer = nullptr; + //! Populate the mask source and target widgets + void populate(); }; #endif diff --git a/src/gui/qgsmasksourceselectionwidget.cpp b/src/gui/qgsmasksourceselectionwidget.cpp index 576a4f387d9..8fc3d99241b 100644 --- a/src/gui/qgsmasksourceselectionwidget.cpp +++ b/src/gui/qgsmasksourceselectionwidget.cpp @@ -63,6 +63,7 @@ QgsMaskSourceSelectionWidget::QgsMaskSourceSelectionWidget( QWidget *parent ) // place the tree in a layout QVBoxLayout *vbox = new QVBoxLayout(); + vbox->setContentsMargins( 0, 0, 0, 0 ); vbox->addWidget( mTree ); setLayout( vbox ); diff --git a/src/gui/qgssymbollayerselectionwidget.cpp b/src/gui/qgssymbollayerselectionwidget.cpp index b7368a9d8a0..fe27527221d 100644 --- a/src/gui/qgssymbollayerselectionwidget.cpp +++ b/src/gui/qgssymbollayerselectionwidget.cpp @@ -37,6 +37,7 @@ QgsSymbolLayerSelectionWidget::QgsSymbolLayerSelectionWidget( QWidget *parent ) // place the tree in a layout QVBoxLayout *vbox = new QVBoxLayout(); + vbox->setContentsMargins( 0, 0, 0, 0 ); vbox->addWidget( mTree ); setLayout( vbox ); diff --git a/src/ui/qgsmaskingwidgetbase.ui b/src/ui/qgsmaskingwidgetbase.ui index a0e58a370ba..bca2671bc6c 100644 --- a/src/ui/qgsmaskingwidgetbase.ui +++ b/src/ui/qgsmaskingwidgetbase.ui @@ -6,51 +6,54 @@ 0 0 - 637 - 409 + 863 + 461 Form - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - + - - - Masked symbol layers + + + Edit mask settings - - - - - - - - - Mask sources + + true - - - - - + false + + + 9 + + + + + Masked symbol layers + + + + + + + + + + Mask sources + + + + + + + false + + + +