from gtk import * from iw import * from gui import _ import re 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") def getNext (self): if not self.__dict__.has_key("pw"): return None self.todo.rootpassword.set (self.pw.get_text ()) accounts = [] for n in range(len(self.passwords.keys())): accounts.append((self.userList.get_text(n, 0), self.userList.get_text(n, 1), self.passwords[self.userList.get_text(n, 0)])) self.todo.setUserList(accounts) return None def rootPasswordsMatch (self, *args): pw = self.pw.get_text () confirm = self.confirm.get_text () if pw == confirm and len (pw) >= 6: self.ics.setNextEnabled (TRUE) else: self.ics.setNextEnabled (FALSE) def userOkay(self, *args): accountName = self.accountName.get_text() password1 = self.userPass1.get_text() password2 = self.userPass2.get_text() if (password1 and password1 == password2 and self.userAccountMatch.search(accountName) and len(accountName) <= 8): valid = 1 else: 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 index = index[0] accountName = self.userList.get_text(index, 0) fullName = self.userList.get_text(index, 1) password = self.passwords[accountName] 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): accountName = self.accountName.get_text() password1 = self.userPass1.get_text() password2 = self.userPass2.get_text() fullName = self.fullName.get_text() if not (accountName and password1 and (password1 == password2)): return if self.passwords.has_key (accountName): return if (self.editingUser != None): 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 deleteUser(self, *args): index = self.userList.selection if (not index): return index = index[0] accountName = self.userList.get_text(index, 0) 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("") def getScreen (self): self.passwords = {} self.editingUser = None box = GtkVBox () im = self.ics.readPixmap ("root-password.png") if im: im.render () pix = im.make_pixmap () a = GtkAlignment () a.add (pix) a.set (0.0, 0.0, 0.0, 0.0) box.pack_start (a, FALSE) forward = lambda widget, box=box: box.focus (DIR_TAB_FORWARD) table = GtkTable (2, 2) table.set_row_spacings (5) table.set_col_spacings (5) pass1 = GtkLabel (_("Root Password: ")) pass1.set_alignment (0.0, 0.5) table.attach (pass1, 0, 1, 0, 1, FILL, 0, 10) pass2 = GtkLabel (_("Confirm: ")) 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 ("changed", self.rootPasswordsMatch) self.pw.set_visibility (FALSE) self.confirm = GtkEntry (128) self.confirm.connect ("activate", 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) box.pack_start (GtkHSeparator (), FALSE, padding=3) table = GtkTable (2, 3) table.set_row_spacings(5) table.set_col_spacings(5) entrytable = GtkTable (4, 4) entrytable.set_row_spacings(5) entrytable.set_col_spacings(5) self.entrytable = entrytable self.accountName = GtkEntry (8) self.accountName.connect ("activate", forward) self.accountName.connect ("changed", self.userOkay) self.accountName.set_usize (50, -1) 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) label = GtkLabel (_("Full Name") + ": ") label.set_alignment (0.0, 0.5) entrytable.attach (label, 0, 1, 2, 3, FILL, 0, 10) entrytable.attach (self.fullName, 1, 4, 2, 3, FILL|EXPAND) 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.addUser) delete = GtkButton (_("Delete")) delete.connect("clicked", self.deleteUser) new = GtkButton (_("New")) new.connect("clicked", self.newUser) bb = GtkHButtonBox () bb.set_border_width (5) bb.pack_start (self.add) bb.pack_start (self.edit) bb.pack_start (delete) bb.pack_start (new) ## table.attach (self.add, 0, 1, 1, 2, xoptions = FILL) ## table.attach (self.edit, 1, 2, 1, 2, xoptions = FILL) ## table.attach (delete, 2, 3, 1, 2, xoptions = FILL) ## table.attach (new, 3, 4, 1, 2, xoptions = FILL) box.pack_start (table, FALSE) box.pack_start (bb, FALSE) self.userList = GtkCList (2, (_("Account Name"), _("Full Name"))) for x in range (2): self.userList.set_selectable (x, FALSE) self.userList.connect("select_row", self.userSelected) box.pack_start (self.userList, TRUE) index = 0 for (user, name, password) in self.todo.getUserList(): self.userList.append((user, name)) self.passwords[user] = password index = index + 1 self.userOkay() box.set_border_width (5) return box