def messageBox(type, title, message, icon=None, buttons=QMessageBox.Ok, customButtons=None): """ Provides a fast GUI message box. :param title: Current message title. :type title: unicode :param message: Message. :type message: unicode :param icon: Custom icon. :type icon: QConstant :param buttons: Standard buttons. :type buttons: QConstant :param customButtons: Custom buttons. :type customButtons: tuple or list :return: User choice. :rtype: int """ LOGGER.debug("> Launching messagebox().") LOGGER.debug("> Message type: '{0}'.".format(type)) LOGGER.debug("> Title: '{0}'.".format(title)) LOGGER.debug("> Message: '{0}'.".format(message)) messageBox = QMessageBox() messageBox.setWindowTitle("{0} | {1}".format(Constants.applicationName, title)) messageBox.setText(message) for button, role in customButtons or (): messageBox.addButton(button, role) umbra.ui.common.setChildrenPadding(messageBox, (QPushButton,), width=12) message = message.split("\n") if type == "Critical": if icon: messageBox.setIcon(icon) else: messageBox.setIcon(QMessageBox.Critical) for line in message: LOGGER.critical("!> {0}".format(line)) elif type == "Error": if icon: messageBox.setIcon(icon) else: messageBox.setIcon(QMessageBox.Critical) for line in message: LOGGER.error("!> {0}".format(line)) elif type == "Detailed Error": if icon: messageBox.setIcon(icon) else: messageBox.setIcon(QMessageBox.Critical) RuntimeGlobals.loggingSessionHandlerStream and \ messageBox.setDetailedText("".join(RuntimeGlobals.loggingSessionHandlerStream.stream)) textEdit = messageBox.findChild(QTextEdit) if textEdit: textEdit.setCurrentFont(QFont("Courier")) textEdit.setLineWrapMode(QTextEdit.NoWrap) textEdit.moveCursor(QTextCursor.End) textEdit.ensureCursorVisible() for line in message: LOGGER.error("!> {0}".format(line)) elif type == "Warning": if icon: messageBox.setIcon(icon) else: messageBox.setIcon(QMessageBox.Warning) for line in message: LOGGER.warning("{0}".format(line)) elif type == "Information": if icon: messageBox.setIcon(icon) else: messageBox.setIcon(QMessageBox.Information) for line in message: LOGGER.info("{0}".format(line)) elif type == "Question": if icon: messageBox.setIcon(icon) else: messageBox.setIcon(QMessageBox.Question) for line in message: LOGGER.info("{0}".format(line)) messageBox.setStandardButtons(buttons) messageBox.setWindowFlags(Qt.WindowStaysOnTopHint) messageBox.show() foundations.ui.common.centerWidgetOnScreen(messageBox) return messageBox.exec_()