Skip to content

Commit 4f73f65

Browse files
author
rduivenvoorde
committed
Using QSettings to remember mapserverexport settings
git-svn-id: http://svn.osgeo.org/qgis/trunk/qgis@12133 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent e77ea96 commit 4f73f65

File tree

4 files changed

+81
-138
lines changed

4 files changed

+81
-138
lines changed

python/plugins/mapserver_export/__init__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ def name():
2424
def description():
2525
return "Export a saved QGIS project file to a MapServer map file"
2626
def version():
27-
return "Version 0.4.1"
27+
return "Version 0.4.2"
2828
def qgisMinimumVersion():
2929
return "1.0"
3030
def authorName():

python/plugins/mapserver_export/mapserverexport.py

+78-97
Original file line numberDiff line numberDiff line change
@@ -80,68 +80,8 @@ def run(self):
8080
# create and show the MapServerExport dialog
8181
self.dlg = MapServerExportDialog()
8282

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)
14585
QObject.connect(self.dlg.ui.txtMapFilePath, SIGNAL("textChanged(QString)"), self.mapfileChanged)
14686
QObject.connect(self.dlg.ui.btnChooseProjectFile, SIGNAL("clicked()"), self.setProjectFile)
14787
QObject.connect(self.dlg.ui.chkExpLayersOnly, SIGNAL("clicked(bool)"), self.toggleLayersOnly)
@@ -150,40 +90,51 @@ def run(self):
15090
QObject.connect(self.dlg.ui.btnChooseHeaderFile, SIGNAL("clicked()"), self.setHeaderFile)
15191
QObject.connect(self.dlg.ui.btnChooseTemplateFile, SIGNAL("clicked()"), self.setTemplateFile)
15292
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]
153129

154130
self.dlg.show()
155131

156132
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. \nShould 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():
186134
self.saveMapFile()
135+
else:
136+
print "Failed for Map file check, try again..."
137+
pass
187138

188139
def toggleUseCurrentProject(self, boolUseCurrent):
189140
self.dlg.ui.txtQgisFilePath.setEnabled(not boolUseCurrent)
@@ -248,7 +199,18 @@ def saveMapFile(self):
248199
except Exception, err:
249200
QMessageBox.information(self.dlg, "MapServer Export Error", str(err))
250201
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
252214
QMessageBox.information(self.dlg, "MapServer Export Results", result)
253215

254216
def mapfileChanged(self, text):
@@ -259,11 +221,30 @@ def mapfileChanged(self, text):
259221
else:
260222
btnOk.setEnabled(False)
261223

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. \nShould 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+
267248
def setProjectFile(self):
268249
qgisProjectFile = QFileDialog.getOpenFileName(self.dlg, "Choose a QGIS Project file", \
269250
".", "QGIS Project Files (*.qgs);;All files (*.*)", "Filter list for selecting files from a dialog box")

python/plugins/mapserver_export/ms_export.py

+1-3
Original file line numberDiff line numberDiff line change
@@ -235,15 +235,14 @@ def writeMapFile(self):
235235
logmsg += "Map file completed for " + self.projectFileName + "\n"
236236
logmsg += "Map file saved as " + self.mapFile + "\n"
237237
if self.exportLayersOnly:
238-
logmsg += "\n> We only saved the LAYER portion of the map file. Merge this into an excisting mapfile to see it working\n"
238+
logmsg += "\n> We only saved the LAYER portion of the map file. \nMerge this into an excisting map file to see it working\n"
239239
else:
240240
logmsg += "\n> If this mapfile is accessible by your mapserver, you\nshould be able to see the capabilities by firing this url:\n" + self.mapServerUrl + "?MAP="+self.mapFile+"&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetCapabilities\n"
241241
logmsg += "\n> if this mapfile is accessible by your mapserver, you\nshould be able to see a map by firing this url:\n" + self.mapServerUrl + "?MAP="+self.mapFile+"&SERVICE=WMS&LAYERS=ALL&MODE=MAP\n"
242242
return logmsg
243243

244244
# Write the general parts of the map section
245245
def writeMapSection(self):
246-
print "writeMapSection, projNaam = %s en type = %s" % (self.projectFileName, type(self.projectFileName))
247246
self.outFile.write("# Map file created from QGIS project file " + str(self.projectFileName).encode('utf-8') + "\n")
248247
self.outFile.write("# Edit this file to customize for your map interface\n")
249248
self.outFile.write("# (Created with PyQgis MapServer Export plugin)\n")
@@ -299,7 +298,6 @@ def writeOutputFormat(self):
299298
self.outFile.write(" MIMETYPE 'image/" + lower(self.imageType) + "'\n")
300299
if self.imageType.lower() != "gif":
301300
self.outFile.write(" IMAGEMODE RGBA\n")
302-
#self.outFile.write(" #IMAGEMODE PC256\n")
303301
self.outFile.write(" EXTENSION '" + lower(self.imageType) + "'\n")
304302
self.outFile.write(" END\n")
305303

python/plugins/mapserver_export/qgsmapserverexportbase.ui

+1-37
Original file line numberDiff line numberDiff line change
@@ -131,43 +131,7 @@
131131
</widget>
132132
</item>
133133
<item row="0" column="3">
134-
<widget class="QComboBox" name="cmbMapImageType">
135-
<item>
136-
<property name="text">
137-
<string>png</string>
138-
</property>
139-
</item>
140-
<item>
141-
<property name="text">
142-
<string>gif</string>
143-
</property>
144-
</item>
145-
<item>
146-
<property name="text">
147-
<string>gtiff</string>
148-
</property>
149-
</item>
150-
<item>
151-
<property name="text">
152-
<string>jpeg</string>
153-
</property>
154-
</item>
155-
<item>
156-
<property name="text">
157-
<string>swf</string>
158-
</property>
159-
</item>
160-
<item>
161-
<property name="text">
162-
<string>userdefined</string>
163-
</property>
164-
</item>
165-
<item>
166-
<property name="text">
167-
<string>wbmp</string>
168-
</property>
169-
</item>
170-
</widget>
134+
<widget class="QComboBox" name="cmbMapImageType"/>
171135
</item>
172136
<item row="0" column="4">
173137
<widget class="QLabel" name="label">

0 commit comments

Comments
 (0)