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