eric6/Plugins/PluginWizardQFileDialog.py

branch
without_py2_and_pyqt4
changeset 7207
4ba7a9b26020
parent 7199
c71bd6f21748
child 7229
53054eb5b15a
--- a/eric6/Plugins/PluginWizardQFileDialog.py	Tue Sep 03 19:27:46 2019 +0200
+++ b/eric6/Plugins/PluginWizardQFileDialog.py	Tue Sep 03 19:31:20 2019 +0200
@@ -49,6 +49,7 @@
         super(FileDialogWizard, self).__init__(ui)
         self.__ui = ui
         
+        # PyQt4 or PyQt5
         self.__pyqtRe = re.compile(r"(?:import|from)\s+PyQt([45])")
 
     def activate(self):
@@ -57,7 +58,7 @@
         
         @return tuple of None and activation status (boolean)
         """
-        self.__initAction()
+        self.__initActions()
         self.__initMenu()
         
         return None, True
@@ -68,27 +69,45 @@
         """
         menu = self.__ui.getMenu("wizards")
         if menu:
-            menu.removeAction(self.action)
-        self.__ui.removeE5Actions([self.action], 'wizards')
+            menu.removeAction(self.qFileDialogAction)
+            menu.removeAction(self.e5FileDialogAction)
+        self.__ui.removeE5Actions(
+            [self.qFileDialogAction, self.e5FileDialogAction],
+            'wizards')
     
-    def __initAction(self):
+    def __initActions(self):
         """
-        Private method to initialize the action.
+        Private method to initialize the actions.
         """
-        self.action = E5Action(
+        self.qFileDialogAction = E5Action(
             self.tr('QFileDialog Wizard'),
             self.tr('Q&FileDialog Wizard...'), 0, 0, self,
             'wizards_qfiledialog')
-        self.action.setStatusTip(self.tr('QFileDialog Wizard'))
-        self.action.setWhatsThis(self.tr(
+        self.qFileDialogAction.setStatusTip(self.tr('QFileDialog Wizard'))
+        self.qFileDialogAction.setWhatsThis(self.tr(
             """<b>QFileDialog Wizard</b>"""
             """<p>This wizard opens a dialog for entering all the parameters"""
             """ needed to create a QFileDialog. The generated code is"""
             """ inserted at the current cursor position.</p>"""
         ))
-        self.action.triggered.connect(self.__handle)
+        self.qFileDialogAction.triggered.connect(self.__handleQFileDialog)
         
-        self.__ui.addE5Actions([self.action], 'wizards')
+        self.e5FileDialogAction = E5Action(
+            self.tr('E5FileDialog Wizard'),
+            self.tr('E&5ileDialog Wizard...'), 0, 0, self,
+            'wizards_e5filedialog')
+        self.e5FileDialogAction.setStatusTip(self.tr('E5FileDialog Wizard'))
+        self.e5FileDialogAction.setWhatsThis(self.tr(
+            """<b>E5FileDialog Wizard</b>"""
+            """<p>This wizard opens a dialog for entering all the parameters"""
+            """ needed to create an E5FileDialog. The generated code is"""
+            """ inserted at the current cursor position.</p>"""
+        ))
+        self.e5FileDialogAction.triggered.connect(self.__handleE5FileDialog)
+        
+        self.__ui.addE5Actions(
+            [self.qFileDialogAction, self.e5FileDialogAction],
+            'wizards')
 
     def __initMenu(self):
         """
@@ -96,24 +115,23 @@
         """
         menu = self.__ui.getMenu("wizards")
         if menu:
-            menu.addAction(self.action)
+            menu.addAction(self.e5FileDialogAction)
+            menu.addAction(self.qFileDialogAction)
     
-    def __callForm(self, editor):
+    def __callForm(self, editor, variant):
         """
         Private method to display a dialog and get the code.
         
         @param editor reference to the current editor
+        @type Editor
+        @param variant variant of code to be generated
+            (-1 = E5FileDialog, 0 = unknown, 4 = PyQt4, 5 = PyQt5)
+        @type int
         @return the generated code (string)
         """
-        match = self.__pyqtRe.search(editor.text())
-        if match is None:
-            pyqtVariant = 0    # unknown
-        else:
-            pyqtVariant = int(match.group(1))   # 4 or 5
-        
         from WizardPlugins.FileDialogWizard.FileDialogWizardDialog import \
             FileDialogWizardDialog
-        dlg = FileDialogWizardDialog(pyqtVariant, None)
+        dlg = FileDialogWizardDialog(variant, None)
         if dlg.exec_() == QDialog.Accepted:
             line, index = editor.getCursorPosition()
             indLevel = editor.indentation(line) // editor.indentationWidth()
@@ -125,9 +143,14 @@
         else:
             return (None, 0)
         
-    def __handle(self):
+    def __handle(self, variant):
         """
         Private method to handle the wizards action.
+        
+        @param variant dialog variant to be generated
+            (E5FileDialog or QFileDialog)
+        @type str
+        @exception ValueError raised to indicate an illegal file dialog variant
         """
         editor = e5App().getObject("ViewManager").activeWindow()
         
@@ -137,10 +160,36 @@
                 self.tr('No current editor'),
                 self.tr('Please open or create a file first.'))
         else:
-            code, ok = self.__callForm(editor)
+            if variant == "QFileDialog":
+                match = self.__pyqtRe.search(editor.text())
+                if match is None:
+                    # unknown
+                    dialogVariant = 0
+                else:
+                    # PyQt4 or PyQt5
+                    dialogVariant = int(match.group(1))
+            elif variant == "E5FileDialog":
+                # E5FileDialog
+                dialogVariant = -1
+            else:
+                raise ValueError("Illegal dialog variant given")
+            
+            code, ok = self.__callForm(editor, dialogVariant)
             if ok:
                 line, index = editor.getCursorPosition()
                 # It should be done on this way to allow undo
                 editor.beginUndoAction()
                 editor.insertAt(code, line, index)
                 editor.endUndoAction()
+    
+    def __handleQFileDialog(self):
+        """
+        Private slot to handle the wizard QFileDialog action.
+        """
+        self.__handle("QFileDialog")
+    
+    def __handleE5FileDialog(self):
+        """
+        Private slot to handle the wizard E5FileDialog action.
+        """
+        self.__handle("E5FileDialog")

eric ide

mercurial