8 """ |
8 """ |
9 |
9 |
10 import os |
10 import os |
11 |
11 |
12 from PyQt5.QtCore import ( |
12 from PyQt5.QtCore import ( |
13 pyqtSlot, QObject, QProcess, QProcessEnvironment, QTimer |
13 pyqtSlot, QObject, QProcess, QProcessEnvironment, QTimer, QFileInfo |
14 ) |
14 ) |
15 from PyQt5.QtWidgets import QMenu |
15 from PyQt5.QtWidgets import QMenu, QDialog |
16 |
16 |
17 from E5Gui import E5MessageBox |
17 from E5Gui import E5MessageBox, E5FileDialog |
18 from E5Gui.E5Action import E5Action |
18 from E5Gui.E5Action import E5Action |
19 from E5Gui.E5Application import e5App |
19 from E5Gui.E5Application import e5App |
20 |
20 |
21 from Globals import isWindowsPlatform |
21 from Globals import isWindowsPlatform |
22 |
22 |
52 |
52 |
53 self.__e5project = e5App().getObject("Project") |
53 self.__e5project = e5App().getObject("Project") |
54 self.__virtualEnvManager = e5App().getObject("VirtualEnvManager") |
54 self.__virtualEnvManager = e5App().getObject("VirtualEnvManager") |
55 |
55 |
56 self.__menus = {} # dictionary with references to menus |
56 self.__menus = {} # dictionary with references to menus |
|
57 self.__formsBrowser = None |
57 self.__hooksInstalled = False |
58 self.__hooksInstalled = False |
58 |
59 |
59 self.__serverDialog = None |
60 self.__serverDialog = None |
60 self.__routesDialog = None |
61 self.__routesDialog = None |
61 self.__shellProcess = None |
62 self.__shellProcess = None |
298 def projectOpenedHooks(self): |
299 def projectOpenedHooks(self): |
299 """ |
300 """ |
300 Public method to add our hook methods. |
301 Public method to add our hook methods. |
301 """ |
302 """ |
302 if self.__e5project.getProjectType() == "Flask": |
303 if self.__e5project.getProjectType() == "Flask": |
303 # TODO: add some methods for standard templates |
304 self.__formsBrowser = ( |
304 ## self.__formsBrowser = ( |
305 e5App().getObject("ProjectBrowser") |
305 ## e5App().getObject("ProjectBrowser") |
306 .getProjectBrowser("forms")) |
306 ## .getProjectBrowser("forms")) |
307 self.__formsBrowser.addHookMethodAndMenuEntry( |
307 ## self.__formsBrowser.addHookMethodAndMenuEntry( |
308 "newForm", self.newForm, self.tr("New template...")) |
308 ## "newForm", self.newForm, self.tr("New template...")) |
309 |
309 ## |
|
310 self.__determineCapabilities() |
310 self.__determineCapabilities() |
311 |
311 |
312 self.__pybabelProject.projectOpenedHooks() |
312 self.__pybabelProject.projectOpenedHooks() |
313 ## self.__hooksInstalled = True |
313 |
|
314 self.__hooksInstalled = True |
314 |
315 |
315 def projectClosedHooks(self): |
316 def projectClosedHooks(self): |
316 """ |
317 """ |
317 Public method to remove our hook methods. |
318 Public method to remove our hook methods. |
318 """ |
319 """ |
319 self.__pybabelProject.projectClosedHooks() |
320 self.__pybabelProject.projectClosedHooks() |
320 |
321 |
321 if self.__hooksInstalled: |
322 if self.__hooksInstalled: |
322 ## self.__formsBrowser.removeHookMethod("newForm") |
323 self.__formsBrowser.removeHookMethod("newForm") |
323 ## self.__formsBrowser = None |
324 self.__formsBrowser = None |
324 pass |
|
325 |
325 |
326 self.__hooksInstalled = False |
326 self.__hooksInstalled = False |
|
327 |
|
328 def newForm(self, dirPath): |
|
329 """ |
|
330 Public method to create a new form. |
|
331 |
|
332 @param dirPath full directory path for the new form file |
|
333 @type str |
|
334 """ |
|
335 from .FormSelectionDialog import FormSelectionDialog |
|
336 |
|
337 dlg = FormSelectionDialog() |
|
338 if dlg.exec() == QDialog.Accepted: |
|
339 template = dlg.getTemplateText() |
|
340 |
|
341 fileFilters = self.tr( |
|
342 "HTML Files (*.html);;" |
|
343 "HTML Files (*.htm);;" |
|
344 "All Files (*)") |
|
345 fname, selectedFilter = E5FileDialog.getSaveFileNameAndFilter( |
|
346 self.__ui, |
|
347 self.tr("New Form"), |
|
348 dirPath, |
|
349 fileFilters, |
|
350 None, |
|
351 E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite)) |
|
352 if fname: |
|
353 ext = QFileInfo(fname).suffix() |
|
354 if not ext: |
|
355 ex = selectedFilter.split("(*")[1].split(")")[0] |
|
356 if ex: |
|
357 fname += ex |
|
358 |
|
359 if os.path.exists(fname): |
|
360 res = E5MessageBox.yesNo( |
|
361 self.__ui, |
|
362 self.tr("New Form"), |
|
363 self.tr("""The file already exists! Overwrite""" |
|
364 """ it?"""), |
|
365 icon=E5MessageBox.Warning) |
|
366 if not res: |
|
367 # user selected to not overwrite |
|
368 return |
|
369 |
|
370 try: |
|
371 with open(fname, "w", encoding="utf-8") as f: |
|
372 f.write(template) |
|
373 except OSError as err: |
|
374 E5MessageBox.critical( |
|
375 self.__ui, |
|
376 self.tr("New Form"), |
|
377 self.tr("<p>The new form file <b>{0}</b> could" |
|
378 " not be created.</p><p>Problem: {1}</p>") |
|
379 .format(fname, str(err))) |
|
380 return |
|
381 |
|
382 self.__e5project.appendFile(fname) |
|
383 self.__formsBrowser.sourceFile.emit(fname) |
327 |
384 |
328 ################################################################## |
385 ################################################################## |
329 ## slots below implement general functionality |
386 ## slots below implement general functionality |
330 ################################################################## |
387 ################################################################## |
331 |
388 |