Defer mask source widget population (fixes #34942)

This commit is contained in:
Hugo Mercier 2020-04-03 16:11:58 +02:00
parent 0e2c858723
commit 1237d94405
5 changed files with 61 additions and 37 deletions

View File

@ -14,6 +14,7 @@
***************************************************************************/
#include <QSet>
#include <QCheckBox>
#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<QPair<QgsSymbolLayerId, QList<QgsSymbolLayerReference>>> 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<QgsSymbolLayerId> maskedSymbolLayers;

View File

@ -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

View File

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

View File

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

View File

@ -6,51 +6,54 @@
<rect>
<x>0</x>
<y>0</y>
<width>637</width>
<height>409</height>
<width>863</width>
<height>461</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Masked symbol layers</string>
<widget class="QGroupBox" name="mEditMaskSettingsGroup">
<property name="title">
<string>Edit mask settings</string>
</property>
</widget>
</item>
<item>
<widget class="QgsSymbolLayerSelectionWidget" name="mMaskTargetsWidget" native="true"/>
</item>
<item>
<widget class="QLabel" name="label_2">
<property name="text">
<string>Mask sources</string>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QgsMaskSourceSelectionWidget" name="mMaskSourcesWidget" native="true">
<property name="enabled">
<property name="checked">
<bool>false</bool>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<property name="leftMargin">
<number>9</number>
</property>
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Masked symbol layers</string>
</property>
</widget>
</item>
<item>
<widget class="QgsSymbolLayerSelectionWidget" name="mMaskTargetsWidget" native="true"/>
</item>
<item>
<widget class="QLabel" name="label_2">
<property name="text">
<string>Mask sources</string>
</property>
</widget>
</item>
<item>
<widget class="QgsMaskSourceSelectionWidget" name="mMaskSourcesWidget" native="true">
<property name="enabled">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>