--- 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")