1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
|
# (C) Copyright 2005-2023 Enthought, Inc., Austin, TX
# All rights reserved.
#
# This software is provided without warranty under the terms of the BSD
# license included in LICENSE.txt and may be redistributed only under
# the conditions described in the aforementioned license. The license
# is also available online at http://www.enthought.com/licenses/BSD.txt
#
# Thanks for using Enthought open source!
# (C) Copyright 2007 Riverbank Computing Limited
# This software is provided without warranty under the terms of the BSD license.
# However, when used with the GPL version of PyQt the additional terms described in the PyQt GPL exception also apply
# ------------------------------------------------------------------------------
from pyface.qt import QtGui
from traits.api import Any, Bool, HasTraits, List, Property, Str, provides
from pyface.action.i_status_bar_manager import IStatusBarManager
@provides(IStatusBarManager)
class StatusBarManager(HasTraits):
""" A status bar manager realizes itself in a status bar control. """
# The message displayed in the first field of the status bar.
message = Property
# The messages to be displayed in the status bar fields.
messages = List(Str)
# The toolkit-specific control that represents the status bar.
status_bar = Any()
# Whether to show a size grip on the status bar.
size_grip = Bool(False)
# Whether the status bar is visible.
visible = Bool(True)
# ------------------------------------------------------------------------
# 'StatusBarManager' interface.
# ------------------------------------------------------------------------
def create_status_bar(self, parent):
""" Creates a status bar. """
if self.status_bar is None:
self.status_bar = QtGui.QStatusBar(parent)
self.status_bar.setSizeGripEnabled(self.size_grip)
self.status_bar.setVisible(self.visible)
if len(self.messages) > 1:
self._show_messages()
else:
self.status_bar.showMessage(self.message)
return self.status_bar
def destroy(self):
""" Destroys the status bar. """
if self.status_bar is not None:
self.status_bar.deleteLater()
self.status_bar = None
# ------------------------------------------------------------------------
# Property handlers.
# ------------------------------------------------------------------------
def _get_message(self):
if len(self.messages) > 0:
message = self.messages[0]
else:
message = ""
return message
def _set_message(self, value):
if len(self.messages) > 0:
old = self.messages[0]
self.messages[0] = value
else:
old = ""
self.messages.append(old)
self.trait_property_changed("message", old, value)
# ------------------------------------------------------------------------
# Trait event handlers.
# ------------------------------------------------------------------------
def _messages_changed(self):
""" Sets the text displayed on the status bar. """
if self.status_bar is not None:
self._show_messages()
def _messages_items_changed(self):
""" Sets the text displayed on the status bar. """
if self.status_bar is not None:
self._show_messages()
def _size_grip_changed(self):
""" Turns the size grip on the status bar on and off. """
if self.status_bar is not None:
self.status_bar.setSizeGripEnabled(self.size_grip)
def _visible_changed(self):
""" Turns the status bar visibility on and off. """
if self.status_bar is not None:
self.status_bar.setVisible(self.visible)
# ------------------------------------------------------------------------
# Private interface.
# ------------------------------------------------------------------------
def _show_messages(self):
""" Display the list of messages. """
# FIXME v3: At the moment we just string them together but we may
# decide to put all but the first message into separate widgets. We
# probably also need to extend the API to allow a "message" to be a
# widget - depends on what wx is capable of.
self.status_bar.showMessage(" ".join(self.messages))
|