ProjectFlask/Project.py

changeset 18
d76a0939be6a
parent 17
f31df56510a1
child 26
5aac667c4f0f
--- 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")

eric ide

mercurial