Lightningbeam/PyGUI-2.5.3/build/lib/GUI/GBaseAlerts.py

118 lines
3.3 KiB
Python

#
# Python GUI - Alert base class - Generic
#
import textwrap
from GUI import ModalDialog
from GUI import Label
class BaseAlert(ModalDialog):
_wrapwidth = 50
_minimum_width = 200
_left_margin = 24
_right_margin = 24
_top_margin = 14
_bottom_margin = 20
_icon_spacing = 16
_label_button_spacing = 20
_default_width = 380
_default_lines = 3
yes_button = None
no_button = None
other_button = None
def __init__(self, kind, prompt, width = None, lines = None,
button_labels = None, default = None, cancel = None):
#if width is None:
# width = self._default_width
#if lines is None:
# lines = self._default_lines
ModalDialog.__init__(self, style = 'alert')
self.label = Label(text = self._wrap(prompt), lines = lines)
if self.label.width < self._minimum_width:
self.label.width = self._minimum_width
self._create_buttons(*button_labels)
#self.default_button = self._find_button(default)
#self.cancel_button = self._find_button(cancel)
self._layout(kind)
def _layout(self, kind):
icon_width, icon_height = self._layout_icon(kind)
label_left = self._left_margin
if icon_width:
label_left += icon_width + self._icon_spacing
if self.label.height < icon_height:
self.label.height = icon_height
self.place(self.label,
left = label_left,
top = self._top_margin)# + icon_height/4)
#_wrap_text(self.label, self._default_width - label_left - self._right_margin)
self._layout_buttons()
self.shrink_wrap(padding = (self._right_margin, self._bottom_margin))
def _layout_icon(self, kind):
# Place icon for the given alert kind, if any, and return its size.
# If there is no icon, return (0, 0).
return (0, 0)
def _wrap(self, text):
width = self._wrapwidth
return "\n\n".join(
[textwrap.fill(para, width)
for para in text.split("\n\n")])
def _find_button(self, value):
#print "BaseAlert._find_button:", value ###
if value == 1:
result = self.yes_button
elif value == 0:
result = self.no_button
elif value == -1:
result = self.other_button
else:
result = None
#print "BaseAlert._find_button: result =", result ###
return result
def yes(self):
self.dismiss(1)
def no(self):
self.dismiss(0)
def other(self):
self.dismiss(-1)
#def _wrap_text(label, label_width):
# hard_lines = [text.split()
# for text in label.text.split("\n")]
# words = hard_lines[0]
# for hard_line in hard_lines[1:]:
# words.append("\n")
# words.extend(hard_line)
# font = label.font
# space_width = font.width(" ")
# lines = []
# line = []
# line_width = 0
# for word in words:
# word_width = font.width(word)
# if word == "\n" or (line_width > 0
# and line_width + space_width + word_width > label_width):
# lines.append(line)
# line = []
# line_width = 0
# if word <> "\n":
# line.append(word)
# if line_width > 0:
# line_width += space_width
# line_width += word_width
# if line:
# lines.append(line)
# label.text = "\n".join([" ".join(line) for line in lines])