--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric7/Plugins/WizardPlugins/EricPluginWizard/PluginWizardDialog.py Sat May 15 18:45:04 2021 +0200 @@ -0,0 +1,201 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2014 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing the eric plug-in wizard dialog. +""" + +from PyQt5.QtCore import pyqtSlot, QDate +from PyQt5.QtWidgets import QDialog, QDialogButtonBox + +from E5Gui.E5Application import e5App + +from .Ui_PluginWizardDialog import Ui_PluginWizardDialog + +from .Templates import ( + mainTemplate, configTemplate0, configTemplate1, configTemplate2, + configTemplate3, onDemandTemplate, previewPixmapTemplate, + moduleSetupTemplate, exeDisplayDataTemplate, exeDisplayDataInfoTemplate, + exeDisplayDataListTemplate, apiFilesTemplate +) + + +class PluginWizardDialog(QDialog, Ui_PluginWizardDialog): + """ + Class implementing the eric plug-in wizard dialog. + """ + def __init__(self, parent=None): + """ + Constructor + + @param parent reference to the parent widget (QWidget) + """ + super().__init__(parent) + self.setupUi(self) + + self.dataTabWidget.setCurrentIndex(0) + + self.__okButton = self.buttonBox.button( + QDialogButtonBox.StandardButton.Ok) + self.__okButton.setEnabled(False) + + projectOpen = e5App().getObject("Project").isOpen() + self.projectButton.setEnabled(projectOpen) + + self.nameEdit.textChanged.connect(self.__enableOkButton) + self.versionEdit.textChanged.connect(self.__enableOkButton) + self.authorEdit.textChanged.connect(self.__enableOkButton) + self.authorEmailEdit.textChanged.connect(self.__enableOkButton) + self.classNameEdit.textChanged.connect(self.__enableOkButton) + self.packageNameEdit.textChanged.connect(self.__enableOkButton) + self.shortDescriptionEdit.textChanged.connect(self.__enableOkButton) + self.longDescriptionEdit.textChanged.connect(self.__enableOkButton) + self.preferencesKeyEdit.textChanged.connect(self.__enableOkButton) + self.configurationGroup.toggled.connect(self.__enableOkButton) + self.autoActivateCheckBox.toggled.connect(self.__enableOkButton) + self.pluginTypeCombo.currentIndexChanged.connect(self.__enableOkButton) + self.pluginTypeNameEdit.textChanged.connect(self.__enableOkButton) + + self.pluginTypeCombo.addItems(["", "viewmanager", "version_control"]) + + def __enableOkButton(self): + """ + Private slot to set the state of the OK button. + """ + enable = ( + bool(self.nameEdit.text()) and + bool(self.versionEdit.text()) and + bool(self.authorEdit.text()) and + bool(self.authorEmailEdit.text()) and + bool(self.classNameEdit.text()) and + bool(self.packageNameEdit.text()) and + bool(self.shortDescriptionEdit.text()) and + bool(self.longDescriptionEdit.toPlainText()) + ) + if self.configurationGroup.isChecked(): + enable = enable and bool(self.preferencesKeyEdit.text()) + if not self.autoActivateCheckBox.isChecked(): + enable = (enable and + bool(self.pluginTypeCombo.currentText()) and + bool(self.pluginTypeNameEdit.text()) + ) + + self.__okButton.setEnabled(enable) + + @pyqtSlot() + def on_projectButton_clicked(self): + """ + Private slot to populate some fields with data retrieved from the + current project. + """ + project = e5App().getObject("Project") + + try: + self.versionEdit.setText(project.getProjectVersion()) + self.authorEdit.setText(project.getProjectAuthor()) + self.authorEmailEdit.setText(project.getProjectAuthorEmail()) + description = project.getProjectDescription() + except AttributeError: + self.versionEdit.setText(project.pdata["VERSION"][0]) + self.authorEdit.setText(project.pdata["AUTHOR"][0]) + self.authorEmailEdit.setText(project.pdata["EMAIL"][0]) + description = project.pdata["DESCRIPTION"][0] + + # summary is max. 55 characters long + summary = (description.split(".", 1)[0] + .replace("\r", "").replace("\n", "") + ".")[:55] + self.shortDescriptionEdit.setText(summary) + self.longDescriptionEdit.setPlainText(description) + + # prevent overwriting of entries by disabling the button + self.projectButton.setEnabled(False) + + def getCode(self): + """ + Public method to get the source code. + + @return generated code (string) + """ + templateData = { + "year": QDate.currentDate().year(), + "author": self.authorEdit.text(), + "email": self.authorEmailEdit.text(), + "name": self.nameEdit.text(), + "autoactivate": self.autoActivateCheckBox.isChecked(), + "deactivateable": self.deactivateableCheckBox.isChecked(), + "version": self.versionEdit.text(), + "className": self.classNameEdit.text(), + "packageName": self.packageNameEdit.text(), + "shortDescription": self.shortDescriptionEdit.text(), + "longDescription": self.longDescriptionEdit.toPlainText(), + "needsRestart": self.restartCheckBox.isChecked(), + } + + if self.configurationGroup.isChecked(): + templateData["config0"] = configTemplate0 + templateData["config1"] = configTemplate1.format( + className=self.classNameEdit.text()) + templateData["config2"] = configTemplate2.format( + preferencesKey=self.preferencesKeyEdit.text()) + templateData["config3"] = configTemplate3 + else: + templateData["config0"] = "" + templateData["config1"] = "" + templateData["config2"] = "" + templateData["config3"] = "" + + if self.autoActivateCheckBox.isChecked(): + templateData["onDemand"] = "" + else: + templateData["onDemand"] = onDemandTemplate.format( + pluginType=self.pluginTypeCombo.currentText(), + pluginTypename=self.pluginTypeNameEdit.text() + ) + + if self.pixmapCheckBox.isChecked(): + templateData["preview"] = previewPixmapTemplate + else: + templateData["preview"] = "" + + if self.moduleSetupCheckBox.isChecked(): + templateData["modulesetup"] = moduleSetupTemplate + else: + templateData["modulesetup"] = "" + + templateData["exeData"] = "" + if self.exeGroup.isChecked(): + if self.exeRadioButton.isChecked(): + templateData["exeData"] = exeDisplayDataTemplate + elif self.exeInfoRadioButton.isChecked(): + templateData["exeData"] = exeDisplayDataInfoTemplate + elif self.exeListRadioButton.isChecked(): + templateData["exeData"] = exeDisplayDataListTemplate + + if self.apiFilesCheckBox.isChecked(): + templateData["apiFiles"] = apiFilesTemplate + else: + templateData["apiFiles"] = "" + + return mainTemplate.format(**templateData) + + def packageName(self): + """ + Public method to retrieve the plug-in package name. + + @return plug-in package name (string) + """ + if self.createPackageCheckBox.isChecked(): + return self.packageNameEdit.text() + else: + return "" + + @pyqtSlot(str) + def on_pluginTypeCombo_currentTextChanged(self, txt): + """ + Private slot to react upon the selection of a plug-in type. + + @param txt selected plug-in type (string) + """ + self.pixmapCheckBox.setChecked(txt == "viewmanager")