Skip to content

Commit 174d112

Browse files
committed
* initialize pasted feature with default values (fixes #8800)
* show default values of new features in attribute table and identify results
1 parent 6a93df7 commit 174d112

File tree

3 files changed

+24
-4
lines changed

3 files changed

+24
-4
lines changed

src/app/qgisapp.cpp

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7379,16 +7379,26 @@ void QgisApp::editPaste( QgsMapLayer *destinationLayer )
73797379
QgsAttributes srcAttr = featureIt->attributes();
73807380
QgsAttributes dstAttr( dstAttrCount );
73817381

7382+
// pre-initialized with default values
7383+
for ( int dst = 0; dst < dstAttr.count(); ++dst )
7384+
{
7385+
QVariant defVal( pasteVectorLayer->dataProvider()->defaultValue( dst ) );
7386+
if( !defVal.isNull() )
7387+
{
7388+
dstAttr[ dst ] = defVal;
7389+
}
7390+
}
7391+
73827392
for ( int src = 0; src < srcAttr.count(); ++src )
73837393
{
73847394
int dst = remap.value( src, -1 );
73857395
if ( dst < 0 )
73867396
continue;
73877397

7388-
// use default value for primary key fields if it's NOT NULL
7398+
// don't overwrite default value for primary key fields if it's NOT NULL
7399+
// or for spatialite layers
73897400
if ( pkAttrList.contains( dst ) )
73907401
{
7391-
dstAttr[ dst ] = pasteVectorLayer->dataProvider()->defaultValue( dst );
73927402
if ( !dstAttr.at( dst ).isNull() )
73937403
continue;
73947404
else if ( pasteVectorLayer->providerType() == "spatialite" )

src/app/qgsidentifyresultsdialog.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
#include "qgsproject.h"
3535
#include "qgsrasterlayer.h"
3636
#include "qgsvectorlayer.h"
37+
#include "qgsvectordataprovider.h"
3738
#include "qgswebview.h"
3839
#include "qgswebframe.h"
3940

@@ -470,7 +471,11 @@ void QgsIdentifyResultsDialog::addFeature( QgsVectorLayer *vlayer, const QgsFeat
470471
if ( i >= fields.count() )
471472
continue;
472473

473-
QString value = fields.at( i ).displayString( attrs.at( i ) );
474+
QString defVal;
475+
if ( fields.fieldOrigin( i ) == QgsFields::OriginProvider && vlayer->dataProvider() )
476+
defVal = vlayer->dataProvider()->defaultValue( fields.fieldOriginIndex( i ) ).toString();
477+
478+
QString value = defVal == attrs.at( i ) ? defVal : fields.at( i ).displayString( attrs.at( i ) );
474479
QTreeWidgetItem *attrItem = new QTreeWidgetItem( QStringList() << QString::number( i ) << value );
475480

476481
attrItem->setData( 0, Qt::DisplayRole, vlayer->attributeDisplayName( i ) );

src/gui/editorwidgets/core/qgseditorwidgetfactory.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include "qgsdefaultsearchwidgetwrapper.h"
1818
#include "qgssearchwidgetwrapper.h"
1919
#include "qgsfield.h"
20+
#include "qgsvectordataprovider.h"
2021

2122
#include <QSettings>
2223

@@ -67,7 +68,11 @@ QString QgsEditorWidgetFactory::representValue( QgsVectorLayer* vl, int fieldIdx
6768
Q_UNUSED( cache )
6869
Q_UNUSED( value )
6970

70-
return vl->fields().at( fieldIdx ).displayString( value );
71+
QString defVal;
72+
if ( vl->fields().fieldOrigin( fieldIdx ) == QgsFields::OriginProvider && vl->dataProvider() )
73+
defVal = vl->dataProvider()->defaultValue( vl->fields().fieldOriginIndex( fieldIdx ) ).toString();
74+
75+
return value == defVal ? defVal : vl->fields().at( fieldIdx ).displayString( value );
7176
}
7277

7378
Qt::AlignmentFlag QgsEditorWidgetFactory::alignmentFlag( QgsVectorLayer* vl, int fieldIdx, const QgsEditorWidgetConfig& config ) const

0 commit comments

Comments
 (0)