offer NULL value in relation reference widget if allowed (fixes #14162)

This commit is contained in:
Sebastian Dietrich 2016-02-21 18:18:47 +01:00
parent 17f20bbb36
commit 5f157a9033
2 changed files with 15 additions and 3 deletions

View File

@ -61,10 +61,14 @@ QVariant QgsFeatureListModel::data( const QModelIndex &index, int role ) const
{
return QSettings().value( "qgis/nullValue", "NULL" ).toString();
}
else
else if ( role == QgsAttributeTableModel::FeatureIdRole )
{
return QVariant( QVariant::Int );
}
else
{
return QVariant( QVariant::Invalid );
}
}
if ( role == Qt::DisplayRole || role == Qt::EditRole )
@ -122,7 +126,14 @@ QVariant QgsFeatureListModel::data( const QModelIndex &index, int role ) const
Qt::ItemFlags QgsFeatureListModel::flags( const QModelIndex &index ) const
{
return sourceModel()->flags( mapToSource( index ) ) & ~Qt::ItemIsEditable;
if ( mInjectNull && index.row() == 0 )
{
return Qt::ItemIsSelectable | Qt::ItemIsEnabled;
}
else
{
return sourceModel()->flags( mapToSource( index ) ) & ~Qt::ItemIsEditable;
}
}
void QgsFeatureListModel::setInjectNull( bool injectNull )

View File

@ -535,7 +535,8 @@ void QgsRelationReferenceWidget::init()
}
}
mComboBox->setCurrentIndex( mComboBox->findData( mFeature.id(), QgsAttributeTableModel::FeatureIdRole ) );
QVariant featId = mFeature.isValid() ? mFeature.id() : QVariant( QVariant::Int );
mComboBox->setCurrentIndex( mComboBox->findData( featId, QgsAttributeTableModel::FeatureIdRole ) );
// Only connect after iterating, to have only one iterator on the referenced table at once
connect( mComboBox, SIGNAL( currentIndexChanged( int ) ), this, SLOT( comboReferenceChanged( int ) ) );