# # misc_widgets.py # import gtk import os.path class MyButtonBox(gtk.HButtonBox): """ Default pyne layout of button boxes. """ def __init__(self): gtk.HButtonBox.__init__(self) self.set_layout(gtk.BUTTONBOX_END) self.set_border_width(5) self.set_spacing(5) class ColorPickButton(gtk.Button): """ Button that is coloured. Clicking opens a dialog box to change its colour. """ def __init__(self, label, parent_win=None): self.col = '#000000' self.parent_win = parent_win gtk.Button.__init__(self, label) self.connect("clicked", self.changecol_box) self.update_col() def changecol_box(self, _w=None): colpick = gtk.ColorSelectionDialog(_("Howdy")) def _change(w): col = colpick.colorsel.get_current_color() self.col = "#%02x%02x%02x" % (col.red/256,col.green/256,col.blue/256) colpick.destroy() self.update_col() def _close(w): colpick.destroy() colpick.colorsel.set_current_color ( colpick.colorsel.get_colormap().alloc_color (self.col) ) colpick.ok_button.connect("clicked", _change) colpick.help_button.hide() colpick.cancel_button.connect("clicked", _close) if self.parent_win: colpick.set_transient_for(self.parent_win) colpick.show() def update_col(self): # Obtain ye a GdkColor gdkcol = self.get_colormap().alloc_color(self.col) self.modify_bg(gtk.STATE_NORMAL, gdkcol) self.modify_bg(gtk.STATE_PRELIGHT, gdkcol) def get_color(self): return self.col def set_color(self, col): self.col = col self.update_col() class FileSelectorBox(gtk.FileSelection): """ Callback flavoured file selector box. Needs users so we can get and set the default path. """ def __init__(self, user, title, filename, some_function, modal=False): self.user = user self.func = some_function gtk.FileSelection.__init__(self, title) # absolute path given. use it if os.path.dirname(filename) != "": self.set_filename(filename) else: self.set_filename( os.path.join(os.path.expanduser(user.default_dir), filename) ) if modal: self.grab_add() self.ok_button.connect("clicked", self._yay) self.cancel_button.connect("clicked", self._boo) def _yay(self, _w=None): filename = self.get_filename() if filename != None: self.user.default_dir = os.path.dirname(filename) self.destroy() self.func(filename) def _boo(self, _w=None): self.destroy() self.func(None) class CallbackDialog (gtk.Dialog): pass def ReturnDialog (title, text, buttons, parent_win=None, modal=True): d = gtk.Dialog (title) if parent_win: d.set_transient_for (parent_win) if modal: d.grab_add () d.vbox.set_spacing (5) mainbox = gtk.HBox (spacing=5) d.vbox.pack_start (mainbox) mainbox.show () img = gtk.image_new_from_stock ("gtk-dialog-question", gtk.ICON_SIZE_DIALOG) mainbox.pack_start (img) img.show () label = gtk.Label (text) mainbox.pack_start (label) label.show() # Add the buttons :-/ for butt in buttons: label, val = butt d.add_button (label, val) ret = d.run () d.destroy () return ret def InfoBox (title, text, button, parent_win=None, modal=True, blocking=False): if blocking: ReturnDialog (title, text, ((button,0),), parent_win, modal) else: # Non-blocking dialog box. d = gtk.Dialog (title) if parent_win: d.set_transient_for (parent_win) if modal: d.grab_add () d.vbox.set_spacing (5) mainbox = gtk.HBox (spacing=5) d.vbox.pack_start (mainbox) mainbox.show () img = gtk.image_new_from_stock ("gtk-dialog-info", gtk.ICON_SIZE_DIALOG) mainbox.pack_start (img) img.show () label = gtk.Label (text) mainbox.pack_start (label) label.show() def _close (button, d=d): d.destroy() # Add the buttons :-/ button = d.add_button (button, 0) button.connect ("clicked", _close) d.show ()