#
# partition_text.py: allows the user to choose how to partition their disks
# in text mode
#
# Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007 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 .
#
# Author(s): Jeremy Katz
#
import os, sys
from pyanaconda import isys
import string
import copy
from pyanaconda import network
import parted
from pyanaconda.partIntfHelpers import *
from snack import *
from constants_text import *
from pyanaconda.constants import *
from add_drive_text import addDriveDialog
import gettext
_ = lambda x: gettext.ldgettext("anaconda", x)
import logging
log = logging.getLogger("anaconda")
class PartitionTypeWindow:
def typeboxChange(self, (typebox, drivelist)):
flag = FLAGS_RESET
if typebox.current() == CLEARPART_TYPE_NONE:
flag = FLAGS_SET
# XXX need a way to disable the checkbox tree
def clearDrivelist(self):
# XXX remove parted object refs
# need to put in clear() method for checkboxtree in snack
self.drivelist.key2item = {}
self.drivelist.item2key = {}
def __call__(self, screen, anaconda):
self.anaconda = anaconda
while 1:
g = GridFormHelp(screen, _("Partitioning Type"), "autopart", 1, 6)
txt = TextboxReflowed(65, _("Installation requires partitioning of your hard drive. The default layout is suitable for most users. Select what space to use and which drives to use as the install target."))
g.add(txt, 0, 0, (0, 0, 0, 0))
opts = ((_("Use entire drive"), CLEARPART_TYPE_ALL),
(_("Replace existing Linux system"), CLEARPART_TYPE_LINUX),
(_("Use free space"), CLEARPART_TYPE_NONE))
typebox = Listbox(height = len(opts), scroll = 0)
for (txt, val) in opts:
typebox.append(txt, val)
if anaconda.storage.clearPartType is None:
preselection = CLEARPART_TYPE_LINUX
else:
preselection = anaconda.storage.clearPartType
typebox.setCurrent(preselection)
g.add(typebox, 0, 1, (0, 1, 0, 0))
# list of drives to select which to clear
subgrid = Grid(1, 2)
subgrid.setField(TextboxReflowed(55, _("Which drive(s) do you want to "
"use for this installation?")),
0, 0)
drivelist = CheckboxTree(height=2, scroll=1)
subgrid.setField(drivelist, 0, 1)
g.add(subgrid, 0, 2, (0, 1, 0, 0))
bb = ButtonBar(screen, [ TEXT_OK_BUTTON, TEXT_BACK_BUTTON ])
g.add(bb, 0, 5, (0,1,0,0))
typebox.setCallback(self.typeboxChange, (typebox, drivelist))
self.drivelist = drivelist
g.addHotKey("F2")
screen.pushHelpLine (_(",<+>,<-> selection | Add drive | next screen"))
# restore the drive list each time
disks = anaconda.storage.partitioned
cleardrives = anaconda.storage.clearPartDisks
for disk in disks:
model = disk.model
if not cleardrives or len(cleardrives) < 1:
selected = 1
else:
if disk.name in cleardrives:
selected = 1
else:
selected = 0
sizestr = "%8.0f MB" % (disk.size,)
diskdesc = "%6s %s (%s)" % (disk.name, sizestr, model[:23],)
drivelist.append(diskdesc, selected = selected)
rc = g.run()
if len(self.drivelist.getSelection()) > 0:
sel = map(lambda s: s.split()[0], self.drivelist.getSelection())
else:
sel = []
partmethod_ans = typebox.current()
res = bb.buttonPressed(rc)
self.clearDrivelist()
screen.popHelpLine()
screen.popWindow()
if rc == "F2":
addDialog = addDriveDialog(anaconda)
if addDialog.addDriveDialog(screen) != INSTALL_BACK:
anaconda.storage.reset()
anaconda.bootloader.updateDriveList()
continue
if res == TEXT_BACK_CHECK:
return INSTALL_BACK
if anaconda.storage.checkNoDisks():
continue
if len(sel) < 1:
mustHaveSelectedDrive(anaconda.intf)
continue
anaconda.dispatch.skipStep("autopartitionexecute", skip = 0)
anaconda.storage.doAutoPart = True
anaconda.storage.clearPartType = partmethod_ans
anaconda.storage.clearPartDisks = sel
break
# ask to review autopartition layout - but only if it's not custom partitioning
anaconda.dispatch.skipStep("partition", skip = 1)
anaconda.dispatch.skipStep("bootloader", skip = 1)
return INSTALL_OK