diff options
author | Erik Troan <ewt@redhat.com> | 2001-06-20 01:51:29 +0000 |
---|---|---|
committer | Erik Troan <ewt@redhat.com> | 2001-06-20 01:51:29 +0000 |
commit | 0dd8714cdfddff257b075afb37e5001f9c81f64c (patch) | |
tree | ef7f6b1bbb3fa2b33d7ceaf82003c4dfab45b52d | |
parent | 098dde8b8cb8dbf60550b92ae0a09778068ac64e (diff) | |
download | anaconda-0dd8714cdfddff257b075afb37e5001f9c81f64c.tar.gz anaconda-0dd8714cdfddff257b075afb37e5001f9c81f64c.tar.xz anaconda-0dd8714cdfddff257b075afb37e5001f9c81f64c.zip |
merge from (now defunct) anaconda-dispatch branch
-rw-r--r-- | iw/account_gui.py | 301 | ||||
-rw-r--r-- | iw/auth_gui.py | 74 | ||||
-rw-r--r-- | iw/bootdisk_gui.py | 68 | ||||
-rw-r--r-- | iw/confirm_gui.py | 71 | ||||
-rw-r--r-- | iw/congrats_gui.py | 6 | ||||
-rw-r--r-- | iw/dependencies_gui.py | 59 | ||||
-rw-r--r-- | iw/examine_gui.py | 12 | ||||
-rw-r--r-- | iw/fdisk_gui.py | 49 | ||||
-rw-r--r-- | iw/firewall_gui.py | 104 | ||||
-rw-r--r-- | iw/format_gui.py | 67 | ||||
-rw-r--r-- | iw/installpath_gui.py | 298 | ||||
-rw-r--r-- | iw/iw_gui.py | 18 | ||||
-rw-r--r-- | iw/keyboard_gui.py | 66 | ||||
-rw-r--r-- | iw/language_gui.py | 31 | ||||
-rw-r--r-- | iw/language_support_gui.py | 56 | ||||
-rw-r--r-- | iw/lilo_gui.py | 209 | ||||
-rw-r--r-- | iw/mouse_gui.py | 38 | ||||
-rw-r--r-- | iw/network_gui.py | 63 | ||||
-rw-r--r-- | iw/partition_gui.py | 1060 | ||||
-rw-r--r-- | iw/partmethod_gui.py | 54 | ||||
-rw-r--r-- | iw/progress_gui.py | 91 | ||||
-rw-r--r-- | iw/rootpartition_gui.py | 6 | ||||
-rw-r--r-- | iw/timezone_gui.py | 16 | ||||
-rw-r--r-- | iw/upgrade_swap_gui.py | 23 | ||||
-rw-r--r-- | iw/welcome_gui.py | 19 | ||||
-rw-r--r-- | iw/xconfig_gui.py | 1734 |
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 |