fix satconfig problem (sometimes simple config was not saved)
[enigma2.git] / lib / python / Screens / Satconfig.py
index bd97948f6c23c7950cf55e4b28b7a0b5e9b72b96..ccb776ea4571f2fa13b9f1df1ff36cd34cbd42f2 100644 (file)
@@ -1,10 +1,12 @@
 from enigma import eDVBDB
 from Screen import Screen
 from enigma import eDVBDB
 from Screen import Screen
+from Components.SystemInfo import SystemInfo
 from Components.ActionMap import ActionMap
 from Components.ConfigList import ConfigListScreen
 from Components.MenuList import MenuList
 from Components.NimManager import nimmanager
 from Components.ActionMap import ActionMap
 from Components.ConfigList import ConfigListScreen
 from Components.MenuList import MenuList
 from Components.NimManager import nimmanager
-from Components.config import getConfigListEntry, config, ConfigNothing
+from Components.config import getConfigListEntry, config, ConfigNothing, ConfigSelection, updateConfigElement
+from Components.Sources.List import List
 from Screens.MessageBox import MessageBox
 
 from time import mktime, localtime
 from Screens.MessageBox import MessageBox
 
 from time import mktime, localtime
@@ -29,18 +31,38 @@ class NimSetup(Screen, ConfigListScreen):
                list.append(getConfigListEntry(" ", nim.longitudeOrientation))
                list.append(getConfigListEntry(_("Latitude"), nim.latitude))
                list.append(getConfigListEntry(" ", nim.latitudeOrientation))
                list.append(getConfigListEntry(" ", nim.longitudeOrientation))
                list.append(getConfigListEntry(_("Latitude"), nim.latitude))
                list.append(getConfigListEntry(" ", nim.latitudeOrientation))
-
-               self.advancedPowerMeasurement = getConfigListEntry(_("Use Power Measurement"), nim.powerMeasurement)
-               list.append(self.advancedPowerMeasurement)
-               if nim.powerMeasurement.value:
-                       list.append(getConfigListEntry(_("Power threshold in mA"), nim.powerThreshold))
-                       self.turningSpeed = getConfigListEntry(_("Rotor turning speed"), nim.turningSpeed)
-                       list.append(self.turningSpeed)
-                       if nim.turningSpeed.value == "fast epoch":
-                               self.turnFastEpochBegin = getConfigListEntry(_("Begin time"), nim.fastTurningBegin)
-                               self.turnFastEpochEnd = getConfigListEntry(_("End time"), nim.fastTurningEnd)
-                               list.append(self.turnFastEpochBegin)
-                               list.append(self.turnFastEpochEnd)
+               if SystemInfo["CanMeasureFrontendInputPower"]:
+                       self.advancedPowerMeasurement = getConfigListEntry(_("Use Power Measurement"), nim.powerMeasurement)
+                       list.append(self.advancedPowerMeasurement)
+                       if nim.powerMeasurement.value:
+                               list.append(getConfigListEntry(_("Power threshold in mA"), nim.powerThreshold))
+                               self.turningSpeed = getConfigListEntry(_("Rotor turning speed"), nim.turningSpeed)
+                               list.append(self.turningSpeed)
+                               if nim.turningSpeed.value == "fast epoch":
+                                       self.turnFastEpochBegin = getConfigListEntry(_("Begin time"), nim.fastTurningBegin)
+                                       self.turnFastEpochEnd = getConfigListEntry(_("End time"), nim.fastTurningEnd)
+                                       list.append(self.turnFastEpochBegin)
+                                       list.append(self.turnFastEpochEnd)
+               else:
+                       if nim.powerMeasurement.value:
+                               nim.powerMeasurement.value = False
+                               nim.powerMeasurement.save()
+               
+       def createConfigMode(self):
+               if self.nim.isCompatible("DVB-S"):
+                       choices = { "nothing": _("nothing connected"),
+                                               "simple": _("simple"),
+                                               "advanced": _("advanced")}
+                       #if len(nimmanager.getNimListOfType(nimmanager.getNimType(self.slotid), exception = x)) > 0:
+                       #       choices["equal"] = _("equal to")
+                       #       choices["satposdepends"] = _("second cable of motorized LNB")
+                       if len(nimmanager.canEqualTo(self.slotid)) > 0:
+                               choices["equal"] = _("equal to")
+                       if len(nimmanager.canDependOn(self.slotid)) > 0:
+                               choices["satposdepends"] = _("second cable of motorized LNB")
+                       if len(nimmanager.canConnectTo(self.slotid)) > 0:
+                               choices["loopthrough"] = _("loopthrough to")
+                       self.nimConfig.configMode.setChoices(choices, default = "nothing")
 
        def createSetup(self):
                print "Creating setup"
 
        def createSetup(self):
                print "Creating setup"
