Skip to content

Commit 9d473aa

Browse files
committedJan 17, 2016
don't allow field precision greater than field width (fix #14019, #5154)
1 parent f966c42 commit 9d473aa

File tree

2 files changed

+14
-7
lines changed

2 files changed

+14
-7
lines changed
 

‎src/app/qgsfieldcalculator.cpp

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ QgsFieldCalculator::QgsFieldCalculator( QgsVectorLayer* vl )
5454
populateOutputFieldTypes();
5555

5656
connect( builder, SIGNAL( expressionParsed( bool ) ), this, SLOT( setOkButtonState() ) );
57+
connect( mOutputFieldWidthSpinBox, SIGNAL( editingFinished() ), this, SLOT( setPrecisionMinMax() ) );
5758

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

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

423-
mOutputFieldPrecisionSpinBox->setMinimum( mOutputFieldTypeComboBox->itemData( index, Qt::UserRole + 4 ).toInt() );
424-
mOutputFieldPrecisionSpinBox->setMaximum( mOutputFieldTypeComboBox->itemData( index, Qt::UserRole + 5 ).toInt() );
425-
mOutputFieldPrecisionSpinBox->setEnabled( mOutputFieldPrecisionSpinBox->minimum() < mOutputFieldPrecisionSpinBox->maximum() );
426-
if ( mOutputFieldPrecisionSpinBox->value() < mOutputFieldPrecisionSpinBox->minimum() )
427-
mOutputFieldPrecisionSpinBox->setValue( mOutputFieldPrecisionSpinBox->minimum() );
428-
if ( mOutputFieldPrecisionSpinBox->value() > mOutputFieldPrecisionSpinBox->maximum() )
429-
mOutputFieldPrecisionSpinBox->setValue( mOutputFieldPrecisionSpinBox->maximum() );
425+
setPrecisionMinMax();
430426
}
431427

432428
void QgsFieldCalculator::populateFields()
@@ -477,3 +473,13 @@ void QgsFieldCalculator::setOkButtonState()
477473
okButton->setToolTip( "" );
478474
okButton->setEnabled( true );
479475
}
476+
477+
void QgsFieldCalculator::setPrecisionMinMax()
478+
{
479+
int idx = mOutputFieldTypeComboBox->currentIndex();
480+
int minPrecType = mOutputFieldTypeComboBox->itemData( idx, Qt::UserRole + 4 ).toInt();
481+
int maxPrecType = mOutputFieldTypeComboBox->itemData( idx, Qt::UserRole + 5 ).toInt();
482+
mOutputFieldPrecisionSpinBox->setEnabled( minPrecType < maxPrecType );
483+
mOutputFieldPrecisionSpinBox->setMinimum( minPrecType );
484+
mOutputFieldPrecisionSpinBox->setMaximum( qMax( minPrecType, qMin( maxPrecType, mOutputFieldWidthSpinBox->value() ) ) );
485+
}

‎src/app/qgsfieldcalculator.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ class APP_EXPORT QgsFieldCalculator: public QDialog, private Ui::QgsFieldCalcula
4545
private slots:
4646
/** Sets the ok button enabled / disabled*/
4747
void setOkButtonState();
48+
void setPrecisionMinMax();
4849

4950
private:
5051
//! default constructor forbidden

0 commit comments

Comments
 (0)