eric7/Plugins/WizardPlugins/EricPluginWizard/PluginWizardDialog.py

branch
eric7
changeset 8312
800c432b34c8
parent 8218
7c09585bd960
child 8318
962bce857696
equal deleted inserted replaced
8311:4e8b98454baa 8312:800c432b34c8
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2014 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
4 #
5
6 """
7 Module implementing the eric plug-in wizard dialog.
8 """
9
10 from PyQt5.QtCore import pyqtSlot, QDate
11 from PyQt5.QtWidgets import QDialog, QDialogButtonBox
12
13 from E5Gui.E5Application import e5App
14
15 from .Ui_PluginWizardDialog import Ui_PluginWizardDialog
16
17 from .Templates import (
18 mainTemplate, configTemplate0, configTemplate1, configTemplate2,
19 configTemplate3, onDemandTemplate, previewPixmapTemplate,
20 moduleSetupTemplate, exeDisplayDataTemplate, exeDisplayDataInfoTemplate,
21 exeDisplayDataListTemplate, apiFilesTemplate
22 )
23
24
25 class 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")

eric ide

mercurial