--- a/ProjectFlask/Project.py Sat Nov 21 20:37:54 2020 +0100 +++ b/ProjectFlask/Project.py Sun Nov 22 14:06:00 2020 +0100 @@ -10,11 +10,11 @@ import os from PyQt5.QtCore import ( - pyqtSlot, QObject, QProcess, QProcessEnvironment, QTimer + pyqtSlot, QObject, QProcess, QProcessEnvironment, QTimer, QFileInfo ) -from PyQt5.QtWidgets import QMenu +from PyQt5.QtWidgets import QMenu, QDialog -from E5Gui import E5MessageBox +from E5Gui import E5MessageBox, E5FileDialog from E5Gui.E5Action import E5Action from E5Gui.E5Application import e5App @@ -54,6 +54,7 @@ self.__virtualEnvManager = e5App().getObject("VirtualEnvManager") self.__menus = {} # dictionary with references to menus + self.__formsBrowser = None self.__hooksInstalled = False self.__serverDialog = None @@ -300,17 +301,17 @@ Public method to add our hook methods. """ if self.__e5project.getProjectType() == "Flask": - # TODO: add some methods for standard templates -## self.__formsBrowser = ( -## e5App().getObject("ProjectBrowser") -## .getProjectBrowser("forms")) -## self.__formsBrowser.addHookMethodAndMenuEntry( -## "newForm", self.newForm, self.tr("New template...")) -## + self.__formsBrowser = ( + e5App().getObject("ProjectBrowser") + .getProjectBrowser("forms")) + self.__formsBrowser.addHookMethodAndMenuEntry( + "newForm", self.newForm, self.tr("New template...")) + self.__determineCapabilities() self.__pybabelProject.projectOpenedHooks() -## self.__hooksInstalled = True + + self.__hooksInstalled = True def projectClosedHooks(self): """ @@ -319,12 +320,68 @@ self.__pybabelProject.projectClosedHooks() if self.__hooksInstalled: -## self.__formsBrowser.removeHookMethod("newForm") -## self.__formsBrowser = None - pass + self.__formsBrowser.removeHookMethod("newForm") + self.__formsBrowser = None self.__hooksInstalled = False + def newForm(self, dirPath): + """ + Public method to create a new form. + + @param dirPath full directory path for the new form file + @type str + """ + from .FormSelectionDialog import FormSelectionDialog + + dlg = FormSelectionDialog() + if dlg.exec() == QDialog.Accepted: + template = dlg.getTemplateText() + + fileFilters = self.tr( + "HTML Files (*.html);;" + "HTML Files (*.htm);;" + "All Files (*)") + fname, selectedFilter = E5FileDialog.getSaveFileNameAndFilter( + self.__ui, + self.tr("New Form"), + dirPath, + fileFilters, + None, + E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite)) + if fname: + ext = QFileInfo(fname).suffix() + if not ext: + ex = selectedFilter.split("(*")[1].split(")")[0] + if ex: + fname += ex + + if os.path.exists(fname): + res = E5MessageBox.yesNo( + self.__ui, + self.tr("New Form"), + self.tr("""The file already exists! Overwrite""" + """ it?"""), + icon=E5MessageBox.Warning) + if not res: + # user selected to not overwrite + return + + try: + with open(fname, "w", encoding="utf-8") as f: + f.write(template) + except OSError as err: + E5MessageBox.critical( + self.__ui, + self.tr("New Form"), + self.tr("<p>The new form file <b>{0}</b> could" + " not be created.</p><p>Problem: {1}</p>") + .format(fname, str(err))) + return + + self.__e5project.appendFile(fname) + self.__formsBrowser.sourceFile.emit(fname) + ################################################################## ## slots below implement general functionality ################################################################## @@ -362,7 +419,7 @@ try: with open(fullCmd, 'r', encoding='utf-8') as f: l0 = f.readline() - except (IOError, OSError): + except OSError: l0 = "" if self.__isSuitableForVariant("Python3", l0): variants.append("Python3")