add "go to standby" as timer after event
[enigma2.git] / lib / python / Screens / TimerEdit.py
index ee2920a0f3b09d76f8688281c02d069c50765ad5..681d3a2580687f000788c38da340522ba10edf87 100644 (file)
@@ -1,15 +1,14 @@
 from Screen import Screen
 from Components.TimerList import TimerList, TimerEntryComponent
 from Screen import Screen
 from Components.TimerList import TimerList, TimerEntryComponent
+from Components.MenuList import MenuList
 from Components.ActionMap import ActionMap
 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 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 RecordTimer import RecordTimerEntry, parseEvent, AFTEREVENT
 from time import *
 from ServiceReference import ServiceReference
 from time import *
 from ServiceReference import ServiceReference
-from Components.config import *
 from Components.TimerSanityCheck import TimerSanityCheck
 
 class TimerEditList(Screen):
 from Components.TimerSanityCheck import TimerSanityCheck
 
 class TimerEditList(Screen):
@@ -31,7 +30,7 @@ class TimerEditList(Screen):
                        {
                                "ok": self.openEdit,
                                "cancel": self.leave,
                        {
                                "ok": self.openEdit,
                                "cancel": self.leave,
-                               "red": self.removeTimer,
+                               "red": self.removeTimerQuestion,
                                "green": self.addCurrentTimer,
                                "blue": self.cleanupQuestion,
                                "yellow": self.toggleDisabledState,
                                "green": self.addCurrentTimer,
                                "blue": self.cleanupQuestion,
                                "yellow": self.toggleDisabledState,
@@ -61,9 +60,18 @@ class TimerEditList(Screen):
                self.updateState()
                
        def toggleDisabledState(self):
                self.updateState()
                
        def toggleDisabledState(self):
-               self["timerlist"].getCurrent()[0].disabled = not self["timerlist"].getCurrent()[0].disabled
-               self.updateState()
-               self.refill()
+               cur=self["timerlist"].getCurrent()
+               if cur:
+                       t = cur[0]
+               
+                       if t.disabled:
+                               t.enable()
+                       else:
+                               t.disable()
+
+                       self.session.nav.RecordTimer.timeChanged(t)
+                       self.updateState()
+                       self.refill()
                
        def updateState(self):
                if len(self.list) > 0:
                
        def updateState(self):
                if len(self.list) > 0:
@@ -81,14 +89,18 @@ 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):
 
        def showLog(self):
-               self.session.openWithCallback(self.finishedEdit, TimerLog, self["timerlist"].getCurrent()[0])
+               cur=self["timerlist"].getCurrent()
+               if cur:
+                       self.session.openWithCallback(self.finishedEdit, TimerLog, cur[0])
 
        def openEdit(self):
 
        def openEdit(self):
-               self.session.openWithCallback(self.finishedEdit, TimerEntry, self["timerlist"].getCurrent()[0])
-               #self.session.open(TimerEdit, self["timerlist"].getCurrent()[0])
-               
+               cur=self["timerlist"].getCurrent()
+               if cur:
+                       self.session.openWithCallback(self.finishedEdit, TimerEntry, cur[0])
+
        def cleanupQuestion(self):
                self.session.openWithCallback(self.cleanupTimer, MessageBox, _("Really delete done timers?"))
        
        def cleanupQuestion(self):
                self.session.openWithCallback(self.cleanupTimer, MessageBox, _("Really delete done timers?"))
        
@@ -96,17 +108,20 @@ class TimerEditList(Screen):
                if delete:
                        self.session.nav.RecordTimer.cleanup()
                        self.refill()
                if delete:
                        self.session.nav.RecordTimer.cleanup()
                        self.refill()
+       
+       def removeTimerQuestion(self):
+               self.session.openWithCallback(self.removeTimer, MessageBox, _("Really delete this timer?"))
                
                
-       def removeTimer(self):
+       def removeTimer(self, result):
+               if not result:
+                       return
                list = self["timerlist"]
                list = self["timerlist"]
-               timer = list.getCurrent()[0]
-               currentIndex = list.getCurrentIndex()
-               self.session.nav.RecordTimer.removeEntry(timer)
-               list.moveDown()
-               if list.getCurrentIndex() == currentIndex:
-                       currentIndex -= 1
-               self.refill()
-               list.moveToIndex(currentIndex)
+               cur = list.getCurrent()
+               if cur:
+                       timer = cur[0]
+                       timer.afterEvent = AFTEREVENT.NONE
+                       self.session.nav.RecordTimer.removeEntry(timer)
+                       self.refill()
        
        def refill(self):
                self.fillTimerList()
        
        def refill(self):
                self.fillTimerList()
@@ -128,7 +143,7 @@ class TimerEditList(Screen):
                else:
                        data = parseEvent(event)
 
                else:
                        data = parseEvent(event)
 
-               self.addTimer(RecordTimerEntry(serviceref, *data))
+               self.addTimer(RecordTimerEntry(serviceref, checkOldTimers = True, *data))
                
        def addTimer(self, timer):
                self.session.openWithCallback(self.finishedAdd, TimerEntry, timer)
                
        def addTimer(self, timer):
                self.session.openWithCallback(self.finishedAdd, TimerEntry, timer)
@@ -138,7 +153,8 @@ class TimerEditList(Screen):
                
                if answer[0]:
                        print "Edited timer"
                
                if answer[0]:
                        print "Edited timer"
-                       if not TimerSanityCheck(self.session.nav.RecordTimer.timer_list, answer[1]).check():
+                       timersanitycheck = TimerSanityCheck(self.session.nav.RecordTimer.timer_list, answer[1])
+                       if not timersanitycheck.check():
                                print "Sanity check failed"
                        else:
                                print "Sanity check passed"
                                print "Sanity check failed"
                        else:
                                print "Sanity check passed"
@@ -150,16 +166,21 @@ class TimerEditList(Screen):
        def finishedAdd(self, answer):
                print "finished add"
                if answer[0]:
        def finishedAdd(self, answer):
                print "finished add"
                if answer[0]:
-                       if not TimerSanityCheck(self.session.nav.RecordTimer.timer_list, answer[1]).check():
+                       timersanitycheck = TimerSanityCheck(self.session.nav.RecordTimer.timer_list, answer[1])
+                       if not timersanitycheck.check():
                                print "Sanity check failed"
                                print "Sanity check failed"
+                               self.session.openWithCallback(self.finishSanityCorrection, TimerSanityConflict, timersanitycheck.getSimulTimerList())
                        else:
                                print "Sanity check passed"
                        else:
                                print "Sanity check passed"
-                       entry = answer[1]
-                       self.session.nav.RecordTimer.record(entry)
-                       self.fillTimerList()
+                               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)
@@ -167,3 +188,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