21
21
#include " qgslogger.h"
22
22
#include " qgscoordinatereferencesystem.h"
23
23
#include " qgsgenericprojectionselector.h"
24
- #include < QPushButton>
24
+ #include " qgsproviderregistry.h"
25
+ #include " qgsvectordataprovider.h"
26
+ #include " qgsvectorfilewriter.h"
25
27
28
+ #include < QPushButton>
29
+ #include < QComboBox>
26
30
#include < QLibrary>
27
31
#include < QSettings>
28
- #include " qgsencodingfiledialog.h"
29
- #include " qgsproviderregistry.h"
32
+ #include < QFileDialog>
30
33
31
34
32
35
QgsNewVectorLayerDialog::QgsNewVectorLayerDialog ( QWidget *parent, Qt::WFlags fl )
@@ -61,6 +64,21 @@ QgsNewVectorLayerDialog::QgsNewVectorLayerDialog( QWidget *parent, Qt::WFlags fl
61
64
mFileFormatLabel ->setVisible ( false );
62
65
}
63
66
67
+ mFileEncoding ->addItems ( QgsVectorDataProvider::availableEncodings () );
68
+
69
+ // Use default encoding if none supplied
70
+ QString enc = QSettings ().value ( " /UI/encoding" , " System" ).toString ();
71
+
72
+ // The specified decoding is added if not existing alread, and then set current.
73
+ // This should select it.
74
+ int encindex = mFileEncoding ->findText ( enc );
75
+ if ( encindex < 0 )
76
+ {
77
+ mFileEncoding ->insertItem ( 0 , enc );
78
+ encindex = 0 ;
79
+ }
80
+ mFileEncoding ->setCurrentIndex ( encindex );
81
+
64
82
mOkButton = buttonBox->button ( QDialogButtonBox::Ok );
65
83
66
84
mAttributeView ->addTopLevelItem ( new QTreeWidgetItem ( QStringList () << " id" << " Integer" << " 10" << " " ) );
@@ -203,6 +221,11 @@ QString QgsNewVectorLayerDialog::selectedFileFormat() const
203
221
return myType;
204
222
}
205
223
224
+ QString QgsNewVectorLayerDialog::selectedFileEncoding () const
225
+ {
226
+ return mFileEncoding ->currentText ();
227
+ }
228
+
206
229
void QgsNewVectorLayerDialog::nameChanged ( QString name )
207
230
{
208
231
mAddAttributeButton ->setDisabled ( name.isEmpty () || mAttributeView ->findItems ( name, Qt::MatchExactly ).size () > 0 );
@@ -225,50 +248,27 @@ QString QgsNewVectorLayerDialog::runAndCreateLayer( QWidget* parent, QString* pE
225
248
226
249
QGis::WkbType geometrytype = geomDialog.selectedType ();
227
250
QString fileformat = geomDialog.selectedFileFormat ();
251
+ QString enc = geomDialog.selectedFileEncoding ();
228
252
int crsId = geomDialog.selectedCrsId ();
229
253
QgsDebugMsg ( QString ( " New file format will be: %1" ).arg ( fileformat ) );
230
254
231
255
QList< QPair<QString, QString> > attributes;
232
256
geomDialog.attributes ( attributes );
233
257
234
- QString enc;
235
- QString fileName;
236
-
237
258
QSettings settings;
238
259
QString lastUsedDir = settings.value ( " /UI/lastVectorFileFilterDir" , " ." ).toString ();
239
-
240
- QgsDebugMsg ( " Saving vector file dialog without filters: " );
241
-
242
- QgsEncodingFileDialog* openFileDialog =
243
- new QgsEncodingFileDialog ( parent, tr ( " Save As" ), lastUsedDir, " " , QString ( " " ) );
244
-
245
- openFileDialog->setFileMode ( QFileDialog::AnyFile );
246
- openFileDialog->setAcceptMode ( QFileDialog::AcceptSave );
247
- openFileDialog->setConfirmOverwrite ( true );
248
-
249
- if ( settings.contains ( " /UI/lastVectorFileFilter" ) )
250
- {
251
- QString lastUsedFilter = settings.value ( " /UI/lastVectorFileFilter" , QVariant ( QString::null ) ).toString ();
252
- openFileDialog->selectFilter ( lastUsedFilter );
253
- }
254
-
255
- if ( openFileDialog->exec () == QDialog::Rejected )
260
+ QString filterString = QgsVectorFileWriter::filterForDriver ( fileformat );
261
+ QString fileName = QFileDialog::getSaveFileName ( 0 , tr ( " Save layer as..." ), lastUsedDir, filterString );
262
+ if ( fileName.isNull () )
256
263
{
257
- delete openFileDialog;
258
- return QString ();
264
+ return fileName;
259
265
}
260
266
261
- fileName = openFileDialog->selectedFiles ().first ();
262
-
263
267
if ( fileformat == " ESRI Shapefile" && !fileName.endsWith ( " .shp" , Qt::CaseInsensitive ) )
264
268
fileName += " .shp" ;
265
269
266
- enc = openFileDialog->encoding ();
267
-
268
- settings.setValue ( " /UI/lastVectorFileFilter" , openFileDialog->selectedFilter () );
269
- settings.setValue ( " /UI/lastVectorFileFilterDir" , openFileDialog->directory ().absolutePath () );
270
-
271
- delete openFileDialog;
270
+ settings.setValue ( " /UI/lastVectorFileFilterDir" , QFileInfo ( fileName ).absolutePath () );
271
+ settings.setValue ( " /UI/encoding" , enc );
272
272
273
273
// try to create the new layer with OGRProvider instead of QgsVectorFileWriter
274
274
QgsProviderRegistry * pReg = QgsProviderRegistry::instance ();
0 commit comments