#
# bootloader_main_gui.py: gui bootloader configuration dialog
#
# Jeremy Katz <
[email protected]>
#
# Copyright 2001-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
import gobject
import iutil
import partedUtils
import gui
import bootloader
from iw_gui import *
from rhpl.translate import _, N_
from osbootwidget import OSBootWidget
from blpasswidget import BootloaderPasswordWidget
class MainBootloaderWindow(InstallWindow):
windowTitle = N_("Boot Loader Configuration")
htmlTag = "bootloader"
def __init__(self, ics):
InstallWindow.__init__(self, ics)
self.parent = ics.getICW().window
def getPrev(self):
pass
def getNext(self):
import pdb
pdb.set_trace()
# go ahead and set the device even if we already knew it
# since that won't change anything
self.bl.setDevice(self.bldev)
if self.blname is None:
# if we're not installing a boot loader, don't show the second
# screen and don't worry about other options
self.dispatch.skipStep("instbootloader", skip = 1)
self.dispatch.skipStep("bootloaderadvanced", skip = 1)
# kind of a hack...
self.bl.defaultDevice = None
return
else:
self.dispatch.skipStep("instbootloader", skip = 0)
if self.blname == "GRUB":
self.bl.setUseGrub(1)
else:
self.bl.setUseGrub(0)
# set the password
self.bl.setPassword(self.blpass.getPassword(), isCrypted = 0)
# set the bootloader images based on what's in our list
self.oslist.setBootloaderImages()
if self.advanced.get_active():
self.dispatch.skipStep("bootloaderadvanced", skip = 0)
else:
self.dispatch.skipStep("bootloaderadvanced", skip = 1)
def changeBootloaderCallback(self, *args):
dialog = gtk.Dialog(_("Change Boot Loader"), self.parent)
dialog.add_button('gtk-cancel', 2)
dialog.add_button('gtk-ok', 1)
dialog.set_position(gtk.WIN_POS_CENTER)
gui.addFrame(dialog)
radio_vbox = self.setupChooseBootloaderRadioBox()
dialog.vbox.pack_start(radio_vbox)
dialog.show_all()
blname = self.blname
while 1:
rc = dialog.run()
if rc == 2:
break
if self.none_radio.get_active() == gtk.TRUE:
newrc = self.intf.messageWindow(_("Warning"),
_("You have selected not to "
"install a boot loader on "
"your system. You will "
"have to create a boot "
"disk to boot your system "
"with this option.\n\n"
"Would you like to "
"continue and not install "
"a boot loader?"),
type = "custom",
custom_buttons =
[_("Cancel"),
_("C_ontinue with no boot "
"loader")])
if newrc != 1:
continue
blname = None
elif ((self.lilo_radio is not None)
and (self.lilo_radio.get_active() == gtk.TRUE)):
blname = "LILO"
else:
blname = "GRUB"
break
dialog.destroy()
if rc !=2:
self.blname = blname
self.updateBootLoaderLabel()
if blname is not None:
self.oslist.changeBootLoader(blname)
return rc
def setupChooseBootloaderRadioBox(self):
radio_vbox = gtk.VBox(gtk.FALSE, 2)
radio_vbox.set_border_width(5)
label = gui.WrappingLabel(_("Please select the boot loader that "
"the computer will use. GRUB is the "
"default boot loader. However, if you "
"do not wish to overwrite your current "
"boot loader, select \"Do not install "
"a boot loader.\" "))
label.set_alignment(0.0, 0.0)
self.grub_radio = gtk.RadioButton(None, (_("Use _GRUB as the "
"boot loader")))
if bootloader.showLilo:
self.lilo_radio = gtk.RadioButton(self.grub_radio,
(_("Use _LILO as the boot "
"loader")))
else:
self.lilo_radio = None
self.none_radio = gtk.RadioButton(self.grub_radio, (_("_Do not "
"install a "
"boot loader")))
radio_vbox.pack_start(label, gtk.FALSE)
radio_vbox.pack_start(self.grub_radio, gtk.FALSE)
if self.lilo_radio:
radio_vbox.pack_start(self.lilo_radio, gtk.FALSE)
radio_vbox.pack_start(self.none_radio, gtk.FALSE)
if self.blname is None:
self.none_radio.set_active(gtk.TRUE)
elif self.lilo_radio is not None and self.blname == "LILO" and iutil.getArch() == "i386":
self.lilo_radio.set_active(gtk.TRUE)
else:
self.grub_radio.set_active(gtk.TRUE)
return radio_vbox
def updateBootLoaderLabel(self):
if self.blname is not None:
self.bllabel.set_text(_("The %s boot loader will be "
"installed on /dev/%s.") %
(self.blname, self.bldev))
active = gtk.TRUE
else:
self.bllabel.set_text(_("No boot loader will be installed."))
active = gtk.FALSE
for widget in [ self.oslist.getWidget(), self.blpass.getWidget(),
self.advanced ]:
widget.set_sensitive(active)
def getScreen(self, dispatch, bl, fsset, diskSet):
self.dispatch = dispatch
self.bl = bl
self.intf = dispatch.intf
if self.bl.getPassword():
self.usePass = 1
self.password = self.bl.getPassword()
else:
self.usePass = 0
self.password = None
thebox = gtk.VBox (gtk.FALSE, 10)
spacer = gtk.Label("")
spacer.set_size_request(10, 1)
thebox.pack_start(spacer, gtk.FALSE)
if self.bl.useGrub():
self.blname = "GRUB"
else:
self.blname = "LILO"
# XXX this is kind of ugly
if self.dispatch.stepInSkipList("instbootloader"):
self.blname = None
# make sure we get a valid device to say we're installing to
if bl.getDevice() is not None:
self.bldev = bl.getDevice()
else:
# we don't know what it is yet... if mbr is possible, we want
# it, else we want the boot dev
choices = fsset.bootloaderChoices(diskSet, self.bl)
if choices.has_key('mbr'):
self.bldev = choices['mbr'][0]
else:
self.bldev = choices['boot'][0]
self.bllabel = gui.WrappingLabel("")
self.bllabel.set_alignment(0.0, 0.5)
hbox = gtk.HBox(gtk.FALSE, 10)
hbox.pack_start(self.bllabel, gtk.FALSE)
button = gtk.Button(_("_Change boot loader"))
hbox.pack_start(button, gtk.FALSE)
button.connect("clicked", self.changeBootloaderCallback)
alignment = gtk.Alignment()
alignment.set(0.1, 0, 0, 0)
alignment.add(hbox)
thebox.pack_start(alignment, gtk.FALSE)
spacer = gtk.Label("")
spacer.set_size_request(10, 1)
thebox.pack_start(spacer, gtk.FALSE)
# configure the systems available to boot from the boot loader
self.oslist = OSBootWidget(bl, fsset, diskSet, self.parent,
self.intf, self.blname)
thebox.pack_start(self.oslist.getWidget(), gtk.FALSE)
thebox.pack_start (gtk.HSeparator(), gtk.FALSE)
# control whether or not there's a boot loader password and what it is
self.blpass = BootloaderPasswordWidget(bl, self.parent, self.intf)
thebox.pack_start(self.blpass.getWidget(), gtk.FALSE)
thebox.pack_start (gtk.HSeparator(), gtk.FALSE)
# check box to control showing the advanced screen
self.advanced = gtk.CheckButton(_("Configure advanced boot loader "
"_options"))
if dispatch.stepInSkipList("bootloaderadvanced"):
self.advanced.set_active(gtk.FALSE)
else:
self.advanced.set_active(gtk.TRUE)
thebox.pack_start(self.advanced, gtk.FALSE)
# finally, update the label and activate widgets appropriately
self.updateBootLoaderLabel()
return thebox