mirror of
https://github.com/qgis/QGIS.git
synced 2025-10-05 00:09:32 -04:00
Allow setting merge policy in the GUI
This commit is contained in:
parent
1e7604686d
commit
b0ce109adb
@ -126,6 +126,29 @@ QgsAttributeTypeDialog::QgsAttributeTypeDialog( QgsVectorLayer *vl, int fieldIdx
|
||||
mDuplicatePolicyComboBox->addItem( tr( "Remove Value" ), QVariant::fromValue( Qgis::FieldDuplicatePolicy::UnsetField ) );
|
||||
connect( mDuplicatePolicyComboBox, qOverload<int>( &QComboBox::currentIndexChanged ), this, &QgsAttributeTypeDialog::updateDuplicatePolicyLabel );
|
||||
updateDuplicatePolicyLabel();
|
||||
|
||||
if ( mLayer->isSpatial() )
|
||||
{
|
||||
mMergePolicyComboBox->addItem( tr( "Remove Value" ), QVariant::fromValue( Qgis::FieldDomainMergePolicy::UnsetField ) );
|
||||
mMergePolicyComboBox->addItem( tr( "Use Default Value" ), QVariant::fromValue( Qgis::FieldDomainMergePolicy::DefaultValue ) );
|
||||
|
||||
if ( mLayer->fields().at( mFieldIdx ).isNumeric() )
|
||||
{
|
||||
mMergePolicyComboBox->addItem( tr( "Use Sum" ), QVariant::fromValue( Qgis::FieldDomainMergePolicy::Sum ) );
|
||||
|
||||
if ( mLayer->geometryType() != Qgis::GeometryType::Point )
|
||||
mMergePolicyComboBox->addItem( tr( "Use Average Weighted by Geometry" ), QVariant::fromValue( Qgis::FieldDomainMergePolicy::GeometryWeighted ) );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
mMergePolicyComboBox->setEnabled( false );
|
||||
mMergePolicyLabel->setEnabled( false );
|
||||
mMergePolicyDescriptionLabel->hide();
|
||||
}
|
||||
|
||||
connect( mMergePolicyComboBox, qOverload<int>( &QComboBox::currentIndexChanged ), this, &QgsAttributeTypeDialog::updateMergePolicyLabel );
|
||||
updateMergePolicyLabel();
|
||||
}
|
||||
|
||||
QgsAttributeTypeDialog::~QgsAttributeTypeDialog()
|
||||
@ -400,6 +423,17 @@ void QgsAttributeTypeDialog::setDuplicatePolicy( Qgis::FieldDuplicatePolicy poli
|
||||
updateSplitPolicyLabel();
|
||||
}
|
||||
|
||||
void QgsAttributeTypeDialog::setMergePolicy( Qgis::FieldDomainMergePolicy policy )
|
||||
{
|
||||
mMergePolicyComboBox->setCurrentIndex( mMergePolicyComboBox->findData( QVariant::fromValue( policy ) ) );
|
||||
updateMergePolicyLabel();
|
||||
}
|
||||
|
||||
Qgis::FieldDomainMergePolicy QgsAttributeTypeDialog::mergePolicy() const
|
||||
{
|
||||
return mMergePolicyComboBox->currentData().value<Qgis::FieldDomainMergePolicy>();
|
||||
}
|
||||
|
||||
QString QgsAttributeTypeDialog::constraintExpression() const
|
||||
{
|
||||
return constraintExpressionWidget->asExpression();
|
||||
@ -537,6 +571,30 @@ void QgsAttributeTypeDialog::updateDuplicatePolicyLabel()
|
||||
mDuplicatePolicyDescriptionLabel->setText( QStringLiteral( "<i>%1</i>" ).arg( helperText ) );
|
||||
}
|
||||
|
||||
void QgsAttributeTypeDialog::updateMergePolicyLabel()
|
||||
{
|
||||
QString helperText;
|
||||
switch ( mMergePolicyComboBox->currentData().value<Qgis::FieldDomainMergePolicy>() )
|
||||
{
|
||||
case Qgis::FieldDomainMergePolicy::DefaultValue:
|
||||
helperText = tr( "Use default field value." );
|
||||
break;
|
||||
|
||||
case Qgis::FieldDomainMergePolicy::Sum:
|
||||
helperText = tr( "Sum of values." );
|
||||
break;
|
||||
|
||||
case Qgis::FieldDomainMergePolicy::GeometryWeighted:
|
||||
helperText = tr( "New values are computed as the weighted average of the source values." );
|
||||
break;
|
||||
|
||||
case Qgis::FieldDomainMergePolicy::UnsetField:
|
||||
helperText = tr( "Clears the field to an unset state." );
|
||||
break;
|
||||
}
|
||||
mMergePolicyDescriptionLabel->setText( QStringLiteral( "<i>%1</i>" ).arg( helperText ) );
|
||||
}
|
||||
|
||||
QStandardItem *QgsAttributeTypeDialog::currentItem() const
|
||||
{
|
||||
QStandardItemModel *widgetTypeModel = qobject_cast<QStandardItemModel *>( mWidgetTypeComboBox->model() );
|
||||
|
@ -271,6 +271,24 @@ class GUI_EXPORT QgsAttributeTypeDialog : public QWidget, private Ui::QgsAttribu
|
||||
*/
|
||||
void setDuplicatePolicy( Qgis::FieldDuplicatePolicy policy );
|
||||
|
||||
/**
|
||||
* Returns the field's merge policy.
|
||||
*
|
||||
* \see setMergePolicy()
|
||||
*
|
||||
* \since QGIS 3.42
|
||||
*/
|
||||
Qgis::FieldDomainMergePolicy mergePolicy() const;
|
||||
|
||||
/**
|
||||
* Sets the field's merge policy.
|
||||
*
|
||||
* \see mergePolicy()
|
||||
*
|
||||
* \since QGIS 3.42
|
||||
*/
|
||||
void setMergePolicy( Qgis::FieldDomainMergePolicy policy );
|
||||
|
||||
private slots:
|
||||
|
||||
/**
|
||||
@ -285,6 +303,8 @@ class GUI_EXPORT QgsAttributeTypeDialog : public QWidget, private Ui::QgsAttribu
|
||||
|
||||
void updateDuplicatePolicyLabel();
|
||||
|
||||
void updateMergePolicyLabel();
|
||||
|
||||
private:
|
||||
QgsVectorLayer *mLayer = nullptr;
|
||||
int mFieldIdx;
|
||||
|
@ -343,6 +343,7 @@ void QgsAttributesFormProperties::loadAttributeTypeDialogFromConfiguration( cons
|
||||
mAttributeTypeDialog->setUniqueEnforced( constraints.constraintStrength( QgsFieldConstraints::ConstraintUnique ) == QgsFieldConstraints::ConstraintStrengthHard );
|
||||
mAttributeTypeDialog->setSplitPolicy( config.mSplitPolicy );
|
||||
mAttributeTypeDialog->setDuplicatePolicy( config.mDuplicatePolicy );
|
||||
mAttributeTypeDialog->setMergePolicy( config.mMergePolicy );
|
||||
|
||||
QgsFieldConstraints::Constraints providerConstraints = QgsFieldConstraints::Constraints();
|
||||
if ( constraints.constraintOrigin( QgsFieldConstraints::ConstraintNotNull ) == QgsFieldConstraints::ConstraintOriginProvider )
|
||||
@ -417,6 +418,7 @@ void QgsAttributesFormProperties::storeAttributeTypeDialog()
|
||||
cfg.mEditorWidgetConfig = mAttributeTypeDialog->editorWidgetConfig();
|
||||
cfg.mSplitPolicy = mAttributeTypeDialog->splitPolicy();
|
||||
cfg.mDuplicatePolicy = mAttributeTypeDialog->duplicatePolicy();
|
||||
cfg.mMergePolicy = mAttributeTypeDialog->mergePolicy();
|
||||
|
||||
const int fieldIndex = mAttributeTypeDialog->fieldIdx();
|
||||
mLayer->setDefaultValueDefinition( fieldIndex, QgsDefaultValue( mAttributeTypeDialog->defaultValueExpression(), mAttributeTypeDialog->applyDefaultValueOnUpdate() ) );
|
||||
@ -1047,6 +1049,7 @@ void QgsAttributesFormProperties::apply()
|
||||
mLayer->setFieldAlias( idx, cfg.mAlias );
|
||||
mLayer->setFieldSplitPolicy( idx, cfg.mSplitPolicy );
|
||||
mLayer->setFieldDuplicatePolicy( idx, cfg.mDuplicatePolicy );
|
||||
mLayer->setFieldMergePolicy( idx, cfg.mMergePolicy );
|
||||
}
|
||||
|
||||
// tabs and groups
|
||||
@ -1118,6 +1121,7 @@ QgsAttributesFormProperties::FieldConfig::FieldConfig( QgsVectorLayer *layer, in
|
||||
mEditorWidgetConfig = setup.config();
|
||||
mSplitPolicy = layer->fields().at( idx ).splitPolicy();
|
||||
mDuplicatePolicy = layer->fields().at( idx ).duplicatePolicy();
|
||||
mMergePolicy = layer->fields().at( idx ).mergePolicy();
|
||||
}
|
||||
|
||||
QgsAttributesFormProperties::FieldConfig::operator QVariant()
|
||||
@ -2117,6 +2121,11 @@ void QgsAttributesFormProperties::copyWidgetConfiguration()
|
||||
duplicatePolicyElement.setAttribute( QStringLiteral( "policy" ), qgsEnumValueToKey( field.duplicatePolicy() ) );
|
||||
documentElement.appendChild( duplicatePolicyElement );
|
||||
|
||||
// Merge policy
|
||||
QDomElement mergePolicyElement = doc.createElement( QStringLiteral( "mergePolicy" ) );
|
||||
mergePolicyElement.setAttribute( QStringLiteral( "policy" ), qgsEnumValueToKey( field.mergePolicy() ) );
|
||||
documentElement.appendChild( mergePolicyElement );
|
||||
|
||||
// Default expressions
|
||||
QDomElement defaultElem = doc.createElement( QStringLiteral( "default" ) );
|
||||
defaultElem.setAttribute( QStringLiteral( "expression" ), field.defaultValueDefinition().expression() );
|
||||
@ -2246,6 +2255,14 @@ void QgsAttributesFormProperties::pasteWidgetConfiguration()
|
||||
config.mDuplicatePolicy = policy;
|
||||
}
|
||||
|
||||
// Merge policy
|
||||
const QDomElement mergePolicyElement = docElem.firstChildElement( QStringLiteral( "mergePolicy" ) );
|
||||
if ( !mergePolicyElement.isNull() )
|
||||
{
|
||||
const Qgis::FieldDomainMergePolicy policy = qgsEnumKeyToValue( mergePolicyElement.attribute( QStringLiteral( "policy" ) ), Qgis::FieldDomainMergePolicy::DefaultValue );
|
||||
config.mMergePolicy = policy;
|
||||
}
|
||||
|
||||
// Default expressions
|
||||
const QDomElement defaultElement = docElem.firstChildElement( QStringLiteral( "default" ) );
|
||||
if ( !defaultElement.isNull() )
|
||||
|
@ -374,6 +374,7 @@ class GUI_EXPORT QgsAttributesFormProperties : public QWidget, public QgsExpress
|
||||
QString mComment;
|
||||
Qgis::FieldDomainSplitPolicy mSplitPolicy = Qgis::FieldDomainSplitPolicy::Duplicate;
|
||||
Qgis::FieldDuplicatePolicy mDuplicatePolicy = Qgis::FieldDuplicatePolicy::Duplicate;
|
||||
Qgis::FieldDomainMergePolicy mMergePolicy = Qgis::FieldDomainMergePolicy::DefaultValue;
|
||||
|
||||
operator QVariant();
|
||||
};
|
||||
|
@ -284,19 +284,6 @@
|
||||
<string>Policies</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_4">
|
||||
<item row="0" column="1" colspan="3">
|
||||
<widget class="QComboBox" name="mSplitPolicyComboBox"/>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="mDuplicatePolicyLabel">
|
||||
<property name="text">
|
||||
<string>When duplicating features</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="1" colspan="3">
|
||||
<widget class="QComboBox" name="mDuplicatePolicyComboBox"/>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="mSplitPolicyLabel">
|
||||
<property name="text">
|
||||
@ -304,6 +291,9 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="1" colspan="3">
|
||||
<widget class="QComboBox" name="mDuplicatePolicyComboBox"/>
|
||||
</item>
|
||||
<item row="5" column="0" colspan="4">
|
||||
<widget class="QLabel" name="mDuplicatePolicyDescriptionLabel">
|
||||
<property name="text">
|
||||
@ -314,6 +304,26 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="1" colspan="3">
|
||||
<widget class="QComboBox" name="mMergePolicyComboBox"/>
|
||||
</item>
|
||||
<item row="6" column="0">
|
||||
<widget class="QLabel" name="mMergePolicyLabel">
|
||||
<property name="text">
|
||||
<string>When merging features</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="mDuplicatePolicyLabel">
|
||||
<property name="text">
|
||||
<string>When duplicating features</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1" colspan="3">
|
||||
<widget class="QComboBox" name="mSplitPolicyComboBox"/>
|
||||
</item>
|
||||
<item row="1" column="0" colspan="4">
|
||||
<widget class="QLabel" name="mSplitPolicyDescriptionLabel">
|
||||
<property name="text">
|
||||
@ -324,6 +334,13 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="0" colspan="4">
|
||||
<widget class="QLabel" name="mMergePolicyDescriptionLabel">
|
||||
<property name="text">
|
||||
<string>TextLabel</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
|
Loading…
x
Reference in New Issue
Block a user