@@ -57,8 +79,9 @@ class NimSetup(Screen, ConfigListScreen):
                self.turningSpeed = None
                self.turnFastEpochBegin = None
                self.turnFastEpochEnd = None
                self.turningSpeed = None
                self.turnFastEpochBegin = None
                self.turnFastEpochEnd = None
-
+               self.uncommittedDiseqcCommand = None
                self.cableScanType = None
                self.cableScanType = None
+               self.have_advanced = False
 
                if self.nim.isCompatible("DVB-S"):
                        self.configMode = getConfigListEntry(_("Configuration Mode"), self.nimConfig.configMode)
 
                if self.nim.isCompatible("DVB-S"):
                        self.configMode = getConfigListEntry(_("Configuration Mode"), self.nimConfig.configMode)
@@ -71,7 +94,34 @@ class NimSetup(Screen, ConfigListScreen):
                                        self.createSimpleSetup(self.list, self.nimConfig.diseqcMode.value)
                                if self.nimConfig.diseqcMode.value == "positioner":
                                        self.createPositionerSetup(self.list)
                                        self.createSimpleSetup(self.list, self.nimConfig.diseqcMode.value)
                                if self.nimConfig.diseqcMode.value == "positioner":
                                        self.createPositionerSetup(self.list)
-                       elif self.nimConfig.configMode.value in ["loopthrough", "satposdepends", "nothing", "equal"]:
+                       elif self.nimConfig.configMode.value == "equal":
+                               choices = []
+                               nimlist = nimmanager.canEqualTo(self.nim.slot)
+                               for id in nimlist:
+                                       #choices.append((str(id), str(chr(65 + id))))
+                                       choices.append((str(id), nimmanager.getNimDescription(id)))
+                               self.nimConfig.connectedTo.setChoices(choices)
+                               #self.nimConfig.connectedTo = updateConfigElement(self.nimConfig.connectedTo, ConfigSelection(choices = choices))
+                               self.list.append(getConfigListEntry(_("Tuner"), self.nimConfig.connectedTo))
+                       elif self.nimConfig.configMode.value == "satposdepends":
+                               choices = []
+                               nimlist = nimmanager.canDependOn(self.nim.slot)
+                               for id in nimlist:
+                                       #choices.append((str(id), str(chr(65 + id))))
+                                       choices.append((str(id), nimmanager.getNimDescription(id)))
+                               self.nimConfig.connectedTo.setChoices(choices)
+                               #self.nimConfig.connectedTo = updateConfigElement(self.nimConfig.connectedTo, ConfigSelection(choices = choices))
+                               self.list.append(getConfigListEntry(_("Tuner"), self.nimConfig.connectedTo))
+                       elif self.nimConfig.configMode.value == "loopthrough":
+                               choices = []
+                               print "connectable to:", nimmanager.canConnectTo(self.slotid)
+                               connectable = nimmanager.canConnectTo(self.slotid)
+                               for id in connectable:
+                                       choices.append((str(id), nimmanager.getNimDescription(id)))
+                               self.nimConfig.connectedTo.setChoices(choices)
+                               #self.nimConfig.connectedTo = updateConfigElement(self.nimConfig.connectedTo, ConfigSelection(choices = choices))
+                               self.list.append(getConfigListEntry(_("Connected to"), self.nimConfig.connectedTo))
+                       elif self.nimConfig.configMode.value == "nothing":
                                pass
                        elif self.nimConfig.configMode.value == "advanced": # advanced
                                # SATs
                                pass
                        elif self.nimConfig.configMode.value == "advanced": # advanced
                                # SATs
