from main import CREDITS import gobject import gtk import os class AboutDialog(gtk.Window): """ Class for a fancy "About" dialog. """ def __init__(self, path): self.__is_stopped = True self.__scroller_values = () gtk.Window.__init__(self, gtk.WINDOW_TOPLEVEL) self.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DIALOG) self.set_position(gtk.WIN_POS_CENTER) self.set_resizable(False) self.set_title(_("About gDesklets")) self.connect("button-press-event", self.__on_close) self.connect("key-press-event", self.__on_close) self.connect("delete-event", self.__on_close) self.add_events(gtk.gdk.BUTTON_PRESS_MASK) fixed = gtk.Fixed() self.add(fixed) img = gtk.Image() img.set_from_file(os.path.join(path, "about.png")) fixed.put(img, 0, 0) width, height = img.size_request() scroller = gtk.Fixed() scroller.set_size_request(width, height - 32) fixed.put(scroller, 0, 32) text = "" for header, body in CREDITS: text += "" + header + "\n\n" text += "\n".join(body) text += "\n\n\n\n" text = "" + text.strip() + "" credits = gtk.Label(text) credits.set_use_markup(True) credits.set_justify(gtk.JUSTIFY_CENTER) lbl_width, lbl_height = credits.size_request() scroller.put(credits, (width - lbl_width) / 2, height) self.__scroller = scroller self.__credits = credits self.__scroller_values = (height - 32, -lbl_height, (width - lbl_width) / 2) def __scroll(self, ycoord): begin, end, xcoord = self.__scroller_values self.__scroller.move(self.__credits, xcoord, ycoord) ycoord -= 1 if (ycoord < end): ycoord = begin if (not self.__is_stopped): gobject.timeout_add(50, self.__scroll, ycoord) return False def __on_close(self, *args): self.__is_stopped = True self.hide() return True def show(self): if (not self.__is_stopped): return self.show_all() self.__is_stopped = False begin, end, xcoord = self.__scroller_values gobject.timeout_add(0, self.__scroll, begin)