Skip to content

Commit

Permalink
don't allow field precision greater than field width (fix #14019, #5154)
Browse files Browse the repository at this point in the history
  • Loading branch information
alexbruy committed Jan 17, 2016
1 parent f966c42 commit 9d473aa
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 7 deletions.
20 changes: 13 additions & 7 deletions src/app/qgsfieldcalculator.cpp
Expand Up @@ -54,6 +54,7 @@ QgsFieldCalculator::QgsFieldCalculator( QgsVectorLayer* vl )
populateOutputFieldTypes();

connect( builder, SIGNAL( expressionParsed( bool ) ), this, SLOT( setOkButtonState() ) );
connect( mOutputFieldWidthSpinBox, SIGNAL( editingFinished() ), this, SLOT( setPrecisionMinMax() ) );

QgsDistanceArea myDa;
myDa.setSourceCrs( vl->crs().srsid() );
Expand All @@ -64,6 +65,7 @@ QgsFieldCalculator::QgsFieldCalculator( QgsVectorLayer* vl )
//default values for field width and precision
mOutputFieldWidthSpinBox->setValue( 10 );
mOutputFieldPrecisionSpinBox->setValue( 3 );
setPrecisionMinMax();

if ( vl->providerType() == "ogr" && vl->storageType() == "ESRI Shapefile" )
{
Expand Down Expand Up @@ -420,13 +422,7 @@ void QgsFieldCalculator::on_mOutputFieldTypeComboBox_activated( int index )
if ( mOutputFieldWidthSpinBox->value() > mOutputFieldWidthSpinBox->maximum() )
mOutputFieldWidthSpinBox->setValue( mOutputFieldWidthSpinBox->maximum() );

mOutputFieldPrecisionSpinBox->setMinimum( mOutputFieldTypeComboBox->itemData( index, Qt::UserRole + 4 ).toInt() );
mOutputFieldPrecisionSpinBox->setMaximum( mOutputFieldTypeComboBox->itemData( index, Qt::UserRole + 5 ).toInt() );
mOutputFieldPrecisionSpinBox->setEnabled( mOutputFieldPrecisionSpinBox->minimum() < mOutputFieldPrecisionSpinBox->maximum() );
if ( mOutputFieldPrecisionSpinBox->value() < mOutputFieldPrecisionSpinBox->minimum() )
mOutputFieldPrecisionSpinBox->setValue( mOutputFieldPrecisionSpinBox->minimum() );
if ( mOutputFieldPrecisionSpinBox->value() > mOutputFieldPrecisionSpinBox->maximum() )
mOutputFieldPrecisionSpinBox->setValue( mOutputFieldPrecisionSpinBox->maximum() );
setPrecisionMinMax();
}

void QgsFieldCalculator::populateFields()
Expand Down Expand Up @@ -477,3 +473,13 @@ void QgsFieldCalculator::setOkButtonState()
okButton->setToolTip( "" );
okButton->setEnabled( true );
}

void QgsFieldCalculator::setPrecisionMinMax()
{
int idx = mOutputFieldTypeComboBox->currentIndex();
int minPrecType = mOutputFieldTypeComboBox->itemData( idx, Qt::UserRole + 4 ).toInt();
int maxPrecType = mOutputFieldTypeComboBox->itemData( idx, Qt::UserRole + 5 ).toInt();
mOutputFieldPrecisionSpinBox->setEnabled( minPrecType < maxPrecType );
mOutputFieldPrecisionSpinBox->setMinimum( minPrecType );
mOutputFieldPrecisionSpinBox->setMaximum( qMax( minPrecType, qMin( maxPrecType, mOutputFieldWidthSpinBox->value() ) ) );
}
1 change: 1 addition & 0 deletions src/app/qgsfieldcalculator.h
Expand Up @@ -45,6 +45,7 @@ class APP_EXPORT QgsFieldCalculator: public QDialog, private Ui::QgsFieldCalcula
private slots:
/** Sets the ok button enabled / disabled*/
void setOkButtonState();
void setPrecisionMinMax();

private:
//! default constructor forbidden
Expand Down

0 comments on commit 9d473aa

Please sign in to comment.