"TUI Ethernet Interface Module"
#from netconfpkg.tui.NCTcpIp import NCTcpIpDialog
import snack
from netconfpkg.Control import NetworkDevice
from netconfpkg.NCDeviceList import getDeviceList
from netconfpkg.NCProfileList import getProfileList
from netconfpkg.NCHardwareList import getHardwareList
from netconfpkg.NC_functions import ETHERNET, ISDN, MODEM, QETH, getDebugLevel
from netconfpkg.NCDeviceFactory import getDeviceFactory
import os
#
# EthernetWindow class
#
class NCPluginDevicesTui():
"TUI Device List"
def __init__(self):
"""
The constructor
@screen A snack screen instance
@devicelist A NCDeviceList
@modem The modem device. If none given, the first
modem in devicelist will be used.
If none are there, one will be added.
"""
self.mscreen = None
def setState(self):
"""
Build the list of devices
"""
self.li = snack.Listbox(5, returnExit=1)
l = 0
le = self.mscreen.width - 6
if le <= 0:
le = 5
activedevicelist = NetworkDevice().get()
for dev in getDeviceList():
if not hasattr(dev, "getDialog") or not dev.getDialog():
#li.append("No dialog for %s" % dev.Device, None)
continue
isactive=" "
if dev.getDeviceAlias() in activedevicelist:
isactive="x"
l += 1
for hw in getHardwareList():
if hw.Name == dev.Device and hw.Description:
self.li.append(("[%s] %s (%s) - %s" % (isactive, dev.DeviceId,
dev.Device,
hw.Description))[:le], dev)
break
else:
self.li.append(("[%s] %s (%s) - %s" % (isactive, dev.DeviceId,
dev.Device, dev.Type))[:le], dev)
if not l:
return None
self.li.append(_(""), None)
def newDevice(self,mscreen):
"""
Displays the main screen
@screen The snack screen instance
"""
t = snack.TextboxReflowed(25, _("Which device type do you want to add?"))
bb = snack.ButtonBar(mscreen, ((_("Add"), "add"), (_("Cancel"), "cancel")))
li = snack.Listbox(5, width=25, returnExit=1)
li.append(_("Ethernet"), ETHERNET)
machine = os.uname()[4]
if machine == 's390' or machine == 's390x':
li.append(_("QETH"), QETH)
else:
li.append(_("Modem"), MODEM)
li.append(_("ISDN"), ISDN)
g = snack.GridForm(mscreen, _("Network Configuration"), 1, 3)
g.add(t, 0, 0)
g.add(li, 0, 1)
g.add(bb, 0, 2)
res = g.run()
mscreen.popWindow()
if bb.buttonPressed(res) != 'cancel':
todo = li.current()
df = getDeviceFactory()
dev = None
devclass = df.getDeviceClass(todo)
devlist = getDeviceList()
if not devclass:
return -1
dev = devclass()
if dev:
devlist.append(dev)
dev.NMControlled = False
return dev
return -2
def processInfo(self):
"""
Extracts info from the screen, and puts it into a device object
"""
pass
def selectDevice(self,mscreen):
g = snack.GridForm(mscreen, _("Select A Device"), 1, 4)
bb = snack.ButtonBar(mscreen,
((_("_Activate").replace("_", ""), "activate"),
(_("_Deactivate").replace("_", ""), "deactivate"),
(_("_Delete").replace("_", ""), "delete")))
bb2 = snack.ButtonBar(mscreen,
((_("Save"), "save"),
(_("Cancel"), "cancel")))
g.add(self.li, 0, 1)
g.add(bb2, 0, 2, growx=1)
g.add(bb, 0, 3, growx=1)
res = g.run()
mscreen.popWindow()
if bb2.buttonPressed(res) == "save":
dev = None
action = "save"
elif bb2.buttonPressed(res) == "cancel":
dev = None
action = "cancel"
elif bb.buttonPressed(res) == "activate":
dev = self.li.current()
action = "activate"
elif bb.buttonPressed(res) == "deactivate":
dev = self.li.current()
action = "deactivate"
elif bb.buttonPressed(res) == "delete":
dev = self.li.current()
action = "delete"
else:
dev = self.li.current()
if not dev:
dev = self.newDevice(mscreen)
action = "edit"
return dev, action
def runIt(self, mscreen):
"""
Show and run the screen, save files if necesarry
"""
self.mscreen = mscreen
devicelist = getDeviceList()
hwlist = getHardwareList()
plist = getProfileList()
self.setState()
while True:
self.setState()
device, action = self.selectDevice(mscreen)
if action == "save":
# we want to save
return True
elif action == "cancel":
return False
elif not device:
continue
if action == "edit":
dialog = device.getDialog()
if dialog.runIt(mscreen):
plist.activateDevice(device.DeviceId,
plist.getActiveProfile().ProfileName,
state = True)
else:
device.rollback()
elif action == "delete":
for prof in plist:
if device.DeviceId in prof.ActiveDevices:
pos = prof.ActiveDevices.index(device.DeviceId)
del prof.ActiveDevices[pos]
del devicelist[devicelist.index(device)]
elif action == "activate":
device.activate(dialog = mscreen)
elif action == "deactivate":
device.deactivate(dialog = mscreen)