1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
#
# fdisk_gui.py: interface that allows the user to run util-linux fdisk.
#
# Copyright 2001 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 iw_gui import *
from gnome import zvt
from translate import _
from dispatch import DISPATCH_NOOP
import partitioning
import isys
import os
class FDiskWindow (InstallWindow):
def __init__ (self, ics):
InstallWindow.__init__ (self, ics)
ics.setTitle (_("fdisk"))
ics.readHTML ("fdisk")
def getNext(self):
# reread partitions
self.diskset.refreshDevices(self.intf)
self.diskset.checkNoDisks(self.intf)
self.partrequests.setFromDisk(self.diskset)
return None
def child_died (self, widget, button):
self.windowContainer.remove (self.windowContainer.children ()[0])
self.windowContainer.pack_start (self.buttonBox)
button.set_state (gtk.STATE_NORMAL)
try:
os.remove ('/tmp/' + self.drive)
except:
# XXX fixme
pass
self.ics.readHTML ("fdisk")
self.ics.setPrevEnabled (1)
self.ics.setNextEnabled (1)
# self.ics.setHelpEnabled (1)
def button_clicked (self, widget, drive):
term = zvt.Term(80, 24)
term.set_del_key_swap(gtk.TRUE)
term.connect("child_died", self.child_died, widget)
self.drive = drive
# free our fd's to the hard drive -- we have to
# fstab.rescanDrives() after this or bad things happen!
if os.access("/sbin/fdisk", os.X_OK):
path = "/sbin/fdisk"
else:
path = "/usr/sbin/fdisk"
isys.makeDevInode(drive, '/tmp/' + drive)
if term.forkpty() == 0:
env = os.environ
os.execve (path, (path, '/tmp/' + drive), env)
term.show()
self.windowContainer.remove(self.buttonBox)
self.windowContainer.pack_start(term)
self.ics.readHTML("fdiskpart")
self.ics.setPrevEnabled(0)
self.ics.setNextEnabled(0)
# FDiskWindow tag="fdisk"
def getScreen (self, diskset, partrequests, intf):
self.diskset = diskset
self.partrequests = partrequests
self.intf = intf
self.windowContainer = gtk.VBox (gtk.FALSE)
self.buttonBox = gtk.VBox (gtk.FALSE, 5)
self.buttonBox.set_border_width (5)
box = gtk.VButtonBox ()
box.set_layout("start")
label = gtk.Label (_("Select drive to run fdisk on"))
drives = self.diskset.driveList()
# close all references we had to the diskset
self.diskset.closeDevices()
for drive in drives:
button = gtk.Button (drive)
button.connect ("clicked", self.button_clicked, drive)
box.pack_start (button)
# put the button box in a scrolled window in case there are
# a lot of drives
sw = gtk.ScrolledWindow()
sw.add_with_viewport(box)
sw.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
viewport = sw.children()[0]
viewport.set_shadow_type(gtk.SHADOW_ETCHED_IN)
sw.set_size_request(-1, 400)
self.buttonBox.pack_start (label, gtk.FALSE)
self.buttonBox.pack_start (sw, gtk.FALSE)
self.windowContainer.pack_start (self.buttonBox)
self.ics.setNextEnabled (1)
return self.windowContainer
|