Skip to content

Commit e605ad6

Browse files
committed
editor widgets: restore handling of null values in textedit widget (fixes #10497)
1 parent f617be1 commit e605ad6

File tree

2 files changed

+26
-19
lines changed

2 files changed

+26
-19
lines changed

src/app/qgsfeatureaction.cpp

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -161,20 +161,22 @@ bool QgsFeatureAction::addFeature( const QgsAttributeMap& defaultAttributes )
161161
mFeature.initAttributes( fields.count() );
162162
for ( int idx = 0; idx < fields.count(); ++idx )
163163
{
164+
QVariant v;
165+
164166
if ( defaultAttributes.contains( idx ) )
165167
{
166-
QgsDebugMsg( QString( "Using specified default %1 for %2" ).arg( defaultAttributes.value( idx ).toString() ).arg( idx ) );
167-
mFeature.setAttribute( idx, defaultAttributes.value( idx ) );
168+
v = defaultAttributes.value( idx );
168169
}
169170
else if ( reuseLastValues && sLastUsedValues.contains( mLayer ) && sLastUsedValues[ mLayer ].contains( idx ) )
170171
{
171-
QgsDebugMsg( QString( "reusing %1 for %2" ).arg( sLastUsedValues[ mLayer ][idx].toString() ).arg( idx ) );
172-
mFeature.setAttribute( idx, sLastUsedValues[ mLayer ][idx] );
172+
v = sLastUsedValues[ mLayer ][idx];
173173
}
174174
else
175175
{
176-
mFeature.setAttribute( idx, provider->defaultValue( idx ) );
176+
v = provider->defaultValue( idx );
177177
}
178+
179+
mFeature.setAttribute( idx, v );
178180
}
179181

180182
// show the dialog to enter attribute values

src/gui/editorwidgets/qgstexteditwidget.cpp

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,7 @@ QgsTextEditWidget::QgsTextEditWidget( QgsVectorLayer* vl, int fieldIdx, QWidget*
2828

2929
QVariant QgsTextEditWidget::value()
3030
{
31-
QSettings settings;
32-
QVariant v;
31+
QString v;
3332

3433
if ( mTextEdit && mTextEdit->document()->isModified() )
3534
{
@@ -53,12 +52,11 @@ QVariant QgsTextEditWidget::value()
5352
v = mLineEdit->text();
5453
}
5554

56-
if ( v.toString() == settings.value( "qgis/nullValue", "NULL" ).toString() )
57-
{
58-
v = QVariant( field().type() );
59-
}
60-
61-
return v;
55+
if (( v.isEmpty() && ( field().type() == QVariant::Int || field().type() == QVariant::Double || field().type() == QVariant::LongLong || field().type() == QVariant::Date ) ) ||
56+
v == QSettings().value( "qgis/nullValue", "NULL" ).toString() )
57+
return QVariant( field().type() );
58+
else
59+
return QVariant( v );
6260
}
6361

6462
QWidget* QgsTextEditWidget::createWidget( QWidget* parent )
@@ -99,8 +97,7 @@ void QgsTextEditWidget::initWidget( QWidget* editor )
9997
QgsFilterLineEdit *fle = qobject_cast<QgsFilterLineEdit*>( mLineEdit );
10098
if ( fle && !( field().type() == QVariant::Int || field().type() == QVariant::Double || field().type() == QVariant::LongLong || field().type() == QVariant::Date ) )
10199
{
102-
QSettings settings;
103-
fle->setNullValue( settings.value( "qgis/nullValue", "NULL" ).toString() );
100+
fle->setNullValue( QSettings().value( "qgis/nullValue", "NULL" ).toString() );
104101
}
105102

106103
connect( mLineEdit, SIGNAL( textChanged( QString ) ), this, SLOT( valueChanged( QString ) ) );
@@ -109,17 +106,25 @@ void QgsTextEditWidget::initWidget( QWidget* editor )
109106

110107
void QgsTextEditWidget::setValue( const QVariant& value )
111108
{
109+
QString v;
110+
if ( value.isNull() && !( field().type() == QVariant::Int || field().type() == QVariant::Double || field().type() == QVariant::LongLong || field().type() == QVariant::Date ) )
111+
{
112+
v = QSettings().value( "qgis/nullValue", "NULL" ).toString();
113+
}
114+
else
115+
v = value.toString();
116+
112117
if ( mTextEdit )
113118
{
114119
if ( config( "UseHtml" ).toBool() )
115-
mTextEdit->setHtml( value.toString() );
120+
mTextEdit->setHtml( v );
116121
else
117-
mTextEdit->setPlainText( value.toString() );
122+
mTextEdit->setPlainText( v );
118123
}
119124

120125
if ( mPlainTextEdit )
121-
mPlainTextEdit->setPlainText( value.toString() );
126+
mPlainTextEdit->setPlainText( v );
122127

123128
if ( mLineEdit )
124-
mLineEdit->setText( value.toString() );
129+
mLineEdit->setText( v );
125130
}

0 commit comments

Comments
 (0)