Source code for umbra.ui.widgets.messageBox
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
**messageBox.py**
**Platform:**
	Windows, Linux, Mac Os X.
**Description:**
	Defines the :func:`messageBox` and :func:`standaloneMessageBox` functions.
**Others:**
"""
#**********************************************************************************************************************
#***	Future imports.
#**********************************************************************************************************************
from __future__ import unicode_literals
#**********************************************************************************************************************
#***	External imports.
#**********************************************************************************************************************
from PyQt4.QtCore import Qt
from PyQt4.QtGui import QFont
from PyQt4.QtGui import QMessageBox
from PyQt4.QtGui import QPushButton
from PyQt4.QtGui import QTextCursor
from PyQt4.QtGui import QTextEdit
#**********************************************************************************************************************
#***	Internal imports.
#**********************************************************************************************************************
import foundations.ui.common
import foundations.verbose
import umbra.ui.common
from umbra.globals.runtimeGlobals import RuntimeGlobals
from umbra.globals.constants import Constants
#**********************************************************************************************************************
#***	Module attributes.
#**********************************************************************************************************************
__author__ = "Thomas Mansencal"
__copyright__ = "Copyright (C) 2008 - 2014 - Thomas Mansencal"
__license__ = "GPL V3.0 - http://www.gnu.org/licenses/"
__maintainer__ = "Thomas Mansencal"
__email__ = "[email protected]"
__status__ = "Production"
__all__ = ["LOGGER", "messageBox"]
LOGGER = foundations.verbose.installLogger()
#**********************************************************************************************************************
#***	Module classes and definitions.
#**********************************************************************************************************************
[docs]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_()
# Oncilla: Statement commented by auto-documentation process: 
# Oncilla: Statement commented by auto-documentation process: if __name__ == "__main__":
# Oncilla: Statement commented by auto-documentation process: 	import sys
# Oncilla: Statement commented by auto-documentation process: 	from PyQt4.QtCore import QString
# Oncilla: Statement commented by auto-documentation process: 
# Oncilla: Statement commented by auto-documentation process: 	application = umbra.ui.common.getApplicationInstance()
# Oncilla: Statement commented by auto-documentation process: 
# Oncilla: Statement commented by auto-documentation process: 	messageBox("Critical", "Critical", "This is a 'Critical' QMessageBox!")
# Oncilla: Statement commented by auto-documentation process: 	messageBox("Error", "Error", "This is an 'Error' QMessageBox!")
# Oncilla: Statement commented by auto-documentation process: 	messageBox("Warning", "Warning", "This is a 'Warning' QMessageBox!")
# Oncilla: Statement commented by auto-documentation process: 	messageBox("Information", "Information", "This is an 'Information' QMessageBox!")
# Oncilla: Statement commented by auto-documentation process: 	messageBox("Question", "Question", "This is a 'Question' QMessageBox!")
# Oncilla: Statement commented by auto-documentation process: 	messageBox("Information", "Information", "This QMessageBox is using a custom button!",
# Oncilla: Statement commented by auto-documentation process: 	customButtons=((QString("Custom"), QMessageBox.RejectRole),))
# Oncilla: Statement commented by auto-documentation process: 
# Oncilla: Statement commented by auto-documentation process: 	sys.exit(application.exec_())
# Oncilla: Statement commented by auto-documentation process: