16
16
* (at your option) any later version. *
17
17
* *
18
18
***************************************************************************/
19
- /* Adapted by Erik van de Pol, B3Partners BV. */
19
+ /* Adapted by Erik van de Pol */
20
20
"""
21
21
# Import the PyQt and QGIS libraries
22
22
from PyQt4 .QtCore import *
@@ -55,6 +55,7 @@ def getThemeIcon(self, theName):
55
55
else :
56
56
return QIcon ()
57
57
58
+
58
59
def initGui (self ):
59
60
# Create action that will start plugin configuration
60
61
self .action = QAction (self .getThemeIcon ("mapserver_export.png" ), \
@@ -63,26 +64,31 @@ def initGui(self):
63
64
# connect the action to the run method
64
65
QObject .connect (self .action , SIGNAL ("activated()" ), self .run )
65
66
QObject .connect (self .iface , SIGNAL ("currentThemeChanged ( QString )" ), self .setCurrentTheme )
66
-
67
67
# Add toolbar button and menu item
68
68
self .iface .addToolBarIcon (self .action )
69
69
self .iface .addPluginToMenu ("&MapServer Export..." , self .action )
70
70
71
+
71
72
def unload (self ):
72
73
# Remove the plugin menu item and icon
73
74
self .iface .removePluginMenu ("&MapServer Export..." ,self .action )
74
75
self .iface .removeToolBarIcon (self .action )
75
76
77
+
76
78
# run method that performs all the real work
77
79
def run (self ):
78
80
# create and show the MapServerExport dialog
79
81
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' )
81
85
86
+ # project defaults to current instance
82
87
project = QgsProject .instance ()
88
+
83
89
# question: save project on loading export dialog?
84
90
if project .isDirty ():
85
- shouldSave = QMessageBox .question (None ,
91
+ shouldSave = QMessageBox .question (self . dlg ,
86
92
"Save?" ,
87
93
"Save project to \" " + project .fileName () + "\" before exporting? Only the last saved version of your project will be exported." ,
88
94
QMessageBox .Yes ,
@@ -97,14 +103,31 @@ def run(self):
97
103
"." ,
98
104
"QGIS Project Files (*.qgs)" ,
99
105
"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 ()
102
116
elif shouldSave == QMessageBox .Cancel :
103
117
return # do not show the export dialog
104
118
105
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"
106
125
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
+
108
131
# TODO: fetch unit used from QSettings
109
132
110
133
# TODO: fetch width/height guess from QSettings:
@@ -119,94 +142,149 @@ def run(self):
119
142
#self.dlg.ui.spinBoxScale.setValue(scale.toInt()[0])
120
143
121
144
QObject .connect (self .dlg .ui .btnChooseFile , SIGNAL ("clicked()" ), self .setSaveFile )
145
+ QObject .connect (self .dlg .ui .txtMapFilePath , SIGNAL ("textChanged(QString)" ), self .mapfileChanged )
122
146
QObject .connect (self .dlg .ui .btnChooseProjectFile , SIGNAL ("clicked()" ), self .setProjectFile )
123
147
QObject .connect (self .dlg .ui .chkExpLayersOnly , SIGNAL ("clicked(bool)" ), self .toggleLayersOnly )
148
+ QObject .connect (self .dlg .ui .checkBoxCurrentProject , SIGNAL ("clicked(bool)" ), self .toggleUseCurrentProject )
124
149
QObject .connect (self .dlg .ui .btnChooseFooterFile , SIGNAL ("clicked()" ), self .setFooterFile )
125
150
QObject .connect (self .dlg .ui .btnChooseHeaderFile , SIGNAL ("clicked()" ), self .setHeaderFile )
126
151
QObject .connect (self .dlg .ui .btnChooseTemplateFile , SIGNAL ("clicked()" ), self .setTemplateFile )
127
-
152
+ QObject .connect (self .dlg .ui .buttonBox , SIGNAL ("accepted()" ), self .ok_clicked )
153
+
128
154
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. \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 :
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 :
156
247
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 )
158
261
159
262
def setSaveFile (self ):
160
263
mapFile = QFileDialog .getSaveFileName (self .dlg , "Name for the map file" , \
161
264
"." , "MapServer map files (*.map);;All files (*.*)" ,"Filter list for selecting files from a dialog box" )
162
265
self .dlg .ui .txtMapFilePath .setText (mapFile )
163
-
266
+
164
267
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" )
167
270
self .dlg .ui .txtQgisFilePath .setText (qgisProjectFile )
168
271
169
272
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" )
175
275
self .dlg .ui .txtWebTemplate .setText (templateFile )
176
276
177
277
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" )
183
280
self .dlg .ui .txtWebHeader .setText (headerFile )
184
281
185
282
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" )
191
285
self .dlg .ui .txtWebFooter .setText (footerFile )
192
-
193
- def apply (self ):
194
- # create the map file
195
- foo = 'bar'
196
286
197
287
def toggleLayersOnly (self , isChecked ):
198
288
# 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