@@ -79,11 +129,12 @@ class NimSetup(Screen, ConfigListScreen):
                                self.list.append(self.advancedSatsEntry)
                                cur_orb_pos = self.nimConfig.advanced.sats.orbital_position
                                satlist = self.nimConfig.advanced.sat.keys()
                                self.list.append(self.advancedSatsEntry)
                                cur_orb_pos = self.nimConfig.advanced.sats.orbital_position
                                satlist = self.nimConfig.advanced.sat.keys()
-                               if cur_orb_pos not in satlist:
-                                       cur_orb_pos = satlist[0]
-                               currSat = self.nimConfig.advanced.sat[cur_orb_pos]
-                               self.fillListWithAdvancedSatEntrys(currSat)
-                       self.have_advanced = True
+                               if cur_orb_pos is not None:
+                                       if cur_orb_pos not in satlist:
+                                               cur_orb_pos = satlist[0]
+                                       currSat = self.nimConfig.advanced.sat[cur_orb_pos]
+                                       self.fillListWithAdvancedSatEntrys(currSat)
+                               self.have_advanced = True
                elif self.nim.isCompatible("DVB-C"):
                        self.configMode = getConfigListEntry(_("Configuration Mode"), self.nimConfig.configMode)
                        self.list.append(self.configMode)
                elif self.nim.isCompatible("DVB-C"):
                        self.configMode = getConfigListEntry(_("Configuration Mode"), self.nimConfig.configMode)
                        self.list.append(self.configMode)
@@ -133,7 +184,8 @@ class NimSetup(Screen, ConfigListScreen):
        def newConfig(self):
                checkList = (self.configMode, self.diseqcModeEntry, self.advancedSatsEntry, \
                        self.advancedLnbsEntry, self.advancedDiseqcMode, self.advancedUsalsEntry, \
        def newConfig(self):
                checkList = (self.configMode, self.diseqcModeEntry, self.advancedSatsEntry, \
                        self.advancedLnbsEntry, self.advancedDiseqcMode, self.advancedUsalsEntry, \
-                       self.advancedLof, self.advancedPowerMeasurement, self.turningSpeed, self.cableScanType)
+                       self.advancedLof, self.advancedPowerMeasurement, self.turningSpeed, \
+                       self.uncommittedDiseqcCommand, self.cableScanType)
                for x in checkList:
                        if self["config"].getCurrent() == x:
                                self.createSetup()
                for x in checkList:
                        if self["config"].getCurrent() == x:
                                self.createSetup()
@@ -149,40 +201,12 @@ class NimSetup(Screen, ConfigListScreen):
                                dt = datetime(1970, 1, 1, tm.tm_hour, tm.tm_min)
                                x[1].value = int(mktime(dt.timetuple()))
                        x[1].save()
                                dt = datetime(1970, 1, 1, tm.tm_hour, tm.tm_min)
                                x[1].value = int(mktime(dt.timetuple()))
                        x[1].save()
-
-               old_configured_sats = nimmanager.getConfiguredSats()
                nimmanager.sec.update()
                nimmanager.sec.update()
-               new_configured_sats = nimmanager.getConfiguredSats()
-               self.unconfed_sats = old_configured_sats - new_configured_sats
-               self.satpos_to_remove = None
-               self.deleteConfirmed(False)
-
-       def deleteConfirmed(self, confirmed):
-               if confirmed:
-                       eDVBDB.getInstance().removeServices(-1, -1, -1, self.satpos_to_remove)
-
-               if self.satpos_to_remove is not None:
-                       self.unconfed_sats.remove(self.satpos_to_remove)
-
-               self.satpos_to_remove = None
-               for orbpos in self.unconfed_sats:
-                       self.satpos_to_remove = orbpos
-                       orbpos = self.satpos_to_remove
-                       try:
-                               # why we need this cast?
-                               sat_name = str(nimmanager.getSatDescription(orbpos))
-                       except:
-                               if orbpos > 1800: # west
-                                       orbpos = 3600 - orbpos
-                                       h = _("W")
-                               else:
-                                       h = _("E")
-                               sat_name = ("%d.%d" + h) % (orbpos / 10, orbpos % 10)
-                       self.session.openWithCallback(self.deleteConfirmed, MessageBox, _("Delete no more configured satellite\n%s?") %(sat_name))
-                       break
+               self.saveAll()
 
        def fillListWithAdvancedSatEntrys(self, Sat):
 
        def fillListWithAdvancedSatEntrys(self, Sat):
