@@ -38,8 +38,13 @@ def __init__(self, inLayer, inDb, parent=None):
3838 self .db = inDb
3939 self .setupUi (self )
4040
41+ vectorFilterName = "lastVectorFileFilter" # "lastRasterFileFilter"
42+ self .lastUsedVectorFilterSettingsKey = u"/UI/{0}" .format (vectorFilterName )
43+ self .lastUsedVectorDirSettingsKey = u"/UI/{0}Dir" .format (vectorFilterName )
44+
4145 # update UI
4246 self .setupWorkingMode ()
47+ self .populateFileFilters ()
4348 self .populateEncodings ()
4449
4550 def setupWorkingMode (self ):
@@ -61,18 +66,21 @@ def checkSupports(self):
6166 # self.chkSpatialIndex.setEnabled(allowSpatial and hasGeomType)
6267
6368 def chooseOutputFile (self ):
64- # get last used dir and format
69+ # get last used dir
6570 settings = QSettings ()
66- lastDir = settings .value ("/db_manager/lastUsedDir" , "" )
71+ lastUsedDir = settings .value ( self .lastUsedVectorDirSettingsKey , "." );
72+
73+ # get selected filter
74+ selectedFilter = self .cboFileFormat .itemData (self .cboFileFormat .currentIndex ())
75+
6776 # ask for a filename
68- filename = QFileDialog .getSaveFileName (self , self .tr ("Choose where to save the file" ), lastDir ,
69- self . tr ( "Shapefiles" ) + " (*.shp)" )
77+ filename = QFileDialog .getSaveFileName (self , self .tr ("Choose where to save the file" ), lastUsedDir ,
78+ selectedFilter )
7079 if filename == "" :
7180 return
72- if filename [- 4 :] != ".shp" :
73- filename += ".shp"
74- # store the last used dir and format
75- settings .setValue ("/db_manager/lastUsedDir" , QFileInfo (filename ).filePath ())
81+
82+ # store the last used dir
83+ settings .setValue ( self .lastUsedVectorDirSettingsKey , QFileInfo (filename ).filePath () )
7684
7785 self .editOutputFile .setText (filename )
7886
@@ -88,10 +96,25 @@ def populateEncodings(self):
8896 idx = 0
8997 self .cboEncoding .setCurrentIndex (idx )
9098
99+ def populateFileFilters (self ):
100+ # populate the combo with supported vector file formats
101+ for name , filt in qgis .core .QgsVectorFileWriter .ogrDriverList ().iteritems ():
102+ self .cboFileFormat .addItem (name , filt )
103+
104+ # set the last used filter
105+ settings = QSettings ()
106+ filt = settings .value ( self .lastUsedVectorFilterSettingsKey , "ESRI Shapefile" );
107+
108+ idx = self .cboFileFormat .findText (filt )
109+ if idx < 0 :
110+ idx = 0
111+ self .cboFileFormat .setCurrentIndex (idx )
112+
113+
91114 def accept (self ):
92115 # sanity checks
93116 if self .editOutputFile .text () == "" :
94- QMessageBox .information (self , self .tr ("Export to file" ), self .tr ("Output table name is required" ))
117+ QMessageBox .information (self , self .tr ("Export to file" ), self .tr ("Output file name is required" ))
95118 return
96119
97120 if self .chkSourceSrid .isEnabled () and self .chkSourceSrid .isChecked ():
@@ -117,12 +140,13 @@ def accept(self):
117140 try :
118141 uri = self .editOutputFile .text ()
119142 providerName = "ogr"
120- driverName = "ESRI Shapefile"
121143
122144 options = {}
123145
124146 # set the OGR driver will be used
147+ driverName = self .cboFileFormat .itemData (self .cboFileFormat .currentIndex ())
125148 options ['driverName' ] = driverName
149+
126150 # set the output file encoding
127151 if self .chkEncoding .isEnabled () and self .chkEncoding .isChecked ():
128152 enc = self .cboEncoding .currentText ()
0 commit comments