#
# 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
# (label and descr should already be passed through _())
def addEntry(self, name, label, pixmap=None, descr=None, userdata=None):
node = {}
node["name"] = name
node["label"] = label
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"]
label = item["label"]
pixmap = item["pixmap"]
descr = item["descr"]
radioGroup = self.pixRadioButton(radioGroup, label, 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()