-               currLnb = self.nimConfig.advanced.lnb[int(Sat.lnb.value)]
+               lnbnum = int(Sat.lnb.value)
+               currLnb = self.nimConfig.advanced.lnb[lnbnum]
                
                if isinstance(currLnb, ConfigNothing):
                        currLnb = None
                
                if isinstance(currLnb, ConfigNothing):
                        currLnb = None
@@ -190,17 +214,19 @@ class NimSetup(Screen, ConfigListScreen):
                self.list.append(getConfigListEntry(_("Voltage mode"), Sat.voltage))
                self.list.append(getConfigListEntry(_("Tone mode"), Sat.tonemode))
                if currLnb and currLnb.diseqcMode.value == "1_2":
                self.list.append(getConfigListEntry(_("Voltage mode"), Sat.voltage))
                self.list.append(getConfigListEntry(_("Tone mode"), Sat.tonemode))
                if currLnb and currLnb.diseqcMode.value == "1_2":
-                       self.advancedUsalsEntry = getConfigListEntry(_("Use usals for this sat"), Sat.usals)
-                       self.list.append(self.advancedUsalsEntry)
-                       if not Sat.usals.value:
-                               self.list.append(getConfigListEntry(_("Stored position"), Sat.rotorposition))
+                       if lnbnum < 33:
+                               self.advancedUsalsEntry = getConfigListEntry(_("Use usals for this sat"), Sat.usals)
+                               self.list.append(self.advancedUsalsEntry)
+                               if not Sat.usals.value:
+                                       self.list.append(getConfigListEntry(_("Stored position"), Sat.rotorposition))
 
                # LNBs
                self.advancedLnbsEntry = getConfigListEntry(_("LNB"), Sat.lnb)
                self.list.append(self.advancedLnbsEntry)
                if currLnb:
 
                # LNBs
                self.advancedLnbsEntry = getConfigListEntry(_("LNB"), Sat.lnb)
                self.list.append(self.advancedLnbsEntry)
                if currLnb:
-                       self.advancedDiseqcMode = getConfigListEntry(_("DiSEqC mode"), currLnb.diseqcMode)
-                       self.list.append(self.advancedDiseqcMode)
+                       if lnbnum < 33:
+                               self.advancedDiseqcMode = getConfigListEntry(_("DiSEqC mode"), currLnb.diseqcMode)
+                               self.list.append(self.advancedDiseqcMode)
                        if currLnb.diseqcMode.value != "none":
                                self.list.append(getConfigListEntry(_("Toneburst"), currLnb.toneburst))
                                self.list.append(getConfigListEntry(_("Committed DiSEqC command"), currLnb.commitedDiseqcCommand))
                        if currLnb.diseqcMode.value != "none":
                                self.list.append(getConfigListEntry(_("Toneburst"), currLnb.toneburst))
                                self.list.append(getConfigListEntry(_("Committed DiSEqC command"), currLnb.commitedDiseqcCommand))
@@ -209,25 +235,41 @@ class NimSetup(Screen, ConfigListScreen):
                                if currLnb.diseqcMode.value == "1_0":
                                        self.list.append(getConfigListEntry(_("Command order"), currLnb.commandOrder1_0))
                                else:
                                if currLnb.diseqcMode.value == "1_0":
                                        self.list.append(getConfigListEntry(_("Command order"), currLnb.commandOrder1_0))
                                else:
