Beispiel #1
0
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_()