summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorErik Troan <ewt@redhat.com>2001-06-20 01:51:29 +0000
committerErik Troan <ewt@redhat.com>2001-06-20 01:51:29 +0000
commit0dd8714cdfddff257b075afb37e5001f9c81f64c (patch)
treeef7f6b1bbb3fa2b33d7ceaf82003c4dfab45b52d
parent098dde8b8cb8dbf60550b92ae0a09778068ac64e (diff)
downloadanaconda-0dd8714cdfddff257b075afb37e5001f9c81f64c.tar.gz
anaconda-0dd8714cdfddff257b075afb37e5001f9c81f64c.tar.xz
anaconda-0dd8714cdfddff257b075afb37e5001f9c81f64c.zip
merge from (now defunct) anaconda-dispatch branch
-rw-r--r--iw/account_gui.py301
-rw-r--r--iw/auth_gui.py74
-rw-r--r--iw/bootdisk_gui.py68
-rw-r--r--iw/confirm_gui.py71
-rw-r--r--iw/congrats_gui.py6
-rw-r--r--iw/dependencies_gui.py59
-rw-r--r--iw/examine_gui.py12
-rw-r--r--iw/fdisk_gui.py49
-rw-r--r--iw/firewall_gui.py104
-rw-r--r--iw/format_gui.py67
-rw-r--r--iw/installpath_gui.py298
-rw-r--r--iw/iw_gui.py18
-rw-r--r--iw/keyboard_gui.py66
-rw-r--r--iw/language_gui.py31
-rw-r--r--iw/language_support_gui.py56
-rw-r--r--iw/lilo_gui.py209
-rw-r--r--iw/mouse_gui.py38
-rw-r--r--iw/network_gui.py63
-rw-r--r--iw/partition_gui.py1060
-rw-r--r--iw/partmethod_gui.py54
-rw-r--r--iw/progress_gui.py91
-rw-r--r--iw/rootpartition_gui.py6
-rw-r--r--iw/timezone_gui.py16
-rw-r--r--iw/upgrade_swap_gui.py23
-rw-r--r--iw/welcome_gui.py19
-rw-r--r--iw/xconfig_gui.py1734
26 files changed, 2456 insertions, 2137 deletions
diff --git a/iw/account_gui.py b/iw/account_gui.py
index 7e24b6af7..88a3726b0 100644
--- a/iw/account_gui.py
+++ b/iw/account_gui.py
@@ -1,24 +1,21 @@
from gtk import *
from iw_gui import *
-from translate import _
+from translate import _, N_
import re
import string
+from gnome.ui import *
class AccountWindow (InstallWindow):
userAccountMatch = re.compile("([A-Za-z])([A-Za-z0-9])*")
- def __init__ (self, ics):
- InstallWindow.__init__ (self, ics)
-
- self.todo = ics.getToDo ()
- ics.setTitle (_("Account Configuration"))
- ics.readHTML ("accts")
+ windowTitle = N_("Account Configuration")
+ htmlTag = ("accts")
def getNext (self):
if not self.__dict__.has_key("pw"): return None
- self.todo.rootpassword.set (self.pw.get_text ())
+ self.rootPw.set (self.pw.get_text ())
accounts = []
for n in range(len(self.passwords.keys())):
@@ -26,8 +23,7 @@ class AccountWindow (InstallWindow):
self.userList.get_text(n, 1),
self.passwords[self.userList.get_text(n, 0)]))
- self.todo.setUserList(accounts)
-
+ self.accounts.setUserList(accounts)
return None
def rootPasswordsMatch (self, *args):
@@ -39,7 +35,7 @@ class AccountWindow (InstallWindow):
self.rootStatus.set_text (_("Root password accepted."))
else:
if not pw and not confirm:
- self.rootStatus.set_text (_("Please enter root password."))
+ self.rootStatus.set_text (_(""))
elif len (pw) < 6:
self.rootStatus.set_text (_("Root password is too short."))
else:
@@ -71,13 +67,6 @@ class AccountWindow (InstallWindow):
valid = 0
- if (self.editingUser != None):
- self.edit.set_sensitive(valid)
- self.add.set_sensitive(0)
- else:
- self.edit.set_sensitive(0)
- self.add.set_sensitive(valid)
-
def userSelected(self, *args):
index = self.userList.selection
if (not index): return
@@ -85,14 +74,12 @@ class AccountWindow (InstallWindow):
accountName = self.userList.get_text(index, 0)
fullName = self.userList.get_text(index, 1)
password = self.passwords[accountName]
+ self.edit.set_sensitive(TRUE)
+ self.delete.set_sensitive(TRUE)
+ #Keep track of the data in the CList so we can edit the entry when Edit button is clicked
+ self.data = [index, accountName, password, password, fullName]
- self.editingUser = index
- self.accountName.set_text(accountName)
- self.userPass1.set_text(password)
- self.userPass2.set_text(password)
- self.fullName.set_text(fullName)
-
- def addUser(self, widget, *args):
+ def addUser_cb(self, widget, *args):
accountName = self.accountName.get_text()
password1 = self.userPass1.get_text()
password2 = self.userPass2.get_text()
@@ -110,25 +97,114 @@ class AccountWindow (InstallWindow):
index = self.editingUser
self.userList.set_text(index, 0, accountName)
self.userList.set_text(index, 1, fullName)
-
else:
index = self.userList.append((accountName, fullName))
self.accountName.grab_focus ()
self.passwords[accountName] = password1
- self.newUser()
-
- def editUser(self, widget, *args):
+ self.edit.set_sensitive(FALSE)
+ self.delete.set_sensitive(FALSE)
+ self.win.destroy()
+
+ def editUser_cb(self, widget, *args):
index = self.userList.selection
if (not index): return
- index = index[0]
- accountName = self.userList.get_text(index, 0)
-
- self.editingUser = None
- del self.passwords[accountName]
- self.userList.remove(index)
- self.addUser (None)
+ accountName = self.accountName.get_text()
+ password1 = self.userPass1.get_text()
+ password2 = self.userPass2.get_text()
+ fullName = self.fullName.get_text()
+ index = index[0] #Get first item in the list
+
+ #if the username has not changed, reset the password
+ if accountName in self.passwords.keys():
+ self.passwords[accountName] = password1
+ else: #the username has changed, we need to remove that username from password dictionary
+ currAccount = self.userList.get_text(index, 0)
+ del self.passwords[currAccount]
+ self.passwords[accountName] = password1
+
+ self.userList.set_text(index, 0, accountName)
+ self.userList.set_text(index, 1, fullName)
+
+ self.edit.set_sensitive(FALSE)
+ self.delete.set_sensitive(FALSE)
+ self.userList.unselect_all()
+ self.win.destroy()
+
+ def addUser (self, widget):
+ title = _("Add a New User")
+ self.win = self.userWindow(title, None)
+ self.win.append_button_with_pixmap(_("OK"), STOCK_BUTTON_OK)
+ self.win.append_button_with_pixmap(_("Cancel"), STOCK_BUTTON_CANCEL)
+ self.win.button_connect(0, self.addUser_cb)
+ self.win.button_connect(1, self.win.destroy)
+ self.win.show_all()
+
+ def editUser (self, widget):
+ title = _("Edit User")
+ if self.data: #if there is data there to edit
+ self.win = self.userWindow(title, self.data)
+ self.win.append_button_with_pixmap(_("OK"), STOCK_BUTTON_OK)
+ self.win.append_button_with_pixmap(_("Cancel"), STOCK_BUTTON_CANCEL)
+ self.win.button_connect(0, self.editUser_cb)
+ self.win.button_connect(1, self.win.destroy)
+ self.win.show_all()
+
+ def userWindow (self, title, data=None):
+ userWin = GnomeDialog()
+ userWin.set_modal(TRUE)
+ userWin.set_usize(350, 200)
+ userWin.set_position (WIN_POS_CENTER)
+
+ userTable = GtkTable (5,2)
+ userTable.set_homogeneous(FALSE)
+
+ vbox = GtkVBox()
+ vbox.pack_start(userTable)
+ userAddFrame = GtkFrame (title)
+ userAddFrame.add(vbox)
+ userWin.vbox.pack_start(userAddFrame)
+
+ #Labels
+ label = GtkLabel (_("User Name:"))
+ userTable.attach(label, 0, 1, 0, 1)
+ label = GtkLabel (_("Full Name:"))
+ userTable.attach(label, 0, 1, 1, 2)
+ label = GtkLabel (_("Password:"))
+ userTable.attach(label, 0, 1, 2, 3)
+ label = GtkLabel (_("Confirm:"))
+ userTable.attach(label, 0, 1, 3, 4)
+ #user password label
+ self.userPwLabel = GtkLabel(_("Please enter user name"))
+ vbox.pack_start(self.userPwLabel)
+
+ #entry boxes
+ self.accountName = GtkEntry (8)
+ self.accountName.connect("changed", self.userOkay)
+ self.accountName.connect("insert-text", self.filter)
+ self.accountName.connect("activate", self.forward)
+ userTable.attach(self.accountName, 1, 2, 0, 1, SHRINK, SHRINK)
+ self.fullName = GtkEntry ()
+ userTable.attach(self.fullName, 1, 2, 1, 2, SHRINK, SHRINK)
+ self.userPass1 = GtkEntry (9)
+ self.userPass1.set_visibility(FALSE)
+ self.userPass1.connect("changed", self.userOkay)
+ userTable.attach(self.userPass1, 1, 2, 2, 3, SHRINK, SHRINK)
+ self.userPass2 = GtkEntry (9)
+ self.userPass2.set_visibility(FALSE)
+ self.userPass2.connect("changed", self.userOkay)
+ userTable.attach (self.userPass2, 1, 2, 3, 4, SHRINK, SHRINK)
+
+ if data:
+ index, account, password, password, name = data
+ self.accountName.set_text(account)
+ self.fullName.set_text(name)
+ self.userPass1.set_text(password)
+ self.userPass2.set_text(password)
+
+ return userWin
+
def deleteUser(self, *args):
index = self.userList.selection
if (not index): return
@@ -137,15 +213,8 @@ class AccountWindow (InstallWindow):
del self.passwords[accountName]
self.userList.remove(index)
- self.newUser()
-
- def newUser(self, *args):
- self.editingUser = None
- self.accountName.set_text("")
- self.userPass1.set_text("")
- self.userPass2.set_text("")
- self.fullName.set_text("")
- self.userPwLabel.set_text("")
+ self.edit.set_sensitive(FALSE)
+ self.delete.set_sensitive(FALSE)
def filter(self, widget, text, len, pos):
# XXX this doesn't check copy/pase
@@ -169,11 +238,16 @@ class AccountWindow (InstallWindow):
self.pw.grab_focus ()
# AccountWindow tag="accts"
- def getScreen (self):
+ def getScreen (self, rootPw, accounts):
+ self.accounts = accounts
+ self.rootPw = rootPw
+
self.passwords = {}
self.editingUser = None
box = GtkVBox ()
+
+ hbox = GtkHBox()
im = self.ics.readPixmap ("root-password.png")
if im:
im.render ()
@@ -181,9 +255,16 @@ class AccountWindow (InstallWindow):
a = GtkAlignment ()
a.add (pix)
a.set (0.0, 0.0, 0.0, 0.0)
- box.pack_start (a, FALSE)
+ hbox.pack_start (a, FALSE)
+
+ label = GtkLabel (_("Please enter a password for the root user."))
+ a = GtkAlignment ()
+ a.add (label)
+ a.set (0.0, 0.5, 0.0, 0.0)
+ hbox.pack_start(a, FALSE, 20)
+ box.pack_start(hbox, FALSE)
- forward = lambda widget, box=box: box.focus (DIR_TAB_FORWARD)
+ self.forward = lambda widget, box=box: box.focus (DIR_TAB_FORWARD)
table = GtkTable (2, 2)
table.set_row_spacings (5)
@@ -196,23 +277,17 @@ class AccountWindow (InstallWindow):
pass2.set_alignment (0.0, 0.5)
table.attach (pass2, 0, 1, 1, 2, FILL, 0, 10)
self.pw = GtkEntry (128)
- self.pw.connect ("activate", forward)
+ self.pw.connect ("activate", self.forward)
self.pw.connect ("changed", self.rootPasswordsMatch)
self.pw.connect ("draw", self.setFocus)
self.pw.set_visibility (FALSE)
self.confirm = GtkEntry (128)
- self.confirm.connect ("activate", forward)
+ self.confirm.connect ("activate", self.forward)
self.confirm.set_visibility (FALSE)
self.confirm.connect ("changed", self.rootPasswordsMatch)
table.attach (self.pw, 1, 2, 0, 1, FILL|EXPAND, 5)
table.attach (self.confirm, 1, 2, 1, 2, FILL|EXPAND, 5)
- pw = self.todo.rootpassword.getPure()
- if pw:
- self.pw.set_text(pw)
- self.confirm.set_text(pw)
-
-
box.pack_start (table, FALSE)
# root password statusbar
@@ -224,100 +299,66 @@ class AccountWindow (InstallWindow):
box.pack_start (GtkHSeparator (), FALSE, padding=3)
- table = GtkTable (2, 3)
- table.set_row_spacings(5)
- table.set_col_spacings(5)
-
- entrytable = GtkTable (5, 4)
- entrytable.set_row_spacings(5)
- entrytable.set_col_spacings(5)
- self.entrytable = entrytable
+ pw = self.rootPw.getPure()
+ if pw:
+ self.pw.set_text(pw)
+ self.confirm.set_text(pw)
- self.accountName = GtkEntry (8)
- self.accountName.connect ("activate", forward)
- self.accountName.connect ("changed", self.userOkay)
- self.accountName.connect ("insert-text", self.filter)
-
- self.accountName.set_usize (50, -1)
+ sw = GtkScrolledWindow ()
+ sw.set_policy (POLICY_AUTOMATIC, POLICY_AUTOMATIC)
- self.fullName = GtkEntry ()
-# self.fullName.connect ("activate", self.addUser)
- self.userPass1 = GtkEntry (128)
- self.userPass1.connect ("activate", forward)
- self.userPass1.connect ("changed", self.userOkay)
- self.userPass2 = GtkEntry (128)
- self.userPass2.connect ("activate", forward)
- self.userPass2.connect ("changed", self.userOkay)
- self.userPass1.set_visibility (FALSE)
- self.userPass2.set_visibility (FALSE)
- self.userPass1.set_usize (50, -1)
- self.userPass2.set_usize (50, -1)
-
- label = GtkLabel (_("Account Name") + ": ")
- label.set_alignment (0.0, 0.5)
- entrytable.attach (label, 0, 1, 0, 1, FILL, 0, 10)
- entrytable.attach (self.accountName, 1, 2, 0, 1, FILL|EXPAND)
- label = GtkLabel (_("Password") + ": ")
- label.set_alignment (0.0, 0.5)
- entrytable.attach (label, 0, 1, 1, 2, FILL, 0, 10)
- entrytable.attach (self.userPass1, 1, 2, 1, 2, FILL|EXPAND)
- label = GtkLabel (_("Password (confirm)") + ": ")
- label.set_alignment (0.0, 0.5)
- entrytable.attach (label, 2, 3, 1, 2, FILL, 0, 10)
- entrytable.attach (self.userPass2, 3, 4, 1, 2, FILL|EXPAND)
-
- self.userPwLabel = GtkLabel()
- self.userPwLabel.set_alignment (0.5, 0.5)
- wrapper = GtkHBox(0, FALSE)
- wrapper.pack_start (self.userPwLabel)
- entrytable.attach (wrapper, 0, 4, 2, 3, FILL, 0, 10)
+ self.userList = GtkCList (2, (_("Account Name"), _("Full Name")))
+ for x in range (2):
+ self.userList.set_selectable (x, FALSE)
- label = GtkLabel (_("Full Name") + ": ")
- label.set_alignment (0.0, 0.5)
- entrytable.attach (label, 0, 1, 3, 4, FILL, 0, 10)
- entrytable.attach (self.fullName, 1, 4, 3, 4, FILL|EXPAND)
+ self.userList.connect("select_row", self.userSelected)
+ sw.add (self.userList)
- table.attach (entrytable, 0, 4, 0, 1,
- xoptions = EXPAND | FILL,
- yoptions = EXPAND | FILL)
-
self.add = GtkButton (_("Add"))
self.add.connect("clicked", self.addUser)
self.edit = GtkButton (_("Edit"))
self.edit.connect("clicked", self.editUser)
- delete = GtkButton (_("Delete"))
- delete.connect("clicked", self.deleteUser)
- new = GtkButton (_("New"))
- new.connect("clicked", self.newUser)
+ self.edit.set_sensitive(FALSE)
+ self.delete = GtkButton (_("Delete"))
+ self.delete.connect("clicked", self.deleteUser)
+ self.delete.set_sensitive(FALSE)
- bb = GtkHButtonBox ()
+ bb = GtkVButtonBox ()
bb.set_border_width (5)
+ bb.set_layout_default(BUTTONBOX_START)
bb.pack_start (self.add)
bb.pack_start (self.edit)
- bb.pack_start (delete)
- bb.pack_start (new)
-
- box.pack_start (table, FALSE)
- box.pack_start (bb, FALSE)
- sw = GtkScrolledWindow ()
- sw.set_policy (POLICY_AUTOMATIC, POLICY_AUTOMATIC)
+ bb.pack_start (self.delete)
- self.userList = GtkCList (2, (_("Account Name"), _("Full Name")))
- for x in range (2):
- self.userList.set_selectable (x, FALSE)
+ hbox = GtkHBox()
+ im = self.ics.readPixmap ("users.png")
+ if im:
+ im.render ()
+ pix = im.make_pixmap ()
+ a = GtkAlignment ()
+ a.add (pix)
+ a.set (0.0, 0.0, 0.0, 0.0)
+ hbox.pack_start (a, FALSE)
- self.userList.connect("select_row", self.userSelected)
- sw.add (self.userList)
- box.pack_start (sw, TRUE)
+ a = GtkAlignment (0.0, 0.5)
+ label = GtkLabel (_("Additional accounts can be created for users that need to access the system. Please enter user accounts here."))
+ label.set_line_wrap(TRUE)
+ a.add(label)
+ hbox.pack_start(a, FALSE)
+ box.pack_start(hbox, FALSE)
+
+ hbox = GtkHBox(FALSE)
+ hbox.pack_start(sw, TRUE)
+ hbox.pack_start(bb, FALSE)
+ box.pack_start(hbox)
+
index = 0
- for (user, name, password) in self.todo.getUserList():
+ for (user, name, password) in self.accounts.getUserList():
self.userList.append((user, name))
self.passwords[user] = password
index = index + 1
- self.userOkay()
box.set_border_width (5)
-
return box
diff --git a/iw/auth_gui.py b/iw/auth_gui.py
index 8f8908f34..775fac8ee 100644
--- a/iw/auth_gui.py
+++ b/iw/auth_gui.py
@@ -1,18 +1,11 @@
from gtk import *
from iw_gui import *
-from translate import _
+from translate import _, N_
class AuthWindow (InstallWindow):
- def __init__ (self, ics):
- InstallWindow.__init__ (self, ics)
-
- self.todo = ics.getToDo ()
- ics.setTitle (_("Authentication Configuration"))
-## ics.setHTML ("<HTML><BODY>Select authentication methods"
-## "</BODY></HTML>")
- ics.readHTML ("authconf")
- ics.setNextEnabled (TRUE)
+ htmlTag = "authconf"
+ windowTitle = N_("Authentication Configuration")
def setSensitivities (self, *args):
if (not self.nis.get_active()):
@@ -53,27 +46,28 @@ class AuthWindow (InstallWindow):
if not self.__dict__.has_key("md5"):
return None
- self.todo.auth.useMD5 = self.md5.get_active ()
- self.todo.auth.useShadow = self.shadow.get_active ()
+ self.auth.useMD5 = self.md5.get_active ()
+ self.auth.useShadow = self.shadow.get_active ()
+
+ self.auth.useNIS = self.nis.get_active ()
+ self.auth.nisuseBroadcast = self.nisBroadcast.get_active ()
+ self.auth.nisDomain = self.nisDomain.get_text ()
+ self.auth.nisServer = self.nisServer.get_text ()
- self.todo.auth.useNIS = self.nis.get_active ()
- self.todo.auth.nisuseBroadcast = self.nisBroadcast.get_active ()
- self.todo.auth.nisDomain = self.nisDomain.get_text ()
- self.todo.auth.nisServer = self.nisServer.get_text ()
+ self.auth.useLdap = self.ldap.get_active ()
+ self.auth.useLdapauth = self.ldap.get_active ()
+ self.auth.ldapServer = self.ldapServer.get_text ()
+ self.auth.ldapBasedn = self.ldapBasedn.get_text ()
+ self.auth.ldapTLS = self.ldapTLS.get_active ()
- self.todo.auth.useLdap = self.ldap.get_active ()
- self.todo.auth.useLdapauth = self.ldap.get_active ()
- self.todo.auth.ldapServer = self.ldapServer.get_text ()
- self.todo.auth.ldapBasedn = self.ldapBasedn.get_text ()
- self.todo.auth.ldapTLS = self.ldapTLS.get_active ()
+ self.auth.useKrb5 = self.krb5.get_active ()
+ self.auth.krb5Realm = self.krb5Realm.get_text ()
+ self.auth.krb5Kdc = self.krb5Kdc.get_text ()
+ self.auth.krb5Admin = self.krb5Admin.get_text ()
- self.todo.auth.useKrb5 = self.krb5.get_active ()
- self.todo.auth.krb5Realm = self.krb5Realm.get_text ()
- self.todo.auth.krb5Kdc = self.krb5Kdc.get_text ()
- self.todo.auth.krb5Admin = self.krb5Admin.get_text ()
+ def getScreen (self, auth):
+ self.auth = auth
- # AuthWindow tag="authconf"
- def getScreen (self):
box = GtkVBox (FALSE, 10)
self.md5 = GtkCheckButton (_("Enable MD5 passwords"))
self.shadow = GtkCheckButton (_("Enable shadow passwords"))
@@ -84,13 +78,13 @@ class AuthWindow (InstallWindow):
self.nisDomain = GtkEntry ()
self.nisServer = GtkEntry ()
- self.md5.set_active (self.todo.auth.useMD5)
- self.shadow.set_active (self.todo.auth.useShadow)
+ self.md5.set_active (self.auth.useMD5)
+ self.shadow.set_active (self.auth.useShadow)
- self.nis.set_active (self.todo.auth.useNIS)
- self.nisDomain.set_text (self.todo.auth.nisDomain)
- self.nisBroadcast.set_active (self.todo.auth.nisuseBroadcast)
- self.nisServer.set_text (self.todo.auth.nisServer )
+ self.nis.set_active (self.auth.useNIS)
+ self.nisDomain.set_text (self.auth.nisDomain)
+ self.nisBroadcast.set_active (self.auth.nisuseBroadcast)
+ self.nisServer.set_text (self.auth.nisServer )
self.nisDomainLabel = GtkLabel (_("NIS Domain: "))
self.nisDomainLabel.set_alignment (0, 0)
@@ -143,9 +137,9 @@ class AuthWindow (InstallWindow):
self.ldapBasednLabel.set_alignment (0, 0)
# restore ldap settings
- self.ldap.set_active (self.todo.auth.useLdap)
- self.ldapServer.set_text (self.todo.auth.ldapServer)
- self.ldapBasedn.set_text (self.todo.auth.ldapBasedn)
+ self.ldap.set_active (self.auth.useLdap)
+ self.ldapServer.set_text (self.auth.ldapServer)
+ self.ldapBasedn.set_text (self.auth.ldapBasedn)
ldaptable = GtkTable (10, 4)
@@ -182,10 +176,10 @@ class AuthWindow (InstallWindow):
self.krb5AdminLabel.set_alignment (0, 0)
# restore krb5 settings
- self.krb5.set_active (self.todo.auth.useKrb5)
- self.krb5Realm.set_text (self.todo.auth.krb5Realm)
- self.krb5Kdc.set_text (self.todo.auth.krb5Kdc)
- self.krb5Admin.set_text (self.todo.auth.krb5Admin)
+ self.krb5.set_active (self.auth.useKrb5)
+ self.krb5Realm.set_text (self.auth.krb5Realm)
+ self.krb5Kdc.set_text (self.auth.krb5Kdc)
+ self.krb5Admin.set_text (self.auth.krb5Admin)
krb5table = GtkTable (10, 4)
diff --git a/iw/bootdisk_gui.py b/iw/bootdisk_gui.py
index 2c6a57bdc..9318f8b60 100644
--- a/iw/bootdisk_gui.py
+++ b/iw/bootdisk_gui.py
@@ -1,47 +1,31 @@
from iw_gui import *
from gtk import *
-from translate import _
+from translate import _, N_
import iutil
+import dispatch
class BootdiskWindow (InstallWindow):
+ htmlTag = "bootdisk"
+ windowTitle = N_("Bootdisk Creation")
+
def __init__ (self, ics):
InstallWindow.__init__ (self, ics)
- ics.setTitle (_("Bootdisk Creation"))
- ics.setPrevEnabled (0)
- ics.setNextEnabled (1)
- ics.readHTML ("bootdisk")
- BootdiskWindow.initial = 1
- self.bootdisk = None
-
def getNext (self):
if iutil.getArch() == "alpha" or iutil.getArch() == "ia64":
return None
- if not self.todo.needBootdisk():
- return None
-
- if self.bootdisk and self.bootdisk.get_active ():
- return None
+ if self.skipBootdisk.get_active ():
+ self.dispatch.skipStep("makebootdisk")
+ else:
+ self.dispatch.skipStep("makebootdisk", skip = 0)
- threads_leave ()
- try:
- self.todo.makeBootdisk ()
- except RuntimeError, message:
- threads_enter ()
- BootdiskWindow.initial = 0
- return BootdiskWindow
-
- threads_enter ()
return None
# BootdiskWindow tag="bootdisk"
- def getScreen (self):
- if iutil.getArch() == "alpha" or iutil.getArch() == "ia64":
- return None
-
- if not self.todo.needBootdisk(): return None
+ def getScreen (self, dir, disp):
+ self.dispatch = disp
box = GtkVBox (FALSE, 5)
im = self.ics.readPixmap ("gnome-floppy.png")
@@ -54,24 +38,28 @@ class BootdiskWindow (InstallWindow):
box.pack_start (a, FALSE)
label = None
- if BootdiskWindow.initial:
- label = GtkLabel (_("Please remove the install floppy (if used) and insert a blank floppy in the first floppy drive. "
- "All data on this disk will be erased during creation "
- "of the boot disk."))
- else:
- label = GtkLabel (_("An error occured while making the boot disk. "
- "Please make sure that there is a formatted floppy "
- "in the first floppy drive."))
+
+ if dir == dispatch.DISPATCH_FORWARD:
+ label = GtkLabel (
+ _("Please remove the install floppy (if used) and insert a "
+ "blank floppy in the first floppy drive. All data on this "
+ "disk will be erased during creation of the boot disk."))
+ else:
+ label = GtkLabel (
+ _("An error occured while making the boot disk. "
+ "Please make sure that there is a formatted floppy "
+ "in the first floppy drive."))
label.set_line_wrap (TRUE)
box.pack_start (label, FALSE)
- self.bootdisk = GtkCheckButton (_("Skip boot disk creation"))
- self.bootdisk.set_active (FALSE)
+ self.skipBootdisk = GtkCheckButton (_("Skip boot disk creation"))
+ self.skipBootdisk.set_active (FALSE)
box.pack_start (GtkHSeparator (), FALSE, padding=3)
- box.pack_start (self.bootdisk, FALSE)
+ box.pack_start (self.skipBootdisk, FALSE)
- if self.todo.fstab.rootOnLoop():
- self.bootdisk.set_sensitive(FALSE)
+ # XXX root-on-loop should require bootdisk
+ #if self.todo.fstab.rootOnLoop():
+ #self.skipBootdisk.set_sensitive(FALSE)
return box
diff --git a/iw/confirm_gui.py b/iw/confirm_gui.py
index 7147e1283..994d51723 100644
--- a/iw/confirm_gui.py
+++ b/iw/confirm_gui.py
@@ -1,42 +1,13 @@
from gtk import *
from iw_gui import *
-from translate import _
+from translate import _, N_
from package_gui import queryUpgradeContinue
import gui
class ConfirmWindow (InstallWindow):
- def __init__ (self, ics):
- InstallWindow.__init__ (self, ics)
- ics.setNextEnabled (1)
- ics.setPrevEnabled (1)
-
- if self.ics.todo.upgrade:
- ics.setTitle (_("About to Upgrade"))
- ics.readHTML ("aboutupgrade")
- else:
- ics.setTitle (_("About to Install"))
- ics.readHTML ("aboutinstall")
-
- def getPrev (self):
- #
- # if this is a partitionless upgrade, and they did NOT choose
- # individual package selection, we cannot let them go back as
- # they will go back too far (we can't leave the upgrade path
- # and return to the install path once its started).
- #
- if self.todo.fstab.rootOnLoop():
- if self.todo.upgrade and self.todo.instClass.skipStep("indivpackage"):
- rc = queryUpgradeContinue(self.todo.intf)
- if not rc:
- raise gui.StayOnScreen
- else:
- import sys
- print _("Aborting upgrade")
- sys.exit(0)
-
# ConfirmWindow tag="aboutupgrade" or "aboutinstall"
- def getScreen (self):
+ def getScreen (self, labelText, longText):
hbox = GtkHBox (TRUE, 5)
box = GtkVBox (FALSE, 5)
@@ -49,22 +20,11 @@ class ConfirmWindow (InstallWindow):
a.set (0.5, 0.5, 1.0, 1.0)
hbox.pack_start (a, FALSE)
- if self.ics.todo.upgrade:
- label = GtkLabel (_("Click next to begin upgrade of Red Hat Linux."))
- else:
- label = GtkLabel (_("Click next to begin installation of Red Hat Linux."))
+ label = GtkLabel (labelText)
label.set_line_wrap (TRUE)
label.set_usize(190, -1)
- if self.ics.todo.upgrade:
- label2 = GtkLabel (_("A complete log of your upgrade will be in "
- "/tmp/upgrade.log after rebooting your system. You "
- "may want to keep this file for later reference."))
- else:
- label2 = GtkLabel (_("A complete log of your installation will be in "
- "/tmp/install.log after rebooting your system. You "
- "may want to keep this file for later reference."))
-
+ label2 = GtkLabel (longText)
label2.set_line_wrap (TRUE)
label2.set_usize(190, -1)
@@ -78,5 +38,26 @@ class ConfirmWindow (InstallWindow):
hbox.pack_start (a)
return hbox
-
+class InstallConfirmWindow (ConfirmWindow):
+ windowTitle = N_("About to Install")
+ htmlTag = "aboutinstall"
+
+ def getScreen(self):
+ return ConfirmWindow.getScreen(self,
+ _("Click next to begin installation of Red Hat Linux."),
+ _("A complete log of your installation will be in "
+ "/tmp/install.log after rebooting your system. You "
+ "may want to keep this file for later reference."))
+
+class UpgradeConfirmWindow (ConfirmWindow):
+ windowTitle = N_("About to Upgrade")
+ htmlTag = "aboutupgrade"
+
+ def getScreen(self):
+ return ConfirmWindow.getScreen(self,
+ _("Click next to begin upgrade of Red Hat Linux."),
+ _("A complete log of your upgrade will be in "
+ "/tmp/upgrade.log after rebooting your system. You "
+ "may want to keep this file for later reference."))
+
diff --git a/iw/congrats_gui.py b/iw/congrats_gui.py
index ece08804a..d2578d981 100644
--- a/iw/congrats_gui.py
+++ b/iw/congrats_gui.py
@@ -1,17 +1,17 @@
from gtk import *
from gnome.ui import *
from iw_gui import *
-from translate import _
+from translate import _, N_
class CongratulationWindow (InstallWindow):
+ windowTitle = N_("Congratulations")
+
def __init__ (self, ics):
InstallWindow.__init__ (self, ics)
- ics.setTitle (_("Congratulations"))
ics.setPrevEnabled (FALSE)
ics.setNextButton (STOCK_PIXMAP_QUIT, _("Exit"))
- ics.setNextEnabled (TRUE)
ics.setHelpButtonEnabled (FALSE)
ics.setGrabNext (1)
diff --git a/iw/dependencies_gui.py b/iw/dependencies_gui.py
index 3bbb6a9cc..bbd89c968 100644
--- a/iw/dependencies_gui.py
+++ b/iw/dependencies_gui.py
@@ -1,66 +1,48 @@
from iw_gui import *
from gtk import *
-from translate import _
+from translate import _, N_
class UnresolvedDependenciesWindow (InstallWindow):
- moredeps = None
+
+ windowTitle = N_("Unresolved Dependencies")
+ htmlTag = "depend"
+
def __init__ (self, ics):
InstallWindow.__init__ (self, ics)
- ics.setTitle (_("Unresolved Dependencies"))
- ics.setNextEnabled (1)
- ics.readHTML ("depend")
self.dependRB = None
self.causeRB = None
- def getNext (self):
- if (self.dependRB and self.dependRB.get_active ()
- or self.causeRB and self.causeRB.get_active ()):
- threads_leave ()
- moredeps = self.todo.verifyDeps ()
- threads_enter ()
- if moredeps and self.todo.canResolveDeps (moredeps):
- UnresolvedDependenciesWindow.moredeps = moredeps
- return UnresolvedDependenciesWindow
-
- return None
-
def getPrev (self):
- self.todo.comps.setSelectionState(self.origSelection)
+ self.comps.setSelectionState(self.origSelection)
def updateSize (self, *args):
- self.sizelabel.set_text (_("Total install size: %s") % self.todo.comps.sizeStr())
+ self.sizelabel.set_text (_("Total install size: %s") % self.comps.sizeStr())
def installToggled (self, widget, *args):
- self.todo.selectDepCause (self.deps)
+ self.comps.selectDepCause (self.deps)
if widget.get_active ():
- self.todo.selectDeps (self.deps)
+ self.comps.selectDeps (self.deps)
else:
- self.todo.unselectDeps (self.deps)
+ self.comps.unselectDeps (self.deps)
self.updateSize ()
def causeToggled (self, widget, *args):
if widget.get_active ():
- self.todo.unselectDepCause (self.deps)
+ self.comps.unselectDepCause (self.deps)
else:
- self.todo.selectDepCause (self.deps)
+ self.comps.selectDepCause (self.deps)
self.updateSize ()
def ignoreToggled (self, widget, *args):
if widget.get_active ():
- self.todo.selectDepCause (self.deps)
- self.todo.unselectDeps (self.deps)
+ self.comps.selectDepCause (self.deps)
+ self.comps.unselectDeps (self.deps)
self.updateSize ()
#UnresolvedDependenciesWindow tag="depend"
- def getScreen (self):
- if not UnresolvedDependenciesWindow.moredeps:
- threads_leave ()
- self.deps = self.todo.verifyDeps ()
- threads_enter ()
- if not self.deps:
- return None
- else:
- self.deps = UnresolvedDependenciesWindow.moredeps
+ def getScreen (self, comps, deps):
+ self.deps = deps
+ self.comps = comps
sw = GtkScrolledWindow ()
sw.set_border_width (5)
@@ -74,10 +56,9 @@ class UnresolvedDependenciesWindow (InstallWindow):
list.thaw ()
sw.add (list)
- # save the way things were when we came in, then turn on
- # the packages so we get the right size.
- self.origSelection = self.todo.comps.getSelectionState()
- self.todo.selectDeps (self.deps)
+ # assume things will be selected -- that matches our default
+ self.origSelection = self.comps.getSelectionState()
+ self.comps.selectDeps (self.deps)
self.sizelabel = GtkLabel()
self.sizelabel.set_alignment (1, .5)
diff --git a/iw/examine_gui.py b/iw/examine_gui.py
index 19c948b12..cde0700bb 100644
--- a/iw/examine_gui.py
+++ b/iw/examine_gui.py
@@ -1,23 +1,19 @@
from gtk import *
from iw_gui import *
from package_gui import *
-from translate import _
+from translate import _, N_
class UpgradeExamineWindow (InstallWindow):
- def __init__ (self, ics):
- InstallWindow.__init__ (self, ics)
- ics.setTitle (_("Upgrade Examine"))
- ics.readHTML ("upgrade")
+ windowTitle = N_("Upgrade Examine")
+ htmlTag = "upgrade"
def toggled (self, widget, newPart):
if widget.get_active ():
self.root = newPart
def getNext (self):
- threads_leave ()
self.todo.upgradeMountFilesystems (self.root)
- threads_enter ()
# do this via skiplist, made individialpackageselectionwindow a member
# of upgrade steps.
@@ -36,9 +32,7 @@ class UpgradeExamineWindow (InstallWindow):
#UpgradeExamineWindow tag = "upgrade"
def getScreen (self):
- threads_leave ()
self.parts = self.todo.upgradeFindRoot ()
- threads_enter ()
box = GtkVBox (FALSE)
if not self.parts:
diff --git a/iw/fdisk_gui.py b/iw/fdisk_gui.py
index f48a0a35e..eee1acae6 100644
--- a/iw/fdisk_gui.py
+++ b/iw/fdisk_gui.py
@@ -6,7 +6,6 @@ import isys
import os
class FDiskWindow (InstallWindow):
-
def __init__ (self, ics):
InstallWindow.__init__ (self, ics)
ics.setTitle (_("fdisk"))
@@ -26,29 +25,6 @@ class FDiskWindow (InstallWindow):
self.ics.setNextEnabled (1)
# self.ics.setHelpEnabled (1)
- def getPrev(self):
- self.todo.fstab.rescanPartitions()
-
- def getNext(self):
-# from installpath_gui import InstallPathWindow
-###
-### msf - 05-11-2000 - change how we determine if we should be run
-###
-# if ((not InstallPathWindow.fdisk) or
-# (not InstallPathWindow.fdisk.get_active ())):
-# return None
-#
-### here is fix
-#
- from rootpartition_gui import AutoPartitionWindow
-
- if not AutoPartitionWindow.manuallyPartitionfdisk.get_active():
- return None
-
- self.todo.fstab.rescanPartitions()
-
- return None
-
def button_clicked (self, widget, drive):
zvt = ZvtTerm (80, 24)
zvt.set_del_key_swap(TRUE)
@@ -78,33 +54,16 @@ class FDiskWindow (InstallWindow):
self.ics.setNextEnabled (0)
# FDiskWindow tag="fdisk"
- def getScreen (self):
-# from installpath_gui import InstallPathWindow
-#
-###
-### msf - 05-11-2000 - change how we determine if we should be run
-###
-# if ((not InstallPathWindow.fdisk) or
-# (not InstallPathWindow.fdisk.get_active ())):
-# return None
-#
-#
-### here is fix
-#
- from rootpartition_gui import AutoPartitionWindow
-
- if not AutoPartitionWindow.manuallyPartitionfdisk.get_active():
- return None
-
- self.todo.fstab.closeDrives()
-
+ def getScreen (self, diskset):
+ self.diskset = diskset
+
self.windowContainer = GtkVBox (FALSE)
self.buttonBox = GtkVBox (FALSE, 5)
self.buttonBox.set_border_width (5)
box = GtkVButtonBox ()
label = GtkLabel (_("Select drive to run fdisk on"))
- for drive in self.todo.fstab.driveList():
+ for drive in self.diskset.driveList():
button = GtkButton (drive)
button.connect ("clicked", self.button_clicked, drive)
box.add (button)
diff --git a/iw/firewall_gui.py b/iw/firewall_gui.py
index defe8f9f5..02ffbb06f 100644
--- a/iw/firewall_gui.py
+++ b/iw/firewall_gui.py
@@ -1,48 +1,46 @@
from gtk import *
from iw_gui import *
from isys import *
-from translate import _
+from translate import _, N_
import checklist
class FirewallWindow (InstallWindow):
+ windowTitel = N_("Firewall Configuration")
+ htmlTag = "securitylevel"
+
def __init__ (self, ics):
InstallWindow.__init__ (self, ics)
- ics.setTitle (_("Firewall Configuration"))
- ics.setNextEnabled (1)
- ics.readHTML ("securitylevel")
- self.todo = ics.getToDo ()
-
def getNext (self):
if not self.__dict__.has_key("radio3"):
return None
if self.radio3.get_active ():
- self.todo.firewall.enabled = 0
- self.todo.firewall.policy = 1
+ self.firewall.enabled = 0
+ self.firewall.policy = 1
else:
if self.radio1.get_active ():
- self.todo.firewall.policy = 0
- self.todo.firewall.enabled = 1
+ self.firewall.policy = 0
+ self.firewall.enabled = 1
elif self.radio2.get_active ():
- self.todo.firewall.policy = 1
- self.todo.firewall.enabled = 1
+ self.firewall.policy = 1
+ self.firewall.enabled = 1
if self.radio4.get_active ():
- self.todo.firewallState = 0
+ self.firewallState = 0
if self.radio5.get_active ():
- self.todo.firewallState = 1
+ self.firewallState = 1
count = 0
- self.todo.firewall.trustdevs = []
+ self.firewall.trustdevs = []
for device in self.devices:
(val, row_data, header) = self.trusted.get_row_data (count)
if val == 1:
- self.todo.firewall.trustdevs.append(device)
+ self.firewall.trustdevs.append(device)
count = count + 1
@@ -50,17 +48,17 @@ class FirewallWindow (InstallWindow):
(val, row_data, header) = self.incoming.get_row_data (i)
if row_data == "DHCP":
- self.todo.firewall.dhcp = val
+ self.firewall.dhcp = val
elif row_data == "SSH":
- self.todo.firewall.ssh = val
+ self.firewall.ssh = val
elif row_data == "Telnet":
- self.todo.firewall.telnet = val
+ self.firewall.telnet = val
elif row_data == "WWW (HTTP)":
- self.todo.firewall.http = val
+ self.firewall.http = val
elif row_data == "Mail (SMTP)":
- self.todo.firewall.smtp = val
+ self.firewall.smtp = val
elif row_data == "FTP":
- self.todo.firewall.ftp = val
+ self.firewall.ftp = val
portstring = string.strip(self.ports.get_text())
portlist = ""
@@ -127,8 +125,8 @@ class FirewallWindow (InstallWindow):
self.textWin.show_all()
raise gui.StayOnScreen
- else: #-all the port data looks good. Pass it on to todo.
- self.todo.firewall.portlist = portlist
+ else: # all the port data looks good
+ self.firewall.portlist = portlist
def activate_firewall (self, widget):
@@ -192,8 +190,11 @@ class FirewallWindow (InstallWindow):
list.set_row_data(row, (val, row_data, header))
list._update_row (row)
- def getScreen (self):
- self.devices = self.todo.network.available().keys()
+ def getScreen (self, network, firewall):
+ self.firewall = firewall
+ self.network = network
+
+ self.devices = self.network.available().keys()
self.devices.sort()
self.netCBs = {}
@@ -254,15 +255,15 @@ class FirewallWindow (InstallWindow):
count = 0
for device in self.devices:
- if self.todo.firewall.trustdevs == []:
+ if self.firewall.trustdevs == []:
self.trusted.append_row ((device, device), FALSE)
else:
- if device in self.todo.firewall.trustdevs:
+ if device in self.firewall.trustdevs:
self.trusted.append_row ((device, device), TRUE)
else:
self.trusted.append_row ((device, device), FALSE)
- if self.todo.network.netdevices[device].get('bootproto') == 'dhcp':
- self.todo.firewall.dhcp = 1
+ if self.network.netdevices[device].get('bootproto') == 'dhcp':
+ self.firewall.dhcp = 1
count = count + 1
@@ -282,17 +283,17 @@ class FirewallWindow (InstallWindow):
self.incoming.append_row ((item, ""), FALSE)
if item == "DHCP":
- self.incoming.set_row_data (count, (self.todo.firewall.dhcp, item, item))
+ self.incoming.set_row_data (count, (self.firewall.dhcp, item, item))
elif item == "SSH":
- self.incoming.set_row_data (count, (self.todo.firewall.ssh, item, item))
+ self.incoming.set_row_data (count, (self.firewall.ssh, item, item))
elif item == "Telnet":
- self.incoming.set_row_data (count, (self.todo.firewall.telnet, item, item))
+ self.incoming.set_row_data (count, (self.firewall.telnet, item, item))
elif item == "WWW (HTTP)":
- self.incoming.set_row_data (count, (self.todo.firewall.http, item, item))
+ self.incoming.set_row_data (count, (self.firewall.http, item, item))
elif item == "Mail (SMTP)":
- self.incoming.set_row_data (count, (self.todo.firewall.smtp, item, item))
+ self.incoming.set_row_data (count, (self.firewall.smtp, item, item))
elif item == "FTP":
- self.incoming.set_row_data (count, (self.todo.firewall.ftp, item, item))
+ self.incoming.set_row_data (count, (self.firewall.ftp, item, item))
count = count + 1
@@ -302,25 +303,26 @@ class FirewallWindow (InstallWindow):
table.attach (self.label3, 0, 1, 2, 3, FILL, FILL, 5, 5)
table.attach (self.ports, 1, 2, 2, 3, EXPAND|FILL, FILL, 5, 5)
- if self.todo.firewall.enabled == 0:
+ if self.firewall.enabled == 0:
self.radio3.set_active (TRUE)
- elif self.todo.firewall.policy == 0:
+ elif self.firewall.policy == 0:
self.radio1.set_active (TRUE)
- elif self.todo.firewall.policy == 1:
+ elif self.firewall.policy == 1:
self.radio2.set_active (TRUE)
- if self.todo.firewall.portlist != "":
- self.ports.set_text (self.todo.firewall.portlist)
-
- if self.todo.firewallState == 1:
- self.radio5.set_active(TRUE)
- else:
- self.trusted.set_sensitive(FALSE)
- self.incoming.set_sensitive(FALSE)
- self.ports.set_sensitive(FALSE)
- self.label1.set_sensitive(FALSE)
- self.label2.set_sensitive(FALSE)
- self.label3.set_sensitive(FALSE)
+ if self.firewall.portlist != "":
+ self.ports.set_text (self.firewall.portlist)
+
+ # XXX
+ #if self.firewallState == 1:
+ self.radio5.set_active(TRUE)
+ #else:
+ #self.trusted.set_sensitive(FALSE)
+ #self.incoming.set_sensitive(FALSE)
+ #self.ports.set_sensitive(FALSE)
+ #self.label1.set_sensitive(FALSE)
+ #self.label2.set_sensitive(FALSE)
+ #self.label3.set_sensitive(FALSE)
return box
diff --git a/iw/format_gui.py b/iw/format_gui.py
index 145e64402..c358383e0 100644
--- a/iw/format_gui.py
+++ b/iw/format_gui.py
@@ -1,52 +1,62 @@
+#
+# format_gui.py: allows the user to choose which partitions to format
+#
+# Matt Wilson <msw@redhat.com>
+#
+# 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.
+#
+
from gtk import *
from iw_gui import *
-from thread import *
import isys
from translate import _
-from rootpartition_gui import AutoPartitionWindow
import gui
class FormatWindow (InstallWindow):
def __init__ (self, ics):
InstallWindow.__init__ (self, ics)
-
- self.todo = ics.getToDo ()
ics.setTitle (_("Choose partitions to Format"))
ics.setNextEnabled (1)
-## ics.setHTML ("<HTML><BODY>Choose partitions to Format</BODY></HTML>")
ics.readHTML ("format")
- def getNext(self):
- threads_leave()
- rc = self.todo.fstab.checkFormatting(self.todo.intf.messageWindow)
- threads_enter()
-
- if rc:
- raise gui.StayOnScreen
+ def getNext (self):
+ for (entry, state) in self.state.items():
+ entry.setFormat (state)
# FormatWindow tag="format"
- def getScreen (self):
- def toggled (widget, (todo, dev)):
+ def getScreen (self, fsset):
+ def toggled (widget, (entry, state)):
if widget.get_active ():
- todo.fstab.setFormatFilesystem(dev, 1)
+ state[entry] = 1
else:
- todo.fstab.setFormatFilesystem(dev, 0)
+ state[entry] = 0
- def check (widget, todo):
- todo.fstab.setBadBlockCheck(widget.get_active ())
+# def check (widget, todo):
+# todo.fstab.setBadBlockCheck(widget.get_active ())
box = GtkVBox (FALSE, 10)
- mounts = self.todo.fstab.formattablePartitions()
+ entries = fsset.formattablePartitions()
gotOne = 0
sw = GtkScrolledWindow ()
sw.set_policy (POLICY_AUTOMATIC, POLICY_AUTOMATIC)
- for (mount, dev, fstype, format, size) in mounts:
+ self.state = {}
+ for entry in entries:
+ self.state[entry] = entry.getFormat()
+
gotOne = 1
- checkButton = GtkCheckButton ("/dev/%s %s" % (dev, mount))
- checkButton.set_active (format)
- checkButton.connect ("toggled", toggled, (self.todo, dev))
+ checkButton = GtkCheckButton ("%s %s" % (entry.device,
+ entry.mountpoint))
+ checkButton.set_active (self.state[entry])
+ checkButton.connect ("toggled", toggled, (entry, self.state))
box.pack_start (checkButton, FALSE, FALSE)
if not gotOne: return None
@@ -58,11 +68,12 @@ class FormatWindow (InstallWindow):
vbox = GtkVBox (FALSE, 10)
vbox.pack_start (sw, TRUE, TRUE)
- self.check = GtkCheckButton (_("Check for bad blocks while formatting"))
- self.check.set_active (self.todo.fstab.getBadBlockCheck())
- self.check.connect ("toggled", check, self.todo)
- vbox.pack_start (self.check, FALSE)
+# self.check = GtkCheckButton (_("Check for bad blocks while formatting"))
+# self.check.set_active (self.todo.fstab.getBadBlockCheck())
+# self.check.connect ("toggled", check, self.todo)
+# vbox.pack_start (self.check, FALSE)
- self.check = GtkCheckButton
+# self.check = GtkCheckButton
+
vbox.set_border_width (5)
return vbox
diff --git a/iw/installpath_gui.py b/iw/installpath_gui.py
index 55717d43a..cd795da9c 100644
--- a/iw/installpath_gui.py
+++ b/iw/installpath_gui.py
@@ -1,32 +1,8 @@
from gtk import *
-from iw_gui import *
-from language_gui import *
-from language_support_gui import *
-from welcome_gui import *
-from progress_gui import *
-from package_gui import *
-from network_gui import *
-from account_gui import *
-from auth_gui import *
-from mouse_gui import *
-from keyboard_gui import *
-from format_gui import *
-from congrats_gui import *
-from dependencies_gui import *
-from lilo_gui import *
-from silo_gui import *
-from examine_gui import *
-from bootdisk_gui import *
-from firewall_gui import *
-from timezone_gui import *
-from xconfig_gui import *
-from fdisk_gui import *
-from rootpartition_gui import *
-from confirm_gui import *
-import iutil
-from translate import _
-from upgrade_swap_gui import *
+from translate import _, N_
import installclass
+from iw_gui import InstallWindow
+from flags import flags
UPGRADE = 0
INSTALL = 1
@@ -42,111 +18,39 @@ def D_(x):
class InstallPathWindow (InstallWindow):
installTypes = installclass.availableClasses()
-
- def __init__ (self, ics):
- if iutil.getArch() == 'sparc':
- BootloaderWindow = SiloWindow
- BootloaderSkipname = "silo"
- else:
- BootloaderWindow = LiloWindow
- BootloaderSkipname = "lilo"
-
- self.installSteps = [
- ( AutoPartitionWindow, "partition" ),
- FDiskWindow,
- ( PartitionWindow, "partition" ),
- ( FormatWindow, "format" ),
- ( BootloaderWindow, BootloaderSkipname ),
- ( NetworkWindow, "network" ),
- ( FirewallWindow, "firewall" ),
- ( LanguageSupportWindow, "languagesupport" ),
- ( TimezoneWindow, "timezone" ),
- ( AccountWindow, "accounts" ),
- ( AuthWindow, "authentication" ),
- ( PackageSelectionWindow, "package-selection" ),
- ( UnresolvedDependenciesWindow, "dependencies" ),
- ( XConfigWindow, "xconfig" ),
- ( MonitorWindow, "monitor" ),
- ( ConfirmWindow, "confirm" ),
- InstallProgressWindow,
- ( BootdiskWindow, "bootdisk" ),
- ( CongratulationWindow, "complete" )
- ]
-
- self.upgradeSteps = [
- ( UpgradeExamineWindow, "custom-upgrade"),
- ( UpgradeSwapWindow, "System Swap Space"),
- ( IndividualPackageSelectionWindow, "indivpackage"),
- ( BootloaderWindow, BootloaderSkipname ),
- UnresolvedDependenciesWindow,
- ( ConfirmWindow, "confirm" ),
- InstallProgressWindow,
- ( BootdiskWindow, "bootdisk" ),
- CongratulationWindow
- ]
-
- InstallWindow.__init__ (self, ics)
-
- ics.readHTML ("instpath")
-
- self.commonSteps = [ ( LanguageWindow, "language" ),
- ( KeyboardWindow, "keyboard" ),
- ( MouseWindow, "mouse" ),
- ( WelcomeWindow, "welcome" ),
- ( InstallPathWindow, "installtype" ),
- ]
-
- ics.setTitle (_("Install Type"))
- ics.setNextEnabled (1)
- self.ics = ics
+ htmlTag = "instpath"
+ windowTitle = N_("Install Type")
def getNext(self):
- from fstab import GuiFstab
-
- if not self.__dict__.has_key("upgradeButton"):
- return
-
# Hack to let backing out of upgrades work properly
- if self.todo.setupFilesystems and self.todo.fstab:
- self.todo.fstab.turnOffSwap()
+ #if self.flags.setupFilesystems() and self.id.fstab:
+ #self.id.fstab.turnOffSwap()
needNewDruid = 0
icw = self.ics.getICW ()
- if self.upgradeButton.get_active():
- self.todo.upgrade = 1
- icw.setStateList (self.commonSteps +
- self.upgradeSteps, len (self.commonSteps)-1)
- self.todo.instClass.addToSkipList("indivpackage")
- else:
- icw.setStateList (self.commonSteps +
- self.installSteps, len (self.commonSteps)-1)
- self.todo.upgrade = 0
-
- for (button, object) in self.installClasses:
- if button.get_active():
- break
- if not isinstance (self.orig, object):
- self.todo.setClass (object(self.todo.expert))
- needNewDruid = 1
-
- # This makes the error message delivery come at a sane place
- if needNewDruid or not self.todo.fstab:
- self.todo.fstab = GuiFstab(self.todo.setupFilesystems,
- self.todo.serial, 0, 0,
- self.todo.intf.waitWindow,
- self.todo.intf.messageWindow,
- self.todo.intf.progressWindow,
- not self.todo.expert,
- self.todo.method.protectedPartitions(),
- self.todo.expert,
- self.todo.upgrade)
-
- def toggled (self, widget, type):
+
+ for (button, box, buttons) in self.topLevelButtonList:
+ if not button.get_active(): continue
+
+ if buttons:
+ for b in buttons:
+ if b.get_active(): selection = self.buttonToObject[b]
+ else:
+ selection = self.buttonToObject[button]
+
+ if not isinstance (self.id.instClass, selection):
+ c = selection(self.flags.expert)
+ c.setSteps(self.dispatch)
+ c.setInstallData(self.id)
+ needNewDruid = 1
+
+ def toggled (self, widget):
if not widget.get_active (): return
- if type == INSTALL:
- self.installBox.set_sensitive(1)
- elif type == UPGRADE:
- self.installBox.set_sensitive(0)
+
+ for (button, box, buttons) in self.topLevelButtonList:
+ if not box: continue
+ sensitive = (button == widget)
+ box.set_sensitive(sensitive)
def pixRadioButton (self, group, label, pixmap):
im = self.ics.readPixmap (pixmap)
@@ -165,72 +69,98 @@ class InstallPathWindow (InstallWindow):
return button
# InstallPathWindow tag="instpath"
- def getScreen (self):
- if (self.todo.instClass.installType == "install"):
- self.ics.getICW ().setStateList (self.commonSteps +
- self.installSteps, len (self.commonSteps)-1)
- self.todo.upgrade = 0
- return None
- elif (self.todo.instClass.installType == "upgrade"):
- self.ics.getICW ().setStateList (self.commonSteps +
- self.upgradeSteps, len (self.commonSteps)-1)
- self.todo.upgrade = 1
- return None
-
- box = GtkVBox (FALSE, 5)
+ def getScreen (self, dispatch, id, method, intf):
+ self.dispatch = dispatch
+ self.id = id
+ self.flags = flags
+ self.method = method
+ self.intf = intf
- installButton = self.pixRadioButton (None, _("Install"), "install.png")
- installButton.connect ("toggled", self.toggled, INSTALL)
- self.upgradeButton = self.pixRadioButton (installButton, _("Upgrade"), "upgrade.png")
- self.upgradeButton.connect ("toggled", self.toggled, UPGRADE)
+ topButtons = {}
- if (self.todo.upgrade):
- self.upgradeButton.set_active(1)
- self.toggled (self.upgradeButton, UPGRADE)
- else:
- instClass = self.todo.getClass()
- installButton.set_active(1)
-
- self.installBox = GtkVBox (FALSE, 0)
-
- group = None
- self.installClasses = []
-
- self.orig = self.todo.getClass()
- haveSetDefault = 0
- defaultGroup = None
+ defaultClass = None
+ # this points to the class for the current install class object
+ currentClass = None
for (name, object, pixmap) in self.installTypes:
- group = self.pixRadioButton (group, _(name), pixmap)
- self.installBox.pack_start (group, FALSE)
- self.installClasses.append ((group, object))
- if isinstance(self.orig, object):
- group.set_active (1)
- haveSetDefault = 1
- if object.default:
- defaultGroup = group
-
- if not haveSetDefault and defaultGroup:
- defaultGroup.set_active(1)
-
- spacer = GtkLabel("")
- spacer.set_usize(60, 1)
+ (parentName, parentPixmap) = object.parentClass
+ if not topButtons.has_key(parentName):
+ topButtons[parentName] = []
- align = GtkAlignment ()
- align.set (0.0, 0.0, 0.0, 0.0)
+ topButtons[parentName].append(object)
- table = GtkTable(2, 4)
- table.attach(installButton, 0, 2, 0, 1, xoptions = FILL | EXPAND)
- table.attach(align, 2, 3, 0, 1, xoptions = FALSE)
- self.installBox.set_usize(300, -1)
- table.attach(self.installBox, 1, 3, 1, 2)
- table.attach(self.upgradeButton, 0, 3, 2, 3)
+ if isinstance(id.instClass, object):
+ currentClass = object
+ if object.default:
+ defaultClass = object
+
+ if not currentClass:
+ currentClass = defaultClass
+
+ names = topButtons.keys()
+ names.sort()
+ topLevelGroup = None
+ tableRows = 0
+ # tuples of (button, box) (box may be None)
+ self.topLevelButtonList = []
+ self.buttonToObject = {}
+
+ for item in names:
+ buttons = []
+ if len(topButtons[item]) == 1:
+ name = topButtons[item][0].name
+ pixmap = topButtons[item][0].pixmap
+ topLevelGroup = self.pixRadioButton(topLevelGroup,
+ _(name), pixmap)
+ self.buttonToObject[topLevelGroup] = topButtons[item][0]
+ box = None
+
+ if currentClass == topButtons[item][0]:
+ topLevelGroup.set_active(1)
+ else:
+ (parentName, parentPixmap) = topButtons[item][0].parentClass
+
+ topLevelGroup = self.pixRadioButton(topLevelGroup,
+ _(parentName), parentPixmap)
+
+ box = GtkVBox (FALSE, 0)
+ box.set_usize(300, -1)
+ group = None
+
+ for obj in topButtons[item]:
+ name = obj.name
+ pixmap = obj.pixmap
+ group = self.pixRadioButton(group, _(name), pixmap)
+ self.buttonToObject[group] = obj
+ buttons.append(group)
+ box.pack_start (group, FALSE)
+
+ if currentClass == obj:
+ group.set_active(1)
+ topLevelGroup.set_active(1)
+
+ self.topLevelButtonList.append((topLevelGroup, box, buttons))
+ topLevelGroup.connect("toggled", self.toggled)
+
+ tableRows = tableRows + 1
+ if box:
+ tableRows = tableRows + 1
+
+ table = GtkTable(2, tableRows + 1)
+ row = 0
+
+ for (button, box, buttons) in self.topLevelButtonList:
+ table.attach(button, 0, 3, row, row + 1, xoptions = FILL | EXPAND)
+
+ #table.attach(align, 2, 3, row, row + 1, xoptions = FALSE)
+ row = row + 1
+
+ if box:
+ table.attach(box, 1, 3, row, row + 1)
+ row = row + 1
+ box = GtkVBox (FALSE, 5)
box.pack_start(table, FALSE)
-
- hbox = GtkHBox (FALSE)
-
- self.toggled (installButton, INSTALL)
- self.toggled (self.upgradeButton, UPGRADE)
box.set_border_width (5)
+
return box
diff --git a/iw/iw_gui.py b/iw/iw_gui.py
index 950f9d1a7..e66bb3d3f 100644
--- a/iw/iw_gui.py
+++ b/iw/iw_gui.py
@@ -1,11 +1,27 @@
+from translate import _
+
class InstallWindow:
+
+ htmlTag = None
+ windowTitle = None
+
def __init__ (self,ics):
self.ics = ics
- self.todo = ics.getToDo ()
+ ics.setNextEnabled (1)
+ ics.setPrevEnabled (1)
+
+ if self.htmlTag:
+ ics.readHTML (self.htmlTag)
+
+ if self.windowTitle:
+ ics.setTitle (_(self.windowTitle))
def getNext (self):
return None
+ def renderCallback(self):
+ return None
+
def getPrev (self):
return None
diff --git a/iw/keyboard_gui.py b/iw/keyboard_gui.py
index d680c08b5..92b26c538 100644
--- a/iw/keyboard_gui.py
+++ b/iw/keyboard_gui.py
@@ -2,50 +2,52 @@ from gtk import *
from iw_gui import *
import xkb
import string
-from translate import _
+from translate import _, N_
from kbd import Keyboard
import iutil
import isys
from log import log
+from flags import flags
+
+# XXX
+# State preservation is fucked. We need to get the X data store working
+# properly before fixing it.
+#
class KeyboardWindow (InstallWindow):
+ hasrun = 0
+
+ windowTitle = N_("Keyboard Configuration")
+ htmlTag = "kybd"
+
def __init__ (self, ics):
InstallWindow.__init__ (self, ics)
- ics.setTitle (_("Keyboard Configuration"))
- ics.readHTML ("kybd")
- ics.setNextEnabled (TRUE)
self.kb = xkb.XKB ()
self.rules = self.kb.getRules ()
rules = self.kb.getRulesBase ()
self.rulesbase = rules[string.rfind (rules, "/")+1:]
self.model = "pc101"
self.layout = "en_US"
- if self.todo.keyboard.type == "Sun":
- self.model = self.todo.keyboard.model
- self.layout = self.todo.keyboard.layout
self.variant = ""
- self.hasrun = 0
-
- self.ics = ics
- self.icw = ics.getICW ()
def getNext (self):
if self.hasrun:
- if self.todo.setupFilesystems:
+ if self.flags.setupFilesystems:
self.kb.setRule (self.model, self.layout, self.variant, "complete")
- self.todo.x.setKeyboard (self.rulesbase, self.model,
- self.layout, self.variant, "")
- self.todo.keyboard.setfromx (self.model, self.layout, self.variant)
+ # XXX
+ #self.x.setKeyboard (self.rulesbase, self.model,
+ #self.layout, self.variant, "")
+
+ self.kbd.setfromx (self.model, self.layout, self.variant)
+
try:
- isys.loadKeymap(self.todo.keyboard.get())
+ isys.loadKeymap(self.kbd.get())
except:
log("failed to load keymap")
- self.todo.deadkeyState = self.variant
-
return None
def select_row (self, clist, row, col, event):
@@ -53,23 +55,33 @@ class KeyboardWindow (InstallWindow):
self.layout = self.layoutList.get_row_data (self.layoutList.selection[0])
self.variant = self.variantList.get_row_data (self.variantList.selection[0])
-# if self.todo.setupFilesystems:
-# self.kb.setRule (self.model, self.layout, self.variant, "complete")
-
def setMap (self, data):
- if self.todo.setupFilesystems:
+ if self.flags.setupFilesystems:
self.kb.setRule (self.model, self.layout, self.variant, "complete")
# KeyboardWindow tag="kybd"
- def getScreen (self):
+ def getScreen (self, instLang, kbd):
+ self.flags = flags
+ self.kbd = kbd
+
+ cur = kbd.getXKB()
+ self.model = cur[1]
+ self.layout = cur[2]
+ self.variant == cur[3]
+
if not self.hasrun:
- default = self.todo.instTimeLanguage.getDefaultKeyboard()
+ default = instLang.getDefaultKeyboard()
if Keyboard.console2x.has_key (default):
self.model = Keyboard.console2x[default][0]
self.layout = Keyboard.console2x[default][1]
- if self.todo.setupFilesystems:
- self.kb.setRule (self.model, self.layout, self.variant, "complete")
+ if flags.setupFilesystems:
+ self.kb.setRule (self.model, self.layout, self.variant,
+ "complete")
+ elif kbd.type == "Sun":
+ self.model = kbd.model
+ self.layout = kbd.layout
+
box = GtkVBox (FALSE, 5)
im = self.ics.readPixmap ("gnome-keyboard.png")
@@ -138,7 +150,7 @@ class KeyboardWindow (InstallWindow):
("nodeadkeys", (_("Disable dead keys")))):
loc = self.variantList.append ((variant,))
self.variantList.set_row_data (loc, key)
- if self.todo.deadkeyState == "nodeadkeys":
+ if self.variant == "nodeadkeys":
self.variantList.select_row(count, 0)
count = count + 1
diff --git a/iw/language_gui.py b/iw/language_gui.py
index d461965d7..8f77c7754 100644
--- a/iw/language_gui.py
+++ b/iw/language_gui.py
@@ -1,30 +1,18 @@
from gtk import *
from iw_gui import *
-from translate import _
+from translate import _, N_
class LanguageWindow (InstallWindow):
+ windowTitle = N_("Language Selection")
+ htmlTag = "lang"
+
def __init__ (self, ics):
InstallWindow.__init__ (self, ics)
- ics.setTitle (_("Language Selection"))
-
- if self.todo.reconfigOnly:
- ics.setPrevEnabled (1)
- else:
- ics.setPrevEnabled (0)
-
- ics.setNextEnabled (1)
- ics.readHTML ("lang")
- self.ics = ics
- self.icw = ics.getICW ()
- self.languages = self.todo.instTimeLanguage.available()
- self.running = 0
- self.lang = None
-
def getNext (self):
- if self.lang:
- self.icw.setLanguage (self.lang)
+ self.instLang.setRuntimeLanguage(self.lang)
+ self.ics.getICW().setLanguage (self.instLang.getLangNick(self.lang))
return None
@@ -33,7 +21,7 @@ class LanguageWindow (InstallWindow):
self.lang = clist.get_row_data (clist.selection[0])
# LanguageWindow tag="lang"
- def getScreen (self):
+ def getScreen (self, intf, instLang):
self.running = 0
mainBox = GtkVBox (FALSE, 10)
label = GtkLabel (_("What language should be used during the "
@@ -44,14 +32,15 @@ class LanguageWindow (InstallWindow):
self.language = GtkCList ()
self.language.set_selection_mode (SELECTION_BROWSE)
self.language.connect ("select_row", self.select_row)
+ self.instLang = instLang
default = -1
n = 0
- for locale in self.languages:
+ for locale in instLang.available():
row = self.language.append ((_(locale),))
self.language.set_row_data (row, locale)
- if locale == self.todo.instTimeLanguage.getCurrent():
+ if locale == instLang.getCurrent():
self.lang = locale
default = n
n = n + 1
diff --git a/iw/language_support_gui.py b/iw/language_support_gui.py
index cb3c6b804..b725a8d42 100644
--- a/iw/language_support_gui.py
+++ b/iw/language_support_gui.py
@@ -1,6 +1,6 @@
from gtk import *
from iw_gui import *
-from translate import _
+from translate import _, N_
from xpms_gui import CHECKBOX_ON_XPM
from xpms_gui import CHECKBOX_OFF_XPM
import GdkImlib
@@ -19,30 +19,22 @@ class LanguageSupportWindow (InstallWindow):
checkMark_Off = foo.make_pixmap()
del foo
- def __init__ (self, ics):
- InstallWindow.__init__ (self, ics)
-
- ics.setTitle (_("Language Selection"))
-
- ics.setNextEnabled (1)
- ics.readHTML ("langsupport")
- self.ics = ics
- self.icw = ics.getICW ()
- self.languages = self.todo.language.getAllSupported ()
+ windowTitle = _("Language Selection")
+ htmlTag = "langsupport"
def getNext (self):
- self.langs = []
+ self.supportedLangs = []
for row in range(self.maxrows):
(val, row_data, header) = self.language.get_row_data (row)
if val == 1:
selected = self.language.get_text (row, 1)
- self.langs.append (selected)
+ self.supportedLangs.append (selected)
self.defaultLang = self.combo.entry.get_text()
- self.todo.language.setSupported (self.langs)
- self.todo.language.setDefault (self.defaultLang)
+ self.langs.setSupported (self.supportedLangs)
+ self.langs.setDefault (self.defaultLang)
return None
@@ -122,16 +114,20 @@ class LanguageSupportWindow (InstallWindow):
self.rebuild_combo_box()
# LanguageSupportWindow tag="langsupport"
- def getScreen (self):
+ def getScreen (self, langs):
+ self.langs = langs
+
+ self.languages = self.langs.getAllSupported ()
+
def moveto (widget, event, item):
widget.moveto (item, 0, 0.5, 0.5)
- self.langs = self.todo.language.getSupported()
+ self.supportedLangs = self.langs.getSupported()
self.origLangs = []
- for i in self.langs:
+ for i in self.supportedLangs:
self.origLangs.append(i)
- self.defaultLang = self.todo.language.getDefault()
+ self.defaultLang = self.langs.getDefault()
self.oldDefaultLang = self.defaultLang
# first time we hit this point in install this is not initialized
@@ -151,10 +147,14 @@ class LanguageSupportWindow (InstallWindow):
sep = GtkHSeparator ()
vbox.pack_start (sep, FALSE, 15)
- if self.todo.reconfigOnly:
- label = GtkLabel (_("Currently installed languages:"))
- else:
- label = GtkLabel (_("Choose the languages to install:"))
+
+ # XXX
+ #if self.flags.reconfigOnly():
+ #label = GtkLabel (_("Currently installed languages:"))
+ #else:
+
+ label = GtkLabel (_("Choose the languages to install:"))
+
label.set_alignment (0.0, 0.5)
label.set_line_wrap (TRUE)
vbox.pack_start (label, FALSE)
@@ -173,7 +173,7 @@ class LanguageSupportWindow (InstallWindow):
sel = 0
for locale in self.languages:
- if locale == self.defaultLang or (locale in self.langs):
+ if locale == self.defaultLang or (locale in self.supportedLangs):
self.language.append_row((locale, ""), TRUE)
list.append(locale)
@@ -223,9 +223,11 @@ class LanguageSupportWindow (InstallWindow):
button = GtkButton (_("Select as default"))
alignment.add (button)
+ # XXX
+ #
# in reconfig mode make some widgets unchangable
- if self.todo.reconfigOnly:
- self.language.set_sensitive(FALSE)
- all_button.set_sensitive(FALSE)
+ #if self.todo.reconfigOnly:
+ #self.language.set_sensitive(FALSE)
+ #all_button.set_sensitive(FALSE)
return vbox
diff --git a/iw/lilo_gui.py b/iw/lilo_gui.py
index a6aba1bfa..f1684b50f 100644
--- a/iw/lilo_gui.py
+++ b/iw/lilo_gui.py
@@ -2,7 +2,7 @@
from iw_gui import *
from gtk import *
-from translate import _
+from translate import _, N_
from xpms_gui import CHECKBOX_ON_XPM
from xpms_gui import CHECKBOX_OFF_XPM
import GdkImlib
@@ -24,24 +24,17 @@ class LiloWindow (InstallWindow):
checkMark_Off = foo.make_pixmap()
del foo
-
- def __init__ (self, ics):
- InstallWindow.__init__ (self, ics)
-
- ics.readHTML ("lilo")
-
- ics.setTitle (_("Lilo Configuration"))
- ics.setNextEnabled (1)
- self.ics = ics
- self.type = None
- self.bootdisk = None
- self.lilo = None
+ windowTitle = N_("Lilo Configuration")
+ htmlTag = "lilo"
def getPrev (self):
# avoid coming back in here if the user backs past and then tries
# to skip this screen
- self.bootdisk = None
+ #self.bootdisk = None
+ pass
+ # XXX
+ #
# if doing an upgrade, offer choice of aborting upgrade.
# we can't allow them to go back in install, since we've
# started swap and mounted the systems filesystems
@@ -50,62 +43,60 @@ class LiloWindow (InstallWindow):
# if we are skipping indivual package selection, must stop it here
# very messy.
#
- if self.todo.upgrade and self.todo.instClass.skipStep("indivpackage"):
- rc = queryUpgradeContinue(self.todo.intf)
- if not rc:
- raise gui.StayOnScreen
- else:
- import sys
- print _("Aborting upgrade")
- sys.exit(0)
+ #if self.todo.upgrade and self.todo.instClass.skipStep("indivpackage"):
+ #rc = queryUpgradeContinue(self.todo.intf)
+ #if not rc:
+ #raise gui.StayOnScreen
+ #else:
+ #import sys
+ #print _("Aborting upgrade")
+ #sys.exit(0)
def getNext (self):
if not self.bootdisk: return None
if self.bootdisk.get_active ():
- self.todo.bootdisk = 1
- self.todo.bdstate = "TRUE"
+ self.dispatch.skipStep("bootdisk", skip = 0)
else:
- self.todo.bootdisk = 0
- self.todo.bdstate = "FALSE"
-
- if not self.lilo.get_active ():
- self.todo.lilo.setDevice(None)
- self.todo.lilostate = "FALSE"
- elif self.todo.lilo.allowLiloLocationConfig(self.todo.fstab):
- self.todo.lilostate = "TRUE"
- if self.mbr.get_active ():
- self.todo.lilo.setDevice("mbr")
- else:
- self.todo.lilo.setDevice("partition")
+ self.dispatch.skipStep("bootdisk")
+
+ if not self.bootloader.get_active ():
+ self.dispatch.skipStep("instbootloader")
+ elif len(self.bootDevice.keys()) > 0:
+ self.dispatch.skipStep("instbootloader", skip = 0)
+
+ for (widget, device) in self.bootDevice.items():
+ if widget.get_active():
+ self.bl.setDevice(device)
- images = {}
default = None
linuxDevice = None
for index in range(self.numImages):
device = self.imageList.get_text(index, 1)[5:]
type = self.types[index]
label = self.imageList.get_text(index, 3)
- images[device] = (label, type)
+
+ self.bl.images.setImageLabel(device, label)
+
if self.default == index:
- default = label
+ default = device
if type == 2:
- linuxDevice = label
+ linuxDevice = device
if not default:
default = linuxDevice
- self.todo.lilo.setLiloImages(images)
- self.todo.lilo.setLinear(self.linearCheck.get_active())
- self.todo.lilo.setAppend(self.appendEntry.get_text())
- self.todo.lilo.setDefault(default)
+
+ self.bl.setUseGrub(not self.grubCheck.get_active())
+ self.bl.args.set(self.appendEntry.get_text())
+ self.bl.images.setDefault(default)
def typeName(self, type):
- if (type == 2):
+ if (type == "ext2"):
return "Linux Native"
- elif (type == 1):
+ elif (type == "FAT"):
return "DOS/Windows"
- elif (type == 4):
+ elif (type == "hpfs"):
return "OS/2 / Windows NT"
else:
return "Other"
@@ -147,15 +138,15 @@ class LiloWindow (InstallWindow):
else:
state = FALSE
- for n in [self.mbr, self.part, self.appendEntry, self.editBox,
- self.imageList, self.liloLocationBox, self.radioBox, self.sw ]:
+ for n in self.bootDevice.keys() + [self.appendEntry, self.editBox,
+ self.imageList, self.liloLocationBox, self.radioBox, self.sw ]:
n.set_sensitive (state)
- if state and not self.todo.lilo.allowLiloLocationConfig(self.todo.fstab):
+ if state and not len(self.bootDevice.keys()) < 2:
self.liloLocationBox.set_sensitive(0)
- self.mbr.set_sensitive(0)
- self.part.set_sensitive(0)
- self.linearCheck.set_sensitive(0)
+ self.grubCheck.set_sensitive(0)
+ for n in self.bootDevice.keys():
+ n.set_sensitive(0)
def labelInsertText(self, entry, text, len, data):
i = 0
@@ -241,33 +232,20 @@ class LiloWindow (InstallWindow):
self.ignoreSignals = 0
# LiloWindow tag="lilo"
- def getScreen (self):
- (self.rootdev, rootfs) = self.todo.fstab.getRootDevice()
+ def getScreen(self, dispatch, bl, fsset, diskSet):
+ self.dispatch = dispatch
+ self.bl = bl
- if self.todo.fstab.rootOnLoop():
- self.todo.bootdisk = 1
- return None
+ self.rootdev = fsset.getEntryByMountPoint("/").device.getDevice()
-# cant go back past this screen in upgrades
-# if self.todo.upgrade:
-# self.ics.setPrevEnabled (0)
-
-# comment these two lines to get lilo screen in test mode
-# if not self.todo.fstab.setupFilesystems:
-# return None
-
- (imageList, defaultLabel) = \
- self.todo.lilo.getLiloImages(self.todo.fstab)
+ imageList = bl.images.getImages()
+ defaultDevice = bl.images.getDefault()
self.ignoreSignals = 0
- if self.todo.fstab.mountList()[0][0] != '/': return None
-
- bootpart = self.todo.fstab.getBootDevice()
- boothd = self.todo.fstab.getMbrDevice()
-
format = "/dev/%s"
self.radioBox = GtkTable(2, 6)
+ self.bootDevice = {}
self.radioBox.set_border_width (5)
spacer = GtkLabel("")
@@ -280,31 +258,32 @@ class LiloWindow (InstallWindow):
self.liloLocationBox.pack_start(label)
self.radioBox.attach(self.liloLocationBox, 0, 2, 1, 2)
- self.mbr = GtkRadioButton(None,
- ("/dev/%s %s" % (boothd, _("Master Boot Record (MBR)"))))
- self.radioBox.attach(self.mbr, 1, 2, 2, 3)
- self.part = GtkRadioButton(self.mbr,
- ("/dev/%s %s" % (bootpart,
- _("First sector of boot partition"))))
- self.radioBox.attach(self.part, 1, 2, 3, 4)
+ choices = fsset.bootloaderChoices(diskSet)
+ if choices:
+ radio = None
+ count = 0
+ for (device, desc) in choices:
+ radio = GtkRadioButton(radio,
+ ("/dev/%s %s" % (device, _(desc))))
+ self.radioBox.attach(radio, 1, 2, count + 2, count + 3)
+ self.bootDevice[radio] = device
- self.linearCheck = GtkCheckButton(
- _("Use linear mode (needed for some SCSI drives)"))
- self.linearCheck.set_active(self.todo.lilo.getLinear())
+ if bl.getDevice() == device:
+ radio.set_active(1)
- self.radioBox.attach(self.linearCheck, 0, 2, 4, 5)
+ count = count + 1
- if not self.todo.lilo.allowLiloLocationConfig(self.todo.fstab):
- self.liloLocationBox.set_sensitive(0)
- self.mbr.set_sensitive(0)
- self.part.set_sensitive(0)
- self.linearCheck.set_sensitive(0)
+ self.grubCheck = GtkCheckButton(
+ _("Use LILO bootloader (instead of Grub)"))
+ self.grubCheck.set_active(not bl.useGrub())
+
+ self.radioBox.attach(self.grubCheck, 0, 2, 4, 5)
label = GtkLabel(_("Kernel parameters") + ":")
label.set_alignment(0.0, 0.5)
self.appendEntry = GtkEntry()
- if self.todo.lilo.getAppend():
- self.appendEntry.set_text(self.todo.lilo.getAppend())
+ if bl.args.get():
+ self.appendEntry.set_text(bl.args.get())
box = GtkHBox(FALSE, 5)
box.pack_start(label)
box.pack_start(self.appendEntry)
@@ -319,38 +298,24 @@ class LiloWindow (InstallWindow):
optionBox.set_border_width (5)
self.bootdisk = GtkCheckButton (_("Create boot disk"))
- # If this screen hasn't been reached before, then activate self.bootdisk
- if self.todo.bdstate == "":
- self.todo.bdstate = "TRUE"
-
- # If first time or self.bootdisk was activated in the past, activate now. Else deactivate
- if self.todo.bdstate == "TRUE":
- self.bootdisk.set_active (TRUE)
- else:
- self.bootdisk.set_active (FALSE)
+ self.bootdisk.set_active(not dispatch.stepInSkipList("bootdisk"))
optionBox.pack_start (self.bootdisk)
- self.lilo = GtkCheckButton (_("Install LILO"))
-
- if self.todo.lilostate == "":
- self.todo.lilostate = "TRUE"
-
+ self.bootloader = GtkCheckButton (_("Install Bootloader"))
- # If first time or self.lilo was activated in the past, activate now. Else deactivate
- if self.todo.lilostate == "TRUE":
- self.lilo.set_active (TRUE)
- else:
- self.lilo.set_active (FALSE)
- self.toggled (self.lilo)
+ if not dispatch.stepInSkipList("instbootloader"):
+ self.bootloader.set_active (TRUE)
+ else:
+ self.bootloader.set_active (FALSE)
+ self.toggled (self.bootloader)
for n in [self.mbr, self.part, self.appendEntry, self.editBox,
self.imageList, self.liloLocationBox, self.radioBox ]:
n.set_sensitive (FALSE)
-
- self.lilo.connect ("toggled", self.toggled)
- optionBox.pack_start (self.lilo, FALSE)
+ self.bootloader.connect ("toggled", self.toggled)
+ optionBox.pack_start (self.bootloader, FALSE)
box.pack_start (optionBox, FALSE)
@@ -370,9 +335,12 @@ class LiloWindow (InstallWindow):
for n in sortedKeys:
(label, type) = imageList[n]
self.types.append(type)
+ if label == None:
+ print "label is None!!"
+ label = ""
self.imageList.append(("", "/dev/" + n, self.typeName(type),
label))
- if (label == defaultLabel):
+ if (n == defaultDevice):
self.default = self.count
self.imageList.set_pixmap(self.count, 0, self.checkMark)
else:
@@ -423,20 +391,11 @@ class LiloWindow (InstallWindow):
self.sw.add (self.imageList)
box.pack_start (self.sw, TRUE)
- where = self.todo.lilo.getDevice()
-
- if self.todo.lilostate == "TRUE":
+ if not dispatch.stepInSkipList("instbootloader"):
self.editBox.set_sensitive(TRUE)
tempBox2.set_sensitive(TRUE)
self.radioBox.set_sensitive(TRUE)
self.sw.set_sensitive(TRUE)
-
- if not where:
- self.lilo.set_active(1)
- elif where == "mbr":
- self.mbr.set_active(1)
- else:
- self.part.set_active(1)
else:
self.editBox.set_sensitive(FALSE)
self.radioBox.set_sensitive(FALSE)
diff --git a/iw/mouse_gui.py b/iw/mouse_gui.py
index a0896932f..af08fad52 100644
--- a/iw/mouse_gui.py
+++ b/iw/mouse_gui.py
@@ -5,10 +5,14 @@ from iw_gui import *
from string import *
from re import *
import tree
-from translate import _
+from translate import _, N_
+from flags import flags
class MouseWindow (InstallWindow):
+ windowTitle = N_("Mouse Configuration")
+ htmlTag = "mouse"
+
def reduce_leafs (self, a):
if a == (): return a
if len (a) > 1 and isinstance (a[1], type (())) and len (a[1]) == 1:
@@ -50,13 +54,6 @@ class MouseWindow (InstallWindow):
else:
self.selectMouse (ctreeNode[1:], mouseNode)
- def __init__ (self, ics):
- InstallWindow.__init__ (self, ics)
-
- ics.setTitle (_("Mouse Configuration"))
- ics.readHTML ("mouse")
- ics.setNextEnabled (TRUE)
-
def getCurrentKey (self):
if not len (self.ctree.selection): return
name = ""
@@ -76,16 +73,16 @@ class MouseWindow (InstallWindow):
def getNext (self):
if not self.__dict__.has_key("availableMice"): return
cur = self.getCurrentKey()
- (gpm, xdev, device, emulate) = self.availableMice[cur]
- self.todo.mouse.set (cur, self.emulate3.get_active ())
+ (gpm, xdev, device, emulate, shortname) = self.availableMice[cur]
+ self.mouse.set (cur, self.emulate3.get_active ())
- if self.todo.setupFilesystems:
+ if self.flags.setupFilesystems:
if (device == "ttyS"):
- self.todo.mouse.setDevice(self.serialDevice)
+ self.mouse.setDevice(self.serialDevice)
else:
- self.todo.mouse.setDevice(device)
+ self.mouse.setDevice(device)
- self.todo.mouse.setXProtocol ()
+ self.mouse.setXProtocol ()
return None
@@ -106,7 +103,7 @@ class MouseWindow (InstallWindow):
return
self.emulate3.set_sensitive (TRUE)
- (gpm, xdev, device, emulate) = self.availableMice[cur]
+ (gpm, xdev, device, emulate, shortname) = self.availableMice[cur]
self.emulate3.set_active (emulate)
if device == "ttyS":
if (self.serialDevice):
@@ -123,13 +120,16 @@ class MouseWindow (InstallWindow):
self.ics.setNextEnabled (TRUE)
# MouseWindow tag="mouse"
- def getScreen (self):
- self.availableMice = self.todo.mouse.available()
+ def getScreen (self, mouse):
+ self.mouse = mouse
+ self.flags = flags
+
+ self.availableMice = mouse.available()
sorted_mice_keys = self.availableMice.keys()
sorted_mice_keys.sort ()
- currentDev = self.todo.mouse.getDevice ()
- (currentMouse, emulate3) = self.todo.mouse.get ()
+ currentDev = mouse.getDevice ()
+ (currentMouse, emulate3) = mouse.get ()
deviceList = [ (_("/dev/ttyS0 (COM1 under DOS)"), "ttyS0" ),
(_("/dev/ttyS1 (COM2 under DOS)"), "ttyS1" ),
diff --git a/iw/network_gui.py b/iw/network_gui.py
index 0fbb6ab86..1db31f9b2 100644
--- a/iw/network_gui.py
+++ b/iw/network_gui.py
@@ -1,34 +1,35 @@
from gtk import *
from iw_gui import *
from isys import *
-from translate import _
+from translate import _, N_
class NetworkWindow (InstallWindow):
+ windowTitle = N_("Network Configuration")
+ htmlTag = "netconf"
+
def __init__ (self, ics):
InstallWindow.__init__ (self, ics)
- ics.setTitle (_("Network Configuration"))
- ics.setNextEnabled (1)
- ics.readHTML ("netconf")
- self.todo = ics.getToDo ()
self.calcNMHandler = None
- for dev in self.todo.network.available ().values ():
- if not dev.get('onboot'):
- dev.set (("onboot", "yes"))
+ # XXX
+ #
+ #for dev in self.network.available ().values ():
+ #if not dev.get('onboot'):
+ #dev.set (("onboot", "yes"))
def getNext (self):
if not self.__dict__.has_key("gw"):
return None
- self.todo.network.gateway = self.gw.get_text ()
- self.todo.network.primaryNS = self.ns.get_text ()
- self.todo.network.secondaryNS = self.ns2.get_text ()
- self.todo.network.ternaryNS = self.ns3.get_text ()
+ self.network.gateway = self.gw.get_text ()
+ self.network.primaryNS = self.ns.get_text ()
+ self.network.secondaryNS = self.ns2.get_text ()
+ self.network.ternaryNS = self.ns3.get_text ()
if (self.hostname.get_text () != ""):
- self.todo.network.hostname = self.hostname.get_text ()
+ self.network.hostname = self.hostname.get_text ()
return None
@@ -40,9 +41,9 @@ class NetworkWindow (InstallWindow):
def focusOutIP (self, widget, event, ip):
if (self.hostname.get_text () == ""
- and self.todo.network.hostname != "localhost.localdomain"):
+ and self.network.hostname != "localhost.localdomain"):
- hs = self.todo.network.hostname
+ hs = self.network.hostname
tmp = string.split(hs, ".")
self.hostname.set_text (tmp[0])
@@ -59,7 +60,7 @@ class NetworkWindow (InstallWindow):
self.domainname.set_text (domain)
-# self.hostname.set_text (self.todo.network.hostname)
+# self.hostname.set_text (self.network.hostname)
if ip.calcNMHandler != None:
ip.disconnect (ip.calcNMHandler)
@@ -105,8 +106,8 @@ class NetworkWindow (InstallWindow):
self.dev.set (("bootproto", "static"))
self.dev.set (("ipaddr", self.ip.get_text ()), ("netmask", self.nm.get_text ()),
("network", network), ("broadcast", broadcast), ("onboot", "yes"))
- self.todo.network.gateway = self.gw.get_text ()
- self.todo.network.primaryNS = self.dns1.get_text ()
+ self.network.gateway = self.gw.get_text ()
+ self.network.primaryNS = self.dns1.get_text ()
except:
pass
@@ -140,9 +141,12 @@ class NetworkWindow (InstallWindow):
if dots != 3: return
if valid_ip == TRUE:
- new_nm = inet_calcNetmask (ip)
- if (new_nm != nm.get_text ()):
- nm.set_text (new_nm)
+ try:
+ new_nm = inet_calcNetmask (ip)
+ if (new_nm != nm.get_text ()):
+ nm.set_text (new_nm)
+ except:
+ pass
def DHCPtoggled (self, widget, (dev, table)):
active = widget.get_active ()
@@ -163,12 +167,13 @@ class NetworkWindow (InstallWindow):
# NetworkWindow tag="netconf"
- def getScreen (self):
+ def getScreen (self, network):
box = GtkVBox ()
box.set_border_width (5)
+ self.network = network
notebook = GtkNotebook ()
- devs = self.todo.network.available ()
+ devs = self.network.available ()
if not devs: return None
devs.keys ().sort ()
@@ -268,20 +273,20 @@ class NetworkWindow (InstallWindow):
self.hostname = options[0]
# bring over the value from the loader
- if (self.todo.network.hostname != "localhost.localdomain"):
- self.hostname.set_text (self.todo.network.hostname)
+ if (self.network.hostname != "localhost.localdomain"):
+ self.hostname.set_text (self.network.hostname)
self.gw = options[1]
- self.gw.set_text (self.todo.network.gateway)
+ self.gw.set_text (self.network.gateway)
self.ns = options[2]
- self.ns.set_text (self.todo.network.primaryNS)
+ self.ns.set_text (self.network.primaryNS)
self.ns2 = options[3]
- self.ns2.set_text (self.todo.network.secondaryNS)
+ self.ns2.set_text (self.network.secondaryNS)
self.ns3 = options[4]
- self.ns3.set_text (self.todo.network.ternaryNS)
+ self.ns3.set_text (self.network.ternaryNS)
box.pack_start (self.ipTable, FALSE, FALSE, 5)
return box
diff --git a/iw/partition_gui.py b/iw/partition_gui.py
new file mode 100644
index 000000000..8c5d026ed
--- /dev/null
+++ b/iw/partition_gui.py
@@ -0,0 +1,1060 @@
+#
+# partition_gui.py: allows the user to choose how to partition their disks
+#
+# Matt Wilson <msw@redhat.com>
+#
+# 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.
+#
+
+from iw_gui import *
+from gtk import *
+from GDK import *
+from gnome.ui import *
+from translate import _, N_
+from partitioning import *
+from fsset import *
+from autopart import doPartitioning
+import parted
+import string
+import copy
+
+STRIPE_HEIGHT = 32.0
+LOGICAL_INSET = 3.0
+CANVAS_WIDTH = 500
+CANVAS_HEIGHT = 200
+TREE_SPACING = 2
+
+MODE_ADD = 1
+MODE_EDIT = 2
+
+# max partition size in kB
+# XXX these are just made up, need to get real values from parted!
+MAX_PART_SIZE = 1024*1024*1024
+MAX_SWAP_PART_SIZE_KB = 2147483640/1024
+
+class DiskStripeSlice:
+ def eventHandler(self, widget, event):
+ if event.type == GDK.BUTTON_PRESS:
+ if event.button == 1:
+ self.parent.selectSlice(self.partition, 1)
+
+ return TRUE
+
+ def shutDown(self):
+ self.parent = None
+ if self.group:
+ self.group.destroy()
+ self.group = None
+ del self.partition
+
+ def select(self):
+ if self.partition.type != parted.PARTITION_EXTENDED:
+ self.group.raise_to_top()
+ self.box.set(outline_color="red")
+ self.box.set(fill_color=self.selectColor())
+
+ def deselect(self):
+ self.box.set(outline_color="black", fill_color=self.fillColor())
+
+ def getPartition(self):
+ return self.partition
+
+ def fillColor(self):
+ if self.partition.type & parted.PARTITION_FREESPACE:
+ return "grey88"
+ return "white"
+
+ def selectColor(self):
+ if self.partition.type & parted.PARTITION_FREESPACE:
+ return "cornsilk2"
+ return "cornsilk1"
+
+ def hideOrShowText(self):
+ if self.box.get_bounds()[2] < self.text.get_bounds()[2]:
+ self.text.hide()
+ else:
+ self.text.show()
+
+ def sliceText(self):
+ if self.partition.type & parted.PARTITION_EXTENDED:
+ return ""
+ if self.partition.type & parted.PARTITION_FREESPACE:
+ rc = "Free\n"
+ else:
+ rc = "%s\n" % (get_partition_name(self.partition),)
+ rc = rc + "%d MB" % (self.partition.geom.length
+ * self.parent.getDisk().dev.sector_size
+ / 1024.0 / 1024.0,)
+ return rc
+
+ def getDeviceName(self):
+ return get_partition_name(self.partition)
+
+ def update(self):
+ disk = self.parent.getDisk()
+ totalSectors = float(disk.dev.heads
+ * disk.dev.sectors
+ * disk.dev.cylinders)
+ xoffset = self.partition.geom.start / totalSectors * CANVAS_WIDTH
+ xlength = self.partition.geom.length / totalSectors * CANVAS_WIDTH
+ if self.partition.type & parted.PARTITION_LOGICAL:
+ yoffset = 0.0 + LOGICAL_INSET
+ yheight = STRIPE_HEIGHT - (LOGICAL_INSET * 2)
+ texty = 0.0
+ else:
+ yoffset = 0.0
+ yheight = STRIPE_HEIGHT
+ texty = LOGICAL_INSET
+ self.group.set(x=xoffset, y=yoffset)
+ self.box.set(x1=0.0, y1=0.0, x2=xlength,
+ y2=yheight, fill_color=self.fillColor(),
+ outline_color='black', width_units=1.0)
+ self.text.set(x=2.0, y=texty + 2.0, text=self.sliceText(),
+ fill_color='black',
+ anchor=ANCHOR_NW, clip=TRUE,
+ clip_width=xlength-1, clip_height=yheight-1)
+ self.hideOrShowText()
+
+ def __init__(self, parent, partition):
+ self.text = None
+ self.partition = partition
+ self.parent = parent
+ pgroup = parent.getGroup()
+
+ self.group = pgroup.add("group")
+ self.box = self.group.add ("rect")
+ self.group.connect("event", self.eventHandler)
+ self.text = self.group.add ("text",
+ fontset="-*-helvetica-medium-r-*-*-8-*")
+ self.update()
+
+class DiskStripe:
+ def __init__(self, drive, disk, group, ctree, canvas):
+ self.disk = disk
+ self.group = group
+ self.tree = ctree
+ self.drive = drive
+ self.canvas = canvas
+ self.slices = []
+ self.hash = {}
+ self.selected = None
+ group.add ("rect", x1=0.0, y1=0.0, x2=CANVAS_WIDTH,
+ y2=STRIPE_HEIGHT, fill_color='white',
+ outline_color='grey71', width_units=1.0)
+ group.lower_to_bottom()
+
+ def shutDown(self):
+ while self.slices:
+ slice = self.slices.pop()
+ slice.shutDown()
+ if self.group:
+ self.group.destroy()
+ self.group = None
+ del self.disk
+
+ def holds(self, partition):
+ return self.hash.has_key (partition)
+
+ def getSlice(self, partition):
+ return self.hash[partition]
+
+ def getDisk(self):
+ return self.disk
+
+ def getDrive(self):
+ return self.drive
+
+ def getGroup (self):
+ return self.group
+
+ def getCanvas (self):
+ return self.canvas
+
+ def selectSlice(self, partition, updateTree=0):
+ self.deselect()
+ slice = self.hash[partition]
+ slice.select()
+
+ # update selection of the tree
+ if updateTree:
+ self.tree.unselect(self.tree.selection[0])
+ nodes = self.tree.base_nodes()
+ for node in nodes:
+ row = self.tree.find_by_row_data (node, partition)
+ self.tree.select(row)
+ break
+ self.selected = slice
+
+ def deselect(self):
+ if self.selected:
+ self.selected.deselect ()
+ self.selected = None
+
+ def add (self, partition):
+ stripe = DiskStripeSlice(self, partition)
+ self.slices.append(stripe)
+ self.hash[partition] = stripe
+
+class DiskStripeGraph:
+ def __init__(self, diskset, ctree):
+ self.canvas = GnomeCanvas()
+ self.diskStripes = []
+ self.ctree = ctree
+
+ def __del__(self):
+ self.shutDown()
+
+ def shutDown(self):
+ # remove any circular references so we can clean up
+ while self.diskStripes:
+ stripe = self.diskStripes.pop()
+ stripe.shutDown()
+
+ def getCanvas(self):
+ return self.canvas
+
+ def selectSlice(self, partition):
+ for stripe in self.diskStripes:
+ stripe.deselect()
+ if stripe.holds(partition):
+ stripe.selectSlice(partition)
+
+ def getSlice(self, partition):
+ for stripe in self.diskStripes:
+ if stripe.holds(partition):
+ return stripe.getSlice(partition)
+
+ def getDisk(self, partition):
+ for stripe in self.diskStripes:
+ if stripe.holds(partition):
+ return stripe.getDisk()
+
+ def add (self, drive, disk):
+ yoff = len(self.diskStripes) * (STRIPE_HEIGHT + 5)
+ group = self.canvas.root().add("group", x=0, y=yoff)
+ stripe = DiskStripe (drive, disk, group, self.ctree, self.canvas)
+ self.diskStripes.append(stripe)
+ return stripe
+
+
+# this should probably go into a class
+# some helper functions for build UI components
+def createAlignedLabel(text):
+ label = GtkLabel(text)
+ label.set_alignment(0.0, 0.0)
+
+ return label
+
+def createMountPointCombo(request):
+ mountCombo = GtkCombo()
+ mountCombo.set_popdown_strings (defaultMountPoints)
+
+ mountpoint = request.mountpoint
+
+ if request.fstype.isMountable():
+ mountCombo.set_sensitive(1)
+ if mountpoint:
+ mountCombo.entry.set_text(mountpoint)
+ else:
+ mountCombo.entry.set_text("")
+ else:
+ mountCombo.entry.set_text(_("<Not Applicable>"))
+ mountCombo.set_sensitive(0)
+
+ mountCombo.set_data("saved_mntpt", None)
+
+ return mountCombo
+
+def fstypechangeCB(widget, mountCombo):
+ fstype = widget.get_data("type")
+ mountpoint = mountCombo.get_data("saved_mntpt")
+ if fstype.isMountable():
+ mountCombo.set_sensitive(1)
+ if mountpoint:
+ mountCombo.entry.set_text(mountpoint)
+ else:
+ mountCombo.entry.set_text("")
+ else:
+ if mountCombo.entry.get_text() != _("<Not Applicable>"):
+ mountCombo.set_data("saved_mntpt", mountCombo.entry.get_text())
+ mountCombo.entry.set_text(_("<Not Applicable>"))
+ mountCombo.set_sensitive(0)
+
+def createAllowedDrivesClist(drives, reqdrives):
+ driveclist = GtkCList()
+ driveclist.set_selection_mode (SELECTION_MULTIPLE)
+
+ driverow = 0
+ for drive in drives:
+ driveclist.append((drive,))
+
+ if reqdrives:
+ if drive in reqdrives:
+ driveclist.select_row(driverow, 0)
+ else:
+ driveclist.select_row(driverow, 0)
+ driverow = driverow + 1
+
+ return driveclist
+
+def createAllowedRaidPartitionsClist(allraidparts, reqraidpart):
+ partclist = GtkCList()
+ partclist.set_selection_mode (SELECTION_MULTIPLE)
+
+ partrow = 0
+ for part in allraidparts:
+ partname = get_partition_name(part)
+ partclist.append((partname,))
+
+ if reqraidpart:
+ if partname in reqraidpart:
+ partclist.select_row(partrow, 0)
+ else:
+ partclist.select_row(partrow, 0)
+ partrow = partrow + 1
+
+ return partclist
+
+def createRaidLevelMenu(levels, reqlevel):
+ leveloption = GtkOptionMenu()
+ leveloptionmenu = GtkMenu()
+ defindex = None
+ i = 0
+ for lev in levels:
+ item = GtkMenuItem(lev)
+ item.set_data ("level", lev)
+ leveloptionmenu.add(item)
+ if reqlevel and lev == reqlevel:
+ defindex = i
+ i = i + 1
+
+ leveloption.set_menu (leveloptionmenu)
+
+ if defindex:
+ leveloption.set_history(defindex)
+
+ return (leveloption, leveloptionmenu)
+
+# pass in callback for when fs changes because of python scope issues
+def createFSTypeMenu(fstype, fstypechangeCB, mountCombo):
+ fstypeoption = GtkOptionMenu ()
+ fstypeoptionMenu = GtkMenu ()
+ types = fileSystemTypeGetTypes()
+ names = types.keys()
+ names.sort()
+ defindex = None
+ i = 0
+ for name in names:
+ if fileSystemTypeGet(name).isFormattable():
+ item = GtkMenuItem(name)
+ item.set_data ("type", types[name])
+ fstypeoptionMenu.add(item)
+ if fstype and fstype.getName() == name:
+ defindex = i
+ if fstypechangeCB and mountCombo:
+ item.connect("activate", fstypechangeCB, mountCombo)
+ i = i + 1
+
+ fstypeoption.set_menu (fstypeoptionMenu)
+
+ if defindex:
+ fstypeoption.set_history(defindex)
+
+ return (fstypeoption, fstypeoptionMenu)
+
+
+
+class PartitionWindow(InstallWindow):
+ def __init__(self, ics):
+ InstallWindow.__init__(self, ics)
+ ics.setTitle (_("Disk Setup"))
+ ics.setNextEnabled (FALSE)
+ self.parent = ics.getICW().window
+
+ def getNext(self):
+ self.diskStripeGraph.shutDown()
+ self.clearTree()
+ for request in self.partitions.requests:
+ # XXX improve sanity checking
+ if not request.fstype or (request.fstype.isMountable() and not request.mountpoint):
+ continue
+ entry = request.toEntry()
+ self.fsset.add (entry)
+
+ print self.fsset.fstab()
+ print self.fsset.raidtab()
+ del self.parent
+ return None
+
+ def checkNextConditions(self):
+ request = self.partitions.getRequestByMountPoint("/")
+ if request:
+ self.ics.setNextEnabled(TRUE)
+ else:
+ self.ics.setNextEnabled(FALSE)
+
+ def populate (self, initial = 0):
+ drives = self.diskset.disks.keys()
+ drives.sort()
+
+ for drive in drives:
+ text = [""] * self.numCols
+ text[self.titleSlot["Device"]] = '/dev/' + drive
+ disk = self.diskset.disks[drive]
+ sectorsPerCyl = disk.dev.heads * disk.dev.sectors
+
+ # add a disk stripe to the graph
+ stripe = self.diskStripeGraph.add (drive, disk)
+
+ # add a parent node to the tree
+ parent = self.tree.insert_node (None, None, text,
+ is_leaf = FALSE, expanded = TRUE,
+ spacing = TREE_SPACING)
+ extendedParent = None
+ part = disk.next_partition ()
+ while part:
+ if part.type & parted.PARTITION_METADATA:
+ part = disk.next_partition (part)
+ continue
+ stripe.add (part)
+
+ text = [""] * self.numCols
+ device = get_partition_name(part)
+
+ request = self.partitions.getRequestByDeviceName(device)
+ if request and request.mountpoint:
+ text[self.titleSlot["Mount Point"]] = request.mountpoint
+
+ if part.type & parted.PARTITION_FREESPACE:
+ ptype = _("Free space")
+ elif part.type == parted.PARTITION_EXTENDED:
+ ptype = _("Extended")
+ elif part.get_flag(parted.PARTITION_RAID) == 1:
+ ptype = _("software RAID component")
+ elif part.fs_type:
+ ptype = part.fs_type.name
+ else:
+ ptype = _("None")
+ if part.type & parted.PARTITION_FREESPACE:
+ text[self.titleSlot["Device"]] = _("Free")
+ else:
+ text[self.titleSlot["Device"]] = '/dev/' + device
+ text[self.titleSlot["Type"]] = ptype
+ text[self.titleSlot["Start"]] = "%d" % \
+ (start_sector_to_cyl(disk.dev, part.geom.start),)
+ text[self.titleSlot["End"]] = "%d" % \
+ (end_sector_to_cyl(disk.dev, part.geom.end),)
+ text[self.titleSlot["Size (MB)"]] = \
+ "%g" % (part.geom.length
+ * disk.dev.sector_size
+ / 1024.0 / 1024.0)
+ if part.type == parted.PARTITION_EXTENDED:
+ if extendedParent:
+ raise RuntimeError, ("can't handle more than "
+ "one extended partition per disk")
+ extendedParent = \
+ self.tree.insert_node (parent,
+ None, text,
+ is_leaf=FALSE,
+ expanded=TRUE,
+ spacing=TREE_SPACING)
+ node = extendedParent
+
+ elif part.type & parted.PARTITION_LOGICAL:
+ if not extendedParent:
+ raise RuntimeError, ("crossed logical partition "
+ "before extended")
+ node = self.tree.insert_node (extendedParent, None, text,
+ spacing = TREE_SPACING)
+ else:
+ node = self.tree.insert_node (parent, None, text,
+ spacing = TREE_SPACING)
+
+ self.tree.node_set_row_data (node, part)
+
+ part = disk.next_partition (part)
+
+ canvas = self.diskStripeGraph.getCanvas()
+ apply(canvas.set_scroll_region, canvas.root().get_bounds())
+ self.tree.columns_autosize()
+
+ def treeSelectCb(self, tree, node, column):
+ partition = tree.node_get_row_data (node)
+ if partition:
+ self.diskStripeGraph.selectSlice(partition)
+
+
+ def newCB(self, widget):
+ # create new request of size 1M
+ request = PartitionSpec(fileSystemTypeGetDefault(), REQUEST_NEW, 1)
+
+ self.editPartitionRequest(request)
+
+ # edit a partition request
+ def editPartitionRequest(self, origrequest):
+
+ def sizespinchangedCB(widget, fillmaxszsb):
+ size = widget.get_value_as_int()
+ maxsize = fillmaxszsb.get_value_as_int()
+ if size > maxsize:
+ fillmaxszsb.set_value(size)
+
+ # ugly got to be better way
+ adj = fillmaxszsb.get_adjustment()
+ adj.set_all(adj.value, size, adj.upper,
+ adj.step_increment, adj.page_increment,
+ adj.page_size)
+ fillmaxszsb.set_adjustment(adj)
+
+ def fillmaxszCB(widget, spin):
+ spin.set_sensitive(widget.get_active())
+
+ # pass in CB defined above because of two scope limitation of python!
+ def createSizeOptionsFrame(request, fillmaxszCB):
+ frame = GtkFrame (_("Additional Size Options"))
+ sizeoptiontable = GtkTable()
+ sizeoptiontable.set_row_spacings(5)
+ sizeoptiontable.set_border_width(4)
+
+ fixedrb = GtkRadioButton(label=_("Fixed size"))
+ fillmaxszrb = GtkRadioButton(group=fixedrb, label=_("Fill all space up to (MB):"))
+ maxsizeAdj = GtkAdjustment (value = 1, lower = 1,
+ upper = MAX_PART_SIZE, step_incr = 1)
+ fillmaxszsb = GtkSpinButton(maxsizeAdj, digits = 0)
+ fillmaxszhbox = GtkHBox()
+ fillmaxszhbox.pack_start(fillmaxszrb)
+ fillmaxszhbox.pack_start(fillmaxszsb)
+ fillunlimrb = GtkRadioButton(group=fixedrb,
+ label=_("Fill to maximum allowable size"))
+
+ fillmaxszrb.connect("toggled", fillmaxszCB, fillmaxszsb)
+
+ # default to fixed, turn off max size spinbutton
+ fillmaxszsb.set_sensitive(0)
+ if request.grow:
+ if request.maxSize != None:
+ fillmaxszrb.set_active(1)
+ fillmaxszsb.set_sensitive(1)
+ fillmaxszsb.set_value(request.maxSize)
+ else:
+ fillunlimrb.set_active(1)
+ else:
+ fixedrb.set_active(1)
+
+ sizeoptiontable.attach(fixedrb, 0, 1, 0, 1)
+ sizeoptiontable.attach(fillmaxszhbox, 0, 1, 1, 2)
+ sizeoptiontable.attach(fillunlimrb, 0, 1, 2, 3)
+
+ frame.add(sizeoptiontable)
+
+ return (frame, fixedrb, fillmaxszrb, fillmaxszsb)
+
+ #
+ # start of editPartitionRequest
+ #
+ dialog = GnomeDialog(_("Add Partition"))
+ dialog.set_parent(self.parent)
+ dialog.append_button (_("OK"))
+ dialog.append_button (_("Cancel"))
+ dialog.set_position(WIN_POS_CENTER)
+ dialog.close_hides(TRUE)
+
+ maintable = GtkTable()
+ maintable.set_row_spacings (5)
+ maintable.set_col_spacings (5)
+ row = 0
+
+ # see if we are creating a floating request or by cylinder
+ if origrequest.type == REQUEST_NEW:
+ newbycyl = origrequest.start != None
+
+ # Mount Point entry
+ maintable.attach(createAlignedLabel(_("Mount Point:")),
+ 0, 1, row, row + 1)
+ mountCombo = createMountPointCombo(origrequest)
+ maintable.attach(mountCombo, 1, 2, row, row + 1)
+ row = row + 1
+
+ # Partition Type
+ maintable.attach(createAlignedLabel(_("Filesystem type:")),
+ 0, 1, row, row + 1)
+
+ if origrequest.type == REQUEST_NEW:
+ (fstypeoption, fstypeoptionMenu) = createFSTypeMenu(origrequest.fstype, fstypechangeCB, mountCombo)
+ maintable.attach(fstypeoption, 1, 2, row, row + 1)
+ else:
+ fstypelabel = GtkLabel(origrequest.fstype.getName())
+ maintable.attach(fstypelabel, 1, 2, row, row + 1)
+ fstypeoption = None
+ fstypeoptionMenu = None
+
+ row = row + 1
+
+ # allowable drives
+ if origrequest.type == REQUEST_NEW:
+ maintable.attach(createAlignedLabel(_("Allowable Drives:")),
+ 0, 1, row, row + 1)
+
+ driveclist = createAllowedDrivesClist(self.diskset.disks.keys(),
+ origrequest.drive)
+
+ maintable.attach(driveclist, 1, 2, row, row + 1)
+ row = row + 1
+
+ # Size specification
+ maintable.attach(createAlignedLabel(_("Size (MB):")),
+ 0, 1, row, row + 1)
+ if origrequest.type == REQUEST_NEW:
+ if not newbycyl:
+ sizeAdj = GtkAdjustment (value = 1, lower = 1,
+ upper = MAX_PART_SIZE, step_incr = 1)
+ sizespin = GtkSpinButton(sizeAdj, digits = 0)
+
+ if origrequest.size:
+ sizespin.set_value(origrequest.size)
+
+ else:
+ # XXX put part by cyl code here
+ pass
+
+ maintable.attach(sizespin, 1, 2, row, row + 1)
+ else:
+ sizelabel = GtkLabel("%d" % (origrequest.size))
+ maintable.attach(sizelabel, 1, 2, row, row + 1)
+ sizespin = None
+
+ row = row + 1
+
+ if origrequest.type == REQUEST_PREEXIST:
+ if origrequest.fstype and origrequest.fstype.isFormattable():
+ formatButton = GtkCheckButton (_("Format partition?"))
+ formatButton.set_active(0)
+ maintable.attach(formatButton, 0, 2, row, row + 1)
+ row = row + 1
+ else:
+ formatButton = None
+
+ # size options
+ if origrequest.type == REQUEST_NEW:
+ if not newbycyl:
+ (sizeframe, fixedrb, fillmaxszrb, fillmaxszsb) = createSizeOptionsFrame(origrequest, fillmaxszCB)
+ sizespin.connect("changed", sizespinchangedCB, fillmaxszsb)
+
+ maintable.attach(sizeframe, 0, 2, row, row + 1)
+ else:
+ # XXX need new by cyl options (if any)
+ pass
+ row = row + 1
+ else:
+ sizeoptiontable = None
+
+ # create only as primary
+ if origrequest.type == REQUEST_NEW and not newbycyl:
+ primonlycheckbutton = GtkCheckButton(_("Force to be a primary partition"))
+ maintable.attach(primonlycheckbutton, 0, 2, row, row+1)
+ row = row + 1
+
+ # put main table into dialog
+ dialog.vbox.pack_start(maintable)
+
+ dialog.show_all()
+
+ while 1:
+ rc = dialog.run()
+
+ # user hit cancel, do nothing
+ if rc == 1:
+ dialog.close()
+ return
+
+ if origrequest.type == REQUEST_NEW:
+ # read out UI into a partition specification
+ filesystem = fstypeoptionMenu.get_active().get_data("type")
+
+ print filesystem.getName()
+
+ if not newbycyl:
+ if fixedrb.get_active():
+ grow = None
+ else:
+ grow = TRUE
+
+ if fillmaxszrb.get_active():
+ maxsize = fillmaxszsb.get_value_as_int()
+ else:
+ maxsize = None
+
+ if len(driveclist.selection) == len(self.diskset.disks.keys()):
+ allowdrives = None
+ else:
+ allowdrives = []
+ for i in driveclist.selection:
+ allowdrives.append(self.diskset.disks.keys()[i])
+
+ if primonlycheckbutton.get_active():
+ primonly = TRUE
+ else:
+ primonly = None
+ request = copy.copy(origrequest)
+ request.fstype = filesystem
+ request.size = sizespin.get_value_as_int()
+ if request.fstype.isMountable():
+ request.mountpoint = mountCombo.entry.get_text()
+ else:
+ request.mountpoint = None
+ request.drive = allowdrives
+ request.format = TRUE
+ request.grow = grow
+ request.primary = primonly
+ request.maxSize = maxsize
+ else:
+ # put code for partitioning by cyl here
+ pass
+
+ print "new requests:"
+ print request
+
+ err = sanityCheck(self.partitions, request)
+ if err:
+ self.intf.messageWindow(_("Error With Request"),
+ "%s" % (err))
+ continue
+
+ else:
+ # preexisting partition, just set mount point and format flag
+ request = copy.copy(origrequest)
+ if origrequest.fstype.isMountable():
+ request.mountpoint = mountCombo.entry.get_text()
+
+ # filesystem = fstypeoptionMenu.get_active().get_data("type")
+ # origrequest.fstype = filesystem
+
+ if formatButton:
+ request.format = formatButton.get_active()
+ else:
+ request.format = 0
+
+ err = sanityCheck(self.partitions, request)
+ if err:
+ self.intf.messageWindow(_("Error With Request"),
+ "%s" % (err))
+ continue
+
+ # backup current (known working) configuration
+ backpart = self.partitions.copy()
+ if origrequest.device or origrequest.type != REQUEST_NEW:
+ self.partitions.removeRequest(origrequest)
+
+ self.partitions.addRequest(request)
+ if self.refresh():
+ print "request failed, backing out and trying again"
+ self.partitions = backpart
+ self.refresh()
+ else:
+ print "request suceeded"
+ break
+
+ dialog.close()
+
+ def deleteCb(self, widget):
+ node = self.tree.selection[0]
+ partition = self.tree.node_get_row_data (node)
+ if partition == None:
+ dialog = GnomeWarningDialog(_("You must first select a partition"),
+ parent=self.parent)
+ dialog.set_position(WIN_POS_CENTER)
+ dialog.run()
+ elif partition.type & parted.PARTITION_FREESPACE:
+ dialog = GnomeWarningDialog(_("You cannot remove free space."),
+ parent=self.parent)
+ dialog.set_position(WIN_POS_CENTER)
+ dialog.run()
+ else:
+ # see if device is in our partition requests, remove
+ request = self.partitions.getRequestByDeviceName(get_partition_name(partition))
+
+ if request:
+ self.partitions.removeRequest(request)
+ if request.type == REQUEST_PREEXIST:
+ # get the drive
+ drive = partition.geom.disk.dev.path[5:]
+ delete = DeleteSpec(drive, partition.geom.start, partition.geom.end)
+ self.partitions.addDelete(delete)
+ else: # shouldn't happen
+ raise ValueError, "Deleting a non-existenent partition"
+
+ # cheating
+ self.refresh()
+
+ def clearTree(self):
+ node = self.tree.node_nth(0)
+ while node:
+ self.tree.remove_node(node)
+ node = self.tree.node_nth(0)
+ self.tree.set_selection_mode (SELECTION_SINGLE)
+ self.tree.set_selection_mode (SELECTION_BROWSE)
+
+ def resetCb(self, *args):
+ self.diskStripeGraph.shutDown()
+ self.newFsset = self.fsset.copy()
+ self.tree.freeze()
+ self.clearTree()
+ self.diskset.refreshDevices()
+ self.partitions.setFromDisk(self.diskset)
+ self.populate()
+ self.tree.thaw()
+
+ def refresh(self):
+ self.diskStripeGraph.shutDown()
+ self.tree.freeze()
+ self.clearTree()
+ try:
+ doPartitioning(self.diskset, self.partitions)
+ rc = 0
+ except PartitioningError, msg:
+ self.intf.messageWindow(_("Error Partitioning"), _("Could not allocated requested partitions: %s.") % (msg))
+ rc = -1
+ self.populate()
+ self.tree.thaw()
+ self.checkNextConditions()
+
+ return rc
+
+ def editCb(self, widget):
+ node = self.tree.selection[0]
+ partition = self.tree.node_get_row_data (node)
+ if partition == None:
+ dialog = GnomeWarningDialog(_("You must first select an existing "
+ "partition to edit."),
+ parent=self.parent)
+ dialog.set_position(WIN_POS_CENTER)
+ dialog.run()
+ return
+ elif partition.type & parted.PARTITION_FREESPACE:
+ dialog = GnomeWarningDialog (_("You may only add partitions to "
+ "free spaces. You can only add "
+ "new partitions within them."),
+ parent=self.parent)
+ dialog.set_position(WIN_POS_CENTER)
+ dialog.run()
+ return
+ elif partition.type & parted.PARTITION_EXTENDED:
+ return
+
+ request = self.partitions.getRequestByDeviceName(get_partition_name(partition))
+ print request
+
+ self.editPartitionRequest(request)
+
+ def editRaidDevice(self, raidrequest):
+ #
+ # start of editPartitionRequest
+ #
+ dialog = GnomeDialog(_("Make Raid Device"))
+ dialog.set_parent(self.parent)
+ dialog.append_button (_("OK"))
+ dialog.append_button (_("Cancel"))
+ dialog.set_position(WIN_POS_CENTER)
+ dialog.close_hides(TRUE)
+
+ maintable = GtkTable()
+ maintable.set_row_spacings (5)
+ maintable.set_col_spacings (5)
+ row = 0
+
+ # Mount Point entry
+ maintable.attach(createAlignedLabel(_("Mount Point:")),
+ 0, 1, row, row + 1)
+ mountCombo = createMountPointCombo(raidrequest)
+ maintable.attach(mountCombo, 1, 2, row, row + 1)
+ row = row + 1
+
+ # Filesystem Type
+ maintable.attach(createAlignedLabel(_("Filesystem type:")),
+ 0, 1, row, row + 1)
+
+ (fstypeoption, fstypeoptionMenu) = createFSTypeMenu(raidrequest.fstype,
+ fstypechangeCB,
+ mountCombo)
+ maintable.attach(fstypeoption, 1, 2, row, row + 1)
+
+ row = row + 1
+
+ # raid level
+ maintable.attach(createAlignedLabel(_("RAID Level:")),
+ 0, 1, row, row + 1)
+ (leveloption, leveloptionmenu) = createRaidLevelMenu(availRaidLevels, raidrequest.raidlevel)
+ maintable.attach(leveloption, 1, 2, row, row + 1)
+
+ row = row + 1
+
+ # raid members
+ maintable.attach(createAlignedLabel(_("Raid Members:")),
+ 0, 1, row, row + 1)
+
+ availraidparts = []
+ for drive in self.diskset.disks.keys():
+ availraidparts.extend(get_raid_partitions(self.diskset.disks[drive]))
+
+ # XXX need to pass in currently used partitions for this device
+ raidclist = createAllowedRaidPartitionsClist(availraidparts,
+ raidrequest.raidmembers)
+ maintable.attach(raidclist, 1, 2, row, row + 1)
+ row = row + 1
+
+ # number of spares
+ maintable.attach(createAlignedLabel(_("Number of spares?:")),
+ 0, 1, row, row + 1)
+ spareAdj = GtkAdjustment (value = 0, lower = 0,
+ upper = len(availraidparts), step_incr = 1)
+ sparesb = GtkSpinButton(spareAdj, digits = 0)
+ maintable.attach(sparesb, 1, 2, row, row + 1)
+ row = row + 1
+
+ # format or not?
+ if raidrequest.fstype and raidrequest.fstype.isFormattable():
+ formatButton = GtkCheckButton (_("Format partition?"))
+ formatButton.set_active(0)
+ maintable.attach(formatButton, 0, 2, row, row + 1)
+ row = row + 1
+ else:
+ formatButton = None
+
+ # put main table into dialog
+ dialog.vbox.pack_start(maintable)
+
+ dialog.show_all()
+
+ while 1:
+ rc = dialog.run()
+
+ # user hit cancel, do nothing
+ if rc == 1:
+ dialog.close()
+ return
+
+ # read out UI into a partition specification
+ request = copy.copy(raidrequest)
+
+ filesystem = fstypeoptionMenu.get_active().get_data("type")
+ request.fstype = filesystem
+
+ if request.fstype.isMountable():
+ request.mountpoint = mountCombo.entry.get_text()
+ else:
+ request.mountpoint = None
+
+ raidmembers = []
+ for i in raidclist.selection:
+ raidmembers.append(PartedPartitionDevice(availraidparts[i]))
+
+ request.raidmembers = raidmembers
+ request.raidspares = sparesb.get_value_as_int()
+ request.raidlevel = leveloptionmenu.get_active().get_data("level")
+
+ if formatButton:
+ request.format = formatButton.get_active()
+ else:
+ request.format = 0
+
+ print request
+
+ err = sanityCheck(self.partitions, request)
+ if err:
+ self.intf.messageWindow(_("Error With Request"),
+ "%s" % (err))
+ continue
+
+ # backup current (known working) configuration
+ backpart = self.partitions.copy()
+
+ # XXX should only remove if we know we put it in before
+ try:
+ self.partitions.removeRequest(raidrequest)
+ except:
+ print "failed to remove request"
+ self.partitions.addRequest(request)
+
+ if self.refresh():
+ print "request failed, backing out and trying again"
+ self.partitions = backpart
+ self.refresh()
+ else:
+ print "request suceeded"
+ break
+
+ dialog.close()
+
+ def makeraidCB(self, widget):
+ request = PartitionSpec(fileSystemTypeGetDefault(), REQUEST_RAID, 1)
+ self.editRaidDevice(request)
+
+
+ def getScreen (self, fsset, diskset, partitions, intf):
+ self.fsset = fsset
+ self.diskset = diskset
+ self.intf = intf
+
+ self.diskset.openDevices()
+ self.partitions = partitions
+ # XXX PartitionRequests() should already exist and
+ # if upgrade or going back, have info filled in
+# self.newFsset = self.fsset.copy()
+
+ # operational buttons
+ buttonBox = GtkHButtonBox()
+ buttonBox.set_layout (BUTTONBOX_SPREAD)
+
+ ops = ((_("New"), self.newCB),
+ (_("Edit"), self.editCb),
+ (_("Delete"), self.deleteCb),
+ (_("Reset"), self.resetCb),
+ (_("Make Raid"), self.makeraidCB))
+ for label, cb in ops:
+ button = GtkButton (label)
+ buttonBox.add (button)
+ button.connect ("clicked", cb)
+
+ # set up the tree
+ titles = [N_("Device"), N_("Start"), N_("End"),
+ N_("Size (MB)"), N_("Type"), N_("Mount Point")]
+
+ # do two things: enumerate the location of each field and translate
+ self.titleSlot = {}
+ i = 0
+ for title in titles:
+ self.titleSlot[title] = i
+ titles[i] = _(title)
+ i = i + 1
+
+ self.numCols = len(titles)
+ self.tree = GtkCTree (self.numCols, 0, titles)
+ self.tree.set_selection_mode (SELECTION_BROWSE)
+ self.tree.connect ("tree_select_row", self.treeSelectCb)
+
+ # set up the canvas
+ self.diskStripeGraph = DiskStripeGraph(diskset, self.tree)
+
+ # do the initial population of the tree and the graph
+ self.populate (initial = 1)
+ self.checkNextConditions()
+
+ box = GtkVBox(FALSE, 5)
+ sw = GtkScrolledWindow()
+ sw.add (self.diskStripeGraph.getCanvas())
+ sw.set_policy (POLICY_NEVER, POLICY_AUTOMATIC)
+ box.pack_start (sw, TRUE)
+ box.pack_start (buttonBox, FALSE)
+ sw = GtkScrolledWindow()
+ sw.add (self.tree)
+ sw.set_policy (POLICY_NEVER, POLICY_AUTOMATIC)
+ box.pack_start (sw, TRUE)
+
+ return box
diff --git a/iw/partmethod_gui.py b/iw/partmethod_gui.py
new file mode 100644
index 000000000..4c3a753d4
--- /dev/null
+++ b/iw/partmethod_gui.py
@@ -0,0 +1,54 @@
+#
+# partmethod_gui.py: allows the user to choose how to partition their disks
+#
+# Matt Wilson <msw@redhat.com>
+#
+# 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.
+#
+
+from iw_gui import *
+from gtk import *
+from translate import _
+
+class PartitionMethodWindow(InstallWindow):
+ def __init__(self, ics):
+ InstallWindow.__init__(self, ics)
+ ics.setTitle (_("Automatic Partitioning"))
+
+ def getNext(self):
+ if self.useFdisk.get_active():
+ self.dispatch.skipStep("fdisk", skip = 0)
+ else:
+ self.dispatch.skipStep("fdisk")
+ return None
+
+ def getScreen (self, dispatch):
+ self.dispatch = dispatch
+
+ box = GtkVBox (FALSE)
+ box.set_border_width (5)
+
+ radioBox = GtkVBox (FALSE)
+
+ self.useFdisk = GtkRadioButton(
+ None, _("Manually partition with fdisk [experts only]"))
+ radioBox.pack_start(self.useFdisk, FALSE)
+ self.useFdisk.set_active (not dispatch.stepInSkipList("fdisk"))
+
+ align = GtkAlignment()
+ align.add(radioBox)
+ align.set(0.5, 0.5, 0.0, 0.0)
+
+ box.pack_start(align, TRUE, TRUE)
+ box.set_border_width (5)
+
+ self.ics.setNextEnabled (TRUE)
+
+ return box
diff --git a/iw/progress_gui.py b/iw/progress_gui.py
index cebcf048d..5dfbeb1c0 100644
--- a/iw/progress_gui.py
+++ b/iw/progress_gui.py
@@ -3,69 +3,35 @@ from iw_gui import *
import string
import rpm
import os
+import gui
from threading import *
-from translate import _
+from translate import _, N_
import sys
+from packages import doInstall
+import dispatch
-class DoInstall (Thread):
- def __init__ (self, icw, todo):
- self.todo = todo
- self.icw = icw
- Thread.__init__ (self)
-
- def run (self):
- from exception import handleException
- try:
- rc = self.todo.doInstall ()
- except SystemError, code:
- import os, signal
-
- print "shutting down"
- self.todo.intf.shutdown()
- print "shut down"
- os.kill(os.getpid(), signal.SIGTERM)
-
- except SystemExit, code:
- import os, signal
-
- print "shutting down"
- self.todo.intf.shutdown()
- print "shut down"
- os.kill(os.getpid(), signal.SIGTERM)
-
- except:
- import traceback
- list = apply(traceback.format_exception, sys.exc_info())
- text = string.joinfields (list, "")
- print text
- threads_enter ()
- handleException(self.todo, sys.exc_info())
- threads_enter ()
- if rc:
- self.icw.prevClicked ()
- else:
- self.icw.nextClicked ()
- threads_leave ()
-
class InstallProgressWindow (InstallWindow):
+ windowTitle = N_("Installing Packages")
+ htmlTag = "installing"
+
def __init__ (self, ics):
InstallWindow.__init__ (self, ics)
- ics.setTitle (_("Installing Packages"))
- ics.readHTML ("installing")
ics.setPrevEnabled (FALSE)
+ ics.setNextEnabled (FALSE)
+
ics.setHelpButtonEnabled (FALSE)
- self.todo = ics.getToDo ()
self.numComplete = 0
self.sizeComplete = 0
+
+ def processEvents(self):
+ gui.processEvents()
def setPackageScale (self, amount, total):
- threads_enter ()
self.progress.update (float (amount) / total)
# self.totalProgress.update (float (self.sizeComplete + amount) / self.totalSize)
- threads_leave ()
def completePackage(self, header, timer):
def formatTime(amt):
@@ -77,7 +43,6 @@ class InstallProgressWindow (InstallWindow):
return "%01d:%02d:%02d" % (int(hours) ,int(min), int(secs))
- threads_enter ()
self.numComplete = self.numComplete + 1
apply (self.clist.set_text, self.status["completed"]["packages"] + ("%d" % self.numComplete,))
@@ -112,12 +77,10 @@ class InstallProgressWindow (InstallWindow):
apply (self.clist.set_text, self.status["remaining"]["time"] + ("%s" % formatTime(remainingTime),))
self.totalProgress.update (float (self.sizeComplete) / self.totalSize)
- threads_leave ()
return
def setPackage(self, header):
- threads_enter ()
if len(self.pixmaps):
pkgsPerImage = self.numTotal / len(self.pixmaps)
if pkgsPerImage < 1:
@@ -147,10 +110,8 @@ class InstallProgressWindow (InstallWindow):
if (summary == None):
summary = "(none)"
self.curPackage["summary"].set_text (summary)
- threads_leave ()
def setSizes (self, total, totalSize):
- threads_enter ()
self.numTotal = total
self.totalSize = totalSize
self.timeStarted = -1
@@ -158,7 +119,9 @@ class InstallProgressWindow (InstallWindow):
apply (self.clist.set_text, self.status["total"]["packages"] + (("%d" % total),))
apply (self.clist.set_text, self.status["total"]["size"] +
(("%d M" % (totalSize/1024)),))
- threads_leave ()
+
+ def renderCallback(self):
+ self.intf.icw.nextClicked()
def allocate (self, widget, *args):
if self.frobnicatingClist: return
@@ -169,11 +132,19 @@ class InstallProgressWindow (InstallWindow):
widget.set_column_width (x, width / 4)
# InstallProgressWindow tag="installing"
- def getScreen (self):
+ def getScreen (self, dir, intf, id):
import glob
+ self.intf = intf
+
+ if dir == dispatch.DISPATCH_BACK:
+ intf.icw.prevClicked()
+
+ return
+
files = []
+ # XXX this ought to search the lang path like everything else
if (os.environ.has_key('LANG')):
try:
shortlang = string.split(os.environ['LANG'], '_')[0]
@@ -193,7 +164,7 @@ class InstallProgressWindow (InstallWindow):
files = ["progress_first.png"]
#--Need to merge with if statement above...don't show ads in lowres
- if self.todo.intf.runres != '800x600':
+ if intf.runres != '800x600':
files = ["progress_first.png"]
pixmaps = []
@@ -306,15 +277,9 @@ class InstallProgressWindow (InstallWindow):
frame.add (box)
vbox.pack_start (frame);
- self.ics.getInstallInterface ().setPackageProgressWindow (self)
- ii = self.ics.getInstallInterface ()
- icw = ii.icw
- worker = DoInstall (icw, self.todo)
- worker.start ()
+ intf.setPackageProgressWindow (self)
+ id.setInstallProgressClass(self)
vbox.set_border_width (5)
- return vbox
-
-
-
+ return vbox
diff --git a/iw/rootpartition_gui.py b/iw/rootpartition_gui.py
index e866c7959..294c5b549 100644
--- a/iw/rootpartition_gui.py
+++ b/iw/rootpartition_gui.py
@@ -47,7 +47,6 @@ class PartitionWindow (InstallWindow):
isys.EARLY_SWAP_RAM):
return 1
- threads_leave ()
message = gui.MessageWindow(_("Low Memory"),
_("As you don't have much memory in this machine, we "
"need to turn on swap space immediately. To do this "
@@ -55,7 +54,6 @@ class PartitionWindow (InstallWindow):
"disk immediately. Is that okay?"), "okcancel")
if (message.getrc () == 1):
- threads_enter ()
return 0
self.todo.fstab.savePartitions()
@@ -63,8 +61,6 @@ class PartitionWindow (InstallWindow):
self.todo.ddruidAlreadySaved = 1
PartitionWindow.swapon = 1
- threads_enter ()
-
return 1
@@ -126,9 +122,7 @@ class PartitionWindow (InstallWindow):
bootPartition = None
rootPartition = None
- threads_leave()
rc = self.lba32Check ()
- threads_enter()
if rc:
raise gui.StayOnScreen
diff --git a/iw/timezone_gui.py b/iw/timezone_gui.py
index 7a5ed1ce6..07749944b 100644
--- a/iw/timezone_gui.py
+++ b/iw/timezone_gui.py
@@ -76,14 +76,14 @@ class TimezoneWindow (InstallWindow):
newzone = self.tz.getzone (self.list.get_text (self.list.selection[0], 0))
except:
pass
- self.todo.setTimezoneInfo (newzone, self.systemUTC.get_active ())
+ self.timezone.setTimezoneInfo (newzone, self.systemUTC.get_active ())
else:
timezone = self.timeZones[self.ulist.selection[0]][1]
if self.daylightCB.get_active ():
timezone = timezone[1]
else:
timezone = timezone[0]
- self.todo.setTimezoneInfo (timezone, self.systemUTC.get_active ())
+ self.timezone.setTimezoneInfo (timezone, self.systemUTC.get_active ())
return None
@@ -108,7 +108,9 @@ class TimezoneWindow (InstallWindow):
widget.disconnect (self.id)
# TimezoneWindow tag="timezone"
- def getScreen (self):
+ def getScreen (self, instLang, timezone):
+ self.timezone = timezone
+
try:
f = open ("/usr/share/anaconda/pixmaps/map480.png")
f.close ()
@@ -128,12 +130,12 @@ class TimezoneWindow (InstallWindow):
swList = List (tz.citylist)
self.list = swList.children ()[0]
- rc = self.todo.getTimezoneInfo()
- if rc:
- (self.default, asUTC, asArc) = rc
+ (self.default, asUTC, asArc) = rc = self.timezone.getTimezoneInfo()
+
+ if self.default:
self.default = _(self.default)
else:
- self.default = _(self.todo.instTimeLanguage.getDefaultTimeZone())
+ self.default = _(instLang.getDefaultTimeZone())
asUTC = 0
if (string.find (self.default, "UTC") != -1):
diff --git a/iw/upgrade_swap_gui.py b/iw/upgrade_swap_gui.py
index e61fe32f2..7f7361037 100644
--- a/iw/upgrade_swap_gui.py
+++ b/iw/upgrade_swap_gui.py
@@ -1,6 +1,6 @@
from gtk import *
from iw_gui import *
-from translate import _
+from translate import _, N_
import string
import isys
import iutil
@@ -12,13 +12,8 @@ import gui
class UpgradeSwapWindow (InstallWindow):
- def __init__ (self, ics):
- InstallWindow.__init__ (self, ics)
-
- ics.setTitle (_("Upgrade Swap Partition"))
- ics.setNextEnabled (1)
- ics.readHTML ("upswapfile")
-
+ windowTitle = N_("Upgrade Swap Partition")
+ htmlTag = "upswapfile"
def getPrev (self):
# we're doing an upgrade, offer choice of aborting upgrade.
@@ -45,38 +40,28 @@ class UpgradeSwapWindow (InstallWindow):
val = int(val)
if self.option2.get_active():
- threads_leave()
rc = self.warning()
- threads_enter()
if rc == 1:
raise gui.StayOnScreen
else:
# proceed because they decided not to have swapfile created
- threads_leave()
self.todo.upgradeFindPackages()
- threads_enter()
return None
elif val > 2000 or val < 1:
- threads_leave()
rc = self.swapWrongSize()
- threads_enter()
raise gui.StayOnScreen
elif (val+16) > size:
- threads_leave()
rc = self.swapTooBig()
- threads_enter()
raise gui.StayOnScreen
else:
- threads_leave()
if self.todo.setupFilesystems:
upgrade.createSwapFile(self.todo.instPath, self.todo.fstab,
mnt, val)
self.todo.upgradeFindPackages()
- threads_enter()
return None
def toggle (self, data):
@@ -89,9 +74,7 @@ class UpgradeSwapWindow (InstallWindow):
self.neededSwap = 0
rc = upgrade.swapSuggestion(self.todo.instPath, self.todo.fstab)
if not rc:
- threads_leave()
self.todo.upgradeFindPackages ()
- threads_enter()
return None
self.neededSwap = 1
diff --git a/iw/welcome_gui.py b/iw/welcome_gui.py
index 6125fb399..f5c0c727f 100644
--- a/iw/welcome_gui.py
+++ b/iw/welcome_gui.py
@@ -1,17 +1,16 @@
from gtk import *
from gnome.ui import *
from iw_gui import *
-from translate import _
+from translate import _, N_
class WelcomeWindow (InstallWindow):
+ windowTitle = N_("Welcome")
+ htmlTag = "wel"
+
def __init__ (self, ics):
InstallWindow.__init__ (self, ics)
-
- ics.setTitle (_("Welcome"))
- ics.setNextEnabled (1)
- ics.readHTML ("wel")
- self.ics = ics
+ ics.setGrabNext (1)
# WelcomeWindow tag="wel"
def getScreen (self):
@@ -33,15 +32,13 @@ class WelcomeWindow (InstallWindow):
class ReconfigWelcomeWindow (InstallWindow):
+ windowTitle = N_("Welcome")
+ htmlTag = "welreconfig"
+
def __init__ (self, ics):
InstallWindow.__init__ (self, ics)
-
- ics.setTitle (_("Welcome"))
ics.setNextEnabled (1)
- ics.readHTML ("welreconfig")
- ics.setGrabNext (1)
self.beingDisplayed = 0
- self.ics = ics
def getNext (self):
if not self.beingDisplayed: return
diff --git a/iw/xconfig_gui.py b/iw/xconfig_gui.py
index 6a947ae2c..ddffbcbce 100644
--- a/iw/xconfig_gui.py
+++ b/iw/xconfig_gui.py
@@ -1,13 +1,16 @@
from gtk import *
from iw_gui import *
-from translate import _
+from translate import _, N_
+import copy
import string
import sys
import iutil
import xpms_gui
import glob
+from monitor import isValidSyncRange
+
"""
_("Video Card")
_("Monitor")
@@ -18,56 +21,45 @@ _("Test failed")
"""
class XCustomWindow (InstallWindow):
- def __init__ (self, ics):
- InstallWindow.__init__ (self, ics)
- self.todo = ics.getToDo ()
- ics.setTitle (_("Customize Graphics Configuration"))
- ics.readHTML ("xcustom")
+ htmlTag = "xcustom"
+ windowTitle = N_("Customize Graphics Configuration")
+
+ def __init__ (self, ics):
+ InstallWindow.__init__ (self, ics)
self.ics.setNextEnabled (TRUE)
- self.didTest = 0
- self.selectedDepth = ""
- self.selectedRes = ""
- self.newDesktop = ""
-
def getNext (self):
newmodes = {}
newmodes[self.selectedDepth] = []
newmodes[self.selectedDepth].append (self.selectedRes)
- self.todo.x.manualModes = newmodes
- self.todo.x.setModes (newmodes)
-
- self.todo.resState = self.selectedRes
- self.todo.depthState = self.selectedDepth
-
- self.todo.instClass.setDesktop (self.newDesktop)
+ self.xconfig.setManualModes(newmodes)
+
+ self.desktop.setDefaultDesktop (self.newDesktop)
if self.text.get_active ():
- self.todo.initlevel = 3
- self.todo.initState = 3
+ rl = 3
elif self.graphical.get_active ():
- self.todo.initlevel = 5
- self.todo.initState = 5
-
- def getPrev (self):
- self.todo.x.setModes(self.oldmodes)
+ rl = 5
+ self.desktop.setDefaultRunLevel(rl)
+
def testPressed (self, widget, *args):
newmodes = {}
newmodes[self.selectedDepth] = []
newmodes[self.selectedDepth].append (self.selectedRes)
- self.todo.x.modes = newmodes
+ manmodes = self.xconfig.getManualModes()
+ self.xconfig.setManualModes(newmodes)
try:
- self.todo.x.test ()
+ self.xconfig.test ()
except RuntimeError:
### test failed window
pass
- else:
- self.didTest = 1
+
+ self.xconfig.setManualModes(manmodes)
def numCompare (self, first, second):
first = string.atoi (first)
@@ -80,72 +72,69 @@ class XCustomWindow (InstallWindow):
def depth_cb (self, widget, data):
depth = self.depth_combo.list.child_position (data)
+ if self.selectedDepth == self.bit_depth[depth]:
+ return
self.selectedDepth = self.bit_depth[depth]
- store = self.currentRes
-
- if depth == 0:
- self.res_combo.set_popdown_strings (self.res_list1)
- if store >= len (self.res_list1):
- tmp = len (self.res_list1) - 1
- self.res_combo.list.select_item (tmp)
- else:
- self.res_combo.list.select_item (store)
-
- if depth == 1:
- self.res_combo.set_popdown_strings (self.res_list2)
- if store >= len (self.res_list2):
- tmp = len (self.res_list2) - 1
- self.res_combo.list.select_item (tmp)
- else:
- self.res_combo.list.select_item (store)
-
-
- if depth == 2:
- self.res_combo.set_popdown_strings (self.res_list3)
- if store >= len (self.res_list3):
- tmp = len (self.res_list3) - 1
- self.res_combo.list.select_item (tmp)
- else:
- self.res_combo.list.select_item (store)
-
+ curres = self.selectedRes
+ newmodes = self.xconfig.availableModes()[self.selectedDepth]
+ self.res_combo.set_popdown_strings(newmodes)
+ if curres in newmodes:
+ self.res_combo.list.select_item(newmodes.index(curres))
+
def res_cb (self, widget, data):
+ newres = self.res_combo.list.child_position (data)
+ if self.currentRes == newres:
+ return
+
self.currentRes = self.res_combo.list.child_position (data)
+ self.selectedRes = self.res_list[self.currentRes]
+ self.swap_monitor (self.currentRes)
- if self.selectedDepth == '8':
- self.selectedRes = self.res_list1[self.currentRes]
- if self.selectedDepth == '16':
- self.selectedRes = self.res_list2[self.currentRes]
- if self.selectedDepth == '32':
- self.selectedRes = self.res_list3[self.currentRes]
+ def load_monitor_preview_pixmap(self, file):
+ if self.monitor_align:
+ self.hbox.remove (self.monitor_align)
- self.swap_monitor (self.currentRes)
+ im = self.ics.readPixmap (file)
+ im.render ()
+ pix = im.make_pixmap ()
+ self.monitor_align = GtkAlignment ()
+ self.monitor_align.add (pix)
+ self.monitor_align.set (0.5, 0.5, 1.0, 1.0)
+ self.hbox.pack_start (self.monitor_align, TRUE, TRUE)
+ self.hbox.show_all()
def swap_monitor (self, num):
- self.hbox.remove (self.pix_align)
-
- im = self.ics.readPixmap (self.pixmaps[num])
- im.render ()
- self.pix = im.make_pixmap ()
+ def find_monitor_pixmaps():
+ files = []
+
+ pixmaps1 = glob.glob("/usr/share/anaconda/pixmaps/monitor_*")
+ pixmaps2 = glob.glob("pixmaps/monitor_*")
+ if len(pixmaps1) < len(pixmaps2):
+ files = pixmaps2
+ else:
+ files = pixmaps1
- self.pix_align = GtkAlignment ()
- self.pix_align.add (self.pix)
- self.pix_align.set (0.5, 0.5, 1.0, 1.0)
- self.hbox.pack_start (self.pix_align, TRUE, TRUE)
- self.hbox.show_all ()
-
+ pixmaps = []
+ for pixmap in files:
+ pixmaps.append(pixmap[string.find(pixmap, "monitor_"):])
+
+ pixmaps.sort()
+ return pixmaps
- def desktop_cb (self, widget, desktop):
- self.newDesktop = desktop
+ if self.monitor_pixmaps == None:
+ self.monitor_pixmaps = find_monitor_pixmaps()
- if desktop == "GNOME":
- im = self.ics.readPixmap ("gnome.png")
- elif desktop == "KDE":
- im = self.ics.readPixmap ("kde.png")
+ self.load_monitor_preview_pixmap(self.monitor_pixmaps[num])
+ def display_desktop_pixmap(self, desktop):
self.vbox4.destroy ()
-
self.vbox4 = GtkVBox ()
+ if desktop == "GNOME":
+ im = self.ics.readPixmap("gnome.png")
+ elif desktop == "KDE":
+ im = self.ics.readPixmap("kde.png")
+
if im:
im.render ()
pix = im.make_pixmap ()
@@ -157,79 +146,44 @@ class XCustomWindow (InstallWindow):
self.hbox4.pack_start (self.vbox4)
self.hbox4.show_all ()
+ def desktop_cb (self, widget, desktop):
+ self.newDesktop = desktop
+
+ self.display_desktop_pixmap(desktop)
+
# XCustomWindow tag="xcustom"
- def getScreen (self):
- self.oldmodes = self.todo.x.modes
-
+ def getScreen (self, xconfig, monitor, videocard, desktop, comps):
+
+ self.xconfig = xconfig
+ self.monitor = monitor
+ self.videocard = videocard
+ self.desktop = desktop
+
+ # create toplevel packing structure
self.box = GtkVBox (FALSE)
self.box.set_border_width (5)
+ # hbox and alignment used for monitor preview area
+ # list of pixmaps for monitor preview
+ self.monitor_pixmaps = None
self.hbox = GtkHBox (FALSE, 5)
+ self.monitor_align = None
+ self.desktop_align = None
+ self.load_monitor_preview_pixmap("monitor.png")
+ self.box.pack_start (self.hbox)
+
+ # determine video modes available for this card/monitor combo
+ available = self.xconfig.availableModes()
+ availableDepths = []
+ for adepth in available.keys():
+ if len(available[adepth]) > 0:
+ availableDepths.append(adepth)
+ availableDepths.sort(self.numCompare)
+
hbox1 = GtkHBox (FALSE, 5)
- hbox2 = GtkHBox (FALSE, 5)
hbox3 = GtkHBox (FALSE, 5)
hbox4 = GtkHBox (FALSE, 5)
- files = []
-
- pixmaps1 = glob.glob("/usr/share/anaconda/pixmaps/monitor_*")
- pixmaps2 = glob.glob("pixmaps/monitor_*")
- if len(pixmaps1) < len(pixmaps2):
- files = pixmaps2
- else:
- files = pixmaps1
-
- pixmaps = []
- for pixmap in files:
- pixmaps.append(pixmap[string.find(pixmap, "monitor_"):])
- self.pixmaps = pixmaps
- self.pixmaps.sort ()
-
-
- im = self.ics.readPixmap ("monitor.png")
- if im:
- im.render ()
- self.pix = im.make_pixmap ()
- self.pix_align = GtkAlignment ()
- self.pix_align.add (self.pix)
- self.pix_align.set (0.5, 0.5, 1.0, 1.0)
- self.hbox.pack_start (self.pix_align, TRUE, TRUE)
-
- self.box.pack_start (self.hbox)
-
- available = self.todo.x.availableModes()
- availableDepths = available.keys()
- availableDepths.sort (self.numCompare)
- depths = self.todo.x.modes.keys ()
- depths.sort (self.numCompare)
-
- self.depth_count = 0
- self.res_count1 = 0
- self.res_count2 = 0
- self.res_count3 = 0
-
- self.res_list1 = []
- self.res_list2 = []
- self.res_list3 = []
-
- for depth in availableDepths:
-
- if len (available[depth]) < 1:
- self.depth_count = self.depth_count -1
-
- for res in available[depth]:
- if self.depth_count == 0:
- self.res_count1 = self.res_count1 + 1
- self.res_list1.append (res)
- if self.depth_count == 1:
- self.res_count2 = self.res_count2 + 1
- self.res_list2.append (res)
- if self.depth_count == 2:
- self.res_count3 = self.res_count3 + 1
- self.res_list3.append (res)
-
- self.depth_count = self.depth_count + 1
-
frame1 = GtkFrame (_("Color Depth:"))
frame1.set_shadow_type (SHADOW_NONE)
frame1.set_border_width (10)
@@ -238,120 +192,90 @@ class XCustomWindow (InstallWindow):
depth_list = [(_("256 Colors (8 Bit)")), (_("High Color (16 Bit)")), (_("True Color (24 Bit)"))]
self.bit_depth = ["8", "16", "32"]
- self.avail_depths = depth_list[:self.depth_count]
+ self.avail_depths = depth_list[:len(availableDepths)]
self.depth_combo = GtkCombo ()
self.depth_combo.entry.set_editable (FALSE)
self.depth_combo.set_popdown_strings (self.avail_depths)
frame1.add (self.depth_combo)
-
- count = 0
- for depth in self.bit_depth:
- if depth == self.todo.depthState:
- self.depth_combo.list.select_item (count)
- self.selectedDepth = depth
-
- count = count + 1
-
frame2 = GtkFrame (_("Screen Resolution:"))
frame2.set_shadow_type (SHADOW_NONE)
frame2.set_border_width (10)
hbox1.pack_start (frame2, TRUE, FALSE, 2)
- self.res_list = ["640x480", "800x600", "1024x768", "1152x864", "1280x1024", "1400x1050", "1600x1200"]
+ self.res_list = ["640x480", "800x600", "1024x768", "1152x864",
+ "1280x1024", "1400x1050", "1600x1200"]
self.res_combo = GtkCombo ()
self.res_combo.entry.set_editable (FALSE)
- for res in self.res_list:
- if res == self.todo.resState:
- if self.todo.depthState == "8":
- self.res_combo.set_popdown_strings (self.res_list1)
- if res in self.res_list1:
- count = self.res_list1.index(res)
- else:
- count = 0
- elif self.todo.depthState == "16":
- self.res_combo.set_popdown_strings (self.res_list2)
- if res in self.res_list2:
- count = self.res_list2.index(res)
- else:
- count = 0
- elif self.todo.depthState == "32":
- self.res_combo.set_popdown_strings (self.res_list3)
- if res in self.res_list3:
- count = self.res_list3.index(res)
- else:
- count = 0
-
- self.res_combo.list.select_item (count)
- self.selectedRes = res
- self.swap_monitor (count)
-
- count = count + 1
-
- #--If they've been to this screen before, don't try to select a default res
- if self.todo.depthState != "":
- pass
- #--Otherwise, try to select a default setting that makes sense...like 16 bit at 1024x768
+ # determine current selection, or if none exists, pick reasonable
+ # defaults.
+ #
+ # getManualModes() should return a dictionary with one key (depth),
+ # which has a single corresponding resolution
+ #
+ manualmodes = self.xconfig.getManualModes()
+
+ if manualmodes:
+ self.selectedDepth = manualmodes.keys()[0]
+ self.selectedRes = manualmodes[self.selectedDepth][0]
else:
- if self.depth_count == 1:
- self.res_combo.set_popdown_strings (self.res_list1)
- self.selectedDepth = "8"
- self.swap_monitor (1)
+ self.selectedDepth = None
+ self.selectedRes = None
- elif self.depth_count >= 2:
+ if not self.selectedDepth or not self.selectedRes:
+ if len(available) == 1:
+ self.res_combo.set_popdown_strings (available["8"])
+ self.selectedDepth = "8"
+ elif len(available) >= 2:
#--If they can do 16 bit color, default to 16 bit at 1024x768
self.depth_combo.list.select_item (1)
self.selectedDepth = "16"
+
+ self.res_combo.set_popdown_strings (available["16"])
- self.res_combo.set_popdown_strings (self.res_list2)
-
- if "1024x768" in self.res_list2:
+ if "1024x768" in available["16"]:
self.selectedRes = "1024x768"
- elif "800x600" in self.res_list2:
+ elif "800x600" in available["16"]:
self.selectedRes = "800x600"
else:
self.selectedRes = "640x480"
+ else:
+ self.res_combo.set_popdown_strings (available[self.selectedDepth])
- location = self.res_list2.index(self.selectedRes)
- self.currentRes = location + 1
- self.res_combo.list.select_item(location)
- self.swap_monitor (location)
+ frame2.add (self.res_combo)
+ # apply current configuration to UI
+ count = 0
+ for depth in self.bit_depth:
+ if depth == self.selectedDepth:
+ self.depth_combo.list.select_item (count)
+ break
+ count = count + 1
+ count = 0
+ self.currentRes = 0
+ for res in self.res_list:
+ if res == self.selectedRes:
+ self.res_combo.list.select_item (count)
+ self.currentRes = count
+ break
+ count = count + 1
- frame2.add (self.res_combo)
+ location = available[self.selectedDepth].index(self.selectedRes)
+ self.swap_monitor(location)
self.depth_combo.list.connect ("select-child", self.depth_cb)
-
self.res_combo.list.connect ("select-child", self.res_cb)
self.box.pack_start (hbox1, FALSE)
-
-
-
- self.sunServer = 0
- if self.todo.x.server and len (self.todo.x.server) >= 3 and self.todo.x.server[0:3] == 'Sun':
- self.sunServer = 1
- else:
- self.sunServer = 0
-
# cannot reliably test on i810 or Voodoo driver, or on Suns who dont
# need it since they are fixed resolution
- self.cantprobe = 0
- if not self.sunServer and self.todo.x.vidCards:
- if self.todo.x.vidCards[self.todo.x.primary].has_key("DRIVER"):
- curdriver = self.todo.x.vidCards[self.todo.x.primary]["DRIVER"]
- noprobedriverList = ("i810", "tdfx")
- for adriver in noprobedriverList:
- if curdriver == adriver:
- self.cantprobe = 1
- else:
- self.cantprobe = 1
+ self.cantprobe = not self.videocard.primaryCard().canTestSafely()
if not self.cantprobe:
test = GtkAlignment (.9, 0, 0, 0)
@@ -360,106 +284,68 @@ class XCustomWindow (InstallWindow):
test.add (button)
self.box.pack_start (test, FALSE)
+ #--If both KDE and GNOME are selected
+ if comps:
+ gnomeSelected = (comps.packages.has_key('gnome-core')
+ and comps.packages['gnome-core'].selected)
+ kdeSelected = (comps.packages.has_key('kdebase')
+ and comps.packages['kdebase'].selected)
+ else:
+ gnomeSelected = 0
+ kdeSelected = 0
+ self.newDesktop = ""
+ self.origDesktop = self.desktop.getDefaultDesktop()
-
- #--If both KDE and GNOME are selected
- gnomeSelected = (self.todo.hdList.has_key('gnome-core')
- and self.todo.hdList['gnome-core'].selected)
- kdeSelected = (self.todo.hdList.has_key('kdebase')
- and self.todo.hdList['kdebase'].selected)
- if gnomeSelected and kdeSelected:
+ if gnomeSelected or kdeSelected:
hsep = GtkHSeparator ()
self.box.pack_start (hsep)
- frame3 = GtkFrame (_("Please choose your default desktop environment:"))
+ if gnomeSelected and kdeSelected:
+ frame3 = GtkFrame (_("Please choose your default desktop environment:"))
+ else:
+ frame3 = GtkFrame (_("Your desktop environment is:"))
+
frame3.set_shadow_type (SHADOW_NONE)
hbox3.pack_start (frame3, TRUE, FALSE, 2)
self.hbox4 = GtkHBox ()
frame3.add (self.hbox4)
- vbox3 = GtkVBox()
+ # need to have this around so self.display_desktop_pixmap()
+ # will work later. (messy)
self.vbox4 = GtkVBox()
- gnome_radio = GtkRadioButton (None, (_("GNOME")))
- vbox3.pack_start (gnome_radio, TRUE, FALSE, 2)
- kde_radio = GtkRadioButton(gnome_radio, (_("KDE")))
- vbox3.pack_start (kde_radio, TRUE, FALSE, 2)
- self.hbox4.pack_start (vbox3)
-
-
- #--Set the desktop GUI widget to what the user has selected
- if self.todo.instClass.getDesktop () == "GNOME" or self.todo.instClass.getDesktop () == "":
- self.newDesktop = "GNOME"
- gnome_radio.set_active (TRUE)
- im = self.ics.readPixmap ("gnome.png")
- if im:
- im.render ()
- pix = im.make_pixmap ()
- a = GtkAlignment ()
- a.add (pix)
- a.set (0.5, 0.5, 1.0, 1.0)
- self.vbox4.pack_start (a, TRUE, TRUE)
- self.hbox4.pack_start (self.vbox4)
-
- elif self.todo.instClass.getDesktop () == "KDE":
- kde_radio.set_active (TRUE)
- im = self.ics.readPixmap ("kde.png")
- if im:
- im.render ()
- pix = im.make_pixmap ()
- a = GtkAlignment ()
- a.add (pix)
- a.set (0.5, 0.5, 1.0, 1.0)
- self.vbox4.pack_start (a, TRUE, TRUE)
- self.hbox4.pack_start (self.vbox4)
-
- gnome_radio.connect ("clicked", self.desktop_cb, "GNOME")
- kde_radio.connect ("clicked", self.desktop_cb, "KDE")
- self.box.pack_start (hbox3, FALSE, TRUE, 2)
-
- elif gnomeSelected or kdeSelected:
- hsep = GtkHSeparator ()
- self.box.pack_start (hsep)
+ if gnomeSelected and kdeSelected:
+ vbox3 = GtkVBox()
+
+ gnome_radio = GtkRadioButton (None, (_("GNOME")))
+ vbox3.pack_start (gnome_radio, TRUE, FALSE, 2)
+ kde_radio = GtkRadioButton(gnome_radio, (_("KDE")))
+ vbox3.pack_start (kde_radio, TRUE, FALSE, 2)
- frame3 = GtkFrame (_("Your desktop environment is:"))
- frame3.set_shadow_type (SHADOW_NONE)
- hbox3.pack_start (frame3, TRUE, FALSE, 2)
- self.hbox4 = GtkHBox ()
- frame3.add (self.hbox4)
+ self.hbox4.pack_start (vbox3)
- if gnomeSelected:
- self.newDesktop = "GNOME"
- im = self.ics.readPixmap ("gnome.png")
- if im:
- im.render ()
- pix = im.make_pixmap ()
- a = GtkAlignment ()
- a.add (pix)
- a.set (0.5, 0.5, 1.0, 1.0)
- self.hbox4.pack_start (a, TRUE, TRUE)
-
- label = GtkLabel (_("GNOME"))
- self.hbox4.pack_start (label, TRUE, FALSE, 2)
-
- elif kdeSelected:
- self.newDesktop = "KDE"
- im = self.ics.readPixmap ("kde.png")
- if im:
- im.render ()
- pix = im.make_pixmap ()
- a = GtkAlignment ()
- a.add (pix)
- a.set (0.5, 0.5, 1.0, 1.0)
- self.hbox4.pack_start (a, TRUE, TRUE)
-
- label = GtkLabel (_("KDE"))
- self.hbox4.pack_start (label, TRUE, FALSE, 2)
+ self.hbox4.pack_start (self.vbox4)
+
+ #--Set the desktop GUI widget to what the user has selected
+ if self.origDesktop == "GNOME":
+ gnome_radio.set_active (TRUE)
+ self.display_desktop_pixmap("GNOME")
+ elif self.origDesktop == "KDE":
+ kde_radio.set_active (TRUE)
+ self.display_desktop_pixmap("KDE")
+
+ gnome_radio.connect ("clicked", self.desktop_cb, "GNOME")
+ kde_radio.connect ("clicked", self.desktop_cb, "KDE")
+ else:
+ self.hbox4.pack_start(GtkLabel(self.origDesktop))
+ self.display_desktop_pixmap(self.origDesktop)
self.box.pack_start (hbox3, FALSE, TRUE, 2)
-
- pass
+ else:
+ gnome_radio = None
+ kde_radio = None
hsep = GtkHSeparator ()
self.box.pack_start (hsep)
@@ -474,328 +360,260 @@ class XCustomWindow (InstallWindow):
self.text = GtkRadioButton (None, (_("Text")))
self.graphical = GtkRadioButton (self.text, (_("Graphical")))
+ self.runLevel = self.desktop.getDefaultRunLevel()
- # see if we've ever set initState
- if self.todo.initState == 0:
- if gnomeSelected or kdeSelected:
- self.todo.initState = 5
- else:
- self.todo.initState = 3
-
- if self.todo.initState == 3:
+ if self.runLevel == 3:
self.text.set_active (TRUE)
- elif self.todo.initState == 5:
+ elif self.runLevel == 5:
self.graphical.set_active (TRUE)
-
- self.hbox5.pack_start (self.text, FALSE, 2)
self.hbox5.pack_start (self.graphical, FALSE, 2)
+ self.hbox5.pack_start (self.text, FALSE, 2)
self.box.pack_start (hbox4, FALSE, TRUE, 2)
- # I'm not sure what monitors handle this wide aspect resolution, so better play safe
- monName = self.todo.x.monName
- if (self.todo.x.vidRam and self.todo.x.vidRam >= 4096 and
- ((monName and len (monName) >= 11 and monName[:11] == 'Sun 24-inch') or
- self.todo.x.monName == 'Sony GDM-W900')):
- self.todo.x.modes["8"].append("1920x1200")
-
- available = self.todo.x.availableModes()
- availableDepths = available.keys()
- availableDepths.sort (self.numCompare)
- depths = self.todo.x.modes.keys ()
- depths.sort (self.numCompare)
-
- self.toggles = {}
- for depth in availableDepths:
- self.toggles[depth] = []
- vbox = GtkVBox (FALSE, 5)
- vbox.pack_start (GtkLabel (depth + _("Bits per Pixel")), FALSE)
- for res in available[depth]:
- button = GtkCheckButton (res)
- self.toggles[depth].append (res, button)
- vbox.pack_start (button, FALSE)
- if (self.todo.x.manualModes.has_key(depth)
- and res in self.todo.x.manualModes[depth]):
- button.set_active(1)
-
return self.box
- def getPrev (self):
- return XConfigWindow
-
class MonitorWindow (InstallWindow):
+ windowTitle = N_("Monitor Configuration")
+ htmlTag = ("monitor")
+
def __init__ (self, ics):
- InstallWindow.__init__ (self, ics)
+ InstallWindow.__init__ (self, ics)
self.ics.setNextEnabled (FALSE)
- ics.setTitle (_("Monitor Configuration"))
- ics.readHTML ("monitor")
- self.monitor = None
-
+
def selectCb (self, ctree, node, column):
- try:
- parent, monitor = self.ctree.node_get_row_data (node)
- self.ics.setNextEnabled (TRUE)
- if self.stateName == monitor:
- pass
- elif self.todo.x.state == monitor[0]:
- self.currentNode = node
- self.ics.setNextEnabled (TRUE)
- pass
- else:
- self.currentNode = node
- old_parent, temp = self.ctree.node_get_row_data (self.currentNode)
-
- if not monitor:
- self.ics.setNextEnabled (FALSE)
- if self.hEntry and self.vEntry:
- self.hEntry.set_text ("")
- self.vEntry.set_text ("")
- self.hEntry.set_editable (FALSE)
- self.vEntry.set_editable (FALSE)
- else:
- self.ics.setNextEnabled (TRUE)
- self.vEntry.set_text (monitor[2])
- self.hEntry.set_text (monitor[3])
- self.hEntry.set_editable (TRUE)
- self.vEntry.set_editable (TRUE)
- self.todo.x.state = monitor[0]
-
- self.stateName = monitor
- self.monitor = monitor
- except:
- self.ics.setNextEnabled (FALSE)
- pass
+ if self.ignoreTreeChanges:
+ return
+ data = self.ctree.node_get_row_data (node)
- def getNext (self):
- if self.monitor:
- self.todo.x.setMonitor ((self.monitor[0],
- (self.hEntry.get_text (),
- self.vEntry.get_text ())))
+ if not data:
+ # they clicked on a tree tab (a manufacturer node)
+ self.ics.setNextEnabled (FALSE)
+ self.setSyncField(self.hEntry, "")
+ self.setSyncField(self.vEntry, "")
+ self.hEntry.set_editable (FALSE)
+ self.vEntry.set_editable (FALSE)
+ return
+ else:
+ (parent, monitor) = data
+ self.hEntry.set_editable (TRUE)
+ self.vEntry.set_editable (TRUE)
- self.todo.monitorHsyncState = self.hEntry.get_text ()
- self.todo.monitorVsyncState = self.vEntry.get_text ()
+ if self.currentNode:
+ (current_parent, current_monitor) = self.ctree.node_get_row_data (self.currentNode)
- if self.skipme:
- return None
+ self.currentNode = node
- #--If they don't want to skip, then have them enter the XCustomWindow screen
- if self.todo.x.skip == 0:
- return XCustomWindow
+ # otherwise fill in sync fields
+ self.setSyncField(self.vEntry, monitor[2])
+ self.setSyncField(self.hEntry, monitor[3])
+ self.hEntry.set_editable (TRUE)
+ self.vEntry.set_editable (TRUE)
+ self.enableIfSyncsValid(self.hEntry, self.vEntry)
+
+ def getNext (self):
+ if self.currentNode:
+ (current_parent, current_monitor) = self.ctree.node_get_row_data (self.currentNode)
+ self.monitor.setSpecs(self.hEntry.get_text (),
+ self.vEntry.get_text (),
+ id=current_monitor[0],
+ name=current_monitor[0])
return None
def moveto (self, ctree, area, node):
+ self.ignoreTreeChanges = 1
self.ctree.node_moveto (node, 0, 0.5, 0.0)
self.selectCb (self.ctree, node, -1)
+ self.ignoreTreeChanges = 0
+
+ def setSyncField(self, field, value):
+ self.ignoreEntryChanges = 1
+ if value:
+ field.set_text(value)
+ else:
+ field.set_text("")
+ self.ignoreEntryChanges = 0
+
+ def enableIfSyncsValid(self, entry, other):
+ aval = entry.get_text()
+ bval = other.get_text()
+ if isValidSyncRange(aval) and isValidSyncRange(bval):
+ self.ics.setNextEnabled (TRUE)
+ else:
+ self.ics.setNextEnabled (FALSE)
def resetCb (self, data):
- try:
- parent, monitor = self.ctree.node_get_row_data (self.originalNode)
- old_parent, temp = self.ctree.node_get_row_data (self.currentNode)
-
- self.hEntry.set_text (self.todo.monitorHsync)
- self.vEntry.set_text (self.todo.monitorVsync)
- self.ctree.freeze ()
+ (parent, monitor) = self.ctree.node_get_row_data (self.originalNode)
- #--If new selection and old selection have the same parent, don't collapse or expand anything
- if parent != old_parent:
- self.ctree.expand (parent)
- self.ctree.collapse (old_parent)
+ (old_parent, temp) = self.ctree.node_get_row_data (self.currentNode)
- self.ctree.select(self.originalNode)
- self.ctree.thaw ()
- self.ctree.node_moveto (self.originalNode, 0, 0.5, 0.0)
+ self.setSyncField(self.hEntry, self.monitor.getMonitorHorizSync(useProbed=1))
+ self.setSyncField(self.vEntry, self.monitor.getMonitorVertSync(useProbed=1))
+ self.enableIfSyncsValid(self.hEntry, self.vEntry)
- except:
- parent, monitor = self.ctree.node_get_row_data (self.originalNode)
- old_parent, temp = self.ctree.node_get_row_data (self.currentNode)
- self.ctree.freeze ()
+ # restore horiz and vert sync ranges in row data as well
+ new_monitor = (monitor[0], monitor[1],
+ self.monitor.getMonitorHorizSync(useProbed=1),
+ self.monitor.getMonitorHorizSync(useProbed=1))
+ self.ctree.node_set_row_data (self.originalNode, (parent, new_monitor))
+
+ self.ctree.freeze ()
+
+ #--If new selection and old selection have the same parent,
+ # don't collapse or expand anything
+ if parent != old_parent:
+ self.ctree.expand (parent)
self.ctree.collapse (old_parent)
- self.ctree.thaw ()
- pass
- def insert (self, pos, text, len, data, entry):
- text = text[:1]
- list = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "-", " ", "."]
- found = "FALSE"
+ self.ctree.select(self.originalNode)
+ self.ctree.thaw ()
+ self.ctree.node_moveto (self.originalNode, 0, 0.5, 0.0)
- for item in list:
- if text == item:
- found = "TRUE"
+ def insertCb (self, pos, text, len, data, entrys):
+ if self.ignoreEntryChanges:
+ return
- if found == "FALSE":
+ list = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "-", " ", ".", ","]
+ if not(text[:1] in list):
entry.emit_stop_by_name ("insert-text")
- def getScreen (self):
- # Don't configure X in reconfig mode.
- # in regular install, check to see if the XFree86 package is
- # installed. If it isn't return None.
- if (self.todo.reconfigOnly
- or (not self.todo.hdList.packages.has_key('XFree86')
- or not self.todo.hdList.packages['XFree86'].selected
- or self.todo.serial)):
- self.skipme = TRUE
- return None
- else:
- self.skipme = FALSE
+ (entry, other) = entrys
+ self.enableIfSyncsValid(entry, other)
- #--If they want to skip X configuration, skip this screen
- if self.todo.x.skip == 1:
+ def changedCb (self, data, entrys):
+ if self.ignoreEntryChanges:
return
- self.stateName = ""
-
+ (entry, other) = entrys
+ self.enableIfSyncsValid(entry, other)
+
+ def getScreen (self, xconfig, monitor):
+
+ self.monitor = monitor
+ self.xconfig = xconfig
+
+ # some flags to let us know when to ignore callbacks we caused
+ self.ignoreEntryChanges = 0
+ self.ignoreTreeChanges = 0
+
box = GtkVBox (FALSE, 5)
- monitors = self.todo.x.monitors ()
- keys = monitors.keys ()
- keys.sort ()
-
# Monitor selection tree
self.ctree = GtkCTree ()
self.ctree.set_selection_mode (SELECTION_BROWSE)
self.ctree.set_expander_style(CTREE_EXPANDER_TRIANGLE)
self.ctree.set_line_style(CTREE_LINES_NONE)
-
- self.monitor_p, self.monitor_b = create_pixmap_from_xpm_d (self.ctree, None, xpms_gui.MONITOR_XPM)
-
- arch = iutil.getArch()
-
self.hEntry = GtkEntry ()
self.vEntry = GtkEntry ()
- # If the user has not changed monitor setting before, set the state info to the probed value
- if self.todo.x.state == "":
- self.todo.x.state = self.todo.x.monID
- self.todo.monitorOriginalName = self.todo.x.monID
- else:
- pass
+ (self.monitor_p, self.monitor_b) = create_pixmap_from_xpm_d (self.ctree, None, xpms_gui.MONITOR_XPM)
+
+ # load monitor list and insert into tree
+ self.orig_name = self.monitor.getMonitorID(useProbed=1)
+ monitorslist = self.monitor.monitorsDB ()
+ keys = monitorslist.keys ()
+ keys.sort ()
+
+ # treat Generic monitors special
+ keys.remove("Generic")
+ keys.insert(0, "Generic")
select = None
+ first = 1
+ first_node = None
for man in keys:
- parent = self.ctree.insert_node (None, None, (man,), 2, self.monitor_p, self.monitor_b,
- self.monitor_p, self.monitor_b, is_leaf = FALSE)
-
- models = monitors[man]
+ if man == "Generic":
+ title = _("Generic")
+ else:
+ title = man
+ parent = self.ctree.insert_node (None, None, (title,), 2,
+ self.monitor_p, self.monitor_b,
+ self.monitor_p, self.monitor_b,
+ is_leaf = FALSE)
+ # save location of top of tree
+ if first:
+ first_node = parent
+ first = 0
+
+ models = monitorslist[man]
models.sort()
previous_monitor = ""
- count = 0
- for monitor in models:
-
+ for amonitor in models:
if previous_monitor != "":
- dupe = models[count-1]
- if monitor[0] == dupe[0]:
- pass
- else:
- previous_monitor = monitor[0]
- node = self.ctree.insert_node (parent, None, (monitor[0],), 2)
- self.ctree.node_set_row_data (node, (parent, monitor))
-
- if monitor[0] == self.todo.monitorOriginalName:
- self.originalNode = node
- select = node
- selParent = parent
-
- elif monitor[0] == self.todo.x.state:
- select = node
- selParent = parent
-
- if monitor[0] == self.todo.monitorOriginalName:
- tmp, self.todo.monitorOriginalNode = self.ctree.node_get_row_data(node)
- self.originalNode = node
-
- else:
- previous_monitor = monitor[0]
- node = self.ctree.insert_node (parent, None, (monitor[0],), 2)
- self.ctree.node_set_row_data (node, (parent, monitor))
-
- if monitor[0] == self.todo.monitorOriginalName:
- self.originalNode = node
- select = node
- selParent = parent
-
- elif monitor[0] == self.todo.x.state:
- select = node
- selParent = parent
-
- if monitor[0] == self.todo.monitorOriginalName:
- tmp, self.todo.monitorOriginalNode = self.ctree.node_get_row_data(node)
- self.originalNode = node
-
-
- count = count + 1
-
- #--Add a category for a DDC probed monitor if a DDC monitor was probed, but the user has selected
- #--another monitor, gone forward, and then returned to this screen.
- if self.todo.isDDC == "TRUE":
- parent = self.ctree.insert_node (None, None, (_("DDC Probed Monitor"),),
- 2, self.monitor_p, self.monitor_b, self.monitor_p, self.monitor_b, is_leaf = FALSE)
-
- self.originalNode = self.ctree.insert_node (parent, None, (self.todo.monitorOriginalName,), 2)
-
- monitor = (self.todo.monitorOriginalName, self.todo.monitorOriginalName, self.todo.monitorVsync,
- self.todo.monitorHsync)
+ if amonitor[0] == previous_monitor:
+ continue
- self.ctree.node_set_row_data (self.originalNode, (parent, monitor))
+ previous_monitor = amonitor[0]
+
+ node = self.ctree.insert_node (parent, None, (amonitor[0],), 2)
+ self.ctree.node_set_row_data (node, (parent, amonitor))
- if self.todo.x.state != self.todo.monitorOriginalName:
- pass
+ if amonitor[0] == self.orig_name:
+ self.originalNode = node
+
+ if amonitor[0] == self.monitor.getMonitorID():
+ select = node
+ selParent = parent
+
+ # Insert DDC probed monitor if it had no match in database
+ # or otherwise if we did not detect a monitor at all
+ #--Add a category for a DDC probed monitor if a DDC monitor was probed
+ if self.orig_name and not self.monitor.lookupMonitor(self.orig_name):
+ if self.orig_name != "Unprobed Monitor":
+ title = _("DDC Probed Monitor")
else:
- select = self.originalNode
- selParent = parent
-
+ title = self.orig_name
+
+ parent = self.ctree.insert_node (None, first_node,
+ (title,),
+ 2, self.monitor_p, self.monitor_b,
+ self.monitor_p, self.monitor_b,
+ is_leaf = FALSE)
+
+ self.originalNode = self.ctree.insert_node (parent,
+ None, (self.orig_name,), 2)
- # Add a category for a DDC probed monitor that isn't in MonitorDB
- elif not select and self.todo.x.monID != "Generic Monitor" and self.todo.isDDC != "TRUE":
- parent = self.ctree.insert_node (None, None, ("DDC Probed Monitor",),
- 2, self.monitor_p, self.monitor_b, self.monitor_p, self.monitor_b, is_leaf = FALSE)
-
- node = self.ctree.insert_node (parent, None, (self.todo.x.state,), 2)
+ monitordata = (self.orig_name, self.orig_name,
+ self.monitor.getMonitorVertSync(),
+ self.monitor.getMonitorHorizSync())
- monitor = (self.todo.x.state, self.todo.x.state, self.todo.x.monVert,
- self.todo.x.monHoriz)
+ self.ctree.node_set_row_data (self.originalNode,
+ (parent, monitordata))
- self.ctree.node_set_row_data (node, (parent, monitor))
-
- select = node
+ # make this the selection
+ select = self.originalNode
selParent = parent
- tmp, self.todo.monitorOriginalNode = self.ctree.node_get_row_data(node)
- self.todo.isDDC = "TRUE"
- self.originalNode = node
- self.ctree.connect ("tree_select_row", self.selectCb)
+ self.currentNode = select
- if self.todo.monitorHsync == "":
- self.hEntry.set_text (self.todo.x.monHoriz)
- self.vEntry.set_text (self.todo.x.monVert)
- self.todo.monitorHsync = self.todo.x.monHoriz
- self.todo.monitorVsync = self.todo.x.monVert
- self.todo.monitorHsyncState = self.todo.x.monHoriz
- self.todo.monitorVsyncState = self.todo.x.monVert
- else:
- self.hEntry.set_text (self.todo.monitorHsyncState)
- self.vEntry.set_text (self.todo.monitorVsyncState)
+ self.setSyncField(self.hEntry, self.monitor.getMonitorHorizSync())
+ self.setSyncField(self.vEntry, self.monitor.getMonitorVertSync())
+ self.enableIfSyncsValid(self.hEntry, self.vEntry)
+ self.ctree.connect ("tree_select_row", self.selectCb)
if select:
-# print "inside if"
+ self.ignoreTreeChanges = 1
self.ctree.select (select)
self.ctree.expand (selParent)
self.ctree.connect ("draw", self.moveto, select)
-
-
+ self.ignoreTreeChanges = 0
sw = GtkScrolledWindow ()
sw.add (self.ctree)
sw.set_policy (POLICY_NEVER, POLICY_AUTOMATIC)
box.pack_start (sw, TRUE, TRUE)
- self.hEntry.connect ("insert_text", self.insert, self.hEntry)
- self.vEntry.connect ("insert_text", self.insert, self.vEntry)
+ self.hEntry.connect ("insert_text", self.insertCb, (self.hEntry, self.vEntry))
+ self.vEntry.connect ("insert_text", self.insertCb, (self.vEntry, self.hEntry))
+
+ self.hEntry.connect ("changed", self.changedCb, (self.hEntry, self.vEntry))
+ self.vEntry.connect ("changed", self.changedCb, (self.vEntry, self.hEntry))
self.reset = GtkButton (_("Restore original values"))
self.reset.connect ("clicked", self.resetCb)
@@ -804,7 +622,7 @@ class MonitorWindow (InstallWindow):
align = GtkAlignment (1, 0.5)
align.add (self.reset)
- self.synctable = GtkTable(2, 4, FALSE)
+ synctable = GtkTable(2, 4, FALSE)
hlabel = GtkLabel (_("Horizontal Sync:"))
hlabel.set_alignment (0, 0.5)
vlabel = GtkLabel (_("Vertical Sync:"))
@@ -819,72 +637,75 @@ class MonitorWindow (InstallWindow):
khz = GtkLabel (_("Hz"))
khz.set_alignment (0, 0.5)
- self.synctable.attach(hlabel, 0, 1, 0, 1, SHRINK, FILL, 5)
- self.synctable.attach(self.hEntry, 1, 2, 0, 1, SHRINK)
- self.synctable.attach(hz, 2, 3, 0, 1, FILL, FILL, 5)
- self.synctable.attach(vlabel, 0, 1, 1, 2, SHRINK, FILL, 5)
- self.synctable.attach(self.vEntry, 1, 2, 1, 2, SHRINK)
- self.synctable.attach(khz, 2, 3, 1, 2, FILL, FILL, 5)
- self.synctable.attach(align, 3, 4, 1, 2)
+ synctable.attach(hlabel, 0, 1, 0, 1, SHRINK, FILL, 5)
+ synctable.attach(self.hEntry, 1, 2, 0, 1, SHRINK)
+ synctable.attach(hz, 2, 3, 0, 1, FILL, FILL, 5)
+ synctable.attach(vlabel, 0, 1, 1, 2, SHRINK, FILL, 5)
+ synctable.attach(self.vEntry, 1, 2, 1, 2, SHRINK)
+ synctable.attach(khz, 2, 3, 1, 2, FILL, FILL, 5)
+ synctable.attach(align, 3, 4, 1, 2)
- box.pack_start (self.synctable, FALSE, FALSE)
+ box.pack_start (synctable, FALSE, FALSE)
return box
class XConfigWindow (InstallWindow):
+
+ htmlTag ="xconf"
+ windowTitle = N_("X Configuration")
+
def __init__ (self, ics):
InstallWindow.__init__ (self, ics)
-
self.ics.setNextEnabled (TRUE)
- self.todo = ics.getToDo ()
- self.sunServer = 0
- if self.todo.x.server and len (self.todo.x.server) >= 3 and self.todo.x.server[0:3] == 'Sun':
- self.sunServer = 1
+ def getNext (self):
+ if self.skip.get_active():
+ self.dispatch.skipStep("monitor")
+ self.dispatch.skipStep("xcustom")
+ self.dispatch.skipStep("writexconfig")
else:
- self.sunServer = 0
- ics.setTitle (_("X Configuration"))
- ics.readHTML ("xconf")
-
- self.todo.videoRamOriginal = 2
+ self.dispatch.skipStep("monitor", skip = 0)
+ self.dispatch.skipStep("xcustom", skip = 0)
+ self.dispatch.skipStep("writexconfig", skip = 0)
+
+ # set videocard type (assuming we're working with PRIMARY card)
+ if self.selected_card:
+ primary_card = self.videocard.primaryCard()
+ primary_card.setCardData(self.selected_card)
+ primary_card.setDevID (self.selected_card["NAME"])
+ primary_card.setDescription (self.selected_card["NAME"])
+
+ # pull out resolved version of card data
+ card_data = primary_card.getCardData()
+ if (card_data.has_key("DRIVER") and
+ not card_data.has_key("UNSUPPORTED")):
+ server = "XFree86"
+ else:
+ server = "XF86_" + card_data["SERVER"]
- def getNext (self):
- if self.skipme:
- return None
+ primary_card.setXServer(server)
+
+ # sniff out the selected ram size
+ menu = self.ramOption.get_menu ().get_active()
+ index = 0
+ for menu_item in self.ramOption.get_menu ().children ():
+ if menu_item == menu:
+ break
+ index = index + 1
+ vidram = self.videocard.possible_ram_sizes()[index]
+ self.videocard.primaryCard().setVideoRam(str(vidram))
+ self.xconfig.filterModesByMemory ()
+
return None
- def customToggled (self, widget, *args):
- pass
-
def skipToggled (self, widget, *args):
self.configbox.set_sensitive (not widget.get_active ())
- self.todo.x.skip = widget.get_active ()
- def testPressed (self, widget, *args):
- try:
- self.todo.x.test ()
- except RuntimeError:
- ### test failed window
- pass
- else:
- self.didTest = 1
-
- def memory_cb (self, widget, size):
- self.todo.x.vidRam = size[:-1]
- self.todo.x.filterModesByMemory ()
-
- count = 0
-
- for sizes in ("256k", "512k", "1024k", "2048k", "4096k",
- "8192k", "16384k", "32768k", "65536k"):
- if size == sizes:
- self.todo.videoRamState = count
- count = count + 1
def movetree (self, ctree, area, selected_node):
self.ctree.freeze()
node = self.selected_node
- parent_node, cardname = self.ctree.node_get_row_data(node)
+ (parent_node, cardname) = self.ctree.node_get_row_data(node)
self.ctree.select(node)
self.ctree.expand(parent_node)
@@ -893,11 +714,11 @@ class XConfigWindow (InstallWindow):
def movetree2 (self, ctree, area, node):
self.ctree.freeze()
- node = self.todo.videoCardOriginalNode
- current_parent_node, cardname2 = self.ctree.node_get_row_data(self.todo.videoCardOriginalNode)
+ node = self.orig_node
+ (current_parent_node, cardname2) = self.ctree.node_get_row_data(node)
self.selected_node = node
self.ctree.select(node)
- parent_node, cardname = self.ctree.node_get_row_data(node)
+ (parent_node, cardname) = self.ctree.node_get_row_data(node)
self.ctree.expand(parent_node)
self.ctree.thaw()
self.ctree.node_moveto(node, 0, 0.5, 0)
@@ -905,70 +726,69 @@ class XConfigWindow (InstallWindow):
def selectCb_tree (self, ctree, node, column):
try:
self.current_node = node
- parent, cardname = ctree.node_get_row_data (node)
+ (parent, cardname) = ctree.node_get_row_data (node)
if cardname:
card = self.cards[cardname]
- self.todo.videoCardStateName = card["NAME"]
depth = 0
- while depth < 16 and card.has_key ("SEE"):
- card = self.cards[card["SEE"]]
- depth = depth + 1
- self.todo.x.setVidcard (card)
+
+ self.selected_card = card
except:
+ print "selectCb_tree failed"
pass
def restorePressed (self, ramMenu):
try:
- current_parent_node, cardname1 = self.ctree.node_get_row_data(self.current_node)
- original_parent_node, cardname2 = self.ctree.node_get_row_data(self.todo.videoCardOriginalNode)
+ (current_parent_node, cardname1) = self.ctree.node_get_row_data(self.current_node)
+ (original_parent_node, cardname2) = self.ctree.node_get_row_data(self.orig_node)
if current_parent_node != original_parent_node:
self.ctree.collapse(current_parent_node)
if cardname1 != cardname2:
- self.movetree2(self.ctree, self.todo.videoCardOriginalNode, 0)
+ self.movetree2(self.ctree, self.orig_node, 0)
else:
pass
-
except:
pass
- #--If current value == original value, then don't change anything -- BSF
- if self.todo.videoRamState != self.todo.videoRamOriginal:
- self.todo.videoRamState = self.todo.videoRamOriginal
-
- self.todo.x.probe ()
self.ramOption.remove_menu ()
- self.ramMenu.set_active (self.todo.videoRamOriginal)
+ self.selectVideoRamMenu(1)
self.ramOption.set_menu (self.ramMenu)
def desktopCb (self, widget, desktop):
self.newDesktop = desktop
- # XConfigWindow tag="xconf"
- def getScreen (self):
- # Don't configure X in reconfig mode.
- # in regular install, check to see if the XFree86 package is
- # installed. If it isn't return None.
- if (self.todo.reconfigOnly
- or (not self.todo.hdList.packages.has_key('XFree86')
- or not self.todo.hdList.packages['XFree86'].selected
- or self.todo.serial)):
- self.skipme = TRUE
- return None
- else:
- self.skipme = FALSE
+ def selectVideoRamMenu(self, useProbed):
+ #--Some video cards don't return exact numbers, so do some hacks
+ try:
+ vidRam = string.atoi (self.videocard.primaryCard(useProbed=useProbed).getVideoRam())
+ except:
+ vidRam = 1024
- #--If we have never probed before, then probe. Otherwise, skip it.
- if self.todo.probedFlag == "":
- self.todo.x.probe ()
- self.todo.probedFlag = "TRUE"
- else:
- self.todo.probedFlag = "TRUE"
+ count = 0
+ for size in self.videocard.possible_ram_sizes():
+ #--Cards such as Mach64 and ATI Rage Mobility report 64k less ram
+ # than it should
+ small = size - 64
+ if size == vidRam or small == vidRam:
+ self.ramMenu.set_active(count)
+ break
+ count = count + 1
- self.newDesktop = ""
- self.todo.x.filterModesByMemory ()
+ # XConfigWindow tag="xconf"
+ def getScreen (self, dispatch, xconfig, videocard):
+ def makeFormattedLabel(text):
+ label = GtkLabel (text)
+ label.set_justify (JUSTIFY_LEFT)
+ label.set_line_wrap (TRUE)
+ label.set_alignment (0.0, 0.5)
+ label.set_usize (400, -1)
+ return label
+
+ self.dispatch = dispatch
+ self.videocard = videocard
+ self.xconfig = xconfig
box = GtkVBox (FALSE, 0)
box.set_border_width (0)
@@ -977,572 +797,152 @@ class XConfigWindow (InstallWindow):
arch = iutil.getArch()
if arch == "alpha" or arch == "ia64":
- label = GtkLabel (_("Your video ram size can not be autodetected. "
- "Choose your video ram size from the choices below:"))
- label.set_justify (JUSTIFY_LEFT)
- label.set_line_wrap (TRUE)
- label.set_alignment (0.0, 0.5)
- label.set_usize (400, -1)
+ label = makeFormattedLabel (_("Your video ram size can not be "
+ "autodetected. Choose your video "
+ "ram size from the choices below:"))
box.pack_start (label, FALSE)
elif arch == "i386":
# but we can on everything else
self.autoBox = GtkVBox (FALSE, 5)
- label = GtkLabel (_("In most cases your video hardware can "
- "be probed to automatically determine the "
- "best settings for your display."))
- label.set_justify (JUSTIFY_LEFT)
- label.set_line_wrap (TRUE)
- label.set_alignment (0.0, 0.5)
- label.set_usize (400, -1)
+ label = makeFormattedLabel (_("In most cases your video hardware "
+ "can be probed to automatically "
+ "determine the best settings for "
+ "your display."))
self.autoBox.pack_start (label, FALSE)
- label = GtkLabel (_("If the probed settings do not match your hardware "
- "select the correct setting below:"))
- label.set_justify (JUSTIFY_LEFT)
- label.set_line_wrap (TRUE)
- label.set_alignment (0.0, 0.5)
- label.set_usize (400, -1)
+ label = makeFormattedLabel (_("If the probed settings do not "
+ "match your hardware select the "
+ "correct setting below:"))
self.autoBox.pack_start (label, FALSE)
box.pack_start (self.autoBox, FALSE)
else:
# sparc
- self.autoBox = GtkVBox (FALSE, 5)
- label = GtkLabel (_("In most cases your video hardware can "
- "be probed to automatically determine the "
- "best settings for your display."))
- label.set_justify (JUSTIFY_LEFT)
- label.set_line_wrap (TRUE)
- label.set_alignment (0.0, 0.5)
- label.set_usize (400, -1)
- self.autoBox.pack_start (label, FALSE)
-
- label = GtkLabel (_("Autoprobe results:"))
- label.set_alignment (0.0, 0.5)
- self.autoBox.pack_start (label, FALSE)
- report = self.todo.x.probeReport ()
- report = string.replace (report, '\t', ' ')
- result = GtkLabel (report)
- result.set_alignment (0.2, 0.5)
- result.set_justify (JUSTIFY_LEFT)
- self.autoBox.pack_start (result, FALSE)
- box.pack_start (self.autoBox, FALSE)
+ return
- # card configuration
- if arch == "i386" or arch == "alpha" or arch == "ia64":
-
# Monitor selection tree
- self.ctree = GtkCTree ()
- self.ctree.set_selection_mode (SELECTION_BROWSE)
- self.ctree.set_expander_style(CTREE_EXPANDER_TRIANGLE)
- self.ctree.set_line_style(CTREE_LINES_NONE)
-
- self.videocard_p, self.videocard_b = create_pixmap_from_xpm_d (self.ctree, None, xpms_gui.VIDEOCARD_XPM)
-
- manufacturer = ["AOpen", "ASUS", "ATI", "Actix", "Ark Logic", "Avance Logic", "Compaq",
- "Canopus", "Cardex", "Chaintech", "Chips & Technologies", "Cirrus", "Creative Labs",
- "DFI", "DSV", "DataExpert", "Dell", "Diamond", "Digital", "ELSA", "EONtronics",
- "Epson", "ExpertColor", "Gainward", "Generic", "Genoa", "Hercules", "Intel",
- "Jaton", "LeadTek", "MELCO", "MachSpeed", "Matrox", "Miro", "NVIDIA", "NeoMagic",
- "Number Nine", "Oak", "Octek", "Orchid", "Paradise", "PixelView", "Quantum",
- "RIVA", "Real3D", "Rendition", "S3", "Sharp", "SMI", "SNI", "SPEA", "STB", "SiS",
- "Sierra", "Sigma", "Soyo", "Spider", "Sun", "TechWorks", "Toshiba", "Trident",
- "VideoLogic", "ViewTop", "Voodoo", "WD", "WinFast"]
-
-
- aopen = self.ctree.insert_node (None, None, ("AOpen",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- asus = self.ctree.insert_node (None, None, ("ASUS ",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- ati = self.ctree.insert_node (None, None, ("ATI",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- actix = self.ctree.insert_node (None, None, ("Actix ",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- arklogic = self.ctree.insert_node (None, None, ("Ark Logic ",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- avancelogic = self.ctree.insert_node (None, None, ("Avance Logic ",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- compaq = self.ctree.insert_node (None, None, ("Compaq",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- canopus = self.ctree.insert_node (None, None, ("Canopus",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- cardex = self.ctree.insert_node (None, None, ("Cardex",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- chaintech = self.ctree.insert_node (None, None, ("Chaintech",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- cnt = self.ctree.insert_node (None, None, ("Chips & Technologies",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- cirrus = self.ctree.insert_node (None, None, ("Cirrus",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- creativelabs = self.ctree.insert_node (None, None, ("Creative Labs",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- dfi = self.ctree.insert_node (None, None, ("DFI",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- dsv = self.ctree.insert_node (None, None, ("DSV",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- dataexpert = self.ctree.insert_node (None, None, ("Data Expert",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- dell = self.ctree.insert_node (None, None, ("Dell",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- diamond = self.ctree.insert_node (None, None, ("Diamond",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- digital = self.ctree.insert_node (None, None, ("Digital",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- elsa = self.ctree.insert_node (None, None, ("ELSA",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- eontronics = self.ctree.insert_node (None, None, ("EONtronics",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- epson = self.ctree.insert_node (None, None, ("Epson",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- expertcolor = self.ctree.insert_node (None, None, ("ExpertColor",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- gainward = self.ctree.insert_node (None, None, ("Gainward",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- generic = self.ctree.insert_node (None, None, ("Generic",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- genoa = self.ctree.insert_node (None, None, ("Genoa",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- hercules = self.ctree.insert_node (None, None, ("Hercules",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- intel = self.ctree.insert_node (None, None, ("Intel",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- jaton = self.ctree.insert_node (None, None, ("Jaton",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- leadtek = self.ctree.insert_node (None, None, ("LeadTek",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- melco = self.ctree.insert_node (None, None, ("MELCO",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- machspeed = self.ctree.insert_node (None, None, ("MachSpeed",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- matrox = self.ctree.insert_node (None, None, ("Matrox",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- miro = self.ctree.insert_node (None, None, ("Miro",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- nvidia = self.ctree.insert_node (None, None, ("NVIDIA",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- neomagic = self.ctree.insert_node (None, None, ("NeoMagic",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- numbernine = self.ctree.insert_node (None, None, ("Number Nine",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- oak = self.ctree.insert_node (None, None, ("Oak",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- octek = self.ctree.insert_node (None, None, ("Octek",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- orchid = self.ctree.insert_node (None, None, ("Orchid",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- other = self.ctree.insert_node (None, None, ("Other",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- paradise = self.ctree.insert_node (None, None, ("Paradise",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- pixelview = self.ctree.insert_node (None, None, ("PixelView",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- quantum = self.ctree.insert_node (None, None, ("Quantum",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- riva = self.ctree.insert_node (None, None, ("RIVA",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- real3D = self.ctree.insert_node (None, None, ("Real3D",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- rendition = self.ctree.insert_node (None, None, ("Rendition",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- s3 = self.ctree.insert_node (None, None, ("S3",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- sharp = self.ctree.insert_node (None, None, ("Sharp",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- smi = self.ctree.insert_node (None, None, ("SMI",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- sni = self.ctree.insert_node (None, None, ("SNI",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- spea = self.ctree.insert_node (None, None, ("SPEA",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- stb = self.ctree.insert_node (None, None, ("STB",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- sis = self.ctree.insert_node (None, None, ("SiS",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- sierra = self.ctree.insert_node (None, None, ("Sierra",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- sigma = self.ctree.insert_node (None, None, ("Sigma",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- soyo = self.ctree.insert_node (None, None, ("Soyo",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- spider = self.ctree.insert_node (None, None, ("Spider",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- sun = self.ctree.insert_node (None, None, ("Sun",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- techworks = self.ctree.insert_node (None, None, ("TechWorks",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- toshiba = self.ctree.insert_node (None, None, ("Toshiba",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- trident = self.ctree.insert_node (None, None, ("Trident",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- videologic = self.ctree.insert_node (None, None, ("VideoLogic",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- viewtop = self.ctree.insert_node (None, None, ("ViewTop",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- voodoo = self.ctree.insert_node (None, None, ("Voodoo",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- wd = self.ctree.insert_node (None, None, ("WD",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
- winfast = self.ctree.insert_node (None, None, ("WinFast",), 2, self.videocard_p, self.videocard_b,
- self.videocard_p, self.videocard_b, FALSE)
-
-
- self.cards = self.todo.x.cards ()
- cards = self.cards.keys ()
- cards.sort ()
- select = 0
-
- for card in cards:
- temp = string.lower(card)
-
- if temp[:5] == "aopen":
- node = self.ctree.insert_node (aopen, None, (card,), 2)
- self.ctree.node_set_row_data(node, (aopen, card))
- elif temp[:4] == "asus":
- node = self.ctree.insert_node (asus, None, (card,), 2)
- self.ctree.node_set_row_data(node, (asus, card))
- elif temp[:3] == "ati":
- node = self.ctree.insert_node (ati, None, (card,), 2)
- self.ctree.node_set_row_data(node, (ati, card))
- elif temp[:5] == "actix":
- node = self.ctree.insert_node (actix, None, (card,), 2)
- self.ctree.node_set_row_data(node, (actix, card))
- elif temp[:9] == "ark logic":
- node = self.ctree.insert_node (arklogic, None, (card,), 2)
- self.ctree.node_set_row_data(node, (arklogic, card))
- elif temp[:12] == "avance logic":
- node = self.ctree.insert_node (avancelogic, None, (card,), 2)
- self.ctree.node_set_row_data(node, (avancelogic, card))
- elif temp[:6] == "compaq":
- node = self.ctree.insert_node (compaq, None, (card,), 2)
- self.ctree.node_set_row_data(node, (compaq, card))
- elif temp[:7] == "canopus":
- node = self.ctree.insert_node (canopus, None, (card,), 2)
- self.ctree.node_set_row_data(node, (canopus, card))
- elif temp[:6] == "cardex":
- node = self.ctree.insert_node (cardex, None, (card,), 2)
- self.ctree.node_set_row_data(node, (cardex, card))
- elif temp[:9] == "chaintech":
- node = self.ctree.insert_node (chaintech, None, (card,), 2)
- self.ctree.node_set_row_data(node, (chaintech, card))
- elif temp[:5] == "chips":
- node = self.ctree.insert_node (cnt, None, (card,), 2)
- self.ctree.node_set_row_data(node, (cnt, card))
- elif temp[:6] == "cirrus":
- node = self.ctree.insert_node (cirrus, None, (card,), 2)
- self.ctree.node_set_row_data(node, (cirrus, card))
- elif temp[:8] == "creative":
- node = self.ctree.insert_node (creativelabs, None, (card,), 2)
- self.ctree.node_set_row_data(node, (creativelabs, card))
- elif temp[:3] == "dfi":
- node = self.ctree.insert_node (dfi, None, (card,), 2)
- self.ctree.node_set_row_data(node, (dfi, card))
- elif temp[:3] == "dsv":
- node = self.ctree.insert_node (dsv, None, (card,), 2)
- self.ctree.node_set_row_data(node, (dsv, card))
- elif temp[:4] == "data":
- node = self.ctree.insert_node (dataexpert, None, (card,), 2)
- self.ctree.node_set_row_data(node, (dataexpert, card))
- elif temp[:4] == "dell":
- node = self.ctree.insert_node (dell, None, (card,), 2)
- self.ctree.node_set_row_data(node, (dell, card))
- elif temp[:7] == "diamond":
- node = self.ctree.insert_node (diamond, None, (card,), 2)
- self.ctree.node_set_row_data(node, (diamond, card))
- elif temp[:7] == "digital":
- node = self.ctree.insert_node (digital, None, (card,), 2)
- self.ctree.node_set_row_data(node, (digital, card))
- elif temp[:4] == "elsa":
- node = self.ctree.insert_node (elsa, None, (card,), 2)
- self.ctree.node_set_row_data(node, (elsa, card))
- elif temp[:10] == "eontronics":
- node = self.ctree.insert_node (eontronics, None, (card,), 2)
- self.ctree.node_set_row_data(node, (eontronics, card))
- elif temp[:5] == "epson":
- node = self.ctree.insert_node (epson, None, (card,), 2)
- self.ctree.node_set_row_data(node, (epson, card))
- elif temp[:11] == "expertcolor":
- node = self.ctree.insert_node (expertcolor, None, (card,), 2)
- self.ctree.node_set_row_data(node, (expertcolor, card))
- elif temp[:8] == "gainward":
- node = self.ctree.insert_node (gainward, None, (card,), 2)
- self.ctree.node_set_row_data(node, (gainward, card))
- elif temp[:7] == "generic":
- node = self.ctree.insert_node (generic, None, (card,), 2)
- self.ctree.node_set_row_data(node, (generic, card))
- elif temp[:5] == "genoa":
- node = self.ctree.insert_node (genoa, None, (card,), 2)
- self.ctree.node_set_row_data(node, (genoa, card))
- elif temp[:8] == "hercules":
- node = self.ctree.insert_node (hercules, None, (card,), 2)
- self.ctree.node_set_row_data(node, (hercules, card))
- elif temp[:5] == "intel":
- node = self.ctree.insert_node (intel, None, (card,), 2)
- self.ctree.node_set_row_data(node, (intel, card))
- elif temp[:5] == "jaton":
- node = self.ctree.insert_node (jaton, None, (card,), 2)
- self.ctree.node_set_row_data(node, (jaton, card))
- elif temp[:7] == "leadtek":
- node = self.ctree.insert_node (leadtek, None, (card,), 2)
- self.ctree.node_set_row_data(node, (leadtek, card))
- elif temp[:5] == "melco":
- node = self.ctree.insert_node (melco, None, (card,), 2)
- self.ctree.node_set_row_data(node, (melco, card))
- elif temp[:9] == "machspeed":
- node = self.ctree.insert_node (machspeed, None, (card,), 2)
- self.ctree.node_set_row_data(node, (machspeed, card))
- elif temp[:6] == "matrox":
- node = self.ctree.insert_node (matrox, None, (card,), 2)
- self.ctree.node_set_row_data(node, (matrox, card))
- elif temp[:4] == "miro":
- node = self.ctree.insert_node (miro, None, (card,), 2)
- self.ctree.node_set_row_data(node, (miro, card))
- elif temp[:6] == "nvidia":
- node = self.ctree.insert_node (nvidia, None, (card,), 2)
- self.ctree.node_set_row_data(node, (nvidia, card))
- elif temp[:8] == "neomagic":
- node = self.ctree.insert_node (neomagic, None, (card,), 2)
- self.ctree.node_set_row_data(node, (neomagic, card))
- elif temp[:6] == "number":
- node = self.ctree.insert_node (numbernine, None, (card,), 2)
- self.ctree.node_set_row_data(node, (numbernine, card))
- elif temp[:3] == "oak":
- node = self.ctree.insert_node (oak, None, (card,), 2)
- self.ctree.node_set_row_data(node, (oak, card))
- elif temp[:5] == "octek":
- node = self.ctree.insert_node (octek, None, (card,), 2)
- self.ctree.node_set_row_data(node, (octek, card))
- elif temp[:6] == "orchid":
- node = self.ctree.insert_node (orchid, None, (card,), 2)
- self.ctree.node_set_row_data(node, (orchid, card))
- elif temp[:8] == "paradise":
- node = self.ctree.insert_node (paradise, None, (card,), 2)
- self.ctree.node_set_row_data(node, (paradise, card))
- elif temp[:9] == "pixelview":
- node = self.ctree.insert_node (pixelview, None, (card,), 2)
- self.ctree.node_set_row_data(node, (pixelview, card))
- elif temp[:7] == "quantum":
- node = self.ctree.insert_node (quantum, None, (card,), 2)
- self.ctree.node_set_row_data(node, (quantum, card))
- elif temp[:4] == "riva":
- node = self.ctree.insert_node (riva, None, (card,), 2)
- self.ctree.node_set_row_data(node, (riva, card))
- elif temp[:6] == "real3d":
- node = self.ctree.insert_node (real3D, None, (card,), 2)
- self.ctree.node_set_row_data(node, (real3D, card))
- elif temp[:9] == "rendition":
- node = self.ctree.insert_node (rendition, None, (card,), 2)
- self.ctree.node_set_row_data(node, (rendition, card))
- elif temp[:2] == "s3":
- node = self.ctree.insert_node (s3, None, (card,), 2)
- self.ctree.node_set_row_data(node, (s3, card))
- elif temp[:5] == "sharp":
- node = self.ctree.insert_node (sharp, None, (card,), 2)
- self.ctree.node_set_row_data(node, (sharp, card))
- elif temp[:3] == "smi":
- node = self.ctree.insert_node (smi, None, (card,), 2)
- self.ctree.node_set_row_data(node, (smi, card))
- elif temp[:3] == "sni":
- node = self.ctree.insert_node (sni, None, (card,), 2)
- self.ctree.node_set_row_data(node, (sni, card))
- elif temp[:4] == "spea":
- node = self.ctree.insert_node (spea, None, (card,), 2)
- self.ctree.node_set_row_data(node, (spea, card))
- elif temp[:3] == "stb":
- node = self.ctree.insert_node (stb, None, (card,), 2)
- self.ctree.node_set_row_data(node, (stb, card))
- elif temp[:3] == "sis":
- node = self.ctree.insert_node (sis, None, (card,), 2)
- self.ctree.node_set_row_data(node, (sis, card))
- elif temp[:6] == "sierra":
- node = self.ctree.insert_node (sierra, None, (card,), 2)
- self.ctree.node_set_row_data(node, (sierra, card))
- elif temp[:5] == "sigma":
- node = self.ctree.insert_node (sigma, None, (card,), 2)
- self.ctree.node_set_row_data(node, (sigma, card))
- elif temp[:4] == "soyo":
- node = self.ctree.insert_node (soyo, None, (card,), 2)
- self.ctree.node_set_row_data(node, (soyo, card))
- elif temp[:6] == "spider":
- node = self.ctree.insert_node (spider, None, (card,), 2)
- self.ctree.node_set_row_data(node, (spider, card))
- elif temp[:3] == "sun":
- node = self.ctree.insert_node (sun, None, (card,), 2)
- self.ctree.node_set_row_data(node, (sun, card))
- elif temp[:9] == "techworks":
- node = self.ctree.insert_node (techworks, None, (card,), 2)
- self.ctree.node_set_row_data(node, (techworks, card))
- elif temp[:7] == "toshiba":
- node = self.ctree.insert_node (toshiba, None, (card,), 2)
- self.ctree.node_set_row_data(node, (toshiba, card))
- elif temp[:7] == "trident":
- node = self.ctree.insert_node (trident, None, (card,), 2)
- self.ctree.node_set_row_data(node, (trident, card))
- elif temp[:10] == "videologic":
- node = self.ctree.insert_node (videologic, None, (card,), 2)
- self.ctree.node_set_row_data(node, (videologic, card))
- elif temp[:7] == "viewtop":
- node = self.ctree.insert_node (viewtop, None, (card,), 2)
- self.ctree.node_set_row_data(node, (viewtop, card))
- elif temp[:6] == "voodoo":
- node = self.ctree.insert_node (voodoo, None, (card,), 2)
- self.ctree.node_set_row_data(node, (voodoo, card))
- elif temp[:2] == "wd":
- node = self.ctree.insert_node (wd, None, (card,), 2)
- self.ctree.node_set_row_data(node, (wd, card))
- elif temp[:7] == "winfast":
- node = self.ctree.insert_node (winfast, None, (card,), 2)
- self.ctree.node_set_row_data(node, (winfast, card))
- else:
- node = self.ctree.insert_node (other, None, (card,), 2)
- self.ctree.node_set_row_data(node, (other, card))
-
- if self.todo.videoCardOriginalName != "":
- if card == self.todo.videoCardOriginalName:
- self.todo.videoCardOriginalNode = node
-
- #--This is some pretty confusing logic to handle all the state information.
-
+ self.ctree = GtkCTree ()
+ self.ctree.set_selection_mode (SELECTION_BROWSE)
+ self.ctree.set_expander_style(CTREE_EXPANDER_TRIANGLE)
+ self.ctree.set_line_style(CTREE_LINES_NONE)
+
+ (self.videocard_p, self.videocard_b) = create_pixmap_from_xpm_d (self.ctree, None, xpms_gui.VIDEOCARD_XPM)
+
+ self.manufacturer_nodes = {}
+
+ # put Generic and other first
+ self.manufacturer_nodes["Generic"] = self.ctree.insert_node(None, None,
+ (_("Generic"),), 2,
+ self.videocard_p, self.videocard_b,
+ self.videocard_p, self.videocard_b,
+ FALSE)
+ self.manufacturer_nodes["Other"] = self.ctree.insert_node(None, None,
+ (_("Other"),), 2,
+ self.videocard_p, self.videocard_b,
+ self.videocard_p, self.videocard_b,
+ FALSE)
+
+ for man in self.videocard.manufacturerDB():
+ self.manufacturer_nodes[man] = self.ctree.insert_node (None, None,
+ (man,), 2,
+ self.videocard_p, self.videocard_b,
+ self.videocard_p, self.videocard_b,
+ FALSE)
+
+ self.cards = self.videocard.cardsDB()
+ cards = self.cards.keys()
+ cards.sort()
+
+ other_cards = copy.copy(cards)
+ current_cardsel = self.videocard.primaryCard().getCardData(dontResolve=1)["NAME"]
+ probed_card = self.videocard.primaryCard(useProbed=1).getCardData()["NAME"]
+ for card in cards:
+ temp = string.lower(card)
+
+ manufacturers = self.videocard.manufacturerDB()
+ manufacturers.append("Generic")
+ for man in manufacturers:
+ if string.lower(man) == temp[:len(man)]:
+ node = self.ctree.insert_node (self.manufacturer_nodes[man], None, (card,), 2)
+ self.ctree.node_set_row_data(node, (self.manufacturer_nodes[man], card))
+ other_cards.remove(card)
+
+ # note location of current selection and probed card
+ if card == current_cardsel:
+ self.current_node = node
+ self.selected_node = node
+
+ if card == probed_card:
+ self.orig_node = node
- if self.todo.x.vidCards:
- if self.todo.videoCardStateName == "":
- if card == self.todo.x.vidCards[self.todo.x.primary]["NAME"]:
- self.todo.videoCardStateName = card
+ # now add cards not categorized into above manufacturers
+ for card in other_cards:
+ node = self.ctree.insert_node (self.manufacturer_nodes["Other"], None, (card,), 2)
+ self.ctree.node_set_row_data(node, (self.manufacturer_nodes["Other"], card))
+
+ # note location of current selection and probed card
+ if card == current_cardsel:
+ self.current_node = node
+ self.selected_node = node
+
+ if card == probed_card:
+ self.orig_node = node
- #--If we haven't been to this screen before, initialize the state to the original value
- if self.todo.videoCardOriginalName == "":
- self.todo.videoCardOriginalName = card
- self.todo.videoCardOriginalNode = node
+ # set to None initially, changed by selectCb_tree callback
+ self.selected_card = None
- self.current_node = node
- self.selected_node = node
- elif card == self.todo.videoCardStateName:
- self.current_node = node
- self.selected_node = node
-
- elif card == self.todo.videoCardStateName:
- #--If we haven't been to this screen before, initialize the state to the original value
- if self.todo.videoCardOriginalName == "":
- self.todo.videoCardOriginalName = card
- self.todo.videoCardOriginalNode = node
-
- self.current_node = node
- self.selected_node = node
+ #- Once ctree is realized then expand branch and select selected item.
+ self.ctree.connect ("tree_select_row", self.selectCb_tree)
+ self.ctree.connect ("draw", self.movetree, self.selected_node)
- elif card == self.todo.videoCardStateName:
- self.current_node = node
- self.selected_node = node
+ sw = GtkScrolledWindow ()
+ sw.set_policy (POLICY_NEVER, POLICY_AUTOMATIC)
+ sw.add (self.ctree)
+ box.pack_start (sw, TRUE)
+ #Memory configuration menu
+ hbox = GtkHBox()
+ hbox.set_border_width(3)
+
+ label = GtkLabel (_("Video card RAM: "))
- elif card == self.todo.videoCardOriginalName:
- card = self.todo.videoCardOriginalName
- self.todo.videoCardOriginalNode = node
+ self.ramOption = GtkOptionMenu()
+ self.ramOption.set_usize (40, 20)
+ self.ramMenu = GtkMenu()
- else:
- if card == "Generic VGA compatible":
- #--If we haven't been to this screen before, initialize the state to the original value
- if self.todo.videoCardOriginalName == "":
- self.todo.videoCardOriginalName = card
- self.todo.videoCardOriginalNode = node
-
- self.current_node = node
- self.selected_node = node
-
- #- Once ctree is realized, then expand necessary branch and select selected item.
- self.ctree.connect ("tree_select_row", self.selectCb_tree)
- self.ctree.connect ("draw", self.movetree, self.selected_node)
-
- sw = GtkScrolledWindow ()
- sw.set_policy (POLICY_NEVER, POLICY_AUTOMATIC)
- sw.add (self.ctree)
- box.pack_start (sw, TRUE)
-
-
- #Memory configuration menu
- hbox = GtkHBox()
- hbox.set_border_width(3)
-
- label = GtkLabel (_("Video card RAM: "))
-
- self.ramOption = GtkOptionMenu()
- self.ramOption.set_usize (40, 20)
- self.ramMenu = GtkMenu()
-
- mem1 = GtkMenuItem("256 kB")
- mem1.connect ("activate", self.memory_cb, "256k")
- mem2 = GtkMenuItem("512 kB")
- mem2.connect ("activate", self.memory_cb, "512k")
- mem3 = GtkMenuItem("1 MB")
- mem3.connect ("activate", self.memory_cb, "1024k")
- mem4 = GtkMenuItem("2 MB")
- mem4.connect ("activate", self.memory_cb, "2048k")
- mem5 = GtkMenuItem("4 MB")
- mem5.connect ("activate", self.memory_cb, "4096k")
- mem6 = GtkMenuItem("8 MB")
- mem6.connect ("activate", self.memory_cb, "8192k")
- mem7 = GtkMenuItem("16 MB")
- mem7.connect ("activate", self.memory_cb, "16384k")
- mem8 = GtkMenuItem("32 MB")
- mem8.connect ("activate", self.memory_cb, "32768k")
- mem9 = GtkMenuItem("64 MB")
- mem9.connect ("activate", self.memory_cb, "65536k")
- self.ramMenu.add(mem1)
- self.ramMenu.add(mem2)
- self.ramMenu.add(mem3)
- self.ramMenu.add(mem4)
- self.ramMenu.add(mem5)
- self.ramMenu.add(mem6)
- self.ramMenu.add(mem7)
- self.ramMenu.add(mem8)
- self.ramMenu.add(mem9)
-
-
- #--Valid video ram sizes--
- ram_sizes = [256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536]
-
- count = 0
-
- #--Some video cards don't return exact numbers, so we've got to do some hacks
- try:
- vidRam = string.atoi (self.todo.x.vidRam)
- except:
- vidRam = 1024
-
- for size in ram_sizes:
- small = size - 64
- #--Cards such as Mach64 and ATI Rage Mobility report 64k less ram than it should
- if size == vidRam or small == vidRam:
- if self.todo.videoRamState == "":
- self.todo.videoRamState = count
- self.todo.videoRamOriginal = count
- self.ramMenu.set_active(count)
- else:
- self.ramMenu.set_active(self.todo.videoRamState)
- count = count + 1
+ for mem in self.videocard.possible_ram_sizes():
+ if mem < 1000:
+ tag = "%d KB" % (mem)
+ else:
+ tag = "%d MB" % (mem/1024)
+ memitem = GtkMenuItem(tag)
+ self.ramMenu.add(memitem)
- hbox.pack_start(label, FALSE)
- hbox.pack_start(self.ramOption, TRUE, TRUE, 25)
+ self.selectVideoRamMenu(0)
+ hbox.pack_start(label, FALSE)
+ hbox.pack_start(self.ramOption, TRUE, TRUE, 25)
- self.ramOption.set_menu (self.ramMenu)
- box.pack_start (hbox, FALSE)
+ self.ramOption.set_menu (self.ramMenu)
+ box.pack_start (hbox, FALSE)
restore = GtkButton (_("Restore original values"))
restore.connect ("clicked", self.restorePressed)
hbox.pack_start(restore, FALSE, 25)
-
+
self.skip = GtkCheckButton (_("Skip X Configuration"))
self.skip.connect ("toggled", self.skipToggled)
-
+
hbox = GtkHBox (TRUE, 5)
-
+
self.topbox = GtkVBox (FALSE, 5)
self.topbox.set_border_width (5)
self.topbox.pack_start (box, TRUE, TRUE)
self.topbox.pack_start (self.skip, FALSE)
-
+
self.configbox = box
-
- self.skip.set_active (self.todo.x.skip)
-
+
+ self.skip.set_active (self.dispatch.stepInSkipList("monitor"))
+
return self.topbox