+                                       if currLnb.uncommittedDiseqcCommand.index:
+                                               if currLnb.commandOrder.value == "ct":
+                                                       currLnb.commandOrder.value = "cut"
+                                               elif currLnb.commandOrder.value == "tc":
+                                                       currLnb.commandOrder.value = "tcu"
+                                       else:
+                                               if currLnb.commandOrder.index & 1:
+                                                       currLnb.commandOrder.value = "tc"
+                                               else:
+                                                       currLnb.commandOrder.value = "ct"
                                        self.list.append(getConfigListEntry(_("Command order"), currLnb.commandOrder))
                                        self.list.append(getConfigListEntry(_("Command order"), currLnb.commandOrder))
-                                       self.list.append(getConfigListEntry(_("Uncommitted DiSEqC command"), currLnb.uncommittedDiseqcCommand))
+                                       self.uncommittedDiseqcCommand = getConfigListEntry(_("Uncommitted DiSEqC command"), currLnb.uncommittedDiseqcCommand)
+                                       self.list.append(self.uncommittedDiseqcCommand)
                                        self.list.append(getConfigListEntry(_("DiSEqC repeats"), currLnb.diseqcRepeats))
                                if currLnb.diseqcMode.value == "1_2":
                                        self.list.append(getConfigListEntry(_("Longitude"), currLnb.longitude))
                                        self.list.append(getConfigListEntry(" ", currLnb.longitudeOrientation))
                                        self.list.append(getConfigListEntry(_("Latitude"), currLnb.latitude))
                                        self.list.append(getConfigListEntry(" ", currLnb.latitudeOrientation))
                                        self.list.append(getConfigListEntry(_("DiSEqC repeats"), currLnb.diseqcRepeats))
                                if currLnb.diseqcMode.value == "1_2":
                                        self.list.append(getConfigListEntry(_("Longitude"), currLnb.longitude))
                                        self.list.append(getConfigListEntry(" ", currLnb.longitudeOrientation))
                                        self.list.append(getConfigListEntry(_("Latitude"), currLnb.latitude))
                                        self.list.append(getConfigListEntry(" ", currLnb.latitudeOrientation))
-                                       self.advancedPowerMeasurement = getConfigListEntry(_("Use Power Measurement"), currLnb.powerMeasurement)
-                                       self.list.append(self.advancedPowerMeasurement)
-                                       if currLnb.powerMeasurement.value:
-                                               self.list.append(getConfigListEntry(_("Power threshold in mA"), currLnb.powerThreshold))
-                                               self.turningSpeed = getConfigListEntry(_("Rotor turning speed"), currLnb.turningSpeed)
-                                               self.list.append(self.turningSpeed)
-                                               if currLnb.turningSpeed.value == "fast epoch":
-                                                       self.turnFastEpochBegin = getConfigListEntry(_("Begin time"), currLnb.fastTurningBegin)
-                                                       self.turnFastEpochEnd = getConfigListEntry(_("End time"), currLnb.fastTurningEnd)
-                                                       self.list.append(self.turnFastEpochBegin)
-                                                       self.list.append(self.turnFastEpochEnd)
+                                       if SystemInfo["CanMeasureFrontendInputPower"]:
+                                               self.advancedPowerMeasurement = getConfigListEntry(_("Use Power Measurement"), currLnb.powerMeasurement)
+                                               self.list.append(self.advancedPowerMeasurement)
+                                               if currLnb.powerMeasurement.value:
+                                                       self.list.append(getConfigListEntry(_("Power threshold in mA"), currLnb.powerThreshold))
+                                                       self.turningSpeed = getConfigListEntry(_("Rotor turning speed"), currLnb.turningSpeed)
+                                                       self.list.append(self.turningSpeed)
+                                                       if currLnb.turningSpeed.value == "fast epoch":
+                                                               self.turnFastEpochBegin = getConfigListEntry(_("Begin time"), currLnb.fastTurningBegin)
+                                                               self.turnFastEpochEnd = getConfigListEntry(_("End time"), currLnb.fastTurningEnd)
+                                                               self.list.append(self.turnFastEpochBegin)
+                                                               self.list.append(self.turnFastEpochEnd)
+                                       else:
+                                               if currLnb.powerMeasurement.value:
+                                                       currLnb.powerMeasurement.value = False
+                                                       currLnb.powerMeasurement.save()
                        self.advancedLof = getConfigListEntry(_("LOF"), currLnb.lof)
                        self.list.append(self.advancedLof)
                        if currLnb.lof.value == "user_defined":
                        self.advancedLof = getConfigListEntry(_("LOF"), currLnb.lof)
                        self.list.append(self.advancedLof)
                        if currLnb.lof.value == "user_defined":
