Skip to content

Commit

Permalink
Address PR comments
Browse files Browse the repository at this point in the history
  • Loading branch information
elpaso committed Jun 6, 2024
1 parent d92f26d commit 9c0cb0f
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 28 deletions.
47 changes: 27 additions & 20 deletions src/gui/editorwidgets/qgsvaluemapconfigdlg.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -93,13 +93,13 @@ void QgsValueMapConfigDlg::setConfig( const QVariantMap &config )
}

QList<QVariant> valueList = config.value( QStringLiteral( "map" ) ).toList();
QList<QPair<QString, QVariant>> orderedMap;
QList<QPair<QString, QVariant>> orderedList;

if ( valueList.count() > 0 )
{
for ( int i = 0, row = 0; i < valueList.count(); i++, row++ )
{
orderedMap.append( qMakePair( valueList[i].toMap().constBegin().key(), valueList[i].toMap().constBegin().value() ) );
orderedList.append( qMakePair( valueList[i].toMap().constBegin().key(), valueList[i].toMap().constBegin().value() ) );
}
}
else
Expand All @@ -109,13 +109,13 @@ void QgsValueMapConfigDlg::setConfig( const QVariantMap &config )
for ( QVariantMap::ConstIterator mit = values.constBegin(); mit != values.constEnd(); mit++, row++ )
{
if ( QgsVariantUtils::isNull( mit.value() ) )
orderedMap.append( qMakePair( mit.key(), QVariant() ) );
orderedList.append( qMakePair( mit.key(), QVariant() ) );
else
orderedMap.append( qMakePair( mit.key(), mit.value() ) );
orderedList.append( qMakePair( mit.key(), mit.value() ) );
}
}

updateMap( orderedMap, false );
updateMap( orderedList, false );

}

Expand All @@ -127,18 +127,21 @@ void QgsValueMapConfigDlg::vCellChanged( int row, int column )
tableWidget->insertRow( row + 1 );
} //else check type

// check cell value
QTableWidgetItem *item = tableWidget->item( row, 0 );
if ( item )
if ( layer()->fields().exists( field() ) )
{
const QString validValue = checkValueLength( item->text() );
if ( validValue.length() != item->text().length() )
// check cell value
QTableWidgetItem *item = tableWidget->item( row, 0 );
if ( item )
{
const QString errorMessage = tr( "Value '%1' has been trimmed (maximum field length: %2)" )
.arg( item->text(), QString::number( layer()->fields().field( field() ).length() ) );
item->setText( validValue );
mValueMapErrorsLabel->setVisible( true );
mValueMapErrorsLabel->setText( QStringLiteral( "%1<br>%2" ).arg( errorMessage, mValueMapErrorsLabel->text() ) );
const QString validValue = checkValueLength( item->text() );
if ( validValue.length() != item->text().length() )
{
const QString errorMessage = tr( "Value '%1' has been trimmed (maximum field length: %2)" )
.arg( item->text(), QString::number( layer()->fields().field( field() ).length() ) );
item->setText( validValue );
mValueMapErrorsLabel->setVisible( true );
mValueMapErrorsLabel->setText( QStringLiteral( "%1<br>%2" ).arg( errorMessage, mValueMapErrorsLabel->text() ) );
}
}
}

Expand Down Expand Up @@ -201,7 +204,8 @@ void QgsValueMapConfigDlg::updateMap( const QList<QPair<QString, QVariant>> &lis

constexpr int maxOverflowErrors { 5 };
QStringList reportedErrors;
const QgsField mappedField { layer()->fields().field( field() ) };
const bool hasField { layer()->fields().exists( field() ) };
const QgsField mappedField { hasField ? layer()->fields().field( field() ) : QgsField() };

for ( const auto &pair : list )
{
Expand All @@ -211,7 +215,7 @@ void QgsValueMapConfigDlg::updateMap( const QList<QPair<QString, QVariant>> &lis
{
const QString value { pair.first };
// Check value
const QString validValue = checkValueLength( value );
const QString validValue = checkValueLength( value ) ;

if ( validValue.length() != value.length() )
{
Expand Down Expand Up @@ -243,10 +247,13 @@ void QgsValueMapConfigDlg::updateMap( const QList<QPair<QString, QVariant>> &lis

QString QgsValueMapConfigDlg::checkValueLength( const QString &value )
{
const QgsField mappedField { layer()->fields().field( field() ) };
if ( mappedField.length() > 0 && value.length() > mappedField.length() )
if ( layer()->fields().exists( field() ) )
{
return value.mid( 0, mappedField.length() );
const QgsField mappedField { layer()->fields().field( field() ) };
if ( mappedField.length() > 0 && value.length() > mappedField.length() )
{
return value.mid( 0, mappedField.length() );
}
}
return value;
}
Expand Down
16 changes: 8 additions & 8 deletions src/gui/editorwidgets/qgsvaluemapconfigdlg.h
Original file line number Diff line number Diff line change
Expand Up @@ -58,14 +58,6 @@ class GUI_EXPORT QgsValueMapConfigDlg : public QgsEditorConfigWidget, private Ui
*/
void updateMap( const QList<QPair<QString, QVariant>> &list, bool insertNull );

/**
* Validates a value against the maximum allowed field length and trims it is necessary.
* \param value
* \return the validated field value trimmed if necessary
* \since QGIS 3.38
*/
QString checkValueLength( const QString &value );

/**
* Updates the displayed table with the values from a CSV file.
* \param filePath the absolute file path of the CSV file.
Expand All @@ -86,6 +78,14 @@ class GUI_EXPORT QgsValueMapConfigDlg : public QgsEditorConfigWidget, private Ui
private:
void setRow( int row, const QString &value, const QString &description );

/**
* Validates a value against the maximum allowed field length and trims it is necessary.
* \param value
* \return the validated field value trimmed if necessary
*/
QString checkValueLength( const QString &value );


private slots:
void copySelectionToClipboard();
void vCellChanged( int row, int column );
Expand Down

0 comments on commit 9c0cb0f

Please sign in to comment.