Fix #4856 and cleanup of the alert code
This commit is contained in:
parent
fc3b70b366
commit
324a9b549d
@ -27,7 +27,7 @@ from sugar.graphics.icon import Icon
|
|||||||
|
|
||||||
_ = lambda msg: gettext.dgettext('sugar', msg)
|
_ = lambda msg: gettext.dgettext('sugar', msg)
|
||||||
|
|
||||||
class Alert(gtk.EventBox, gobject.GObject):
|
class Alert(gtk.EventBox):
|
||||||
"""UI interface for Alerts
|
"""UI interface for Alerts
|
||||||
|
|
||||||
Alerts are used inside the activity window instead of being a
|
Alerts are used inside the activity window instead of being a
|
||||||
@ -60,42 +60,43 @@ class Alert(gtk.EventBox, gobject.GObject):
|
|||||||
}
|
}
|
||||||
|
|
||||||
def __init__(self, **kwargs):
|
def __init__(self, **kwargs):
|
||||||
gobject.GObject.__init__(self)
|
|
||||||
|
|
||||||
self.set_visible_window(True)
|
|
||||||
self._hbox = gtk.HBox()
|
|
||||||
self._hbox.set_border_width(style.DEFAULT_SPACING)
|
|
||||||
self._hbox.set_spacing(style.DEFAULT_SPACING)
|
|
||||||
self.add(self._hbox)
|
|
||||||
|
|
||||||
self._title = None
|
self._title = None
|
||||||
self._msg = None
|
self._msg = None
|
||||||
self._icon = None
|
self._icon = None
|
||||||
self._buttons = {}
|
self._buttons = {}
|
||||||
|
|
||||||
|
self._hbox = gtk.HBox()
|
||||||
|
self._hbox.set_border_width(style.DEFAULT_SPACING)
|
||||||
|
self._hbox.set_spacing(style.DEFAULT_SPACING)
|
||||||
|
|
||||||
self._msg_box = gtk.VBox()
|
self._msg_box = gtk.VBox()
|
||||||
self._title_label = gtk.Label()
|
self._title_label = gtk.Label()
|
||||||
self._title_label.set_alignment(0, 0.5)
|
self._title_label.set_alignment(0, 0.5)
|
||||||
self._msg_box.pack_start(self._title_label, False)
|
self._msg_box.pack_start(self._title_label, False)
|
||||||
self._title_label.show()
|
|
||||||
|
|
||||||
self._msg_label = gtk.Label()
|
self._msg_label = gtk.Label()
|
||||||
self._msg_label.set_alignment(0, 0.5)
|
self._msg_label.set_alignment(0, 0.5)
|
||||||
self._msg_box.pack_start(self._msg_label, False)
|
self._msg_box.pack_start(self._msg_label, False)
|
||||||
self._hbox.pack_start(self._msg_box, False)
|
self._hbox.pack_start(self._msg_box, False)
|
||||||
self._msg_label.show()
|
|
||||||
|
|
||||||
self._buttons_box = gtk.HButtonBox()
|
self._buttons_box = gtk.HButtonBox()
|
||||||
self._buttons_box.set_layout(gtk.BUTTONBOX_END)
|
self._buttons_box.set_layout(gtk.BUTTONBOX_END)
|
||||||
self._buttons_box.set_spacing(style.DEFAULT_SPACING)
|
self._buttons_box.set_spacing(style.DEFAULT_SPACING)
|
||||||
self._hbox.pack_start(self._buttons_box)
|
self._hbox.pack_start(self._buttons_box)
|
||||||
self._buttons_box.show()
|
|
||||||
|
gtk.EventBox.__init__(self, **kwargs)
|
||||||
|
|
||||||
|
self.set_visible_window(True)
|
||||||
|
self.add(self._hbox)
|
||||||
|
self._title_label.show()
|
||||||
|
self._msg_label.show()
|
||||||
|
self._buttons_box.show()
|
||||||
self._msg_box.show()
|
self._msg_box.show()
|
||||||
self._hbox.show()
|
self._hbox.show()
|
||||||
self.show()
|
self.show()
|
||||||
|
|
||||||
def do_set_property(self, pspec, value):
|
def do_set_property(self, pspec, value):
|
||||||
if pspec.name == 'title':
|
if pspec.name == 'title':
|
||||||
if self._title != value:
|
if self._title != value:
|
||||||
self._title = value
|
self._title = value
|
||||||
@ -139,17 +140,17 @@ class Alert(gtk.EventBox, gobject.GObject):
|
|||||||
return button
|
return button
|
||||||
|
|
||||||
def remove_button(self, response_id):
|
def remove_button(self, response_id):
|
||||||
"""Remove a button from the alert by the given button id"""
|
"""Remove a button from the alert by the given response id"""
|
||||||
self._buttons_box.remove(self._buttons[id])
|
self._buttons_box.remove(self._buttons[response_id])
|
||||||
|
|
||||||
def _response(self, id):
|
def _response(self, response_id):
|
||||||
"""Emitting response when we have a result
|
"""Emitting response when we have a result
|
||||||
|
|
||||||
A result can be that a user has clicked a button or
|
A result can be that a user has clicked a button or
|
||||||
a timeout has occured, the id identifies the button
|
a timeout has occured, the id identifies the button
|
||||||
that has been clicked and -1 for a timeout
|
that has been clicked and -1 for a timeout
|
||||||
"""
|
"""
|
||||||
self.emit('response', id)
|
self.emit('response', response_id)
|
||||||
|
|
||||||
def __button_clicked_cb(self, button, response_id):
|
def __button_clicked_cb(self, button, response_id):
|
||||||
self._response(response_id)
|
self._response(response_id)
|
||||||
@ -162,15 +163,16 @@ class ConfirmationAlert(Alert):
|
|||||||
Alert.__init__(self, **kwargs)
|
Alert.__init__(self, **kwargs)
|
||||||
|
|
||||||
icon = Icon(icon_name='dialog-cancel')
|
icon = Icon(icon_name='dialog-cancel')
|
||||||
cancel_button = self.add_button(gtk.RESPONSE_CANCEL, _('Cancel'), icon)
|
self.add_button(gtk.RESPONSE_CANCEL, _('Cancel'), icon)
|
||||||
icon.show()
|
icon.show()
|
||||||
|
|
||||||
icon = Icon(icon_name='dialog-ok')
|
icon = Icon(icon_name='dialog-ok')
|
||||||
ok_button = self.add_button(gtk.RESPONSE_OK, _('Ok'), icon)
|
self.add_button(gtk.RESPONSE_OK, _('Ok'), icon)
|
||||||
icon.show()
|
icon.show()
|
||||||
|
|
||||||
|
|
||||||
class _TimeoutIcon(hippo.CanvasText, hippo.CanvasItem):
|
class _TimeoutIcon(hippo.CanvasText, hippo.CanvasItem):
|
||||||
|
"""An icon with a round border"""
|
||||||
__gtype_name__ = 'AlertTimeoutIcon'
|
__gtype_name__ = 'AlertTimeoutIcon'
|
||||||
|
|
||||||
def __init__(self, **kwargs):
|
def __init__(self, **kwargs):
|
||||||
@ -183,12 +185,12 @@ class _TimeoutIcon(hippo.CanvasText, hippo.CanvasItem):
|
|||||||
def do_paint_background(self, cr, damaged_box):
|
def do_paint_background(self, cr, damaged_box):
|
||||||
[width, height] = self.get_allocation()
|
[width, height] = self.get_allocation()
|
||||||
|
|
||||||
x = width * 0.5
|
xval = width * 0.5
|
||||||
y = height * 0.5
|
yval = height * 0.5
|
||||||
radius = min(width * 0.5, height * 0.5)
|
radius = min(width * 0.5, height * 0.5)
|
||||||
|
|
||||||
hippo.cairo_set_source_rgba32(cr, self.props.background_color)
|
hippo.cairo_set_source_rgba32(cr, self.props.background_color)
|
||||||
cr.arc(x, y, radius, 0, 2*math.pi)
|
cr.arc(xval, yval, radius, 0, 2*math.pi)
|
||||||
cr.fill_preserve()
|
cr.fill_preserve()
|
||||||
|
|
||||||
|
|
||||||
@ -204,7 +206,7 @@ class TimeoutAlert(Alert):
|
|||||||
self._timeout = timeout
|
self._timeout = timeout
|
||||||
|
|
||||||
icon = Icon(icon_name='dialog-cancel')
|
icon = Icon(icon_name='dialog-cancel')
|
||||||
cancel_button = self.add_button(gtk.RESPONSE_CANCEL, _('Cancel'), icon)
|
self.add_button(gtk.RESPONSE_CANCEL, _('Cancel'), icon)
|
||||||
icon.show()
|
icon.show()
|
||||||
|
|
||||||
self._timeout_text = _TimeoutIcon(
|
self._timeout_text = _TimeoutIcon(
|
||||||
@ -242,7 +244,7 @@ class NotifyAlert(Alert):
|
|||||||
canvas = hippo.Canvas()
|
canvas = hippo.Canvas()
|
||||||
canvas.set_root(self._timeout_text)
|
canvas.set_root(self._timeout_text)
|
||||||
canvas.show()
|
canvas.show()
|
||||||
self.add_button(gtk.RESPONSE_OK, _('OK'), canvas)
|
self.add_button(gtk.RESPONSE_OK, _('Ok'), canvas)
|
||||||
|
|
||||||
gobject.timeout_add(1000, self.__timeout)
|
gobject.timeout_add(1000, self.__timeout)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user