summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xanaconda8
-rw-r--r--iw/mouse.py126
-rw-r--r--text.py108
-rw-r--r--todo.py116
-rw-r--r--xserver.py12
5 files changed, 172 insertions, 198 deletions
diff --git a/anaconda b/anaconda
index 1fcecbd8e..5f953f66e 100755
--- a/anaconda
+++ b/anaconda
@@ -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
diff --git a/text.py b/text.py
index 32695d6f7..ceac71839 100644
--- a/text.py
+++ b/text.py
@@ -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)],
diff --git a/todo.py b/todo.py
index 0bcc64440..986e1430e 100644
--- a/todo.py
+++ b/todo.py
@@ -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),)