Plugins/WizardPlugins/E5MessageBoxWizard/E5MessageBoxWizardDialog.py

changeset 562
8bf0dbc1ca6a
child 564
b3d966393ba9
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Plugins/WizardPlugins/E5MessageBoxWizard/E5MessageBoxWizardDialog.py	Sat Sep 04 19:10:16 2010 +0200
@@ -0,0 +1,518 @@
+# -*- coding: utf-8 -*-
+
+"""
+Module implementing the eric5 message box wizard dialog.
+"""
+
+import os
+
+from PyQt4.QtCore import pyqtSlot
+from PyQt4.QtGui import QDialog, QDialogButtonBox, QAbstractButton
+
+from E5Gui import E5MessageBox
+
+from .Ui_E5MessageBoxWizardDialog import Ui_E5MessageBoxWizardDialog
+
+class E5MessageBoxWizardDialog(QDialog, Ui_E5MessageBoxWizardDialog):
+    """
+    Class implementing the eric5 message box wizard dialog.
+    
+    It displays a dialog for entering the parameters
+    for the E5MessageBox code generator.
+    """
+    def __init__(self, parent = None):
+        """
+        Constructor
+        
+        @param parent reference to the 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 = [
+            E5MessageBox.NoButton,
+            E5MessageBox.Abort,
+            E5MessageBox.Apply,
+            E5MessageBox.Cancel,
+            E5MessageBox.Close,
+            E5MessageBox.Discard,
+            E5MessageBox.Help,
+            E5MessageBox.Ignore,
+            E5MessageBox.No,
+            E5MessageBox.NoToAll,
+            E5MessageBox.Ok,
+            E5MessageBox.Open,
+            E5MessageBox.Reset,
+            E5MessageBox.RestoreDefaults,
+            E5MessageBox.Retry,
+            E5MessageBox.Save,
+            E5MessageBox.SaveAll,
+            E5MessageBox.Yes,
+            E5MessageBox.YesToAll,
+        ]
+        self.buttonsCodeListText = [
+            "E5MessageBox.NoButton",
+            "E5MessageBox.Abort",
+            "E5MessageBox.Apply",
+            "E5MessageBox.Cancel",
+            "E5MessageBox.Close",
+            "E5MessageBox.Discard",
+            "E5MessageBox.Help",
+            "E5MessageBox.Ignore",
+            "E5MessageBox.No",
+            "E5MessageBox.NoToAll",
+            "E5MessageBox.Ok",
+            "E5MessageBox.Open",
+            "E5MessageBox.Reset",
+            "E5MessageBox.RestoreDefaults",
+            "E5MessageBox.Retry",
+            "E5MessageBox.Save",
+            "E5MessageBox.SaveAll",
+            "E5MessageBox.Yes",
+            "E5MessageBox.YesToAll",
+        ]
+        
+        self.defaultCombo.addItems(self.buttonsList)
+        
+        self.bTest = \
+            self.buttonBox.addButton(self.trUtf8("Test"), QDialogButtonBox.ActionRole)
+        
+        self.__enabledGroups()
+
+    def __enabledGroups(self):
+        """
+        Private method to enable/disable some group boxes.
+        """
+        self.standardButtons.setEnabled(
+            self.rInformation.isChecked() or \
+            self.rQuestion.isChecked() or \
+            self.rWarning.isChecked() or \
+            self.rCritical.isChecked() or \
+            self.rStandard.isChecked()
+        )
+        
+        self.defaultButton.setEnabled(
+            self.rInformation.isChecked() or \
+            self.rQuestion.isChecked() or \
+            self.rWarning.isChecked() or \
+            self.rCritical.isChecked()
+        )
+        
+        self.iconBox.setEnabled(
+            self.rYesNo.isChecked() or \
+            self.rRetryAbort.isChecked() or \
+            self.rStandard.isChecked()
+        )
+        
+        self.bTest.setEnabled(not self.rStandard.isChecked())
+    
+    @pyqtSlot(bool)
+    def on_rInformation_toggled(self, checked):
+        """
+        Private slot to handle the toggled signal of the rInformation radio button.
+        
+        @param on toggle state (boolean) (ignored)
+        """
+        self.__enabledGroups()
+    
+    @pyqtSlot(bool)
+    def on_rQuestion_toggled(self, checked):
+        """
+        Private slot to handle the toggled signal of the rQuestion radio button.
+        
+        @param on toggle state (boolean) (ignored)
+        """
+        self.__enabledGroups()
+    
+    @pyqtSlot(bool)
+    def on_rWarning_toggled(self, checked):
+        """
+        Private slot to handle the toggled signal of the rWarning radio button.
+        
+        @param on toggle state (boolean) (ignored)
+        """
+        self.__enabledGroups()
+    
+    @pyqtSlot(bool)
+    def on_rCritical_toggled(self, checked):
+        """
+        Private slot to handle the toggled signal of the rCritical radio button.
+        
+        @param on toggle state (boolean) (ignored)
+        """
+        self.__enabledGroups()
+    
+    @pyqtSlot(bool)
+    def on_rYesNo_toggled(self, checked):
+        """
+        Private slot to handle the toggled signal of the rYesNo radio button.
+        
+        @param on toggle state (boolean) (ignored)
+        """
+        self.__enabledGroups()
+    
+    @pyqtSlot(bool)
+    def on_rRetryAbort_toggled(self, checked):
+        """
+        Private slot to handle the toggled signal of the rRetryAbort radio button.
+        
+        @param on toggle state (boolean) (ignored)
+        """
+        self.__enabledGroups()
+    
+    @pyqtSlot(bool)
+    def on_rOkToClearData_toggled(self, checked):
+        """
+        Private slot to handle the toggled signal of the rOkToClearData radio button.
+        
+        @param on toggle state (boolean) (ignored)
+        """
+        self.__enabledGroups()
+    
+    @pyqtSlot(bool)
+    def on_rAbout_toggled(self, checked):
+        """
+        Private slot to handle the toggled signal of the rAbout radio button.
+        
+        @param on toggle state (boolean) (ignored)
+        """
+        self.__enabledGroups()
+    
+    @pyqtSlot(bool)
+    def on_rAboutQt_toggled(self, checked):
+        """
+        Private slot to handle the toggled signal of the rAboutQt radio button.
+        
+        @param on toggle state (boolean) (ignored)
+        """
+        self.__enabledGroups()
+    
+    @pyqtSlot(bool)
+    def on_rStandard_toggled(self, checked):
+        """
+        Private slot to handle the toggled signal of the rStandard radio button.
+        
+        @param on toggle state (boolean) (ignored)
+        """
+        self.__enabledGroups()
+    
+    @pyqtSlot(QAbstractButton)
+    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():
+            E5MessageBox.about(None,
+                self.eCaption.text(),
+                self.eMessage.toPlainText()
+            )
+        elif self.rAboutQt.isChecked():
+            E5MessageBox.aboutQt(None,
+                self.eCaption.text()
+            )
+        elif self.rInformation.isChecked() or \
+             self.rQuestion.isChecked() or \
+             self.rWarning.isChecked() or \
+             self.rCritical.isChecked():
+            buttons = E5MessageBox.NoButton
+            if self.abortCheck.isChecked():
+                buttons |= E5MessageBox.Abort
+            if self.applyCheck.isChecked():
+                buttons |= E5MessageBox.Apply
+            if self.cancelCheck.isChecked():
+                buttons |= E5MessageBox.Cancel
+            if self.closeCheck.isChecked():
+                buttons |= E5MessageBox.Close
+            if self.discardCheck.isChecked():
+                buttons |= E5MessageBox.Discard
+            if self.helpCheck.isChecked():
+                buttons |= E5MessageBox.Help
+            if self.ignoreCheck.isChecked():
+                buttons |= E5MessageBox.Ignore
+            if self.noCheck.isChecked():
+                buttons |= E5MessageBox.No
+            if self.notoallCheck.isChecked():
+                buttons |= E5MessageBox.NoToAll
+            if self.okCheck.isChecked():
+                buttons |= E5MessageBox.Ok
+            if self.openCheck.isChecked():
+                buttons |= E5MessageBox.Open
+            if self.resetCheck.isChecked():
+                buttons |= E5MessageBox.Reset
+            if self.restoreCheck.isChecked():
+                buttons |= E5MessageBox.RestoreDefaults
+            if self.retryCheck.isChecked():
+                buttons |= E5MessageBox.Retry
+            if self.saveCheck.isChecked():
+                buttons |= E5MessageBox.Save
+            if self.saveallCheck.isChecked():
+                buttons |= E5MessageBox.SaveAll
+            if self.yesCheck.isChecked():
+                buttons |= E5MessageBox.Yes
+            if self.yestoallCheck.isChecked():
+                buttons |= E5MessageBox.YesToAll
+            if buttons == E5MessageBox.NoButton:
+                buttons = E5MessageBox.Ok
+            
+            defaultButton = self.buttonsCodeListBinary[self.defaultCombo.currentIndex()]
+            
+            if self.rInformation.isChecked():
+                E5MessageBox.information(self,
+                    self.eCaption.text(),
+                    self.eMessage.toPlainText(),
+                    E5MessageBox.StandardButtons(buttons),
+                    defaultButton
+                )
+            elif self.rQuestion.isChecked():
+                E5MessageBox.question(self,
+                    self.eCaption.text(),
+                    self.eMessage.toPlainText(),
+                    E5MessageBox.StandardButtons(buttons),
+                    defaultButton
+                )
+            elif self.rWarning.isChecked(): 
+                E5MessageBox.warning(self,
+                    self.eCaption.text(),
+                    self.eMessage.toPlainText(),
+                    E5MessageBox.StandardButtons(buttons),
+                    defaultButton
+                )
+            elif self.rCritical.isChecked():
+                E5MessageBox.critical(self,
+                    self.eCaption.text(),
+                    self.eMessage.toPlainText(),
+                    E5MessageBox.StandardButtons(buttons),
+                    defaultButton
+                )
+        elif self.rYesNo.isChecked() or \
+             self.rRetryAbort.isChecked():
+            if self.iconInformation.isChecked():
+                icon = E5MessageBox.Information
+            elif self.iconQuestion.isChecked():
+                icon = E5MessageBox.Question
+            elif self.iconWarning.isChecked():
+                icon = E5MessageBox.Warning
+            elif self.iconCritical.isChecked():
+                icon = E5MessageBox.Critical
+            
+            if self.rYesNo.isChecked():
+                E5MessageBox.yesNo(self, 
+                    self.eCaption.text(),
+                    self.eMessage.toPlainText(),
+                    icon = icon, 
+                    yesDefault = self.yesDefaultCheck.isChecked()
+                )
+            elif self.rRetryAbort.isChecked():
+                E5MessageBox.retryAbort(self, 
+                    self.eCaption.text(),
+                    self.eMessage.toPlainText(),
+                    icon = icon
+                )
+        elif self.rOkToClearData.isChecked():
+            E5MessageBox.okToClearData(self, 
+                self.eCaption.text(),
+                self.eMessage.toPlainText(),
+                lambda: True
+            )
+    
+    def __getStandardButtonCode(self, istring, indString, withIntro = True):
+        """
+        Private method to generate the button code for the standard buttons.
+        
+        @param istring indentation string (string)
+        @param indString string used for indentation (space or tab) (string)
+        @keyparam withIntro flag indicating to generate a first line 
+            with introductory text (boolean)
+        @return the button code (string)
+        """
+        buttons = []
+        if self.abortCheck.isChecked():
+            buttons.append("E5MessageBox.Abort")
+        if self.applyCheck.isChecked():
+            buttons.append("E5MessageBox.Apply")
+        if self.cancelCheck.isChecked():
+            buttons.append("E5MessageBox.Cancel")
+        if self.closeCheck.isChecked():
+            buttons.append("E5MessageBox.Close")
+        if self.discardCheck.isChecked():
+            buttons.append("E5MessageBox.Discard")
+        if self.helpCheck.isChecked():
+            buttons.append("E5MessageBox.Help")
+        if self.ignoreCheck.isChecked():
+            buttons.append("E5MessageBox.Ignore")
+        if self.noCheck.isChecked():
+            buttons.append("E5MessageBox.No")
+        if self.notoallCheck.isChecked():
+            buttons.append("E5MessageBox.NoToAll")
+        if self.okCheck.isChecked():
+            buttons.append("E5MessageBox.Ok")
+        if self.openCheck.isChecked():
+            buttons.append("E5MessageBox.Open")
+        if self.resetCheck.isChecked():
+            buttons.append("E5MessageBox.Reset")
+        if self.restoreCheck.isChecked():
+            buttons.append("E5MessageBox.RestoreDefaults")
+        if self.retryCheck.isChecked():
+            buttons.append("E5MessageBox.Retry")
+        if self.saveCheck.isChecked():
+            buttons.append("E5MessageBox.Save")
+        if self.saveallCheck.isChecked():
+            buttons.append("E5MessageBox.SaveAll")
+        if self.yesCheck.isChecked():
+            buttons.append("E5MessageBox.Yes")
+        if self.yestoallCheck.isChecked():
+            buttons.append("E5MessageBox.YesToAll")
+        if len(buttons) == 0:
+            return ""
+        
+        istring2 = istring + indString
+        joinstring = ' | \\{0}{1}'.format(os.linesep, istring2)
+        if withIntro:
+            btnCode = ',{0}{1}E5MessageBox.StandardButtons('.format(os.linesep, istring)
+        else:
+            btnCode = 'E5MessageBox.StandardButtons('.format(os.linesep, istring)
+        btnCode += '{0}{1}{2})'.format(os.linesep, istring2, joinstring.join(buttons))
+        
+        return btnCode
+    
+    def __getDefaultButtonCode(self, istring):
+        """
+        Private method to generate the button code for the default button.
+        
+        @param istring indentation string (string)
+        @param indString string used for indentation (space or tab) (string)
+        @return the button code (string)
+        """
+        btnCode = ""
+        defaultIndex = self.defaultCombo.currentIndex()
+        if defaultIndex:
+            btnCode = ',{0}{1}{2}'.format(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
+        estring = os.linesep + indLevel * indString
+        
+        # now generate the code
+        if self.parentSelf.isChecked():
+            parent = "self"
+        elif self.parentNone.isChecked():
+            parent = "None"
+        elif self.parentOther.isChecked():
+            parent = self.parentEdit.text()
+            if parent == "":
+                parent = "None"
+        
+        if self.iconInformation.isChecked():
+            icon = "E5MessageBox.Information"
+        elif self.iconQuestion.isChecked():
+            icon = "E5MessageBox.Question"
+        elif self.iconWarning.isChecked():
+            icon = "E5MessageBox.Warning"
+        elif self.iconCritical.isChecked():
+            icon = "E5MessageBox.Critical"
+        
+        if not self.rStandard.isChecked():
+            if self.rAbout.isChecked():
+                msgdlg = "E5MessageBox.about({0},{1}".format(parent, os.linesep)
+            elif self.rAboutQt.isChecked():
+                msgdlg = "E5MessageBox.aboutQt({0},{1}".format(parent, os.linesep)
+            elif self.rInformation.isChecked():
+                msgdlg = "res = E5MessageBox.information({0},{1}".format(
+                    parent, os.linesep)
+            elif self.rQuestion.isChecked():
+                msgdlg = "res = E5MessageBox.question({0},{1}".format(parent, os.linesep)
+            elif self.rWarning.isChecked():
+                msgdlg = "res = E5MessageBox.warning({0},{1}".format(parent, os.linesep)
+            elif self.rCritical.isChecked():
+                msgdlg ="res = E5MessageBox.critical({0},{1}".format(parent, os.linesep)
+            elif self.rYesNo.isChecked():
+                msgdlg ="res = E5MessageBox.yesNo({0},{1}".format(parent, os.linesep)
+            elif self.rRetryAbort.isChecked():
+                msgdlg ="res = E5MessageBox.retryAbort({0},{1}".format(parent, os.linesep)
+            elif self.rOkToClearData.isChecked():
+                msgdlg ="res = E5MessageBox.okToClearData({0},{1}".format(
+                    parent, os.linesep)
+            
+            msgdlg += '{0}self.trUtf8("{1}")'.format(istring, self.eCaption.text())
+            
+            if not self.rAboutQt.isChecked():
+                msgdlg += ',{0}{1}self.trUtf8("""{2}""")'.format(
+                    os.linesep, istring, self.eMessage.toPlainText())
+            
+            if self.rInformation.isChecked() or \
+               self.rQuestion.isChecked() or \
+               self.rWarning.isChecked() or \
+               self.rCritical.isChecked():
+                msgdlg += self.__getStandardButtonCode(istring, indString)
+                msgdlg += self.__getDefaultButtonCode(istring)
+            elif self.rYesNo.isChecked():
+                if not self.iconQuestion.isChecked():
+                    msgdlg += ',{0}{1}icon = {2}'.format(os.linesep, istring, icon)
+                if self.yesDefaultCheck.isChecked():
+                    msgdlg += ',{0}{1}yesDefault = True'.format(os.linesep, istring)
+            elif self.rRetryAbort.isChecked():
+                if not self.iconQuestion.isChecked():
+                    msgdlg += ',{0}{1}icon = {2}'.format(os.linesep, istring, icon)
+            elif self.rOkToClearData.isChecked():
+                saveFunc = self.saveFuncEdit.text()
+                if saveFunc == "":
+                    saveFunc = "lambda: True"
+                msgdlg += ',{0}{1}{2}'.format(os.linesep, istring, saveFunc)
+        else:
+            msgdlg ="E5MessageBox.E5MessageBox({0}, {1}".format(icon, os.linesep)
+            msgdlg += '{0}self.trUtf8("{1}")'.format(istring, self.eCaption.text())
+            msgdlg += ',{0}{1}self.trUtf8("""{2}""")'.format(
+                os.linesep, istring, self.eMessage.toPlainText())
+            if self.modalCheck.isChecked():
+                msgdlg += ',{0}{1}modal = True'.format(os.linesep, istring)
+            btnCode = self.__getStandardButtonCode(istring, indString, withIntro = False)
+            if btnCode:
+                msgdlg += ',{0}{1}buttons = {2}'.format(os.linesep, istring, btnCode)
+            if not self.parentNone.isChecked():
+                msgdlg += ',{0}{1}parent = {2}'.format(os.linesep, istring, parent)
+        
+        msgdlg +='){0}'.format(estring)
+        return msgdlg

eric ide

mercurial