eric7/Plugins/WizardPlugins/MessageBoxWizard/MessageBoxWizardDialog.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) 2003 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
4 #
5
6 """
7 Module implementing the message box wizard dialog.
8 """
9
10 import os
11
12 from PyQt5.QtCore import pyqtSlot
13 from PyQt5.QtWidgets import QMessageBox, QDialog, QDialogButtonBox
14
15 from .Ui_MessageBoxWizardDialog import Ui_MessageBoxWizardDialog
16
17
18 class MessageBoxWizardDialog(QDialog, Ui_MessageBoxWizardDialog):
19 """
20 Class implementing the message box wizard dialog.
21
22 It displays a dialog for entering the parameters
23 for the QMessageBox code generator.
24 """
25 def __init__(self, parent=None):
26 """
27 Constructor
28
29 @param parent parent widget (QWidget)
30 """
31 super().__init__(parent)
32 self.setupUi(self)
33
34 # keep the following three lists in sync
35 self.buttonsList = [
36 self.tr("No button"),
37 self.tr("Abort"),
38 self.tr("Apply"),
39 self.tr("Cancel"),
40 self.tr("Close"),
41 self.tr("Discard"),
42 self.tr("Help"),
43 self.tr("Ignore"),
44 self.tr("No"),
45 self.tr("No to all"),
46 self.tr("Ok"),
47 self.tr("Open"),
48 self.tr("Reset"),
49 self.tr("Restore defaults"),
50 self.tr("Retry"),
51 self.tr("Save"),
52 self.tr("Save all"),
53 self.tr("Yes"),
54 self.tr("Yes to all"),
55 ]
56 self.buttonsCodeListBinary = [
57 QMessageBox.StandardButton.NoButton,
58 QMessageBox.StandardButton.Abort,
59 QMessageBox.StandardButton.Apply,
60 QMessageBox.StandardButton.Cancel,
61 QMessageBox.StandardButton.Close,
62 QMessageBox.StandardButton.Discard,
63 QMessageBox.StandardButton.Help,
64 QMessageBox.StandardButton.Ignore,
65 QMessageBox.StandardButton.No,
66 QMessageBox.StandardButton.NoToAll,
67 QMessageBox.StandardButton.Ok,
68 QMessageBox.StandardButton.Open,
69 QMessageBox.StandardButton.Reset,
70 QMessageBox.StandardButton.RestoreDefaults,
71 QMessageBox.StandardButton.Retry,
72 QMessageBox.StandardButton.Save,
73 QMessageBox.StandardButton.SaveAll,
74 QMessageBox.StandardButton.Yes,
75 QMessageBox.StandardButton.YesToAll,
76 ]
77 self.buttonsCodeListText = [
78 "QMessageBox.StandardButton.NoButton",
79 "QMessageBox.StandardButton.Abort",
80 "QMessageBox.StandardButton.Apply",
81 "QMessageBox.StandardButton.Cancel",
82 "QMessageBox.StandardButton.Close",
83 "QMessageBox.StandardButton.Discard",
84 "QMessageBox.StandardButton.Help",
85 "QMessageBox.StandardButton.Ignore",
86 "QMessageBox.StandardButton.No",
87 "QMessageBox.StandardButton.NoToAll",
88 "QMessageBox.StandardButton.Ok",
89 "QMessageBox.StandardButton.Open",
90 "QMessageBox.StandardButton.Reset",
91 "QMessageBox.StandardButton.RestoreDefaults",
92 "QMessageBox.StandardButton.Retry",
93 "QMessageBox.StandardButton.Save",
94 "QMessageBox.StandardButton.SaveAll",
95 "QMessageBox.StandardButton.Yes",
96 "QMessageBox.StandardButton.YesToAll",
97 ]
98
99 self.defaultCombo.addItems(self.buttonsList)
100
101 self.bTest = self.buttonBox.addButton(
102 self.tr("Test"), QDialogButtonBox.ButtonRole.ActionRole)
103
104 def __testSelectedOptions(self):
105 """
106 Private method to test the selected options.
107 """
108 buttons = QMessageBox.StandardButton.NoButton
109 if self.abortCheck.isChecked():
110 buttons |= QMessageBox.StandardButton.Abort
111 if self.applyCheck.isChecked():
112 buttons |= QMessageBox.StandardButton.Apply
113 if self.cancelCheck.isChecked():
114 buttons |= QMessageBox.StandardButton.Cancel
115 if self.closeCheck.isChecked():
116 buttons |= QMessageBox.StandardButton.Close
117 if self.discardCheck.isChecked():
118 buttons |= QMessageBox.StandardButton.Discard
119 if self.helpCheck.isChecked():
120 buttons |= QMessageBox.StandardButton.Help
121 if self.ignoreCheck.isChecked():
122 buttons |= QMessageBox.StandardButton.Ignore
123 if self.noCheck.isChecked():
124 buttons |= QMessageBox.StandardButton.No
125 if self.notoallCheck.isChecked():
126 buttons |= QMessageBox.StandardButton.NoToAll
127 if self.okCheck.isChecked():
128 buttons |= QMessageBox.StandardButton.Ok
129 if self.openCheck.isChecked():
130 buttons |= QMessageBox.StandardButton.Open
131 if self.resetCheck.isChecked():
132 buttons |= QMessageBox.StandardButton.Reset
133 if self.restoreCheck.isChecked():
134 buttons |= QMessageBox.StandardButton.RestoreDefaults
135 if self.retryCheck.isChecked():
136 buttons |= QMessageBox.StandardButton.Retry
137 if self.saveCheck.isChecked():
138 buttons |= QMessageBox.StandardButton.Save
139 if self.saveallCheck.isChecked():
140 buttons |= QMessageBox.StandardButton.SaveAll
141 if self.yesCheck.isChecked():
142 buttons |= QMessageBox.StandardButton.Yes
143 if self.yestoallCheck.isChecked():
144 buttons |= QMessageBox.StandardButton.YesToAll
145 if buttons == QMessageBox.StandardButton.NoButton:
146 buttons = QMessageBox.StandardButton.Ok
147
148 defaultButton = self.buttonsCodeListBinary[
149 self.defaultCombo.currentIndex()]
150
151 if self.rInformation.isChecked():
152 QMessageBox.information(
153 self,
154 self.eCaption.text(),
155 self.eMessage.toPlainText(),
156 QMessageBox.StandardButtons(buttons),
157 defaultButton
158 )
159 elif self.rQuestion.isChecked():
160 QMessageBox.question(
161 self,
162 self.eCaption.text(),
163 self.eMessage.toPlainText(),
164 QMessageBox.StandardButtons(buttons),
165 defaultButton
166 )
167 elif self.rWarning.isChecked():
168 QMessageBox.warning(
169 self,
170 self.eCaption.text(),
171 self.eMessage.toPlainText(),
172 QMessageBox.StandardButtons(buttons),
173 defaultButton
174 )
175 elif self.rCritical.isChecked():
176 QMessageBox.critical(
177 self,
178 self.eCaption.text(),
179 self.eMessage.toPlainText(),
180 QMessageBox.StandardButtons(buttons),
181 defaultButton
182 )
183
184 def on_buttonBox_clicked(self, button):
185 """
186 Private slot called by a button of the button box clicked.
187
188 @param button button that was clicked (QAbstractButton)
189 """
190 if button == self.bTest:
191 self.on_bTest_clicked()
192
193 @pyqtSlot()
194 def on_bTest_clicked(self):
195 """
196 Private method to test the selected options.
197 """
198 if self.rAbout.isChecked():
199 QMessageBox.about(
200 None,
201 self.eCaption.text(),
202 self.eMessage.toPlainText()
203 )
204 elif self.rAboutQt.isChecked():
205 QMessageBox.aboutQt(
206 None,
207 self.eCaption.text()
208 )
209 else:
210 self.__testSelectedOptions()
211
212 def __enabledGroups(self):
213 """
214 Private method to enable/disable some group boxes.
215 """
216 enable = not self.rAbout.isChecked() and not self.rAboutQt.isChecked()
217 self.standardButtons.setEnabled(enable)
218 self.lResultVar.setEnabled(enable)
219 self.eResultVar.setEnabled(enable)
220
221 self.eMessage.setEnabled(not self.rAboutQt.isChecked())
222
223 def on_rAbout_toggled(self, on):
224 """
225 Private slot to handle the toggled signal of the rAbout radio button.
226
227 @param on toggle state (boolean) (ignored)
228 """
229 self.__enabledGroups()
230
231 def on_rAboutQt_toggled(self, on):
232 """
233 Private slot to handle the toggled signal of the rAboutQt radio button.
234
235 @param on toggle state (boolean) (ignored)
236 """
237 self.__enabledGroups()
238
239 def __getButtonCode(self, istring, indString):
240 """
241 Private method to generate the button code.
242
243 @param istring indentation string (string)
244 @param indString string used for indentation (space or tab) (string)
245 @return the button code (string)
246 """
247 buttons = []
248 if self.abortCheck.isChecked():
249 buttons.append("QMessageBox.StandardButton.Abort")
250 if self.applyCheck.isChecked():
251 buttons.append("QMessageBox.StandardButton.Apply")
252 if self.cancelCheck.isChecked():
253 buttons.append("QMessageBox.StandardButton.Cancel")
254 if self.closeCheck.isChecked():
255 buttons.append("QMessageBox.StandardButton.Close")
256 if self.discardCheck.isChecked():
257 buttons.append("QMessageBox.StandardButton.Discard")
258 if self.helpCheck.isChecked():
259 buttons.append("QMessageBox.StandardButton.Help")
260 if self.ignoreCheck.isChecked():
261 buttons.append("QMessageBox.StandardButton.Ignore")
262 if self.noCheck.isChecked():
263 buttons.append("QMessageBox.StandardButton.No")
264 if self.notoallCheck.isChecked():
265 buttons.append("QMessageBox.StandardButton.NoToAll")
266 if self.okCheck.isChecked():
267 buttons.append("QMessageBox.StandardButton.Ok")
268 if self.openCheck.isChecked():
269 buttons.append("QMessageBox.StandardButton.Open")
270 if self.resetCheck.isChecked():
271 buttons.append("QMessageBox.StandardButton.Reset")
272 if self.restoreCheck.isChecked():
273 buttons.append("QMessageBox.StandardButton.RestoreDefaults")
274 if self.retryCheck.isChecked():
275 buttons.append("QMessageBox.StandardButton.Retry")
276 if self.saveCheck.isChecked():
277 buttons.append("QMessageBox.StandardButton.Save")
278 if self.saveallCheck.isChecked():
279 buttons.append("QMessageBox.StandardButton.SaveAll")
280 if self.yesCheck.isChecked():
281 buttons.append("QMessageBox.StandardButton.Yes")
282 if self.yestoallCheck.isChecked():
283 buttons.append("QMessageBox.StandardButton.YesToAll")
284 if len(buttons) == 0:
285 return ""
286
287 istring2 = istring + indString
288 joinstring = ' |{0}{1}'.format(os.linesep, istring2)
289 btnCode = ',{0}{1}QMessageBox.StandardButtons('.format(
290 os.linesep, istring)
291 btnCode += '{0}{1}{2})'.format(
292 os.linesep, istring2, joinstring.join(buttons))
293 defaultIndex = self.defaultCombo.currentIndex()
294 if defaultIndex:
295 btnCode += ',{0}{1}{2}'.format(
296 os.linesep, istring,
297 self.buttonsCodeListText[defaultIndex])
298 return btnCode
299
300 def getCode(self, indLevel, indString):
301 """
302 Public method to get the source code.
303
304 @param indLevel indentation level (int)
305 @param indString string used for indentation (space or tab) (string)
306 @return generated code (string)
307 """
308 # calculate our indentation level and the indentation string
309 il = indLevel + 1
310 istring = il * indString
311 estring = os.linesep + indLevel * indString
312
313 # now generate the code
314 if self.parentSelf.isChecked():
315 parent = "self"
316 elif self.parentNone.isChecked():
317 parent = "None"
318 elif self.parentOther.isChecked():
319 parent = self.parentEdit.text()
320 if parent == "":
321 parent = "None"
322
323 resvar = self.eResultVar.text()
324 if not resvar:
325 resvar = "res"
326
327 if self.rAbout.isChecked():
328 msgdlg = "QMessageBox.about("
329 elif self.rAboutQt.isChecked():
330 msgdlg = "QMessageBox.aboutQt("
331 elif self.rInformation.isChecked():
332 msgdlg = "{0} = QMessageBox.information(".format(resvar)
333 elif self.rQuestion.isChecked():
334 msgdlg = "{0} = QMessageBox.question(".format(resvar)
335 elif self.rWarning.isChecked():
336 msgdlg = "{0} = QMessageBox.warning(".format(resvar)
337 else:
338 msgdlg = "{0} = QMessageBox.critical(".format(resvar)
339
340 if self.rAboutQt.isChecked():
341 if self.eCaption.text():
342 msgdlg += '{0}{1}{2}'.format(os.linesep, istring, parent)
343 msgdlg += ',{0}{1}self.tr("{2}")'.format(
344 os.linesep, istring, self.eCaption.text())
345 else:
346 msgdlg += parent
347 else:
348 msgdlg += '{0}{1}{2}'.format(os.linesep, istring, parent)
349 msgdlg += ',{0}{1}self.tr("{2}")'.format(
350 os.linesep, istring, self.eCaption.text())
351 msgdlg += ',{0}{1}self.tr("""{2}""")'.format(
352 os.linesep, istring, self.eMessage.toPlainText())
353 if not self.rAbout.isChecked() and not self.rAboutQt.isChecked():
354 msgdlg += self.__getButtonCode(istring, indString)
355 msgdlg += '){0}'.format(estring)
356 return msgdlg

eric ide

mercurial