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: