dont ask for scanning second nim in automatic scan, when it is not meaningful
[enigma2.git] / lib / python / Screens / TimerEdit.py
index d46e3751f3e550a000b7406c0a89d792eac2e51b..018e28dc09d6815acc7bc4408e38b9098714e236 100644 (file)
@@ -1,14 +1,18 @@
 from Screen import Screen
 from Components.TimerList import TimerList, TimerEntryComponent
 from Screen import Screen
 from Components.TimerList import TimerList, TimerEntryComponent
+from Components.ConfigList import ConfigList
+from Components.MenuList import MenuList
 from Components.ActionMap import ActionMap
 from Components.TimeInput import TimeInput
 from Components.Label import Label
 from Components.Button import Button
 from Components.ActionMap import ActionMap
 from Components.TimeInput import TimeInput
 from Components.Label import Label
 from Components.Button import Button
+from Screens.MessageBox import MessageBox
 from TimerEntry import TimerEntry, TimerLog
 from RecordTimer import RecordTimerEntry, parseEvent
 from time import *
 from ServiceReference import ServiceReference
 from Components.config import *
 from TimerEntry import TimerEntry, TimerLog
 from RecordTimer import RecordTimerEntry, parseEvent
 from time import *
 from ServiceReference import ServiceReference
 from Components.config import *
+from Components.TimerSanityCheck import TimerSanityCheck
 
 class TimerEditList(Screen):
        def __init__(self, session):
 
 class TimerEditList(Screen):
        def __init__(self, session):
@@ -23,17 +27,54 @@ class TimerEditList(Screen):
                self["key_red"] = Button(_("Delete"))
                self["key_green"] = Button(_("Add"))
                self["key_yellow"] = Button("")
                self["key_red"] = Button(_("Delete"))
                self["key_green"] = Button(_("Add"))
                self["key_yellow"] = Button("")
-               self["key_blue"] = Button("")
+               self["key_blue"] = Button(_("Cleanup"))
 
 
-               self["actions"] = ActionMap(["OkCancelActions", "ShortcutActions", "TimerEditActions"], 
+               self["actions"] = ActionMap(["OkCancelActions", "DirectionActions", "ShortcutActions", "TimerEditActions"], 
                        {
                                "ok": self.openEdit,
                                "cancel": self.leave,
                                "red": self.removeTimer,
                                "green": self.addCurrentTimer,
                        {
                                "ok": self.openEdit,
                                "cancel": self.leave,
                                "red": self.removeTimer,
                                "green": self.addCurrentTimer,
-                               "log": self.showLog
-                       })
+                               "blue": self.cleanupQuestion,
+                               "yellow": self.toggleDisabledState,
+                               "log": self.showLog,
+                               "left": self.left,
+                               "right": self.right,
+                               "up": self.up,
+                               "down": self.down
+                       }, -1)
                self.session.nav.RecordTimer.on_state_change.append(self.onStateChange)
                self.session.nav.RecordTimer.on_state_change.append(self.onStateChange)
+               self.onShown.append(self.updateState)
+
+       def up(self):
+               self["timerlist"].instance.moveSelection(self["timerlist"].instance.moveUp)
+               self.updateState()
+               
+       def down(self):
+               self["timerlist"].instance.moveSelection(self["timerlist"].instance.moveDown)
+               self.updateState()
+
+       def left(self):
+               self["timerlist"].instance.moveSelection(self["timerlist"].instance.pageUp)
+               self.updateState()
+               
+       def right(self):
+               self["timerlist"].instance.moveSelection(self["timerlist"].instance.pageDown)
+               self.updateState()
+               
+       def toggleDisabledState(self):
+               self["timerlist"].getCurrent()[0].disabled = not self["timerlist"].getCurrent()[0].disabled
+               self.session.nav.RecordTimer.timeChanged(self["timerlist"].getCurrent()[0])
+               self.updateState()
+               self.refill()
+               
+       def updateState(self):
+               if len(self.list) > 0:
+                       if self["timerlist"].getCurrent()[0].disabled:
+                               self["key_yellow"].setText(_("Enable"))
+                       else:
+                               self["key_yellow"].setText(_("Disable"))
+                       self["key_yellow"].instance.invalidate()
 
        def fillTimerList(self):
                del self.list[:]
 
        def fillTimerList(self):
                del self.list[:]
@@ -43,6 +84,7 @@ class TimerEditList(Screen):
                
                for timer in self.session.nav.RecordTimer.processed_timers:
                        self.list.append(TimerEntryComponent(timer, processed=True))
                
                for timer in self.session.nav.RecordTimer.processed_timers:
                        self.list.append(TimerEntryComponent(timer, processed=True))
+               self.list.sort(cmp = lambda x, y: x[0].begin < y[0].begin)
 
        def showLog(self):
                self.session.openWithCallback(self.finishedEdit, TimerLog, self["timerlist"].getCurrent()[0])
 
        def showLog(self):
                self.session.openWithCallback(self.finishedEdit, TimerLog, self["timerlist"].getCurrent()[0])
@@ -51,14 +93,18 @@ class TimerEditList(Screen):
                self.session.openWithCallback(self.finishedEdit, TimerEntry, self["timerlist"].getCurrent()[0])
                #self.session.open(TimerEdit, self["timerlist"].getCurrent()[0])
                
                self.session.openWithCallback(self.finishedEdit, TimerEntry, self["timerlist"].getCurrent()[0])
                #self.session.open(TimerEdit, self["timerlist"].getCurrent()[0])
                
