27 #include <QPushButton>
31 #include <QFileDialog>
35 : QDialog( parent, fl )
40 restoreGeometry( settings.value(
"/Windows/NewVectorLayer/geometry" ).toByteArray() );
44 mTypeBox->addItem(
tr(
"Text data" ),
"String" );
45 mTypeBox->addItem(
tr(
"Whole number" ),
"Integer" );
46 mTypeBox->addItem(
tr(
"Decimal number" ),
"Real" );
47 mTypeBox->addItem(
tr(
"Date" ),
"Date" );
49 mWidth->setValidator(
new QIntValidator( 1, 255,
this ) );
50 mPrecision->setValidator(
new QIntValidator( 0, 15,
this ) );
52 mPointRadioButton->setChecked(
true );
53 mFileFormatComboBox->addItem(
tr(
"ESRI Shapefile" ),
"ESRI Shapefile" );
56 mFileFormatComboBox->addItem(
tr(
"Comma Separated Value" ),
"Comma Separated Value" );
57 mFileFormatComboBox->addItem(
tr(
"GML" ),
"GML" );
58 mFileFormatComboBox->addItem(
tr(
"Mapinfo File" ),
"Mapinfo File" );
60 if ( mFileFormatComboBox->count() == 1 )
62 mFileFormatComboBox->setVisible(
false );
63 mFileFormatLabel->setVisible(
false );
66 mFileFormatComboBox->setCurrentIndex( 0 );
71 QString enc = QSettings().value(
"/UI/encoding",
"System" ).toString();
75 int encindex = mFileEncoding->findText( enc );
78 mFileEncoding->insertItem( 0, enc );
81 mFileEncoding->setCurrentIndex( encindex );
83 mOkButton = buttonBox->button( QDialogButtonBox::Ok );
85 mAttributeView->addTopLevelItem(
new QTreeWidgetItem( QStringList() <<
"id" <<
"Integer" <<
"10" <<
"" ) );
90 mCrsSelector->setCrs( defaultCrs );
92 connect( mNameEdit, SIGNAL( textChanged( QString ) ),
this, SLOT(
nameChanged( QString ) ) );
93 connect( mAttributeView, SIGNAL( itemSelectionChanged() ),
this, SLOT(
selectionChanged() ) );
95 mAddAttributeButton->setEnabled(
false );
96 mRemoveAttributeButton->setEnabled(
false );
102 settings.setValue(
"/Windows/NewVectorLayer/geometry", saveGeometry() );
108 if ( mFileFormatComboBox->currentText() ==
tr(
"ESRI Shapefile" ) )
109 mNameEdit->setMaxLength( 10 );
111 mNameEdit->setMaxLength( 32767 );
120 if ( mWidth->text().toInt() < 1 || mWidth->text().toInt() > 255 )
121 mWidth->setText(
"80" );
122 mPrecision->setEnabled(
false );
123 mWidth->setValidator(
new QIntValidator( 1, 255,
this ) );
127 if ( mWidth->text().toInt() < 1 || mWidth->text().toInt() > 10 )
128 mWidth->setText(
"10" );
129 mPrecision->setEnabled(
false );
130 mWidth->setValidator(
new QIntValidator( 1, 10,
this ) );
134 if ( mWidth->text().toInt() < 1 || mWidth->text().toInt() > 20 )
135 mWidth->setText(
"20" );
136 mPrecision->setEnabled(
true );
137 mWidth->setValidator(
new QIntValidator( 1, 20,
this ) );
148 if ( mPointRadioButton->isChecked() )
152 else if ( mLineRadioButton->isChecked() )
156 else if ( mPolygonRadioButton->isChecked() )
165 return mCrsSelector->crs().srsid();
170 QString myName = mNameEdit->text();
171 QString myWidth = mWidth->text();
172 QString myPrecision = mPrecision->isEnabled() ? mPrecision->text() :
"";
174 QString myType = mTypeBox->itemData( mTypeBox->currentIndex(), Qt::UserRole ).toString();
175 mAttributeView->addTopLevelItem(
new QTreeWidgetItem( QStringList() << myName << myType << myWidth << myPrecision ) );
176 if ( mAttributeView->topLevelItemCount() > 0 )
178 mOkButton->setEnabled(
true );
185 delete mAttributeView->currentItem();
186 if ( mAttributeView->topLevelItemCount() == 0 )
188 mOkButton->setEnabled(
false );
194 QTreeWidgetItemIterator it( mAttributeView );
197 QTreeWidgetItem *item = *it;
198 QString type = QString(
"%1;%2;%3" ).arg( item->text( 1 ) ).arg( item->text( 2 ) ).arg( item->text( 3 ) );
199 at.push_back( qMakePair( item->text( 0 ), type ) );
200 QgsDebugMsg( QString(
"appending %1//%2" ).arg( item->text( 0 ) ).arg( type ) );
208 QString myType = mFileFormatComboBox->itemData( mFileFormatComboBox->currentIndex(), Qt::UserRole ).toString();
214 return mFileEncoding->currentText();
219 mAddAttributeButton->setDisabled( name.isEmpty() || mAttributeView->findItems( name, Qt::MatchExactly ).size() > 0 );
224 mRemoveAttributeButton->setDisabled( mAttributeView->selectedItems().size() == 0 );
232 if ( geomDialog.exec() == QDialog::Rejected )
241 QgsDebugMsg( QString(
"New file format will be: %1" ).arg( fileformat ) );
247 QString lastUsedDir = settings.value(
"/UI/lastVectorFileFilterDir",
"." ).toString();
249 QString fileName = QFileDialog::getSaveFileName( 0,
tr(
"Save layer as..." ), lastUsedDir, filterString );
250 if ( fileName.isNull() )
255 if ( fileformat ==
"ESRI Shapefile" && !fileName.endsWith(
".shp", Qt::CaseInsensitive ) )
258 settings.setValue(
"/UI/lastVectorFileFilterDir", QFileInfo( fileName ).absolutePath() );
259 settings.setValue(
"/UI/encoding", enc );
263 QString ogrlib = pReg->
library(
"ogr" );
265 QLibrary* myLib =
new QLibrary( ogrlib );
266 bool loaded = myLib->load();
271 typedef bool ( *createEmptyDataSourceProc )(
const QString&,
const QString&,
const QString&,
QGis::WkbType,
273 createEmptyDataSourceProc createEmptyDataSource = ( createEmptyDataSourceProc )
cast_to_fptr( myLib->resolve(
"createEmptyDataSource" ) );
274 if ( createEmptyDataSource )
279 if ( !createEmptyDataSource( fileName, fileformat, enc, geometrytype, attributes, &srs ) )
281 return QString::null;
287 return QString::null;
292 QgsDebugMsg(
"Resolving newEmptyDataSource(...) failed" );
293 return QString::null;