6 import util.misc as misc_utils
9 _moduleLogger = logging.getLogger(__name__)
12 class GenericBanner(object):
15 self._indicator = gtk.Image()
17 self._label = gtk.Label()
19 self._layout = gtk.HBox()
20 self._layout.pack_start(self._indicator, False, False)
21 self._layout.pack_start(self._label, False, True)
27 def show(self, icon, message):
28 assert not self._label.get_text(), self._label.get_text()
29 if isinstance(icon, gtk.gdk.PixbufAnimation):
30 self._indicator.set_from_animation(icon)
31 elif isinstance(icon, gtk.gdk.Pixbuf):
32 self._indicator.set_from_pixbuf(icon)
34 self._indicator.set_from_stock(icon)
35 self._label.set_text(message)
39 self._label.set_text("")
43 class StackingBanner(object):
48 self._indicator = gtk.Image()
50 self._message = gtk.Label()
52 self._closeImage = gtk.Image()
53 self._closeImage.set_from_stock("gtk-close", self.ICON_SIZE)
55 self._layout = gtk.HBox()
56 self._layout.pack_start(self._indicator, False, False)
57 self._layout.pack_start(self._message, True, True)
58 self._layout.pack_start(self._closeImage, False, False)
60 self._events = gtk.EventBox()
61 self._events.add(self._layout)
62 self._events.connect("button_release_event", self._on_close)
70 def push_message(self, message, icon=""):
71 self._messages.append((message, icon))
72 if 1 == len(self._messages):
73 self._update_message()
75 def push_exception(self):
76 userMessage = str(sys.exc_info()[1])
77 self.push_message(userMessage, "gtk-dialog-error")
78 _moduleLogger.exception(userMessage)
80 def pop_message(self):
82 self._update_message()
84 def _update_message(self):
85 if 0 == len(self._messages):
88 message, icon = self._messages[0]
89 self._message.set_text(message)
91 self._indicator.set_from_stock(icon)
92 self._indicator.show()
94 self._indicator.hide()
97 @misc_utils.log_exception(_moduleLogger)
98 def _on_close(self, *args):