mirror of
https://github.com/qgis/QGIS.git
synced 2025-10-09 00:08:52 -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 ) );
|
mDuplicatePolicyComboBox->addItem( tr( "Remove Value" ), QVariant::fromValue( Qgis::FieldDuplicatePolicy::UnsetField ) );
|
||||||
connect( mDuplicatePolicyComboBox, qOverload<int>( &QComboBox::currentIndexChanged ), this, &QgsAttributeTypeDialog::updateDuplicatePolicyLabel );
|
connect( mDuplicatePolicyComboBox, qOverload<int>( &QComboBox::currentIndexChanged ), this, &QgsAttributeTypeDialog::updateDuplicatePolicyLabel );
|
||||||
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()
|
QgsAttributeTypeDialog::~QgsAttributeTypeDialog()
|
||||||
@ -400,6 +423,17 @@ void QgsAttributeTypeDialog::setDuplicatePolicy( Qgis::FieldDuplicatePolicy poli
|
|||||||
updateSplitPolicyLabel();
|
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
|
QString QgsAttributeTypeDialog::constraintExpression() const
|
||||||
{
|
{
|
||||||
return constraintExpressionWidget->asExpression();
|
return constraintExpressionWidget->asExpression();
|
||||||
@ -537,6 +571,30 @@ void QgsAttributeTypeDialog::updateDuplicatePolicyLabel()
|
|||||||
mDuplicatePolicyDescriptionLabel->setText( QStringLiteral( "<i>%1</i>" ).arg( helperText ) );
|
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
|
QStandardItem *QgsAttributeTypeDialog::currentItem() const
|
||||||
{
|
{
|
||||||
QStandardItemModel *widgetTypeModel = qobject_cast<QStandardItemModel *>( mWidgetTypeComboBox->model() );
|
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 );
|
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:
|
private slots:
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -285,6 +303,8 @@ class GUI_EXPORT QgsAttributeTypeDialog : public QWidget, private Ui::QgsAttribu
|
|||||||
|
|
||||||
void updateDuplicatePolicyLabel();
|
void updateDuplicatePolicyLabel();
|
||||||
|
|
||||||
|
void updateMergePolicyLabel();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QgsVectorLayer *mLayer = nullptr;
|
QgsVectorLayer *mLayer = nullptr;
|
||||||
int mFieldIdx;
|
int mFieldIdx;
|
||||||
|
@ -343,6 +343,7 @@ void QgsAttributesFormProperties::loadAttributeTypeDialogFromConfiguration( cons
|
|||||||
mAttributeTypeDialog->setUniqueEnforced( constraints.constraintStrength( QgsFieldConstraints::ConstraintUnique ) == QgsFieldConstraints::ConstraintStrengthHard );
|
mAttributeTypeDialog->setUniqueEnforced( constraints.constraintStrength( QgsFieldConstraints::ConstraintUnique ) == QgsFieldConstraints::ConstraintStrengthHard );
|
||||||
mAttributeTypeDialog->setSplitPolicy( config.mSplitPolicy );
|
mAttributeTypeDialog->setSplitPolicy( config.mSplitPolicy );
|
||||||
mAttributeTypeDialog->setDuplicatePolicy( config.mDuplicatePolicy );
|
mAttributeTypeDialog->setDuplicatePolicy( config.mDuplicatePolicy );
|
||||||
|
mAttributeTypeDialog->setMergePolicy( config.mMergePolicy );
|
||||||
|
|
||||||
QgsFieldConstraints::Constraints providerConstraints = QgsFieldConstraints::Constraints();
|
QgsFieldConstraints::Constraints providerConstraints = QgsFieldConstraints::Constraints();
|
||||||
if ( constraints.constraintOrigin( QgsFieldConstraints::ConstraintNotNull ) == QgsFieldConstraints::ConstraintOriginProvider )
|
if ( constraints.constraintOrigin( QgsFieldConstraints::ConstraintNotNull ) == QgsFieldConstraints::ConstraintOriginProvider )
|
||||||
@ -417,6 +418,7 @@ void QgsAttributesFormProperties::storeAttributeTypeDialog()
|
|||||||
cfg.mEditorWidgetConfig = mAttributeTypeDialog->editorWidgetConfig();
|
cfg.mEditorWidgetConfig = mAttributeTypeDialog->editorWidgetConfig();
|
||||||
cfg.mSplitPolicy = mAttributeTypeDialog->splitPolicy();
|
cfg.mSplitPolicy = mAttributeTypeDialog->splitPolicy();
|
||||||
cfg.mDuplicatePolicy = mAttributeTypeDialog->duplicatePolicy();
|
cfg.mDuplicatePolicy = mAttributeTypeDialog->duplicatePolicy();
|
||||||
|
cfg.mMergePolicy = mAttributeTypeDialog->mergePolicy();
|
||||||
|
|
||||||
const int fieldIndex = mAttributeTypeDialog->fieldIdx();
|
const int fieldIndex = mAttributeTypeDialog->fieldIdx();
|
||||||
mLayer->setDefaultValueDefinition( fieldIndex, QgsDefaultValue( mAttributeTypeDialog->defaultValueExpression(), mAttributeTypeDialog->applyDefaultValueOnUpdate() ) );
|
mLayer->setDefaultValueDefinition( fieldIndex, QgsDefaultValue( mAttributeTypeDialog->defaultValueExpression(), mAttributeTypeDialog->applyDefaultValueOnUpdate() ) );
|
||||||
@ -1047,6 +1049,7 @@ void QgsAttributesFormProperties::apply()
|
|||||||
mLayer->setFieldAlias( idx, cfg.mAlias );
|
mLayer->setFieldAlias( idx, cfg.mAlias );
|
||||||
mLayer->setFieldSplitPolicy( idx, cfg.mSplitPolicy );
|
mLayer->setFieldSplitPolicy( idx, cfg.mSplitPolicy );
|
||||||
mLayer->setFieldDuplicatePolicy( idx, cfg.mDuplicatePolicy );
|
mLayer->setFieldDuplicatePolicy( idx, cfg.mDuplicatePolicy );
|
||||||
|
mLayer->setFieldMergePolicy( idx, cfg.mMergePolicy );
|
||||||
}
|
}
|
||||||
|
|
||||||
// tabs and groups
|
// tabs and groups
|
||||||
@ -1118,6 +1121,7 @@ QgsAttributesFormProperties::FieldConfig::FieldConfig( QgsVectorLayer *layer, in
|
|||||||
mEditorWidgetConfig = setup.config();
|
mEditorWidgetConfig = setup.config();
|
||||||
mSplitPolicy = layer->fields().at( idx ).splitPolicy();
|
mSplitPolicy = layer->fields().at( idx ).splitPolicy();
|
||||||
mDuplicatePolicy = layer->fields().at( idx ).duplicatePolicy();
|
mDuplicatePolicy = layer->fields().at( idx ).duplicatePolicy();
|
||||||
|
mMergePolicy = layer->fields().at( idx ).mergePolicy();
|
||||||
}
|
}
|
||||||
|
|
||||||
QgsAttributesFormProperties::FieldConfig::operator QVariant()
|
QgsAttributesFormProperties::FieldConfig::operator QVariant()
|
||||||
@ -2117,6 +2121,11 @@ void QgsAttributesFormProperties::copyWidgetConfiguration()
|
|||||||
duplicatePolicyElement.setAttribute( QStringLiteral( "policy" ), qgsEnumValueToKey( field.duplicatePolicy() ) );
|
duplicatePolicyElement.setAttribute( QStringLiteral( "policy" ), qgsEnumValueToKey( field.duplicatePolicy() ) );
|
||||||
documentElement.appendChild( duplicatePolicyElement );
|
documentElement.appendChild( duplicatePolicyElement );
|
||||||
|
|
||||||
|
// Merge policy
|
||||||
|
QDomElement mergePolicyElement = doc.createElement( QStringLiteral( "mergePolicy" ) );
|
||||||
|
mergePolicyElement.setAttribute( QStringLiteral( "policy" ), qgsEnumValueToKey( field.mergePolicy() ) );
|
||||||
|
documentElement.appendChild( mergePolicyElement );
|
||||||
|
|
||||||
// Default expressions
|
// Default expressions
|
||||||
QDomElement defaultElem = doc.createElement( QStringLiteral( "default" ) );
|
QDomElement defaultElem = doc.createElement( QStringLiteral( "default" ) );
|
||||||
defaultElem.setAttribute( QStringLiteral( "expression" ), field.defaultValueDefinition().expression() );
|
defaultElem.setAttribute( QStringLiteral( "expression" ), field.defaultValueDefinition().expression() );
|
||||||
@ -2246,6 +2255,14 @@ void QgsAttributesFormProperties::pasteWidgetConfiguration()
|
|||||||
config.mDuplicatePolicy = policy;
|
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
|
// Default expressions
|
||||||
const QDomElement defaultElement = docElem.firstChildElement( QStringLiteral( "default" ) );
|
const QDomElement defaultElement = docElem.firstChildElement( QStringLiteral( "default" ) );
|
||||||
if ( !defaultElement.isNull() )
|
if ( !defaultElement.isNull() )
|
||||||
|
@ -374,6 +374,7 @@ class GUI_EXPORT QgsAttributesFormProperties : public QWidget, public QgsExpress
|
|||||||
QString mComment;
|
QString mComment;
|
||||||
Qgis::FieldDomainSplitPolicy mSplitPolicy = Qgis::FieldDomainSplitPolicy::Duplicate;
|
Qgis::FieldDomainSplitPolicy mSplitPolicy = Qgis::FieldDomainSplitPolicy::Duplicate;
|
||||||
Qgis::FieldDuplicatePolicy mDuplicatePolicy = Qgis::FieldDuplicatePolicy::Duplicate;
|
Qgis::FieldDuplicatePolicy mDuplicatePolicy = Qgis::FieldDuplicatePolicy::Duplicate;
|
||||||
|
Qgis::FieldDomainMergePolicy mMergePolicy = Qgis::FieldDomainMergePolicy::DefaultValue;
|
||||||
|
|
||||||
operator QVariant();
|
operator QVariant();
|
||||||
};
|
};
|
||||||
|
@ -284,19 +284,6 @@
|
|||||||
<string>Policies</string>
|
<string>Policies</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout_4">
|
<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">
|
<item row="0" column="0">
|
||||||
<widget class="QLabel" name="mSplitPolicyLabel">
|
<widget class="QLabel" name="mSplitPolicyLabel">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
@ -304,6 +291,9 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="4" column="1" colspan="3">
|
||||||
|
<widget class="QComboBox" name="mDuplicatePolicyComboBox"/>
|
||||||
|
</item>
|
||||||
<item row="5" column="0" colspan="4">
|
<item row="5" column="0" colspan="4">
|
||||||
<widget class="QLabel" name="mDuplicatePolicyDescriptionLabel">
|
<widget class="QLabel" name="mDuplicatePolicyDescriptionLabel">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
@ -314,6 +304,26 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</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">
|
<item row="1" column="0" colspan="4">
|
||||||
<widget class="QLabel" name="mSplitPolicyDescriptionLabel">
|
<widget class="QLabel" name="mSplitPolicyDescriptionLabel">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
@ -324,6 +334,13 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="7" column="0" colspan="4">
|
||||||
|
<widget class="QLabel" name="mMergePolicyDescriptionLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>TextLabel</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user