23 #include <QMessageBox>
26 : QDialog( parent, fl )
27 , mIsShapeFile( vlayer && vlayer->providerType() == QLatin1String(
"ogr" ) && vlayer->storageType() == QLatin1String(
"ESRI Shapefile" ) )
30 connect( mTypeBox,
static_cast<void ( QComboBox::* )(
int )
>( &QComboBox::currentIndexChanged ),
this, &QgsAddAttrDialog::mTypeBox_currentIndexChanged );
31 connect( mLength, &QSpinBox::editingFinished,
this, &QgsAddAttrDialog::mLength_editingFinished );
38 for (
int i = 0; i < typelist.size(); i++ )
40 QgsDebugMsg( QStringLiteral(
"name:%1 type:%2 typeName:%3 length:%4-%5 prec:%6-%7" )
41 .arg( typelist[i].mTypeDesc )
42 .arg( typelist[i].mType )
43 .arg( typelist[i].mTypeName )
44 .arg( typelist[i].mMinLen ).arg( typelist[i].mMaxLen )
45 .arg( typelist[i].mMinPrec ).arg( typelist[i].mMaxPrec ) );
48 mTypeBox->setItemData( i,
static_cast<int>( typelist[i].mType ), Qt::UserRole );
49 mTypeBox->setItemData( i, typelist[i].mTypeName, Qt::UserRole + 1 );
50 mTypeBox->setItemData( i, typelist[i].mMinLen, Qt::UserRole + 2 );
51 mTypeBox->setItemData( i, typelist[i].mMaxLen, Qt::UserRole + 3 );
52 mTypeBox->setItemData( i, typelist[i].mMinPrec, Qt::UserRole + 4 );
53 mTypeBox->setItemData( i, typelist[i].mMaxPrec, Qt::UserRole + 5 );
57 mLength->setValue( 10 );
59 mTypeBox_currentIndexChanged( 0 );
62 mNameEdit->setMaxLength( 10 );
64 mNameEdit->setFocus();
67 void QgsAddAttrDialog::mTypeBox_currentIndexChanged(
int idx )
69 mTypeName->setText( mTypeBox->itemData( idx, Qt::UserRole + 1 ).toString() );
71 mLength->setMinimum( mTypeBox->itemData( idx, Qt::UserRole + 2 ).toInt() );
72 mLength->setMaximum( mTypeBox->itemData( idx, Qt::UserRole + 3 ).toInt() );
73 mLength->setVisible( mLength->minimum() < mLength->maximum() );
74 mLengthLabel->setVisible( mLength->minimum() < mLength->maximum() );
75 if ( mLength->value() < mLength->minimum() )
76 mLength->setValue( mLength->minimum() );
77 if ( mLength->value() > mLength->maximum() )
78 mLength->setValue( mLength->maximum() );
82 void QgsAddAttrDialog::mLength_editingFinished()
87 void QgsAddAttrDialog::setPrecisionMinMax()
89 int idx = mTypeBox->currentIndex();
90 int minPrecType = mTypeBox->itemData( idx, Qt::UserRole + 4 ).toInt();
91 int maxPrecType = mTypeBox->itemData( idx, Qt::UserRole + 5 ).toInt();
92 bool precisionIsEnabled = minPrecType < maxPrecType;
93 mPrec->setVisible( precisionIsEnabled );
94 mPrecLabel->setVisible( precisionIsEnabled );
99 if ( precisionIsEnabled )
101 mPrec->setMinimum( minPrecType );
102 mPrec->setMaximum( std::max( minPrecType, std::min( maxPrecType, mLength->value() ) ) );
106 void QgsAddAttrDialog::accept()
108 if ( mIsShapeFile && mNameEdit->text().compare( QLatin1String(
"shape" ), Qt::CaseInsensitive ) == 0 )
110 QMessageBox::warning(
this, tr(
"Add Field" ),
111 tr(
"Invalid field name. This field name is reserved and cannot be used." ) );
114 if ( mNameEdit->text().isEmpty() )
116 QMessageBox::warning(
this, tr(
"Add Field" ),
117 tr(
"No name specified. Please specify a name to create a new field." ) );
127 QgsDebugMsg( QStringLiteral(
"idx:%1 name:%2 type:%3 typeName:%4 length:%5 prec:%6 comment:%7" )
128 .arg( mTypeBox->currentIndex() )
129 .arg( mNameEdit->text() )
130 .arg( mTypeBox->currentData( Qt::UserRole ).toInt() )
131 .arg( mTypeBox->currentData( Qt::UserRole + 1 ).toString() )
132 .arg( mLength->value() )
133 .arg( mPrec->value() )
134 .arg( mCommentEdit->text() ) );
138 ( QVariant::Type ) mTypeBox->currentData( Qt::UserRole ).toInt(),
139 mTypeBox->currentData( Qt::UserRole + 1 ).toString(),
142 mCommentEdit->text(),
143 static_cast<QVariant::Type
>( mTypeBox->currentData( Qt::UserRole ).toInt() ) == QVariant::Map ? QVariant::String : QVariant::Invalid