Skip to content

Commit d2b2bb1

Browse files
committed
fix editable attribute of joined fields (fix #7739)
Based on pull request 576 by minorua
1 parent 67b8ee4 commit d2b2bb1

6 files changed

+21
-0
lines changed

src/app/qgsattributetypedialog.cpp

+5
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,11 @@ void QgsAttributeTypeDialog::setFieldEditable( bool editable )
109109
isFieldEditableCheckBox->setChecked( editable );
110110
}
111111

112+
void QgsAttributeTypeDialog::setFieldEditableEnabled( bool enabled )
113+
{
114+
isFieldEditableCheckBox->setEnabled( enabled );
115+
}
116+
112117
void QgsAttributeTypeDialog::setLabelOnTop( bool onTop )
113118
{
114119
labelOnTopCheckBox->setChecked( onTop );

src/app/qgsattributetypedialog.h

+7
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,13 @@ class QgsAttributeTypeDialog: public QDialog, private Ui::QgsAttributeTypeDialog
100100
*/
101101
void setFieldEditable( bool editable );
102102

103+
/**
104+
* Sets the enabled state of the "editable" checkbox
105+
*
106+
* @param enabled sets the enabled state of the checkbox
107+
*/
108+
void setFieldEditableEnabled( bool enabled );
109+
103110
/**
104111
* Setter for checkbox to label on top
105112
* @param bool onTop

src/app/qgsfieldsproperties.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -494,6 +494,7 @@ void QgsFieldsProperties::attributeTypeDialog()
494494
attributeTypeDialog.setLabelOnTop( cfg.mLabelOnTop );
495495

496496
attributeTypeDialog.setIndex( index, cfg.mEditType );
497+
attributeTypeDialog.setFieldEditableEnabled( cfg.mEditableEnabled );
497498

498499
if ( !attributeTypeDialog.exec() )
499500
return;
@@ -930,6 +931,7 @@ QgsFieldsProperties::FieldConfig::FieldConfig( QgsVectorLayer* layer, int idx )
930931
: mButton( NULL )
931932
{
932933
mEditable = layer->fieldEditable( idx );
934+
mEditableEnabled = layer->pendingFields().fieldOrigin( idx ) != QgsFields::OriginJoin;
933935
mLabelOnTop = layer->labelOnTop( idx );
934936
mValueRelationData = layer->valueRelation( idx );
935937
mValueMap = layer->valueMap( idx );

src/app/qgsfieldsproperties.h

+1
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ class QgsFieldsProperties : public QWidget, private Ui_QgsFieldsPropertiesBase
5454
FieldConfig( QgsVectorLayer* layer, int idx );
5555

5656
bool mEditable;
57+
bool mEditableEnabled;
5758
bool mLabelOnTop;
5859
QgsVectorLayer::ValueRelationData mValueRelationData;
5960
QMap<QString, QVariant> mValueMap;

src/app/qgsvectorlayerproperties.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -954,6 +954,7 @@ void QgsVectorLayerProperties::on_mButtonAddJoin_clicked()
954954
pbnQueryBuilder->setEnabled( layer && layer->dataProvider() && layer->dataProvider()->supportsSubsetString() &&
955955
!layer->isEditable() && layer->vectorJoins().size() < 1 );
956956
}
957+
mFieldsPropertiesDialog->init();
957958
}
958959
}
959960

@@ -995,6 +996,7 @@ void QgsVectorLayerProperties::on_mButtonRemoveJoin_clicked()
995996
mJoinTreeWidget->takeTopLevelItem( mJoinTreeWidget->indexOfTopLevelItem( currentJoinItem ) );
996997
pbnQueryBuilder->setEnabled( layer && layer->dataProvider() && layer->dataProvider()->supportsSubsetString() &&
997998
!layer->isEditable() && layer->vectorJoins().size() < 1 );
999+
mFieldsPropertiesDialog->init();
9981000
}
9991001

10001002

src/core/qgsvectorlayer.cpp

+4
Original file line numberDiff line numberDiff line change
@@ -3083,7 +3083,11 @@ bool QgsVectorLayer::fieldEditable( int idx )
30833083
{
30843084
const QgsFields &fields = pendingFields();
30853085
if ( idx >= 0 && idx < fields.count() )
3086+
{
3087+
if ( mUpdatedFields.fieldOrigin( idx ) == QgsFields::OriginJoin )
3088+
return false;
30863089
return mFieldEditables.value( fields[idx].name(), true );
3090+
}
30873091
else
30883092
return true;
30893093
}

0 commit comments

Comments
 (0)