diff options
-rwxr-xr-x | anaconda | 8 | ||||
-rw-r--r-- | iw/mouse.py | 126 | ||||
-rw-r--r-- | text.py | 108 | ||||
-rw-r--r-- | todo.py | 116 | ||||
-rw-r--r-- | xserver.py | 12 |
5 files changed, 172 insertions, 198 deletions
@@ -29,6 +29,7 @@ forceMount = 0 mode = 'g' method = None traceOnly = 0 +mouseInfo = None for n in args: (str, arg) = n @@ -83,8 +84,11 @@ import isys if (mode == 'g' and not os.environ.has_key('DISPLAY')): import xserver - if xserver.startX (): + result = xserver.startX () + if not result: mode = 't' + else: + (mouseInfo,) = (result) if (mode == 'g'): if not test and not localInstall: @@ -150,7 +154,7 @@ if forceMount: try: todo = ToDo(intf, method, rootPath, installSystem = installPackages, - setupFilesystems = setupFilesystems) + setupFilesystems = setupFilesystems, mouse = mouseInfo) intf.run(todo) except: (type, value, tb) = sys.exc_info() diff --git a/iw/mouse.py b/iw/mouse.py index 1ec371b10..33f65aa9e 100644 --- a/iw/mouse.py +++ b/iw/mouse.py @@ -30,8 +30,10 @@ class MouseWindow (InstallWindow): def build_ctree (self, list, cur_parent = None, prev_node = None): if (list == ()): return - if (len (list) > 1 and isinstance (list[1], type (()))): leaf = FALSE - else: leaf = TRUE + if (len (list) > 1 and isinstance (list[1], type (()))): + leaf = FALSE + else: + leaf = TRUE if isinstance (list[0], type (())): self.build_ctree (list[0], prev_node, None) @@ -64,61 +66,65 @@ class MouseWindow (InstallWindow): if node: name = " - " + name - dev = self.locList.get_text (self.locList.selection[0], 1) - if not find (dev, "psaux"): - name = name + " (PS/2)" - elif not find (dev, "ttyS"): - name = name + " (serial)" + if self.locList.selection: + self.serialDevice = self.locList.get_text (self.locList.selection[0], 0) + # otherwise, just leave the old selection in place return name def getNext (self): - self.todo.mouse.set (self.getCurrentKey ()) + cur = self.getCurrentKey() + (gpm, xdev, device, emulate) = self.availableMice[cur] + + def set (self, mouse, emulateThreeButtons): + self.todo.mouse.set (cur, 0) + if (device == "ttyS"): + self.todo.mouse.setDevice(self.serialDevice) + else: + self.todo.mouse.setDevice(device) return None - def locSelect (self, widget, row, *args): - if self.todo.mouse.available ().has_key (self.getCurrentKey ()): - self.ics.setNextEnabled (TRUE) - else: - self.ics.setNextEnabled (FALSE) + def selectDeviceType(self, *args): + self.ics.setNextEnabled (TRUE) - def select (self, widget, node, *args): - if node.is_leaf and self.todo.mouse.available ().has_key (self.getCurrentKey ()): - self.ics.setNextEnabled (TRUE) - else: + def selectMouseType (self, widget, node, *args): + if not node.is_leaf: self.ics.setNextEnabled (FALSE) + return + cur = self.getCurrentKey() + if (not self.availableMice.has_key(cur)): + self.ics.setNextEnabled (FALSE) + return + + (gpm, xdev, device, emulate) = self.availableMice[cur] + if device == "ttyS": + print "device is", self.serialDevice + if (self.serialDevice): + self.locList.select_row(int(self.serialDevice[4]), 1) + self.ics.setNextEnabled (TRUE) + else: + self.locList.unselect_all() + print "disabling next" + self.ics.setNextEnabled (FALSE) + + self.locList.set_sensitive(TRUE) + else: + self.locList.unselect_all() + self.locList.set_sensitive(FALSE) + self.ics.setNextEnabled (TRUE) + def getScreen (self): - sorted_mice_keys = self.todo.mouse.available ().keys () + self.availableMice = self.todo.mouse.available() + sorted_mice_keys = self.availableMice.keys() sorted_mice_keys.sort () - # build a dictionary of device : device name - devs = {} - for x in map (lambda x, dict=self.todo.mouse.available (): (dict[x][2], x), - self.todo.mouse.available ().keys ()): - if not devs.has_key (x[0]): - devs[x[0]] = x[1] - - devNames = { "psaux" : (0, "PS/2"), - "ttyS" : (1, "COM"), - "atibm" : (2, "ATI Bus"), - "logibm" : (2, "Logitech Bus"), - "inportbm" : (2, "Microsoft Bus") } - - devList = [] - for x in devs.keys (): - # handle the special case of COM ports - if x == "ttyS": - for i in range (0, 4): - devList.append ((devNames[x][0], "%s %i" % (devNames[x][1], i+1), "%s%i" % (x, i))) - continue - - if devNames.has_key (x): - devList.append ((devNames[x][0], devNames[x][1], x)) - else: - devList.append ((999, "Unknown Port", x)) + (currentMouse, currentDev) = self.todo.mouse.get() - devList.sort () + deviceList = [ ("/dev/ttyS0 (COM1 under DOS)", "ttyS0" ), + ("/dev/ttyS1 (COM2 under DOS)", "ttyS1" ), + ("/dev/ttyS2 (COM3 under DOS)", "ttyS2" ), + ("/dev/ttyS3 (COM4 under DOS)", "ttyS3" ) ] box = GtkVBox (FALSE, 5) @@ -126,9 +132,10 @@ class MouseWindow (InstallWindow): sw.set_border_width (5) sw.set_policy (POLICY_AUTOMATIC, POLICY_AUTOMATIC) self.locList = GtkCList (2, ("Port", "Device")) - self.locList.set_selection_mode (SELECTION_BROWSE) + self.locList.set_selection_mode (SELECTION_SINGLE) - map (lambda x, self=self: self.locList.append (x[1:]), devList) + for (descrip, dev) in deviceList: + self.locList.append((dev, descrip)) self.locList.columns_autosize () self.locList.set_column_resizeable (0, FALSE) @@ -136,33 +143,34 @@ class MouseWindow (InstallWindow): self.locList.column_title_passive (1) self.locList.set_border_width (5) - box.pack_start (self.locList, FALSE) - sw = GtkScrolledWindow () sw.set_border_width (5) sw.set_policy (POLICY_AUTOMATIC, POLICY_AUTOMATIC) self.ctree = GtkCTree (1) - self.typeList = GtkList () - self.typeList.set_selection_mode (SELECTION_BROWSE) - - mice = [] - for x in sorted_mice_keys: - value = strip (sub ("\(.*\)", "", x)) - if not value in mice: - mice.append (value) groups = () - for x in mice: + for x in sorted_mice_keys: groups = self.merge (groups, string.split (x, " - ", 1)) groups = self.reduce_leafs (groups) self.build_ctree (groups) self.ctree.set_selection_mode (SELECTION_BROWSE) self.ctree.columns_autosize () - self.ctree.connect ("tree_select_row", self.select) - self.locList.connect ("select_row", self.locSelect) + self.ctree.connect ("tree_select_row", self.selectMouseType) + self.locList.connect ("select_row", self.selectDeviceType) + self.locList.set_sensitive(FALSE) + sw.add (self.ctree) + + if (currentDev and currentDev[0:3] == "ttyS"): + self.serialDevice = currentDev + self.locList.select_row(int(self.serialDevice[4]), 1) + else: + self.locList.unselect_all(); + self.serialDevice = None + box.pack_start (sw) + box.pack_start (self.locList, FALSE) return box @@ -36,6 +36,86 @@ class LanguageWindow: todo.language.set (languages.keys()[choice]) return INSTALL_OK +class MouseDeviceWindow: + def __call__(self, screen, todo): + choices = { _("/dev/ttyS0 (COM1 under DOS)") : "ttyS0", + _("/dev/ttyS1 (COM2 under DOS)") : "ttyS1", + _("/dev/ttyS2 (COM3 under DOS)") : "ttyS2", + _("/dev/ttyS3 (COM4 under DOS)") : "ttyS3" } + + i = 0 + default = 0 + mouse = todo.mouse.getDevice() + if (mouse[0:4] != "ttyS"): return INSTALL_NOOP + + l = choices.keys() + l.sort() + for choice in l: + if choices[choice] == mouse: + default = i + break + i = i + 1 + + (button, result) = ListboxChoiceWindow(screen, _("Device"), + _("What device is your mouse located on? %s %i") % (mouse, default), l, + [ _("Ok"), _("Back") ], default = default ) + if (button == string.lower(_("Back"))): return INSTALL_BACK + + todo.mouse.setDevice(choices[l[result]]) + + #import sys; sys.exit(0) + + return INSTALL_OK + +class MouseWindow: + def __call__(self, screen, todo): + mice = todo.mouse.available ().keys () + mice.sort () + (default, emulate) = todo.mouse.get () + default = mice.index (default) + + bb = ButtonBar(screen, [_("OK"), _("Back")]) + t = TextboxReflowed(30, + _("Which model mouse is attached to this computer?")) + l = Listbox(6, scroll = 1, returnExit = 0) + + key = 0 + for mouse in mice: + l.append(mouse, key) + key = key + 1 + l.setCurrent(default) + + c = Checkbox(_("Emulate 3 Buttons?"), isOn = emulate) + + g = GridForm(screen, _("Mouse Selection"), 1, 4) + g.add(t, 0, 0) + g.add(l, 0, 1, padding = (0, 1, 0, 1)) + g.add(c, 0, 2, padding = (0, 0, 0, 1)) + g.add(bb, 0, 3, growx = 1) + + rc = g.runOnce() + + button = bb.buttonPressed(rc) + + if button == string.lower (_("Back")): + return INSTALL_BACK + + choice = l.current() + emulate = c.selected() + + todo.mouse.set(mice[choice], emulate) + + oldDev = todo.mouse.getDevice() + if (oldDev): + newDev = todo.mouse.available()[mice[choice]][2] + if ((oldDev[0:4] == "ttyS" and newDev[0:4] == "ttyS") or + (oldDev == newDev)): + pass + else: + todo.mouse.setDevice(newDev) + + return INSTALL_OK + class KeyboardWindow: def __call__(self, screen, todo): keyboards = todo.keyboard.available () @@ -613,23 +693,6 @@ class PackageDepWindow: return INSTALL_BACK return INSTALL_OK -class MouseWindow: - def __call__(self, screen, todo): - mice = todo.mouse.available ().keys () - mice.sort () - default = mice.index (todo.mouse.get ()) - - (button, choice) = \ - ListboxChoiceWindow(screen, _("Mouse Selection"), - _("Which model mouse is attached to this computer?"), mice, - buttons = [_("OK"), _("Back")], width = 30, scroll = 1, height = 8, - default = default) - - if button == string.lower (_("Back")): - return INSTALL_BACK - todo.mouse.set (mice[choice]) - return INSTALL_OK - class BootDiskWindow: def __call__(self, screen, todo): rc = ButtonChoiceWindow(screen, _("Bootdisk"), @@ -928,8 +991,8 @@ class InstallInterface: self.welcomeText = _("Red Hat Linux (C) 1999 Red Hat, Inc.") self.screen.drawRootText (0, 0, self.welcomeText) self.screen.pushHelpLine (_(" <Tab>/<Alt-Tab> between elements | <Space> selects | <F12> next screen")) -# self.screen.suspendCallback(killSelf, self.screen) -# self.screen.suspendCallback(debugSelf, self.screen) +# self.screen.suspendCallback(killSelf, self.screen) + self.screen.suspendCallback(debugSelf, self.screen) self.individual = Flag(0) self.step = 0 self.dir = 1 @@ -950,10 +1013,11 @@ class InstallInterface: # [_("Hostname Setup"), HostnameWindow, (self.screen, todo)], [_("Partition"), PartitionWindow, (self.screen, todo)], [_("Filesystem Formatting"), FormatWindow, (self.screen, todo)], - [_("Package Groups"), PackageGroupWindow, (self.screen, todo, self.individual)], - [_("Individual Packages"), IndividualPackageWindow, (self.screen, todo, self.individual)], - [_("Package Dependencies"), PackageDepWindow, (self.screen, todo)], + #[_("Package Groups"), PackageGroupWindow, (self.screen, todo, self.individual)], + #[_("Individual Packages"), IndividualPackageWindow, (self.screen, todo, self.individual)], + #[_("Package Dependencies"), PackageDepWindow, (self.screen, todo)], [_("Mouse Configuration"), MouseWindow, (self.screen, todo)], + [_("Mouse Configuration"), MouseDeviceWindow, (self.screen, todo)], [_("Authentication"), AuthConfigWindow, (self.screen, todo)], [_("Root Password"), RootPasswordWindow, (self.screen, todo)], [_("Boot Disk"), BootDiskWindow, (self.screen, todo)], @@ -8,6 +8,8 @@ import crypt import whrandom import _balkan import pcmcia +from simpleconfig import SimpleConfigFile +from mouse import Mouse def _(x): return x @@ -25,37 +27,6 @@ class LogFile: def getFile (self): return self.logFile.fileno () -class SimpleConfigFile: - def __str__ (self): - s = "" - keys = self.info.keys () - keys.sort () - for key in keys: - # FIXME - use proper escaping - s = s + key + "=\"" + self.info[key] + "\"\n" - return s - - def __init__ (self): - self.info = {} - - def set (self, *args): - for (key, data) in args: - self.info[string.upper (key)] = data - - def unset (self, *keys): - for key in keys: - key = string.upper (key) - if self.info.has_key (key): - del self.info[key] - - def get (self, key): - key = string.upper (key) - if self.info.has_key (key): - return self.info[key] - else: - return "" - - class NetworkDevice (SimpleConfigFile): def __str__ (self): s = "" @@ -185,84 +156,6 @@ class Language (SimpleConfigFile): else: return "C" -class Mouse (SimpleConfigFile): - # XXX fixme - externalize - def __init__ (self): - self.info = {} - self.mice = { - "ALPS - GlidePoint (PS/2)" : - ("ps/2", "GlidePointPS/2", "psaux"), - "ASCII - MieMouse (serial)" : - ("ms3", "IntelliMouse", "ttyS"), - "ASCII - MieMouse (PS/2)" : - ("ps/2", "NetMousePS/2", "psaux"), - "ATI - Bus Mouse" : - ("Busmouse", "BusMouse", "atibm"), - "Generic - 2 Button Mouse (serial)" : - ("Microsoft", "Microsoft", "ttyS"), - "Generic - 3 Button Mouse (serial)" : - ("Microsoft", "Microsoft", "ttyS"), - "Generic - 2 Button Mouse (PS/2)" : - ("ps/2", "PS/2", "psaux"), - "Generic - 3 Button Mouse (PS/2)" : - ("ps/2", "PS/2", "psaux"), - "Genius - NetMouse (serial)" : - ("ms3", "IntelliMouse", "ttyS"), - "Genius - NetMouse (PS/2)" : - ("netmouse", "NetMousePS/2", "psaux"), - "Genius - NetMouse Pro (PS/2)" : - ("netmouse", "NetMousePS/2", "psaux"), - "Genius - NetScroll (PS/2)" : - ("netmouse", "NetScrollPS/2", "psaux"), - "Kensington - Thinking Mouse (PS/2)" : - ("ps/2", "ThinkingMousePS/2", "psaux"), - "Logitech - C7 Mouse (serial, old C7 type)" : - ("Logitech", "Logitech", "ttyS"), - "Logitech - CC Series (serial)" : - ("logim", "MouseMan", "ttyS"), - "Logitech - Bus Mouse" : - ("Busmouse", "BusMouse", "logibm"), - "Logitech - MouseMan/FirstMouse (serial)" : - ("MouseMan", "MouseMan", "ttyS"), - "Logitech - MouseMan/FirstMouse (ps/2)" : - ("ps/2", "PS/2", "psaux"), - "Logitech - MouseMan+/FirstMouse+ (serial)" : - ("pnp", "IntelliMouse", "ttyS"), - "Logitech - MouseMan+/FirstMouse+ (PS/2)" : - ("ps/2", "MouseManPlusPS/2", "psaux"), - "Microsoft - Compatible Mouse (serial)" : - ("Microsoft", "Microsoft", "ttyS"), - "Microsoft - Rev 2.1A or higher (serial)" : - ("pnp", "Auto", "ttyS"), - "Microsoft - IntelliMouse (serial)" : - ("ms3", "IntelliMouse", "ttyS"), - "Microsoft - IntelliMouse (PS/2)" : - ("imps2", "IMPS/2", "psaux"), - "Microsoft - Bus Mouse" : - ("Busmouse", "BusMouse", "inportbm"), - "Mouse Systems - Mouse (serial)" : - ("MouseSystems", "MouseSystems", "ttyS"), - "MM - Series (serial)" : - ("MMSeries", "MMSeries", "ttyS"), - "MM - HitTablet (serial)" : - ("MMHitTab", "MMHittab", "ttyS"), - } - - def available (self): - return self.mice - - def get (self): - if self.info.has_key ("FULLNAME"): - return self.info ["FULLNAME"] - else: - return "Generic - 3 Button Mouse (PS/2)" - - def set (self, mouse): - (gpm, x11, dev) = self.mice[mouse] - self.info["MOUSETYPE"] = gpm - self.info["XMOUSETYPE"] = x11 - self.info["FULLNAME"] = mouse - class Keyboard (SimpleConfigFile): # XXX fixme - externalize def __init__ (self): @@ -378,7 +271,7 @@ rpmFD = None class ToDo: def __init__(self, intf, method, rootPath, setupFilesystems = 1, - installSystem = 1): + installSystem = 1, mouse = None): self.intf = intf self.method = method self.mounts = {} @@ -390,7 +283,7 @@ class ToDo: self.language = Language () self.network = Network () self.rootpassword = Password () - self.mouse = Mouse () + self.mouse = Mouse (xmouseType = mouse) self.keyboard = Keyboard () self.auth = Authentication () self.ddruid = None; @@ -526,6 +419,7 @@ class ToDo: f = open(self.instPath + "/etc/sysconfig/mouse", "w") f.write(str (self.mouse)) f.close() + self.mouse.makeLink(self.instPath) def writeKeyboard(self): f = open(self.instPath + "/etc/sysconfig/keyboard", "w") diff --git a/xserver.py b/xserver.py index 6f6d3a9c1..c821bb629 100644 --- a/xserver.py +++ b/xserver.py @@ -58,12 +58,14 @@ def startX(): raise XServerError, "Unable to find a mouse!" device = None - protocol = None + mouseProtocol = None (mouseDev, driver, descr) = mice[0] if mouseDev == 'psaux': - protocol = "PS/2" + mouseProtocol = "PS/2" + mouseEmulate = 0 else: - protocol = "Microsoft" + mouseProtocol = "Microsoft" + mouseEmulate = 1 cards = kudzu.probe (kudzu.CLASS_VIDEO, kudzu.BUS_UNSPEC, @@ -104,7 +106,7 @@ def startX(): f = open ('/tmp/XF86Config', 'w') settings = { "mouseDev" : '/tmp/' + mouseDev , - "mouseProto" : protocol } + "mouseProto" : mouseProtocol } f.write (""" Section "Files" @@ -222,3 +224,5 @@ EndSection pid, status = os.waitpid(child, 0) os.kill(server, 15) sys.exit(status) + + return ((mouseProtocol, mouseEmulate, mouseDev),) |