From 087ec98eb9da7f3a27424017de49c6b9aace1cb5 Mon Sep 17 00:00:00 2001 From: Mike Fulbright Date: Wed, 11 Dec 2002 01:39:47 +0000 Subject: new widget for simple pretty checkbox lists like installtype screen --- iw/pixmapRadioButtonGroup_gui.py | 240 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 240 insertions(+) create mode 100644 iw/pixmapRadioButtonGroup_gui.py (limited to 'iw/pixmapRadioButtonGroup_gui.py') diff --git a/iw/pixmapRadioButtonGroup_gui.py b/iw/pixmapRadioButtonGroup_gui.py new file mode 100644 index 000000000..e3435dacf --- /dev/null +++ b/iw/pixmapRadioButtonGroup_gui.py @@ -0,0 +1,240 @@ +# +# pixmapRadioButtonGroup_gui.py: general purpose radio button group with pixmaps +# and descriptions +# +# Copyright 2000-2002 Red Hat, Inc. +# +# This software may be freely redistributed under the terms of the GNU +# library public license. +# +# You should have received a copy of the GNU Library Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# + +import gtk +from rhpl.translate import _, N_ + + +class pixmapRadioButtonGroup: + + def toggled (self, widget): + if self.togglecb is not None: + + name = None + for b in self.buttonToEntry.keys(): + if b == widget: + name = self.buttonToEntry[b] + + self.togglecb(widget, name) + +# if not widget.get_active (): +# return + + # + # expects a gtk pixmap for pixmap + # + def pixRadioButton (self, group, labelstr, pixmap, description=None): + pix = pixmap + + hbox = gtk.HBox (gtk.FALSE, 18) + if pix != None: + hbox.pack_start (pix, gtk.TRUE, gtk.TRUE, 0) + + label = gtk.Label("") + label.set_line_wrap(gtk.TRUE) + label.set_markup(""+labelstr+"") + label.set_alignment (0.0, 0.5) + if description is not None: + label.set_markup ("%s\n%s" %(labelstr, + description)) + label.set_line_wrap(gtk.TRUE) + if gtk.gdk.screen_width() > 640: + wraplen = 350 + else: + wraplen = 250 + + label.set_size_request(wraplen, -1) + label.set_use_markup (gtk.TRUE) + + hbox.pack_start (label, gtk.TRUE, gtk.TRUE, 0) + button = gtk.RadioButton (group) + button.add (hbox) + return button + + # add a entry to end of list + def addEntry(self, name, pixmap=None, descr=None, userdata=None): + node = {} + node["name"] = name + node["descr"] = descr + node["pixmap"] = pixmap + node["userdata"] = userdata + self.entries.append(node) + + # + # finds entry matching name and makes it current + # + # MUST call AFTER calling render, since widgets are not created yet otherwise + # + def setCurrent(self, name): + for b in self.buttonToEntry.keys(): + if self.buttonToEntry[b] == name: + b.set_active(1) + + + + # + # returns name of current selection + # + # MUST call AFTER calling render, since widgets are not created yet otherwise + # + def getCurrent(self): + for b in self.buttonToEntry.keys(): + if b.get_active(): + return self.buttonToEntry[b] + + + # + # MUST call AFTER calling render, since widgets are not created yet otherwise + # + def packWidgetInEntry(self, name, widget): + # find button for name + for b in self.buttonToEntry.keys(): + if self.buttonToEntry[b] == name: + # now find box for button + for (button, box, buttons) in self.topLevelButtonList: + if button == b: + box.pack_end(widget) + return + + def setToggleCallback(self, cb): + self.togglecb = cb + + # render resulting list, returns a box you can pack + # + # call this after adding all parents and nodes + def render(self): + + radioGroup = None + buttons = [] + for item in self.entries: + box = gtk.VBox (gtk.FALSE, 9) + name = item["name"] + pixmap = item["pixmap"] + descr = item["descr"] + radioGroup = self.pixRadioButton(radioGroup, _(name), pixmap, + description=_(descr)) + buttons.append(radioGroup) + self.buttonToEntry[radioGroup] = name + + self.topLevelButtonList.append((radioGroup, box, buttons)) + radioGroup.connect("toggled", self.toggled) + + finalVBox = gtk.VBox(gtk.FALSE, 18) + finalVBox.set_border_width (5) + + for (button, box, buttons) in self.topLevelButtonList: + vbox = gtk.VBox (gtk.FALSE, 9) + finalVBox.pack_start(vbox, gtk.FALSE, gtk.FALSE) + vbox.pack_start (button, gtk.FALSE, gtk.FALSE) + + if box: + tmphbox = gtk.HBox(gtk.FALSE) + + crackhbox = gtk.HBox(gtk.FALSE) + crackhbox.set_size_request(50, -1) + + tmphbox.pack_start(crackhbox, gtk.FALSE, gtk.FALSE) + tmphbox.pack_start(box, gtk.TRUE, gtk.TRUE) + vbox.pack_start(tmphbox, gtk.FALSE, gtk.FALSE) + + return finalVBox + + + # InstallPathWindow tag="instpath" + def __init__(self): + self.entries = [] + self.topLevelButtonList = [] + self.buttonToEntry = {} + self.togglecb = None + + +if __name__ == "__main__": + def readPixmap(fn): + pixbuf = gtk.gdk.pixbuf_new_from_file(fn) + + source = gtk.IconSource() + source.set_pixbuf(pixbuf) + source.set_size(gtk.ICON_SIZE_DIALOG) + source.set_size_wildcarded(gtk.FALSE) + iconset = gtk.IconSet() + iconset.add_source(source) + p = gtk.image_new_from_icon_set(iconset, gtk.ICON_SIZE_DIALOG) + + return p + + def nowquit(widget): + global r + + print "selection -> ",r.getCurrent() + + gtk.mainquit() + + win = gtk.Window() + win.connect('destroy', nowquit) + + + if 0: + opts = ['Red Hat 8.0 - /dev/hda1', 'Red Hat 7.1 - /dev/hda5'] + else: + opts = ['Red Hat 8.0 - /dev/hda1'] + + label = _("The following Red Hat product will be upgraded:") + upgradeoption = gtk.OptionMenu() + upgradeoptionmenu = gtk.Menu() + for lev in opts: + item = gtk.MenuItem(lev) + item.show() + upgradeoptionmenu.add(item) + + upboxtmp = gtk.VBox(gtk.FALSE, 5) + l = gtk.Label(label) + l.set_alignment(0.0, 0.0) + upboxtmp.pack_start(l) + upboxtmp.pack_start(upgradeoption) + upgradeoption.set_menu(upgradeoptionmenu) + + upgradeoption.set_sensitive(0) + + # hack indent it + upbox = gtk.HBox(gtk.FALSE) + + crackhbox = gtk.HBox(gtk.FALSE) + crackhbox.set_size_request(80, -1) + + upbox.pack_start(crackhbox, gtk.FALSE, gtk.FALSE) + upbox.pack_start(upboxtmp, gtk.TRUE, gtk.TRUE) + + r = pixmapRadioButtonGroup() + r.addEntry("Upgrade Existing Installation", pixmap=readPixmap("/usr/share/anaconda/pixmaps/upgrade.png"), descr="Choose this option if you would like to upgrade your existing Red Hat Linux system. This option will preserve the data on your driver.", userdata="data") + + r.addEntry("Reinstall Red Hat Linux", pixmap=readPixmap("../pixmaps/install.png"), + descr="Choose this option to reinstall your system. Depending on how you partition your system your previous data may or may not be lost.", userdata="data2") + b = r.render() + r.setCurrent("Don't Upgrade") + + r.packWidgetInEntry("Upgrade Existing Installation", upbox) + + vbox = gtk.VBox() + vbox.pack_start(b, gtk.FALSE, gtk.FALSE) + + button = gtk.Button("Quit") + button.connect("pressed", nowquit) + vbox.pack_start(button, gtk.FALSE, gtk.FALSE) + + win.add(vbox) + win.show_all() + gtk.mainloop() + + + -- cgit