Skip to content

Commit 9912d99

Browse files
committedMar 4, 2013
[FEATURE] add editable option for all edit types
1 parent e2bf9c6 commit 9912d99

8 files changed

+82
-6
lines changed
 

‎src/app/qgsattributedialog.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,7 @@ QgsAttributeDialog::QgsAttributeDialog( QgsVectorLayer *vl, QgsFeature *thepFeat
177177
//show attribute alias if available
178178
QString myFieldName = vl->attributeDisplayName( fldIdx );
179179
int myFieldType = theFields[fldIdx].type();
180+
bool isEditable = vl->fieldEditable( fldIdx );
180181

181182
QWidget *myWidget = QgsAttributeEditor::createAttributeEditor( 0, 0, vl, fldIdx, myAttributes[fldIdx], mProxyWidgets );
182183
if ( !myWidget )
@@ -204,7 +205,7 @@ QgsAttributeDialog::QgsAttributeDialog( QgsVectorLayer *vl, QgsFeature *thepFeat
204205

205206
if ( vl->editType( fldIdx ) != QgsVectorLayer::Immutable )
206207
{
207-
myWidget->setEnabled( vl->isEditable() );
208+
myWidget->setEnabled( vl->isEditable() && isEditable );
208209
}
209210

210211
mypInnerLayout->addWidget( myWidget, index, 1 );
@@ -233,13 +234,15 @@ QgsAttributeDialog::QgsAttributeDialog( QgsVectorLayer *vl, QgsFeature *thepFeat
233234
if ( !myWidgets.size() )
234235
continue;
235236

237+
bool isEditable = vl->fieldEditable( fldIdx );
238+
236239
for ( QList<QWidget *>::const_iterator itw = myWidgets.begin(); itw != myWidgets.end(); ++itw )
237240
{
238241
QgsAttributeEditor::createAttributeEditor( mDialog, *itw, vl, fldIdx, myAttributes[fldIdx], mProxyWidgets );
239242

240243
if ( vl->editType( fldIdx ) != QgsVectorLayer::Immutable )
241244
{
242-
( *itw )->setEnabled(( *itw )->isEnabled() && vl->isEditable() );
245+
( *itw )->setEnabled(( *itw )->isEnabled() && vl->isEditable() && isEditable );
243246
}
244247
}
245248
}

‎src/app/qgsattributetypedialog.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,16 @@ QMap<QString, QVariant> &QgsAttributeTypeDialog::valueMap()
8484
return mValueMap;
8585
}
8686

87+
bool QgsAttributeTypeDialog::fieldEditable()
88+
{
89+
return isFieldEditableCheckBox->isChecked();
90+
}
91+
92+
void QgsAttributeTypeDialog::setFieldEditable(bool editable)
93+
{
94+
isFieldEditableCheckBox->setChecked( editable );
95+
}
96+
8797
QPair<QString, QString> QgsAttributeTypeDialog::checkedState()
8898
{
8999
return QPair<QString, QString>( leCheckedState->text(), leUncheckedState->text() );
@@ -538,6 +548,8 @@ void QgsAttributeTypeDialog::setStackPage( int index )
538548
void QgsAttributeTypeDialog::accept()
539549
{
540550
//store data to output variables
551+
mFieldEditable = isFieldEditableCheckBox->isChecked();
552+
541553
switch ( selectionListWidget->currentRow() )
542554
{
543555
default:

‎src/app/qgsattributetypedialog.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,12 @@ class QgsAttributeTypeDialog: public QDialog, private Ui::QgsAttributeTypeDialog
8282
*/
8383
void setValueRelation( QgsVectorLayer::ValueRelationData valueRelationData );
8484

85+
/**
86+
* Setter for checkbox for editable state of field
87+
* @param bool editable
88+
*/
89+
void setFieldEditable( bool editable );
90+
8591
/**
8692
* Getter for checked state after editing
8793
* @return string representing the checked
@@ -105,6 +111,11 @@ class QgsAttributeTypeDialog: public QDialog, private Ui::QgsAttributeTypeDialog
105111
*/
106112
QgsVectorLayer::ValueRelationData valueRelationData();
107113

114+
/**
115+
* Getter for checkbox for editable state of field
116+
*/
117+
bool fieldEditable();
118+
108119
private slots:
109120
/**
110121
* Slot to handle change of index in combobox to select correct page
@@ -160,6 +171,7 @@ class QgsAttributeTypeDialog: public QDialog, private Ui::QgsAttributeTypeDialog
160171
*/
161172
void updateMap( const QMap<QString, QVariant> &map );
162173

174+
bool mFieldEditable;
163175

164176
QMap<QString, QVariant> mValueMap;
165177

‎src/app/qgsfieldsproperties.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -489,13 +489,17 @@ void QgsFieldsProperties::attributeTypeDialog()
489489

490490
attributeTypeDialog.setIndex( index, mEditTypeMap.value( index, mLayer->editType( index ) ) );
491491

492+
attributeTypeDialog.setFieldEditable( mLayer->fieldEditable( index ) );
493+
492494
if ( !attributeTypeDialog.exec() )
493495
return;
494496

495497
QgsVectorLayer::EditType editType = attributeTypeDialog.editType();
496-
497498
mEditTypeMap.insert( index, editType );
498499

500+
bool isFieldEditable = attributeTypeDialog.fieldEditable();
501+
mFieldEditables.insert( index, isFieldEditable );
502+
499503
QString buttonText;
500504
switch ( editType )
501505
{
@@ -816,6 +820,8 @@ void QgsFieldsProperties::apply()
816820
QgsVectorLayer::EditType editType = editTypeFromButtonText( pb->text() );
817821
mLayer->setEditType( idx, editType );
818822

823+
mLayer->setFieldEditable( idx, mFieldEditables.value( idx, true ));
824+
819825
switch ( editType )
820826
{
821827
case QgsVectorLayer::ValueMap:

‎src/app/qgsfieldsproperties.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ class QgsFieldsProperties : public QWidget, private Ui_QgsFieldsPropertiesBase
123123
QgsAttributesTree* mAttributesTree;
124124
QgsAttributesList* mAttributesList;
125125

126+
QMap<int, bool> mFieldEditables;
126127
QMap<int, QgsVectorLayer::ValueRelationData> mValueRelationData;
127128
QMap<int, QMap<QString, QVariant> > mValueMaps;
128129
QMap<int, QgsVectorLayer::RangeData> mRanges;

‎src/core/qgsvectorlayer.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2618,6 +2618,9 @@ bool QgsVectorLayer::readSymbology( const QDomNode& node, QString& errorMessage
26182618
EditType editType = ( EditType ) editTypeElement.attribute( "type" ).toInt();
26192619
mEditTypes.insert( name, editType );
26202620

2621+
int editable = editTypeElement.attribute( "editable" , "1" ).toInt();
2622+
mFieldEditables.insert( name, editable == 1);
2623+
26212624
switch ( editType )
26222625
{
26232626
case ValueMap:
@@ -2933,6 +2936,7 @@ bool QgsVectorLayer::writeSymbology( QDomNode& node, QDomDocument& doc, QString&
29332936
QDomElement editTypeElement = doc.createElement( "edittype" );
29342937
editTypeElement.setAttribute( "name", it.key() );
29352938
editTypeElement.setAttribute( "type", it.value() );
2939+
editTypeElement.setAttribute( "editable", mFieldEditables[ it.key()]?1:0 );
29362940

29372941
switch (( EditType ) it.value() )
29382942
{
@@ -3895,6 +3899,22 @@ QgsVectorLayer::RangeData &QgsVectorLayer::range( int idx )
38953899
return mRanges[fieldName];
38963900
}
38973901

3902+
bool QgsVectorLayer::fieldEditable( int idx )
3903+
{
3904+
const QgsFields &fields = pendingFields();
3905+
if ( idx >= 0 && idx < fields.count() && mEditTypes.contains( fields[idx].name() ) )
3906+
return mFieldEditables[ fields[idx].name() ];
3907+
else
3908+
return false;
3909+
}
3910+
3911+
void QgsVectorLayer::setFieldEditable( int idx, bool editable )
3912+
{
3913+
const QgsFields &fields = pendingFields();
3914+
if ( idx >= 0 && idx < fields.count() && mEditTypes.contains( fields[idx].name() ) )
3915+
mFieldEditables[ fields[idx].name() ] = editable;
3916+
}
3917+
38983918
void QgsVectorLayer::addOverlay( QgsVectorOverlay* overlay )
38993919
{
39003920
mOverlays.push_back( overlay );

‎src/core/qgsvectorlayer.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -767,6 +767,17 @@ class CORE_EXPORT QgsVectorLayer : public QgsMapLayer
767767
**/
768768
ValueRelationData &valueRelation( int idx );
769769

770+
/**is edit widget editable
771+
* @note added in 1.9
772+
**/
773+
bool fieldEditable( int idx );
774+
775+
/**set edit widget editable
776+
* @note added in 1.9
777+
**/
778+
void setFieldEditable( int idx, bool editable );
779+
780+
770781
/**Adds a new overlay to this class. QgsVectorLayer takes ownership of the object
771782
@note this method was added in version 1.1
772783
*/
@@ -1058,6 +1069,7 @@ class CORE_EXPORT QgsVectorLayer : public QgsMapLayer
10581069
QStringList mCommitErrors;
10591070

10601071
QMap< QString, EditType > mEditTypes;
1072+
QMap< QString, bool> mFieldEditables;
10611073
QMap< QString, QMap<QString, QVariant> > mValueMaps;
10621074
QMap< QString, RangeData > mRanges;
10631075
QMap< QString, QPair<QString, QString> > mCheckedStates;

‎src/ui/qgsattributetypeedit.ui

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
<rect>
77
<x>0</x>
88
<y>0</y>
9-
<width>615</width>
10-
<height>421</height>
9+
<width>620</width>
10+
<height>418</height>
1111
</rect>
1212
</property>
1313
<property name="windowTitle">
@@ -23,7 +23,7 @@
2323
</sizepolicy>
2424
</property>
2525
<property name="currentIndex">
26-
<number>12</number>
26+
<number>0</number>
2727
</property>
2828
<widget class="QWidget" name="lineEditPage">
2929
<layout class="QVBoxLayout" name="verticalLayout_1">
@@ -753,6 +753,16 @@
753753
</item>
754754
</widget>
755755
</item>
756+
<item row="0" column="1">
757+
<widget class="QCheckBox" name="isFieldEditableCheckBox">
758+
<property name="text">
759+
<string>Editable</string>
760+
</property>
761+
<property name="checked">
762+
<bool>true</bool>
763+
</property>
764+
</widget>
765+
</item>
756766
</layout>
757767
</widget>
758768
<resources/>

0 commit comments

Comments
 (0)
Please sign in to comment.