@@ -243,14 +285,44 @@ class NimSetup(Screen, ConfigListScreen):
                self.list.append(self.configMode)
                self.advancedSatsEntry = getConfigListEntry(_("Satellite"), self.nimConfig.advanced.sats)
                self.list.append(self.advancedSatsEntry)
                self.list.append(self.configMode)
                self.advancedSatsEntry = getConfigListEntry(_("Satellite"), self.nimConfig.advanced.sats)
                self.list.append(self.advancedSatsEntry)
-               for x in nimmanager.satList:
-                       Sat = self.nimConfig.advanced.sat[x[0]]
+               for x in self.nimConfig.advanced.sat.keys():
+                       Sat = self.nimConfig.advanced.sat[x]
                        self.fillListWithAdvancedSatEntrys(Sat)
                self["config"].list = self.list
 
        def keySave(self):
                        self.fillListWithAdvancedSatEntrys(Sat)
                self["config"].list = self.list
 
        def keySave(self):
+               old_configured_sats = nimmanager.getConfiguredSats()
                self.run()
                self.run()
-               self.close()
+               new_configured_sats = nimmanager.getConfiguredSats()
+               self.unconfed_sats = old_configured_sats - new_configured_sats
+               self.satpos_to_remove = None
+               self.deleteConfirmed(False)
+
+       def deleteConfirmed(self, confirmed):
+               if confirmed:
+                       eDVBDB.getInstance().removeServices(-1, -1, -1, self.satpos_to_remove)
+
+               if self.satpos_to_remove is not None:
+                       self.unconfed_sats.remove(self.satpos_to_remove)
+
+               self.satpos_to_remove = None
+               for orbpos in self.unconfed_sats:
+                       self.satpos_to_remove = orbpos
+                       orbpos = self.satpos_to_remove
+                       try:
+                               # why we need this cast?
+                               sat_name = str(nimmanager.getSatDescription(orbpos))
+                       except:
+                               if orbpos > 1800: # west
+                                       orbpos = 3600 - orbpos
+                                       h = _("W")
+                               else:
+                                       h = _("E")
+                               sat_name = ("%d.%d" + h) % (orbpos / 10, orbpos % 10)
+                       self.session.openWithCallback(self.deleteConfirmed, MessageBox, _("Delete no more configured satellite\n%s?") %(sat_name))
+                       break
+               if not self.satpos_to_remove:
+                       self.close()
 
        def __init__(self, session, slotid):
                Screen.__init__(self, session)
 
        def __init__(self, session, slotid):
                Screen.__init__(self, session)
@@ -264,8 +336,10 @@ class NimSetup(Screen, ConfigListScreen):
                        "cancel": self.keyCancel,
                }, -2)
 
                        "cancel": self.keyCancel,
                }, -2)
 
+               self.slotid = slotid
                self.nim = nimmanager.nim_slots[slotid]
                self.nimConfig = self.nim.config
                self.nim = nimmanager.nim_slots[slotid]
                self.nimConfig = self.nim.config
+               self.createConfigMode()
                self.createSetup()
 
        def keyLeft(self):
                self.createSetup()
 
        def keyLeft(self):
@@ -275,16 +349,35 @@ class NimSetup(Screen, ConfigListScreen):
        def keyRight(self):
                ConfigListScreen.keyRight(self)
                self.newConfig()
        def keyRight(self):
                ConfigListScreen.keyRight(self)
                self.newConfig()
