--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Plugins/WizardPlugins/MessageBoxWizard/MessageBoxWizardDialog.py Mon Dec 28 16:03:33 2009 +0000 @@ -0,0 +1,321 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2003 - 2009 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing the message box wizard dialog. +""" + +import os + +from PyQt4.QtCore import * +from PyQt4.QtGui import * + +from E4Gui.E4Application import e4App + +from Ui_MessageBoxWizardDialog import Ui_MessageBoxWizardDialog + +class MessageBoxWizardDialog(QDialog, Ui_MessageBoxWizardDialog): + """ + Class implementing the message box wizard dialog. + + It displays a dialog for entering the parameters + for the QMessageBox code generator. + """ + def __init__(self, parent=None): + """ + Constructor + + @param parent parent widget (QWidget) + """ + QDialog.__init__(self, parent) + self.setupUi(self) + + # keep the following three lists in sync + self.buttonsList = [ + self.trUtf8("No button"), + self.trUtf8("Abort"), + self.trUtf8("Apply"), + self.trUtf8("Cancel"), + self.trUtf8("Close"), + self.trUtf8("Discard"), + self.trUtf8("Help"), + self.trUtf8("Ignore"), + self.trUtf8("No"), + self.trUtf8("No to all"), + self.trUtf8("Ok"), + self.trUtf8("Open"), + self.trUtf8("Reset"), + self.trUtf8("Restore defaults"), + self.trUtf8("Retry"), + self.trUtf8("Save"), + self.trUtf8("Save all"), + self.trUtf8("Yes"), + self.trUtf8("Yes to all"), + ] + self.buttonsCodeListBinary = [ + QMessageBox.NoButton, + QMessageBox.Abort, + QMessageBox.Apply, + QMessageBox.Cancel, + QMessageBox.Close, + QMessageBox.Discard, + QMessageBox.Help, + QMessageBox.Ignore, + QMessageBox.No, + QMessageBox.NoToAll, + QMessageBox.Ok, + QMessageBox.Open, + QMessageBox.Reset, + QMessageBox.RestoreDefaults, + QMessageBox.Retry, + QMessageBox.Save, + QMessageBox.SaveAll, + QMessageBox.Yes, + QMessageBox.YesToAll, + ] + self.buttonsCodeListText = [ + "QMessageBox.NoButton", + "QMessageBox.Abort", + "QMessageBox.Apply", + "QMessageBox.Cancel", + "QMessageBox.Close", + "QMessageBox.Discard", + "QMessageBox.Help", + "QMessageBox.Ignore", + "QMessageBox.No", + "QMessageBox.NoToAll", + "QMessageBox.Ok", + "QMessageBox.Open", + "QMessageBox.Reset", + "QMessageBox.RestoreDefaults", + "QMessageBox.Retry", + "QMessageBox.Save", + "QMessageBox.SaveAll", + "QMessageBox.Yes", + "QMessageBox.YesToAll", + ] + + self.defaultCombo.addItems(self.buttonsList) + + self.bTest = \ + self.buttonBox.addButton(self.trUtf8("Test"), QDialogButtonBox.ActionRole) + + def __testQt42(self): + """ + Private method to test the selected options for Qt 4.2.0. + """ + buttons = QMessageBox.NoButton + if self.abortCheck.isChecked(): + buttons |= QMessageBox.Abort + if self.applyCheck.isChecked(): + buttons |= QMessageBox.Apply + if self.cancelCheck.isChecked(): + buttons |= QMessageBox.Cancel + if self.closeCheck.isChecked(): + buttons |= QMessageBox.Close + if self.discardCheck.isChecked(): + buttons |= QMessageBox.Discard + if self.helpCheck.isChecked(): + buttons |= QMessageBox.Help + if self.ignoreCheck.isChecked(): + buttons |= QMessageBox.Ignore + if self.noCheck.isChecked(): + buttons |= QMessageBox.No + if self.notoallCheck.isChecked(): + buttons |= QMessageBox.NoToAll + if self.okCheck.isChecked(): + buttons |= QMessageBox.Ok + if self.openCheck.isChecked(): + buttons |= QMessageBox.Open + if self.resetCheck.isChecked(): + buttons |= QMessageBox.Reset + if self.restoreCheck.isChecked(): + buttons |= QMessageBox.RestoreDefaults + if self.retryCheck.isChecked(): + buttons |= QMessageBox.Retry + if self.saveCheck.isChecked(): + buttons |= QMessageBox.Save + if self.saveallCheck.isChecked(): + buttons |= QMessageBox.SaveAll + if self.yesCheck.isChecked(): + buttons |= QMessageBox.Yes + if self.yestoallCheck.isChecked(): + buttons |= QMessageBox.YesToAll + if buttons == QMessageBox.NoButton: + buttons = QMessageBox.Ok + + defaultButton = self.buttonsCodeListBinary[self.defaultCombo.currentIndex()] + + if self.rInformation.isChecked(): + QMessageBox.information(None, + self.eCaption.text(), + self.eMessage.toPlainText(), + QMessageBox.StandardButtons(buttons), + defaultButton + ) + elif self.rQuestion.isChecked(): + QMessageBox.question(None, + self.eCaption.text(), + self.eMessage.toPlainText(), + QMessageBox.StandardButtons(buttons), + defaultButton + ) + elif self.rWarning.isChecked(): + QMessageBox.warning(None, + self.eCaption.text(), + self.eMessage.toPlainText(), + QMessageBox.StandardButtons(buttons), + defaultButton + ) + elif self.rCritical.isChecked(): + QMessageBox.critical(None, + self.eCaption.text(), + self.eMessage.toPlainText(), + QMessageBox.StandardButtons(buttons), + defaultButton + ) + + def on_buttonBox_clicked(self, button): + """ + Private slot called by a button of the button box clicked. + + @param button button that was clicked (QAbstractButton) + """ + if button == self.bTest: + self.on_bTest_clicked() + + @pyqtSlot() + def on_bTest_clicked(self): + """ + Private method to test the selected options. + """ + if self.rAbout.isChecked(): + QMessageBox.about(None, + self.eCaption.text(), + self.eMessage.toPlainText() + ) + elif self.rAboutQt.isChecked(): + QMessageBox.aboutQt(None, + self.eCaption.text() + ) + else: + self.__testQt42() + + def __enabledGroups(self): + """ + Private method to enable/disable some group boxes. + """ + self.standardButtons.setEnabled(not self.rAbout.isChecked() and \ + not self.rAboutQt.isChecked() + ) + + def on_rAbout_toggled(self, on): + """ + Private slot to handle the toggled signal of the rAbout radio button. + + @param on toggle state (boolean) (ignored) + """ + self.__enabledGroups() + + def on_rAboutQt_toggled(self, on): + """ + Private slot to handle the toggled signal of the rAboutQt radio button. + + @param on toggle state (boolean) (ignored) + """ + self.__enabledGroups() + + def __getQt42ButtonCode(self, istring, indString): + """ + Private method to generate the button code for Qt 4.2.0. + + @param istring indentation string (string) + @param indString string used for indentation (space or tab) (string) + @return the button code (string) + """ + buttons = [] + if self.abortCheck.isChecked(): + buttons.append("QMessageBox.Abort") + if self.applyCheck.isChecked(): + buttons.append("QMessageBox.Apply") + if self.cancelCheck.isChecked(): + buttons.append("QMessageBox.Cancel") + if self.closeCheck.isChecked(): + buttons.append("QMessageBox.Close") + if self.discardCheck.isChecked(): + buttons.append("QMessageBox.Discard") + if self.helpCheck.isChecked(): + buttons.append("QMessageBox.Help") + if self.ignoreCheck.isChecked(): + buttons.append("QMessageBox.Ignore") + if self.noCheck.isChecked(): + buttons.append("QMessageBox.No") + if self.notoallCheck.isChecked(): + buttons.append("QMessageBox.NoToAll") + if self.okCheck.isChecked(): + buttons.append("QMessageBox.Ok") + if self.openCheck.isChecked(): + buttons.append("QMessageBox.Open") + if self.resetCheck.isChecked(): + buttons.append("QMessageBox.Reset") + if self.restoreCheck.isChecked(): + buttons.append("QMessageBox.RestoreDefaults") + if self.retryCheck.isChecked(): + buttons.append("QMessageBox.Retry") + if self.saveCheck.isChecked(): + buttons.append("QMessageBox.Save") + if self.saveallCheck.isChecked(): + buttons.append("QMessageBox.SaveAll") + if self.yesCheck.isChecked(): + buttons.append("QMessageBox.Yes") + if self.yestoallCheck.isChecked(): + buttons.append("QMessageBox.YesToAll") + if len(buttons) == 0: + return "" + + istring2 = istring + indString + joinstring = ' | \\%s%s' % (os.linesep, istring2) + btnCode = ',%s%sQMessageBox.StandardButtons(\\' % (os.linesep, istring) + btnCode += '%s%s%s)' % (os.linesep, istring2, joinstring.join(buttons)) + defaultIndex = self.defaultCombo.currentIndex() + if defaultIndex: + btnCode += ',%s%s%s' % (os.linesep, istring, + self.buttonsCodeListText[defaultIndex]) + return btnCode + + def getCode(self, indLevel, indString): + """ + Public method to get the source code. + + @param indLevel indentation level (int) + @param indString string used for indentation (space or tab) (string) + @return generated code (string) + """ + # calculate our indentation level and the indentation string + il = indLevel + 1 + istring = il * indString + + # now generate the code + msgdlg = 'QMessageBox.' + if self.rAbout.isChecked(): + msgdlg += "about(None,%s" % os.linesep + elif self.rAboutQt.isChecked(): + msgdlg += "aboutQt(None, %s" % os.linesep + elif self.rInformation.isChecked(): + msgdlg += "information(None,%s" % os.linesep + elif self.rQuestion.isChecked(): + msgdlg += "question(None,%s" % os.linesep + elif self.rWarning.isChecked(): + msgdlg += "warning(None,%s" % os.linesep + else: + msgdlg +="critical(None,%s" % os.linesep + msgdlg += '%sself.trUtf8("%s")' % (istring, self.eCaption.text()) + if not self.rAboutQt.isChecked(): + msgdlg += ',%s%sself.trUtf8("""%s""")' % \ + (os.linesep, istring, self.eMessage.toPlainText()) + if not self.rAbout.isChecked() and not self.rAboutQt.isChecked(): + msgdlg += self.__getQt42ButtonCode(istring, indString) + msgdlg +=')%s' % os.linesep + return msgdlg