6 import util.misc as misc_utils
9 _moduleLogger = logging.getLogger(__name__)
12 class GenericBanner(object):
15 self._label = gtk.Label()
17 self._layout = gtk.VBox()
18 self._layout.pack_start(self._label)
24 def show(self, message):
25 assert not self._label.get_text(), self._label.get_text()
26 self._label.set_text(message)
30 assert self._label.get_text(), self._label.get_text()
31 self._label.set_text("")
35 class StackingBanner(object):
40 self._indicator = gtk.Image()
42 self._message = gtk.Label()
44 self._closeImage = gtk.Image()
45 self._closeImage.set_from_stock("gtk-close", self.ICON_SIZE)
47 self._layout = gtk.HBox()
48 self._layout.pack_start(self._indicator, False, False)
49 self._layout.pack_start(self._message, True, True)
50 self._layout.pack_start(self._closeImage, False, False)
52 self._events = gtk.EventBox()
53 self._events.add(self._layout)
54 self._events.connect("button_release_event", self._on_close)
62 def push_message(self, message, icon=""):
63 self._messages.append((message, icon))
64 if 1 == len(self.__messages):
65 self._update_message()
67 def push_exception(self):
68 userMessage = str(sys.exc_info()[1])
69 self.push_message(userMessage, "gtk-dialog-error")
70 _moduleLogger.exception(userMessage)
72 def pop_message(self):
73 del self.__messages[0]
74 self._update_message()
76 def _update_message(self):
77 if 0 == len(self.__messages):
80 message, icon = self._message[0]
81 self._message.set_text(message)
83 self._indicator.set_from_stock(icon)
84 self._indicator.show()
86 self._indicator.hide()
89 @misc_utils.log_exception(_moduleLogger)
90 def _on_close(self, *args):