+               
+       def saveAll(self):
+               if self.nim.isCompatible("DVB-S"):
+                       # reset connectedTo to all choices to properly store the default value
+                       choices = []
+                       nimlist = nimmanager.getNimListOfType("DVB-S", self.slotid)
+                       for id in nimlist:
+                               choices.append((str(id), nimmanager.getNimDescription(id)))
+                       self.nimConfig.connectedTo.setChoices(choices)
+               for x in self["config"].list:
+                       x[1].save()
+                       
+       def cancelConfirm(self, result):
+               if not result:
+                       return
 
 
+               for x in self["config"].list:
+                       x[1].cancel()
+               # we need to call saveAll to reset the connectedTo choices
+               self.saveAll()
+               self.close()
+                       
 class NimSelection(Screen):
        def __init__(self, session):
                Screen.__init__(self, session)
                
 class NimSelection(Screen):
        def __init__(self, session):
                Screen.__init__(self, session)
                
-               menu = [ ]
-               for x in nimmanager.nim_slots:
-                       menu.append((x.friendly_full_description, x))
-
-               self["nimlist"] = MenuList(menu)
+               self.list = [None] * nimmanager.getSlotCount()
+               self["nimlist"] = List(self.list)
+               self.updateList()
 
                self["actions"] = ActionMap(["OkCancelActions"],
                {
 
                self["actions"] = ActionMap(["OkCancelActions"],
                {
@@ -294,6 +387,47 @@ class NimSelection(Screen):
 
        def okbuttonClick(self):
                nim = self["nimlist"].getCurrent()
 
        def okbuttonClick(self):
                nim = self["nimlist"].getCurrent()
-               nim = nim and nim[1]
+               nim = nim and nim[3]
                if nim is not None and not nim.empty:
                if nim is not None and not nim.empty:
-                       self.session.open(NimSetup, nim.slot)
+                       self.session.openWithCallback(self.updateList, NimSetup, nim.slot)
+
+       def updateList(self):
+               self.list = [ ]
+               for x in nimmanager.nim_slots:
+                       slotid = x.slot
+                       nimConfig = nimmanager.getNimConfig(x.slot)
+                       text = nimConfig.configMode.value
+                       if x.isCompatible("DVB-S"):
+                               if nimConfig.configMode.value in ["loopthrough", "equal", "satposdepends"]:
+                                       text = { "loopthrough": _("loopthrough to"),
+                                                        "equal": _("equal to"),
+                                                        "satposdepends": _("second cable of motorized LNB") } [nimConfig.configMode.value]
+                                       text += " " + _("Tuner") + " " + ["A", "B", "C", "D"][int(nimConfig.connectedTo.value)]
+                               elif nimConfig.configMode.value == "nothing":
+                                       text = _("nothing connected")
+                               elif nimConfig.configMode.value == "simple":
+                                       if nimConfig.diseqcMode.value in ["single", "toneburst_a_b", "diseqc_a_b", "diseqc_a_b_c_d"]:
+                                               text = _("Sats") + ": " + nimmanager.getSatName(int(nimConfig.diseqcA.value))
+                                               if nimConfig.diseqcMode.value in ["toneburst_a_b", "diseqc_a_b", "diseqc_a_b_c_d"]:
+                                                       text += "," + nimmanager.getSatName(int(nimConfig.diseqcB.value))
+                                               if nimConfig.diseqcMode.value == "diseqc_a_b_c_d":
+                                                       text += "," + nimmanager.getSatName(int(nimConfig.diseqcC.value))
+                                                       text += "," + nimmanager.getSatName(int(nimConfig.diseqcD.value))
+                                       elif nimConfig.diseqcMode.value == "positioner":
+                                               text = _("Positioner") + ":"
+                                               if nimConfig.positionerMode.value == "usals":
+                                                       text += _("USALS")
+                                               elif nimConfig.positionerMode.value == "manual":
+                                                       text += _("manual")
+                                       else:   
+                                               text = _("simple")
+                               elif nimConfig.configMode.value == "advanced":
+                                       text = _("advanced")
+                       elif x.isCompatible("DVB-T") or x.isCompatible("DVB-C"):
+                               if nimConfig.configMode.value == "nothing":
+                                       text = _("nothing connected")
+                               elif nimConfig.configMode.value == "enabled":
+                                       text = _("enabled")
+                               
+                       self.list.append((slotid, x.friendly_full_description, text, x))
+               self["nimlist"].updateList(self.list)
\ No newline at end of file