mirror of
https://github.com/qgis/QGIS.git
synced 2025-03-02 00:02:12 -05:00
use member to keep state if related layer is in transaction group to set toggleEditing and SaveEdits button visibility
check the "other parent" in transaction group depending on if it's a many-to-many cardinality or one-to-many fix that it sets toggle-edit and save button to invisible if child layer is in transaction group (even if it's not in the same transaction group like the parent) Means: on one-to-many, we check if parent and child are in the same transaction group: parent-layer (relation->referencedLayer) child-layer (relation->referencingLayer) on many-to-many, we check if parent and child and the other parent are in the same transaction group: parent-layer (relation->referencedLayer) child-layer / relation-layer (relation->referencingLayer) other parent layer (nmrelation->referencedLayer)
This commit is contained in:
parent
68c4f9b77a
commit
899b4d8eda
@ -314,14 +314,23 @@ void QgsRelationEditorWidget::setRelations( const QgsRelation &relation, const Q
|
||||
if ( !mRelation.isValid() )
|
||||
return;
|
||||
|
||||
mToggleEditingButton->setVisible( true );
|
||||
mLayerInSameTransactionGroup = false;
|
||||
|
||||
const auto transactionGroups = QgsProject::instance()->transactionGroups();
|
||||
for ( auto it = transactionGroups.constBegin(); it != transactionGroups.constEnd(); ++it )
|
||||
{
|
||||
if ( it.value()->layers().contains( mRelation.referencingLayer() ) )
|
||||
if ( mNmRelation.isValid() )
|
||||
{
|
||||
mToggleEditingButton->setVisible( false );
|
||||
if ( it.value()->layers().contains( mRelation.referencedLayer() ) &&
|
||||
it.value()->layers().contains( mRelation.referencingLayer() ) &&
|
||||
it.value()->layers().contains( mNmRelation.referencedLayer() ) )
|
||||
mLayerInSameTransactionGroup = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( it.value()->layers().contains( mRelation.referencedLayer() ) &&
|
||||
it.value()->layers().contains( mRelation.referencingLayer() ) )
|
||||
mLayerInSameTransactionGroup = true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -424,9 +433,10 @@ void QgsRelationEditorWidget::updateButtons()
|
||||
mToggleEditingButton->setChecked( editable );
|
||||
mSaveEditsButton->setEnabled( editable );
|
||||
|
||||
mToggleEditingButton->setVisible( !mLayerInSameTransactionGroup );
|
||||
mLinkFeatureButton->setVisible( mButtonsVisibility.testFlag( QgsAttributeEditorRelation::Button::Link ) );
|
||||
mUnlinkFeatureButton->setVisible( mButtonsVisibility.testFlag( QgsAttributeEditorRelation::Button::Unlink ) );
|
||||
mSaveEditsButton->setVisible( mButtonsVisibility.testFlag( QgsAttributeEditorRelation::Button::SaveChildEdits ) && mToggleEditingButton->isVisible() );
|
||||
mSaveEditsButton->setVisible( mButtonsVisibility.testFlag( QgsAttributeEditorRelation::Button::SaveChildEdits ) && !mLayerInSameTransactionGroup );
|
||||
mAddFeatureButton->setVisible( mButtonsVisibility.testFlag( QgsAttributeEditorRelation::Button::AddChildFeature ) );
|
||||
mAddFeatureGeometryButton->setVisible( mButtonsVisibility.testFlag( QgsAttributeEditorRelation::Button::AddChildFeature ) && mEditorContext.mapCanvas() && mEditorContext.cadDockWidget() && spatial );
|
||||
mDuplicateFeatureButton->setVisible( mButtonsVisibility.testFlag( QgsAttributeEditorRelation::Button::DuplicateChildFeature ) );
|
||||
|
@ -332,6 +332,7 @@ class GUI_EXPORT QgsRelationEditorWidget : public QgsCollapsibleGroupBox
|
||||
QgsAttributeEditorRelation::Buttons mButtonsVisibility;
|
||||
bool mShowLabel = true;
|
||||
bool mVisible = false;
|
||||
bool mLayerInSameTransactionGroup = false;
|
||||
|
||||
bool mForceSuppressFormPopup = false;
|
||||
QVariant mNmRelationId;
|
||||
|
Loading…
x
Reference in New Issue
Block a user