1# -*- coding: utf-8 -*- 2 3# Copyright (c) 2014 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> 4# 5 6""" 7Module implementing the eric plug-in wizard dialog. 8""" 9 10from PyQt5.QtCore import pyqtSlot, QDate 11from PyQt5.QtWidgets import QDialog, QDialogButtonBox 12 13from E5Gui.E5Application import e5App 14 15from .Ui_PluginWizardDialog import Ui_PluginWizardDialog 16 17from .Templates import ( 18 mainTemplate, configTemplate0, configTemplate1, configTemplate2, 19 configTemplate3, onDemandTemplate, previewPixmapTemplate, 20 moduleSetupTemplate, exeDisplayDataTemplate, exeDisplayDataInfoTemplate, 21 exeDisplayDataListTemplate, apiFilesTemplate 22) 23 24 25class PluginWizardDialog(QDialog, Ui_PluginWizardDialog): 26 """ 27 Class implementing the eric plug-in wizard dialog. 28 """ 29 def __init__(self, parent=None): 30 """ 31 Constructor 32 33 @param parent reference to the parent widget (QWidget) 34 """ 35 super().__init__(parent) 36 self.setupUi(self) 37 38 self.dataTabWidget.setCurrentIndex(0) 39 40 self.__okButton = self.buttonBox.button( 41 QDialogButtonBox.StandardButton.Ok) 42 self.__okButton.setEnabled(False) 43 44 projectOpen = e5App().getObject("Project").isOpen() 45 self.projectButton.setEnabled(projectOpen) 46 47 self.nameEdit.textChanged.connect(self.__enableOkButton) 48 self.versionEdit.textChanged.connect(self.__enableOkButton) 49 self.authorEdit.textChanged.connect(self.__enableOkButton) 50 self.authorEmailEdit.textChanged.connect(self.__enableOkButton) 51 self.classNameEdit.textChanged.connect(self.__enableOkButton) 52 self.packageNameEdit.textChanged.connect(self.__enableOkButton) 53 self.shortDescriptionEdit.textChanged.connect(self.__enableOkButton) 54 self.longDescriptionEdit.textChanged.connect(self.__enableOkButton) 55 self.preferencesKeyEdit.textChanged.connect(self.__enableOkButton) 56 self.configurationGroup.toggled.connect(self.__enableOkButton) 57 self.autoActivateCheckBox.toggled.connect(self.__enableOkButton) 58 self.pluginTypeCombo.currentIndexChanged.connect(self.__enableOkButton) 59 self.pluginTypeNameEdit.textChanged.connect(self.__enableOkButton) 60 61 self.pluginTypeCombo.addItems(["", "viewmanager", "version_control"]) 62 63 def __enableOkButton(self): 64 """ 65 Private slot to set the state of the OK button. 66 """ 67 enable = ( 68 bool(self.nameEdit.text()) and 69 bool(self.versionEdit.text()) and 70 bool(self.authorEdit.text()) and 71 bool(self.authorEmailEdit.text()) and 72 bool(self.classNameEdit.text()) and 73 bool(self.packageNameEdit.text()) and 74 bool(self.shortDescriptionEdit.text()) and 75 bool(self.longDescriptionEdit.toPlainText()) 76 ) 77 if self.configurationGroup.isChecked(): 78 enable = enable and bool(self.preferencesKeyEdit.text()) 79 if not self.autoActivateCheckBox.isChecked(): 80 enable = (enable and 81 bool(self.pluginTypeCombo.currentText()) and 82 bool(self.pluginTypeNameEdit.text()) 83 ) 84 85 self.__okButton.setEnabled(enable) 86 87 @pyqtSlot() 88 def on_projectButton_clicked(self): 89 """ 90 Private slot to populate some fields with data retrieved from the 91 current project. 92 """ 93 project = e5App().getObject("Project") 94 95 try: 96 self.versionEdit.setText(project.getProjectVersion()) 97 self.authorEdit.setText(project.getProjectAuthor()) 98 self.authorEmailEdit.setText(project.getProjectAuthorEmail()) 99 description = project.getProjectDescription() 100 except AttributeError: 101 self.versionEdit.setText(project.pdata["VERSION"][0]) 102 self.authorEdit.setText(project.pdata["AUTHOR"][0]) 103 self.authorEmailEdit.setText(project.pdata["EMAIL"][0]) 104 description = project.pdata["DESCRIPTION"][0] 105 106 # summary is max. 55 characters long 107 summary = (description.split(".", 1)[0] 108 .replace("\r", "").replace("\n", "") + ".")[:55] 109 self.shortDescriptionEdit.setText(summary) 110 self.longDescriptionEdit.setPlainText(description) 111 112 # prevent overwriting of entries by disabling the button 113 self.projectButton.setEnabled(False) 114 115 def getCode(self): 116 """ 117 Public method to get the source code. 118 119 @return generated code (string) 120 """ 121 templateData = { 122 "year": QDate.currentDate().year(), 123 "author": self.authorEdit.text(), 124 "email": self.authorEmailEdit.text(), 125 "name": self.nameEdit.text(), 126 "autoactivate": self.autoActivateCheckBox.isChecked(), 127 "deactivateable": self.deactivateableCheckBox.isChecked(), 128 "version": self.versionEdit.text(), 129 "className": self.classNameEdit.text(), 130 "packageName": self.packageNameEdit.text(), 131 "shortDescription": self.shortDescriptionEdit.text(), 132 "longDescription": self.longDescriptionEdit.toPlainText(), 133 "needsRestart": self.restartCheckBox.isChecked(), 134 } 135 136 if self.configurationGroup.isChecked(): 137 templateData["config0"] = configTemplate0 138 templateData["config1"] = configTemplate1.format( 139 className=self.classNameEdit.text()) 140 templateData["config2"] = configTemplate2.format( 141 preferencesKey=self.preferencesKeyEdit.text()) 142 templateData["config3"] = configTemplate3 143 else: 144 templateData["config0"] = "" 145 templateData["config1"] = "" 146 templateData["config2"] = "" 147 templateData["config3"] = "" 148 149 if self.autoActivateCheckBox.isChecked(): 150 templateData["onDemand"] = "" 151 else: 152 templateData["onDemand"] = onDemandTemplate.format( 153 pluginType=self.pluginTypeCombo.currentText(), 154 pluginTypename=self.pluginTypeNameEdit.text() 155 ) 156 157 if self.pixmapCheckBox.isChecked(): 158 templateData["preview"] = previewPixmapTemplate 159 else: 160 templateData["preview"] = "" 161 162 if self.moduleSetupCheckBox.isChecked(): 163 templateData["modulesetup"] = moduleSetupTemplate 164 else: 165 templateData["modulesetup"] = "" 166 167 templateData["exeData"] = "" 168 if self.exeGroup.isChecked(): 169 if self.exeRadioButton.isChecked(): 170 templateData["exeData"] = exeDisplayDataTemplate 171 elif self.exeInfoRadioButton.isChecked(): 172 templateData["exeData"] = exeDisplayDataInfoTemplate 173 elif self.exeListRadioButton.isChecked(): 174 templateData["exeData"] = exeDisplayDataListTemplate 175 176 if self.apiFilesCheckBox.isChecked(): 177 templateData["apiFiles"] = apiFilesTemplate 178 else: 179 templateData["apiFiles"] = "" 180 181 return mainTemplate.format(**templateData) 182 183 def packageName(self): 184 """ 185 Public method to retrieve the plug-in package name. 186 187 @return plug-in package name (string) 188 """ 189 if self.createPackageCheckBox.isChecked(): 190 return self.packageNameEdit.text() 191 else: 192 return "" 193 194 @pyqtSlot(str) 195 def on_pluginTypeCombo_currentTextChanged(self, txt): 196 """ 197 Private slot to react upon the selection of a plug-in type. 198 199 @param txt selected plug-in type (string) 200 """ 201 self.pixmapCheckBox.setChecked(txt == "viewmanager") 202