@@ -35,7 +35,6 @@ QgsAddAttrDialog::QgsAddAttrDialog( QgsVectorLayer *vlayer, QWidget *parent, Qt:
35
35
36
36
// fill data types into the combo box
37
37
const QList< QgsVectorDataProvider::NativeType > &typelist = vlayer->dataProvider ()->nativeTypes ();
38
-
39
38
for ( int i = 0 ; i < typelist.size (); i++ )
40
39
{
41
40
QgsDebugMsg ( QStringLiteral ( " name:%1 type:%2 typeName:%3 length:%4-%5 prec:%6-%7" )
@@ -45,7 +44,7 @@ QgsAddAttrDialog::QgsAddAttrDialog( QgsVectorLayer *vlayer, QWidget *parent, Qt:
45
44
.arg ( typelist[i].mMinLen ).arg ( typelist[i].mMaxLen )
46
45
.arg ( typelist[i].mMinPrec ).arg ( typelist[i].mMaxPrec ) );
47
46
48
- mTypeBox ->addItem ( typelist[i].mTypeDesc );
47
+ whileBlocking ( mTypeBox ) ->addItem ( typelist[i].mTypeDesc );
49
48
mTypeBox ->setItemData ( i, static_cast <int >( typelist[i].mType ), Qt::UserRole );
50
49
mTypeBox ->setItemData ( i, typelist[i].mTypeName , Qt::UserRole + 1 );
51
50
mTypeBox ->setItemData ( i, typelist[i].mMinLen , Qt::UserRole + 2 );
@@ -54,6 +53,9 @@ QgsAddAttrDialog::QgsAddAttrDialog( QgsVectorLayer *vlayer, QWidget *parent, Qt:
54
53
mTypeBox ->setItemData ( i, typelist[i].mMaxPrec , Qt::UserRole + 5 );
55
54
}
56
55
56
+ // default values for field width and precision
57
+ mLength ->setValue ( 10 );
58
+ mPrec ->setValue ( 3 );
57
59
mTypeBox_currentIndexChanged ( 0 );
58
60
59
61
if ( mIsShapeFile )
@@ -87,10 +89,18 @@ void QgsAddAttrDialog::setPrecisionMinMax()
87
89
int idx = mTypeBox ->currentIndex ();
88
90
int minPrecType = mTypeBox ->itemData ( idx, Qt::UserRole + 4 ).toInt ();
89
91
int maxPrecType = mTypeBox ->itemData ( idx, Qt::UserRole + 5 ).toInt ();
90
- mPrec ->setVisible ( minPrecType < maxPrecType );
91
- mPrecLabel ->setVisible ( minPrecType < maxPrecType );
92
- mPrec ->setMinimum ( minPrecType );
93
- mPrec ->setMaximum ( std::max ( minPrecType, std::min ( maxPrecType, mLength ->value () ) ) );
92
+ bool precisionIsEnabled = minPrecType < maxPrecType;
93
+ mPrec ->setVisible ( precisionIsEnabled );
94
+ mPrecLabel ->setVisible ( precisionIsEnabled );
95
+
96
+ // Do not set min/max if it's disabled or we'll loose the default value,
97
+ // see https://github.com/qgis/QGIS/issues/26880 - QGIS saves integer field when
98
+ // I create a new real field through field calculator (Update field works as intended)
99
+ if ( precisionIsEnabled )
100
+ {
101
+ mPrec ->setMinimum ( minPrecType );
102
+ mPrec ->setMaximum ( std::max ( minPrecType, std::min ( maxPrecType, mLength ->value () ) ) );
103
+ }
94
104
}
95
105
96
106
void QgsAddAttrDialog::accept ()
0 commit comments