Skip to content

Commit 242c93d

Browse files
author
rduivenvoorde
committed
New, smaller dialog. More defaults, checks and failovers. Merged work of Stephan Meissl
git-svn-id: http://svn.osgeo.org/qgis/trunk@12120 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent 168f2ef commit 242c93d

File tree

4 files changed

+671
-636
lines changed

4 files changed

+671
-636
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"
27+
return "Version 0.4.1"
2828
def qgisMinimumVersion():
2929
return "1.0"
3030
def authorName():

python/plugins/mapserver_export/mapserverexport.py

+150-72
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
* (at your option) any later version. *
1717
* *
1818
***************************************************************************/
19-
/* Adapted by Erik van de Pol, B3Partners BV. */
19+
/* Adapted by Erik van de Pol */
2020
"""
2121
# Import the PyQt and QGIS libraries
2222
from PyQt4.QtCore import *
@@ -55,6 +55,7 @@ def getThemeIcon(self, theName):
5555
else:
5656
return QIcon()
5757

58+
5859
def initGui(self):
5960
# Create action that will start plugin configuration
6061
self.action = QAction(self.getThemeIcon("mapserver_export.png"), \
@@ -63,26 +64,31 @@ def initGui(self):
6364
# connect the action to the run method
6465
QObject.connect(self.action, SIGNAL("activated()"), self.run)
6566
QObject.connect(self.iface, SIGNAL("currentThemeChanged ( QString )"), self.setCurrentTheme)
66-
6767
# Add toolbar button and menu item
6868
self.iface.addToolBarIcon(self.action)
6969
self.iface.addPluginToMenu("&MapServer Export...", self.action)
7070

71+
7172
def unload(self):
7273
# Remove the plugin menu item and icon
7374
self.iface.removePluginMenu("&MapServer Export...",self.action)
7475
self.iface.removeToolBarIcon(self.action)
7576

77+
7678
# run method that performs all the real work
7779
def run(self):
7880
# create and show the MapServerExport dialog
7981
self.dlg = MapServerExportDialog()
80-
#dlg.setupUi(self)
82+
83+
# TODO: should come from settings
84+
self.dlg.ui.txtMapFilePath.setText('/usr/lib/cgi-bin/kaas.map')
8185

86+
# project defaults to current instance
8287
project = QgsProject.instance()
88+
8389
# question: save project on loading export dialog?
8490
if project.isDirty():
85-
shouldSave = QMessageBox.question(None,
91+
shouldSave = QMessageBox.question(self.dlg,
8692
"Save?",
8793
"Save project to \"" + project.fileName() + "\" before exporting? Only the last saved version of your project will be exported.",
8894
QMessageBox.Yes,
@@ -97,14 +103,31 @@ def run(self):
97103
".",
98104
"QGIS Project Files (*.qgs)",
99105
"Filter list for selecting files from a dialog box")
100-
project.setFileName(saveAsFileName)
101-
project.write()
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()
102116
elif shouldSave == QMessageBox.Cancel:
103117
return # do not show the export dialog
104118

105119
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"
106125
self.dlg.ui.txtMapName.setText(project.title())
107-
126+
127+
if self.dlg.ui.txtMapFilePath.text().size() == 0:
128+
btnOk = self.dlg.ui.buttonBox.button(QDialogButtonBox.Ok)
129+
btnOk.setEnabled(False)
130+
108131
# TODO: fetch unit used from QSettings
109132

110133
# TODO: fetch width/height guess from QSettings:
@@ -119,94 +142,149 @@ def run(self):
119142
#self.dlg.ui.spinBoxScale.setValue(scale.toInt()[0])
120143

121144
QObject.connect(self.dlg.ui.btnChooseFile, SIGNAL("clicked()"), self.setSaveFile)
145+
QObject.connect(self.dlg.ui.txtMapFilePath, SIGNAL("textChanged(QString)"), self.mapfileChanged)
122146
QObject.connect(self.dlg.ui.btnChooseProjectFile, SIGNAL("clicked()"), self.setProjectFile)
123147
QObject.connect(self.dlg.ui.chkExpLayersOnly, SIGNAL("clicked(bool)"), self.toggleLayersOnly)
148+
QObject.connect(self.dlg.ui.checkBoxCurrentProject, SIGNAL("clicked(bool)"), self.toggleUseCurrentProject)
124149
QObject.connect(self.dlg.ui.btnChooseFooterFile, SIGNAL("clicked()"), self.setFooterFile)
125150
QObject.connect(self.dlg.ui.btnChooseHeaderFile, SIGNAL("clicked()"), self.setHeaderFile)
126151
QObject.connect(self.dlg.ui.btnChooseTemplateFile, SIGNAL("clicked()"), self.setTemplateFile)
127-
152+
QObject.connect(self.dlg.ui.buttonBox, SIGNAL("accepted()"), self.ok_clicked)
153+
128154
self.dlg.show()
129-
result = self.dlg.exec_()
130-
# See if OK was pressed
131-
if result == 1:
132-
# get the settings from the dialog and export the map file
133-
print "Creating exporter using %s and %s" % (self.dlg.ui.txtQgisFilePath.text(), self.dlg.ui.txtMapFilePath.text())
134-
exporter = Qgis2Map(unicode(self.dlg.ui.txtQgisFilePath.text()), unicode(self.dlg.ui.txtMapFilePath.text()))
135-
print "Setting options"
136-
137-
exporter.setOptions(
138-
unicode(self.dlg.ui.txtMapServerUrl.text()),
139-
unicode(self.dlg.ui.cmbMapUnits.itemData( self.dlg.ui.cmbMapUnits.currentIndex() ).toString()),
140-
unicode(self.dlg.ui.cmbMapImageType.currentText()),
141-
unicode(self.dlg.ui.txtMapName.text()),
142-
unicode(self.dlg.ui.txtMapWidth.text()),
143-
unicode(self.dlg.ui.txtMapHeight.text()),
144-
unicode(self.dlg.ui.txtWebTemplate.text()),
145-
unicode(self.dlg.ui.txtWebFooter.text()),
146-
unicode(self.dlg.ui.txtWebHeader.text()),
147-
self.dlg.ui.checkBoxDump.isChecked(),
148-
self.dlg.ui.checkBoxForce.isChecked(),
149-
self.dlg.ui.checkBoxAntiAlias.isChecked(),
150-
self.dlg.ui.checkBoxPartials.isChecked(),
151-
self.dlg.ui.chkExpLayersOnly.isChecked(),
152-
unicode(self.dlg.ui.txtFontsetPath.text()),
153-
unicode(self.dlg.ui.txtSymbolsetPath.text())
154-
)
155-
print "Calling writeMapFile"
155+
156+
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:
186+
self.saveMapFile()
187+
188+
def toggleUseCurrentProject(self, boolUseCurrent):
189+
self.dlg.ui.txtQgisFilePath.setEnabled(not boolUseCurrent)
190+
self.dlg.ui.btnChooseProjectFile.setEnabled(not boolUseCurrent)
191+
if boolUseCurrent:
192+
if self.dlg.ui.txtQgisFilePath.text().size() == 0:
193+
# reload path of current project
194+
self.dlg.ui.txtQgisFilePath.setText(QgsProject.instance().fileName())
195+
# check if current project is saved and/or dirty? Nope: will be done when Ok clicked
196+
else:
197+
# open dialog to choose project file
198+
self.setProjectFile()
199+
200+
201+
202+
def saveMapFile(self):
203+
# get the settings from the dialog and export the map file
204+
print "Creating exporter using %s and %s" % (self.dlg.ui.txtQgisFilePath.text(), self.dlg.ui.txtMapFilePath.text())
205+
if self.dlg.ui.txtQgisFilePath.text().size() == 0:
206+
saveAsFileName = QFileDialog.getSaveFileName(self.dlg,
207+
"Please choose to save QGis project file as...",
208+
".",
209+
"QGis files (*.qgs)",
210+
"Filter list for selecting files from a dialog box")
211+
# Check that a file was selected
212+
if saveAsFileName.size() == 0:
213+
QMessageBox.warning(self.dlg, "Not saved!", "QGis project file not saved because no file name was given")
214+
return
215+
else:
216+
self.dlg.ui.txtQgisFilePath.setText(saveAsFileName)
217+
218+
exporter = Qgis2Map(unicode(self.dlg.ui.txtMapFilePath.text()))
219+
220+
# Parse qgis project file and check success
221+
if not(exporter.setQgsProject(self.dlg.ui.txtQgisFilePath.text())):
222+
QMessageBox.warning(self.dlg, "Not saved!", "File not saved because no valid qgis project file was given.")
223+
return
224+
225+
self.dlg.hide()
226+
print "Setting options"
227+
exporter.setOptions(
228+
unicode(self.dlg.ui.txtMapServerUrl.text()),
229+
unicode(self.dlg.ui.cmbMapUnits.itemData( self.dlg.ui.cmbMapUnits.currentIndex() ).toString()),
230+
unicode(self.dlg.ui.cmbMapImageType.currentText()),
231+
unicode(self.dlg.ui.txtMapName.text()),
232+
unicode(self.dlg.ui.txtMapWidth.text()),
233+
unicode(self.dlg.ui.txtMapHeight.text()),
234+
unicode(self.dlg.ui.txtWebTemplate.text()),
235+
unicode(self.dlg.ui.txtWebHeader.text()),
236+
unicode(self.dlg.ui.txtWebFooter.text()),
237+
self.dlg.ui.checkBoxDump.isChecked(),
238+
self.dlg.ui.checkBoxForce.isChecked(),
239+
self.dlg.ui.checkBoxAntiAlias.isChecked(),
240+
self.dlg.ui.checkBoxPartials.isChecked(),
241+
self.dlg.ui.chkExpLayersOnly.isChecked(),
242+
unicode(self.dlg.ui.txtFontsetPath.text()),
243+
unicode(self.dlg.ui.txtSymbolsetPath.text())
244+
)
245+
print "Calling writeMapFile"
246+
try:
156247
result = exporter.writeMapFile()
157-
QMessageBox.information(None, "MapServer Export Results", result)
248+
except Exception, err:
249+
QMessageBox.information(self.dlg, "MapServer Export Error", str(err))
250+
return
251+
252+
QMessageBox.information(self.dlg, "MapServer Export Results", result)
253+
254+
def mapfileChanged(self, text):
255+
# Enable OK button
256+
btnOk = self.dlg.ui.buttonBox.button(QDialogButtonBox.Ok)
257+
if text.size() > 0:
258+
btnOk.setEnabled(True)
259+
else:
260+
btnOk.setEnabled(False)
158261

159262
def setSaveFile(self):
160263
mapFile = QFileDialog.getSaveFileName(self.dlg, "Name for the map file", \
161264
".", "MapServer map files (*.map);;All files (*.*)","Filter list for selecting files from a dialog box")
162265
self.dlg.ui.txtMapFilePath.setText(mapFile)
163-
266+
164267
def setProjectFile(self):
165-
qgisProjectFile = QFileDialog.getOpenFileName(self.dlg, "Choose the QGIS Project file", \
166-
".", "QGIS Project Files (*.qgs);;All files (*.*)", "Filter list for selecting files from a dialog box")
268+
qgisProjectFile = QFileDialog.getOpenFileName(self.dlg, "Choose a QGIS Project file", \
269+
".", "QGIS Project Files (*.qgs);;All files (*.*)", "Filter list for selecting files from a dialog box")
167270
self.dlg.ui.txtQgisFilePath.setText(qgisProjectFile)
168271

169272
def setTemplateFile(self):
170-
templateFile = QFileDialog.getOpenFileName(self.dlg,
171-
"Choose the MapServer template file",
172-
".",
173-
"All files (*.*)",
174-
"Filter list for selecting files from a dialog box")
273+
templateFile = QFileDialog.getOpenFileName(self.dlg, "Choose the MapServer template file", \
274+
".", "All files (*.*)", "Filter list for selecting files from a dialog box")
175275
self.dlg.ui.txtWebTemplate.setText(templateFile)
176276

177277
def setHeaderFile(self):
178-
headerFile = QFileDialog.getOpenFileName(self.dlg,
179-
"Choose the MapServer header file",
180-
".",
181-
"All files (*.*)",
182-
"Filter list for selecting files from a dialog box")
278+
headerFile = QFileDialog.getOpenFileName(self.dlg, "Choose the MapServer header file", \
279+
".", "All files (*.*)", "Filter list for selecting files from a dialog box")
183280
self.dlg.ui.txtWebHeader.setText(headerFile)
184281

185282
def setFooterFile(self):
186-
footerFile = QFileDialog.getOpenFileName(self.dlg,
187-
"Choose the MapServer footer file",
188-
".",
189-
"All files (*.*)",
190-
"Filter list for selecting files from a dialog box")
283+
footerFile = QFileDialog.getOpenFileName(self.dlg, "Choose the MapServer footer file", \
284+
".", "All files (*.*)", "Filter list for selecting files from a dialog box")
191285
self.dlg.ui.txtWebFooter.setText(footerFile)
192-
193-
def apply(self):
194-
# create the map file
195-
foo = 'bar'
196286

197287
def toggleLayersOnly(self, isChecked):
198288
# disable other sections if only layer export is desired
199-
self.dlg.ui.txtMapName.setEnabled(not isChecked)
200-
self.dlg.ui.txtMapWidth.setEnabled(not isChecked)
201-
self.dlg.ui.txtMapHeight.setEnabled(not isChecked)
202-
self.dlg.ui.cmbMapUnits.setEnabled(not isChecked)
203-
self.dlg.ui.cmbMapImageType.setEnabled(not isChecked)
204-
self.dlg.ui.txtMapServerUrl.setEnabled(not isChecked)
205-
self.dlg.ui.txtFontsetPath.setEnabled(not isChecked)
206-
self.dlg.ui.txtSymbolsetPath.setEnabled(not isChecked)
207-
self.dlg.ui.txtWebTemplate.setEnabled(not isChecked)
208-
self.dlg.ui.txtWebHeader.setEnabled(not isChecked)
209-
self.dlg.ui.txtWebFooter.setEnabled(not isChecked)
210-
self.dlg.ui.btnChooseFooterFile.setEnabled(not isChecked)
211-
self.dlg.ui.btnChooseHeaderFile.setEnabled(not isChecked)
212-
self.dlg.ui.btnChooseTemplateFile.setEnabled(not isChecked)
289+
self.dlg.ui.grpPaths.setEnabled(not isChecked)
290+
self.dlg.ui.grpMap.setEnabled(not isChecked)

0 commit comments

Comments
 (0)