@@ -80,68 +80,8 @@ def run(self):
80
80
# create and show the MapServerExport dialog
81
81
self .dlg = MapServerExportDialog ()
82
82
83
- # TODO: should come from settings
84
- self .dlg .ui .txtMapFilePath .setText ('/usr/lib/cgi-bin/kaas.map' )
85
-
86
- # project defaults to current instance
87
- project = QgsProject .instance ()
88
-
89
- # question: save project on loading export dialog?
90
- if project .isDirty ():
91
- shouldSave = QMessageBox .question (self .dlg ,
92
- "Save?" ,
93
- "Save project to \" " + project .fileName () + "\" before exporting? Only the last saved version of your project will be exported." ,
94
- QMessageBox .Yes ,
95
- QMessageBox .No ,
96
- QMessageBox .Cancel
97
- )
98
- if shouldSave == QMessageBox .Yes :
99
- if project .fileName ().size () == 0 :
100
- # project has not yet been saved:
101
- saveAsFileName = QFileDialog .getSaveFileName (self .dlg ,
102
- "Save QGIS Project file as..." ,
103
- "." ,
104
- "QGIS Project Files (*.qgs)" ,
105
- "Filter list for selecting files from a dialog box" )
106
- # Check that a file was selected
107
- if saveAsFileName .size () == 0 :
108
- QMessageBox .warning (self .dlg , "Not saved!" , "QGis project file not saved because no file name was given." )
109
- # fall back to using current project if available
110
- self .dlg .ui .txtQgisFilePath .setText (project .fileName ())
111
- else :
112
- project .setFileName (saveAsFileName )
113
- project .write ()
114
- else :
115
- project .write ()
116
- elif shouldSave == QMessageBox .Cancel :
117
- return # do not show the export dialog
118
-
119
- self .dlg .ui .txtQgisFilePath .setText (project .fileName ())
120
-
121
- # set title, or set default one if none available
122
- title = project .title ()
123
- if title == "" :
124
- title = "QGisGeneratedMapfile"
125
- self .dlg .ui .txtMapName .setText (project .title ())
126
-
127
- if self .dlg .ui .txtMapFilePath .text ().size () == 0 :
128
- btnOk = self .dlg .ui .buttonBox .button (QDialogButtonBox .Ok )
129
- btnOk .setEnabled (False )
130
-
131
- # TODO: fetch unit used from QSettings
132
-
133
- # TODO: fetch width/height guess from QSettings:
134
- # fetch the last used values from settings and intialize the
135
- # dialog with them
136
- #settings = QSettings("MicroResources", "ZoomToPoint")
137
- #xValue = settings.value("coordinate/x")
138
- #self.dlg.ui.xCoord.setText(str(xValue.toString()))
139
- #yValue = settings.value("coordinate/y")
140
- #self.dlg.ui.yCoord.setText(str(yValue.toString()))
141
- #scale = settings.value("zoom/scale", QVariant(4))
142
- #self.dlg.ui.spinBoxScale.setValue(scale.toInt()[0])
143
-
144
- QObject .connect (self .dlg .ui .btnChooseFile , SIGNAL ("clicked()" ), self .setSaveFile )
83
+ # attach events to inputs and buttons
84
+ QObject .connect (self .dlg .ui .btnChooseFile , SIGNAL ("clicked()" ), self .setMapFile )
145
85
QObject .connect (self .dlg .ui .txtMapFilePath , SIGNAL ("textChanged(QString)" ), self .mapfileChanged )
146
86
QObject .connect (self .dlg .ui .btnChooseProjectFile , SIGNAL ("clicked()" ), self .setProjectFile )
147
87
QObject .connect (self .dlg .ui .chkExpLayersOnly , SIGNAL ("clicked(bool)" ), self .toggleLayersOnly )
@@ -150,40 +90,51 @@ def run(self):
150
90
QObject .connect (self .dlg .ui .btnChooseHeaderFile , SIGNAL ("clicked()" ), self .setHeaderFile )
151
91
QObject .connect (self .dlg .ui .btnChooseTemplateFile , SIGNAL ("clicked()" ), self .setTemplateFile )
152
92
QObject .connect (self .dlg .ui .buttonBox , SIGNAL ("accepted()" ), self .ok_clicked )
93
+
94
+ # qgs-project
95
+ # defaults to current instance
96
+ project = QgsProject .instance ()
97
+ self .dlg .ui .txtQgisFilePath .setText (project .fileName ())
98
+
99
+ # get some settings from former successfull exports
100
+ # defaults are defined in ms_export.py and set in mapserverexportdialog.py
101
+ settings = QSettings ()
102
+ # map-file name and force mapfileChanged to enable/disable ok button
103
+ self .dlg .ui .txtMapFilePath .setText (settings .value ("/MapserverExport/mapfileName" , QVariant ("" )).toString ())
104
+ self .mapfileChanged (self .dlg .ui .txtMapFilePath .text ())
105
+ # map width and height
106
+ if settings .contains ("/MapserverExport/mapWidth" ):
107
+ self .dlg .ui .txtMapWidth .setText (settings .value ("/MapserverExport/mapWidth" ).toString ())
108
+ if settings .contains ("/MapserverExport/mapHeight" ):
109
+ self .dlg .ui .txtMapHeight .setText (settings .value ("/MapserverExport/mapHeight" ).toString ())
110
+ # MapServer IMAGETYPE's [gif|png|jpeg|wbmp|gtiff|swf|userdefined]
111
+ self .dlg .ui .cmbMapImageType .addItems (QStringList (["png" ,"gif" ,"jpeg" ,"wbmp" ,"gtiff" ,"swf" ,"userdefined" ]))
112
+ if settings .contains ("/MapserverExport/imageType" ):
113
+ idx = self .dlg .ui .cmbMapImageType .findText (settings .value ("/MapserverExport/imageType" ).toString ())
114
+ self .dlg .ui .cmbMapImageType .setCurrentIndex (idx )
115
+ # MapServer URL (default value already set by dialog defaults)
116
+ if settings .contains ("/MapserverExport/mapserverUrl" ):
117
+ self .dlg .ui .txtMapServerUrl .setText (settings .value ("/MapserverExport/mapserverUrl" ).toString ())
118
+
119
+
120
+ # set title or default to one if none available
121
+ title = project .title ()
122
+ if title == "" :
123
+ title = "QGIS-MAP"
124
+ self .dlg .ui .txtMapName .setText (title )
125
+
126
+ # TODO: fetch units used from current project
127
+ # QGIS: Meters, Feet, Degrees, UnknownUnit since 1.4 also: DecimalDegrees, DegreesMinutesSeconds, DegreesDecimalMinutes
128
+ # Mapserver: UNITS [feet|inches|kilometers|meters|miles|dd]
153
129
154
130
self .dlg .show ()
155
131
156
132
def ok_clicked (self ):
157
- # Check if map file name is provided
158
- if self .dlg .ui .txtMapFilePath .text ().size () == 0 :
159
- saveAsFileName = QFileDialog .getSaveFileName (self .dlg ,
160
- "Please choose to save map file as..." ,
161
- "." ,
162
- "Map files (*.map)" ,
163
- "Filter list for selecting files from a dialog box" )
164
- # Check that a file was selected
165
- if saveAsFileName .size () == 0 :
166
- QMessageBox .warning (self .dlg , "Not saved!" , "Map file not saved because no file name was given" )
167
- return
168
- else :
169
- self .dlg .ui .txtMapFilePath .setText (saveAsFileName )
170
- self .saveMapFile ()
171
-
172
- # Check if map file exists and we should overwrite it
173
- elif QFile (self .dlg .ui .txtMapFilePath .text ()).exists ():
174
- shouldOverwrite = QMessageBox .question (self .dlg ,
175
- "Overwrite?" ,
176
- "Map file \" " + self .dlg .ui .txtMapFilePath .text () + "\" already exists. \n Should we overwrite it?" ,
177
- QMessageBox .Yes ,
178
- QMessageBox .Cancel
179
- )
180
- if shouldOverwrite == QMessageBox .Yes :
181
- self .saveMapFile ()
182
- elif shouldOverwrite == QMessageBox .Cancel :
183
- return
184
-
185
- else :
133
+ if self .checkMapFile ():
186
134
self .saveMapFile ()
135
+ else :
136
+ print "Failed for Map file check, try again..."
137
+ pass
187
138
188
139
def toggleUseCurrentProject (self , boolUseCurrent ):
189
140
self .dlg .ui .txtQgisFilePath .setEnabled (not boolUseCurrent )
@@ -248,7 +199,18 @@ def saveMapFile(self):
248
199
except Exception , err :
249
200
QMessageBox .information (self .dlg , "MapServer Export Error" , str (err ))
250
201
return
251
-
202
+ # ok succesfull: write some setting for a next session
203
+ settings = QSettings ()
204
+ # mapfile name
205
+ settings .setValue ("/MapserverExport/mapfileName" , QVariant (self .dlg .ui .txtMapFilePath .text ()))
206
+ # map width and heigth
207
+ settings .setValue ("/MapserverExport/mapWidth" , QVariant (self .dlg .ui .txtMapWidth .text ()))
208
+ settings .setValue ("/MapserverExport/mapHeight" , QVariant (self .dlg .ui .txtMapHeight .text ()))
209
+ # mapserver url
210
+ settings .setValue ("/MapserverExport/mapserverUrl" , QVariant (self .dlg .ui .txtMapServerUrl .text ()))
211
+ # map ImageType
212
+ settings .setValue ("/MapserverExport/imageType" , QVariant (self .dlg .ui .cmbMapImageType .currentText ()))
213
+ # show results
252
214
QMessageBox .information (self .dlg , "MapServer Export Results" , result )
253
215
254
216
def mapfileChanged (self , text ):
@@ -259,11 +221,30 @@ def mapfileChanged(self, text):
259
221
else :
260
222
btnOk .setEnabled (False )
261
223
262
- def setSaveFile (self ):
263
- mapFile = QFileDialog .getSaveFileName (self .dlg , "Name for the map file" , \
264
- "." , "MapServer map files (*.map);;All files (*.*)" ,"Filter list for selecting files from a dialog box" )
265
- self .dlg .ui .txtMapFilePath .setText (mapFile )
266
-
224
+ def checkMapFile (self ):
225
+ # Check if map file name is provided
226
+ mapFileName = self .dlg .ui .txtMapFilePath .text ()
227
+ if mapFileName .size () == 0 :
228
+ QMessageBox .warning (self .dlg , "Not saved!" , "Map file not saved because no file name was given" )
229
+ return False
230
+ # Check/fix for .map extension (mapserver fails to read otherwise)
231
+ if not mapFileName .trimmed ().endsWith ('.map' ):
232
+ mapFileName += '.map'
233
+ self .dlg .ui .txtMapFilePath .setText (mapFileName )
234
+ # Check if map file exists and we should overwrite it
235
+ if QFile (mapFileName ).exists ():
236
+ if QMessageBox .Cancel == QMessageBox .question (self .dlg , "Overwrite?" ,
237
+ "Map file \" " + mapFileName + "\" already exists. \n Should we overwrite it?" ,
238
+ QMessageBox .Yes , QMessageBox .Cancel ):
239
+ return False
240
+ # mapfile ok, extension ok, ok to overwrite
241
+ return True
242
+
243
+ def setMapFile (self ):
244
+ mapFileName = QFileDialog .getSaveFileName (self .dlg , "Name for the map file" , \
245
+ self .dlg .ui .txtMapFilePath .text (), "MapServer map files (*.map);;All files (*.*)" ,"Filter list for selecting files from a dialog box" )
246
+ self .dlg .ui .txtMapFilePath .setText (mapFileName )
247
+
267
248
def setProjectFile (self ):
268
249
qgisProjectFile = QFileDialog .getOpenFileName (self .dlg , "Choose a QGIS Project file" , \
269
250
"." , "QGIS Project Files (*.qgs);;All files (*.*)" , "Filter list for selecting files from a dialog box" )
0 commit comments