qubes-installer-qubes-os/anaconda/iw/upgrade_swap_gui.py
2011-03-31 13:40:54 +02:00

210 lines
6.7 KiB
Python

#
# upgrade_swap_gui.py: dialog for adding swap files for 2.4
#
# Copyright (C) 2001, 2002 Red Hat, Inc. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# Author(s): Mike Fulbright <msf@redhat.com>
#
import iutil
import upgrade
import gui
import gobject
import gtk
from iw_gui import *
from flags import flags
from constants import *
import gettext
_ = lambda x: gettext.ldgettext("anaconda", x)
class UpgradeSwapWindow (InstallWindow):
windowTitle = N_("Upgrade Swap Partition")
def getNext (self):
#-If the user doesn't need to add swap, we don't do anything
if not self.neededSwap:
return None
if self.option2.get_active():
rc = self.warning()
if rc == 0:
raise gui.StayOnScreen
else:
return None
selection = self.view.get_selection()
(model, iter) = selection.get_selected()
if iter:
dev = model.get_value(iter, 0)
size = model.get_value(iter, 1)
val = int(self.entry.get_text())
else:
raise RuntimeError, "unknown value for upgrade swap location"
if val > 2000 or val < 1:
rc = self.swapWrongSize()
raise gui.StayOnScreen
elif (val+16) > size:
rc = self.swapTooBig()
raise gui.StayOnScreen
else:
self.storage.createSwapFile(dev, val)
self.dispatch.skipStep("addswap", 1)
return None
def toggle (self, data):
self.swapbox.set_sensitive(self.option1.get_active())
def clist_cb(self, clist, row, col, data):
self.row = row
def getScreen (self, anaconda):
self.neededSwap = 0
self.storage = anaconda.storage
self.intf = anaconda.intf
self.dispatch = anaconda.dispatch
rc = anaconda.upgradeSwapInfo
self.neededSwap = 1
self.row = 0
box = gtk.VBox (False, 5)
box.set_border_width (5)
label = gtk.Label (_("Recent kernels (2.4 or newer) need significantly more "
"swap than older kernels, up to twice "
"the amount of RAM on the system. "
"You currently have %dMB of swap configured, but "
"you may create additional swap space on one of "
"your file systems now.")
% (iutil.swapAmount() / 1024) +
_("\n\nThe installer has detected %s MB of RAM.\n") %
(iutil.memInstalled()/1024))
label.set_alignment (0.5, 0.0)
# label.set_size_request(400, 200)
label.set_line_wrap (True)
box.pack_start(label, False)
hs = gtk.HSeparator()
box.pack_start(hs, False)
self.option1 = gtk.RadioButton(None,
(_("I _want to create a swap file")))
box.pack_start(self.option1, False)
(fsList, suggSize, suggMntPoint) = rc
self.swapbox = gtk.VBox(False, 5)
box.pack_start(self.swapbox, False)
label = gui.MnemonicLabel (_("Select the _partition to put the swap file on:"))
a = gtk.Alignment(0.2, 0.5)
a.add(label)
self.swapbox.pack_start(a, False)
self.store = gtk.ListStore(gobject.TYPE_STRING,
gobject.TYPE_STRING,
gobject.TYPE_STRING)
for (dev, size) in fsList:
iter = self.store.append()
self.store.set_value(iter, 0, dev)
self.store.set_value(iter, 1, str(size))
self.view=gtk.TreeView(self.store)
label.set_mnemonic_widget(self.view)
i = 0
for title in [(_("Mount Point")), (_("Partition")), (_("Free Space (MB)"))]:
col = gtk.TreeViewColumn(title, gtk.CellRendererText(), text=i)
self.view.append_column(col)
i = i + 1
sw = gtk.ScrolledWindow()
sw.add(self.view)
sw.set_shadow_type(gtk.SHADOW_IN)
sw.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
sw.set_size_request(300, 90)
a = gtk.Alignment(0.5, 0.5)
a.add(sw)
self.swapbox.pack_start(a, False, True, 10)
rootiter = self.store.get_iter_first()
sel = self.view.get_selection()
sel.select_iter(rootiter)
label = gtk.Label (_("A minimum swap file size of "
"%d MB is recommended. Please enter a size for the swap "
"file:") % suggSize)
label.set_size_request(400, 40)
label.set_line_wrap (True)
a = gtk.Alignment(0.5, 0.5)
a.add(label)
self.swapbox.pack_start(a, False, True, 10)
hbox = gtk.HBox(False, 5)
a = gtk.Alignment(0.4, 0.5)
a.add(hbox)
self.swapbox.pack_start(a, False)
label = gui.MnemonicLabel (_("Swap file _size (MB):"))
hbox.pack_start(label, False)
self.entry = gtk.Entry(4)
label.set_mnemonic_widget(self.entry)
self.entry.set_size_request(40, 25)
self.entry.set_text(str(suggSize))
hbox.pack_start(self.entry, False, True, 10)
self.option2 = gtk.RadioButton(self.option1,
(_("I _don't want to create a swap "
"file")))
box.pack_start(self.option2, False, True, 20)
self.option1.connect("toggled", self.toggle)
return box
def warning(self):
rc = self.intf.messageWindow(_("Warning"),
_("A swap file is strongly recommended. "
"Failure to create one could cause the installer "
"to abort abnormally. Are you sure you wish "
"to continue?"), type = "yesno")
return rc
def swapWrongSize(self):
rc = self.intf.messageWindow(_("Warning"),
_("The swap file must be between 1 and 2000 MB in size."),
type = "okcancel")
return rc
def swapTooBig(self):
rc = self.intf.messageWindow(_("Warning"),
_("There is not enough space on the device you "
"selected for the swap partition."),
type = "okcancel")
return rc