+       def cleanupQuestion(self):
+               self.session.openWithCallback(self.cleanupTimer, MessageBox, _("Really delete done timers?"))
+       
+       def cleanupTimer(self, delete):
+               if delete:
+                       self.session.nav.RecordTimer.cleanup()
+                       self.refill()
+               
        def removeTimer(self):
                list = self["timerlist"]
        def removeTimer(self):
                list = self["timerlist"]
-               currentIndex = list.getCurrentIndex()
-               list.moveDown()
-               if list.getCurrentIndex() == currentIndex:
-                       currentIndex -= 1
-                       list.moveToIndex(currentIndex)
-               self.session.nav.RecordTimer.removeEntry(list.getCurrent()[0])
+               timer = list.getCurrent()[0]
+               self.session.nav.RecordTimer.removeEntry(timer)
                self.refill()
        
        def refill(self):
                self.refill()
        
        def refill(self):
@@ -88,8 +134,14 @@ class TimerEditList(Screen):
                
        def finishedEdit(self, answer):
                print "finished edit"
                
        def finishedEdit(self, answer):
                print "finished edit"
+               
                if answer[0]:
                        print "Edited timer"
                if answer[0]:
                        print "Edited timer"
+                       timersanitycheck = TimerSanityCheck(self.session.nav.RecordTimer.timer_list, answer[1])
+                       if not timersanitycheck.check():
+                               print "Sanity check failed"
+                       else:
+                               print "Sanity check passed"
                        self.session.nav.RecordTimer.timeChanged(answer[1])
                        self.fillTimerList()
                else:
                        self.session.nav.RecordTimer.timeChanged(answer[1])
                        self.fillTimerList()
                else:
@@ -98,12 +150,21 @@ class TimerEditList(Screen):
        def finishedAdd(self, answer):
                print "finished add"
                if answer[0]:
        def finishedAdd(self, answer):
                print "finished add"
                if answer[0]:
-                       entry = answer[1]
-                       self.session.nav.RecordTimer.record(entry)
-                       self.fillTimerList()
+                       timersanitycheck = TimerSanityCheck(self.session.nav.RecordTimer.timer_list, answer[1])
+                       if not timersanitycheck.check():
+                               print "Sanity check failed"
+                               self.session.openWithCallback(self.finishSanityCorrection, TimerSanityConflict, timersanitycheck.getSimulTimerList())
+                       else:
+                               print "Sanity check passed"
+                               entry = answer[1]
+                               self.session.nav.RecordTimer.record(entry)
+                               self.fillTimerList()
                else:
                        print "Timeredit aborted"               
 
                else:
                        print "Timeredit aborted"               
 
+       def finishSanityCorrection(self, answer):
+               self.finishedAdd(answer)
+
        def leave(self):
                self.session.nav.RecordTimer.saveTimer()
                self.session.nav.RecordTimer.on_state_change.remove(self.onStateChange)
        def leave(self):
                self.session.nav.RecordTimer.saveTimer()
                self.session.nav.RecordTimer.on_state_change.remove(self.onStateChange)
@@ -111,3 +172,67 @@ class TimerEditList(Screen):
 
        def onStateChange(self, entry):
                self.refill()
 
        def onStateChange(self, entry):
                self.refill()
+               
+class TimerSanityConflict(Screen):
+       def __init__(self, session, timer):
+               Screen.__init__(self, session)
+               self.timer = timer
+               print "TimerSanityConflict", timer
+                       
+               self["timer1"] = TimerList(self.getTimerList(timer[0]))
+               if len(timer) > 1:
+                       self["timer2"] = TimerList(self.getTimerList(timer[1]))
+               else:
+                       self["timer2"] = Button("No conflict")
+               
+               self.list = []
+               count = 0
+               for x in timer:
+                       if count != 0:
+                               self.list.append((_("Conflicting timer") + " " + str(count), x))
+                       count += 1
+
+               self["list"] = MenuList(self.list)
+               
+               self["key_red"] = Button("Edit")
+               self["key_green"] = Button("Disable")
+               self["key_yellow"] = Button("Edit")
+               self["key_blue"] = Button("Disable")
+
+               self["actions"] = ActionMap(["OkCancelActions", "DirectionActions", "ShortcutActions", "TimerEditActions"], 
+                       {
+                               "ok": self.close,
+                               #"cancel": self.leave,
+                               "red": self.editTimer1,
+                               "green": self.disableTimer1,
+#                              "yellow": self.editTimer2,
+#                              "blue": self.disableTimer2,
+                               #"log": self.showLog,
+                               #"left": self.left,
+                               #"right": self.right,
+                               "up": self.up,
+                               "down": self.down
+                       }, -1)
+
+       def getTimerList(self, timer):
+               return [TimerEntryComponent(timer, processed=False)]
+
+       def editTimer1(self):
+               self.session.openWithCallback(self.finishedEdit, TimerEntry, self["timer1"].getCurrent()[0])
+
+       def disableTimer1(self):
+               self.timer[0].disabled = True
+               self.finishedEdit((True, self.timer[0]))
+
+       def finishedEdit(self, answer):
+               self.close((True, self.timer[0]))
+
+       def up(self):
+               self["list"].instance.moveSelection(self["list"].instance.moveUp)
+               self["timer2"].l.setList(self.getTimerList(self["list"].getCurrent()[1]))
+               
+       def down(self):
+               self["list"].instance.moveSelection(self["list"].instance.moveDown)
+               self["timer2"].l.setList(self.getTimerList(self["list"].getCurrent()[1]))
+                       
+               
\ No newline at end of file