timers can now have after events. currently only working events: "do nothing" and...
[enigma2.git] / lib / python / Screens / EpgSelection.py
index f9516e1d43c297c56ad2b163539467be7f7f0c51..3284e641ebbd0c1e7c55c18c0cb72d684f970c20 100644 (file)
@@ -6,6 +6,7 @@ from Components.EpgList import *
 from Components.ActionMap import ActionMap
 from Components.ScrollLabel import ScrollLabel
 from Screens.EventView import EventViewSimple
 from Components.ActionMap import ActionMap
 from Components.ScrollLabel import ScrollLabel
 from Screens.EventView import EventViewSimple
+from TimeDateInput import TimeDateInput
 from enigma import eServiceReference, eServiceEventPtr
 from Screens.FixedMenu import FixedMenu
 from RecordTimer import RecordTimerEntry, parseEvent
 from enigma import eServiceReference, eServiceEventPtr
 from Screens.FixedMenu import FixedMenu
 from RecordTimer import RecordTimerEntry, parseEvent
@@ -18,11 +19,19 @@ from time import localtime
 import xml.dom.minidom
 
 class EPGSelection(Screen):
 import xml.dom.minidom
 
 class EPGSelection(Screen):
-       def __init__(self, session, service, zapFunc=None):
+       def __init__(self, session, service, zapFunc=None, eventid=None):
                Screen.__init__(self, session)
                Screen.__init__(self, session)
+               self.asked_specific_time = False
                self["key_red"] = Button("")
                self.closeRecursive = False
                self["key_red"] = Button("")
                self.closeRecursive = False
-               if isinstance(service, eServiceReference):
+               if isinstance(service, str) and eventid != None:
+                       self.type = EPG_TYPE_SIMILAR
+                       self["key_yellow"] = Button()
+                       self["key_blue"] = Button()
+                       self["key_red"] = Button()
+                       self.currentService=service
+                       self.eventid = eventid
+               elif isinstance(service, eServiceReference) or isinstance(service, str):
                        self.type = EPG_TYPE_SINGLE
                        self["key_yellow"] = Button()
                        self["key_blue"] = Button()
                        self.type = EPG_TYPE_SINGLE
                        self["key_yellow"] = Button()
                        self["key_blue"] = Button()
@@ -60,17 +69,27 @@ class EPGSelection(Screen):
                                "yellow": self.yellowButtonPressed,
                                "blue": self.blueButtonPressed,
                                "info": self.infoKeyPressed,
                                "yellow": self.yellowButtonPressed,
                                "blue": self.blueButtonPressed,
                                "info": self.infoKeyPressed,
-                               "zapTo": self.zapTo
+                               "zapTo": self.zapTo,
+                               "input_date_time": self.enterDateTime
                        })
                self["actions"].csel = self
 
                self.onLayoutFinish.append(self.onCreate)
 
                        })
                self["actions"].csel = self
 
                self.onLayoutFinish.append(self.onCreate)
 
+       def enterDateTime(self):
+               self.session.openWithCallback(self.onDateTimeInputClosed, TimeDateInput)
+
+       def onDateTimeInputClosed(self, ret):
+               if len(ret) > 1:
+                       if ret[0]:
+                               self.asked_specific_time=True
+                               self["list"].fillMultiEPG(self.services, ret[1])
+
        def closeScreen(self):
                self.close(self.closeRecursive)
 
        def infoKeyPressed(self):
        def closeScreen(self):
                self.close(self.closeRecursive)
 
        def infoKeyPressed(self):
-               if self.type == EPG_TYPE_MULTI:
+               if self.type == EPG_TYPE_MULTI or self.type == EPG_TYPE_SIMILAR:
                        cur = self["list"].getCurrent()
                        event = cur[0]
                        service = cur[1]
                        cur = self["list"].getCurrent()
                        event = cur[0]
                        service = cur[1]
@@ -78,7 +97,13 @@ class EPGSelection(Screen):
                        event = self["list"].getCurrent()
                        service = self.currentService
                if event is not None:
                        event = self["list"].getCurrent()
                        service = self.currentService
                if event is not None:
-                       self.session.open(EventViewSimple, event, service, self.eventViewCallback)
+                       if self.type != EPG_TYPE_SIMILAR:
+                               self.session.open(EventViewSimple, event, service, self.eventViewCallback, self.openSimilarList)
+                       else:
+                               self.session.open(EventViewSimple, event, service, self.eventViewCallback)
+
+       def openSimilarList(self, eventid, refstr):
+               self.session.open(EPGSelection, refstr, None, eventid)
 
        #just used in multipeg
        def onCreate(self):
 
        #just used in multipeg
        def onCreate(self):
@@ -86,10 +111,13 @@ class EPGSelection(Screen):
                if self.type == EPG_TYPE_MULTI:
                        l.recalcEntrySize()
                        l.fillMultiEPG(self.services)
                if self.type == EPG_TYPE_MULTI:
                        l.recalcEntrySize()
                        l.fillMultiEPG(self.services)
-               else:
+               elif self.type == EPG_TYPE_SINGLE:
                        if SINGLE_CPP == 0:
                                l.recalcEntrySize()
                        l.fillSingleEPG(self.currentService)
                        if SINGLE_CPP == 0:
                                l.recalcEntrySize()
                        l.fillSingleEPG(self.currentService)
+               else:
+                       l.recalcEntrySize()
+                       l.fillSimilarList(self.currentService, self.eventid)
 
        def eventViewCallback(self, setEvent, setService, val):
                l = self["list"]
 
        def eventViewCallback(self, setEvent, setService, val):
                l = self["list"]
@@ -115,10 +143,10 @@ class EPGSelection(Screen):
                        self.zapFunc(ref.ref)
 
        def eventSelected(self):
                        self.zapFunc(ref.ref)
 
        def eventSelected(self):
-               if self.type == EPG_TYPE_SINGLE:
-                       self.infoKeyPressed()
-               else: # EPG_TYPE_MULTI
+               if self.type == EPG_TYPE_MULTI:
                        self.zapTo()
                        self.zapTo()
+               else:
+                       self.infoKeyPressed()
 
        def yellowButtonPressed(self):
                if self.type == EPG_TYPE_MULTI:
 
        def yellowButtonPressed(self):
                if self.type == EPG_TYPE_MULTI:
@@ -154,31 +182,44 @@ class EPGSelection(Screen):
                self["list"].moveDown()
 
        def applyButtonState(self, state):
                self["list"].moveDown()
 
        def applyButtonState(self, state):
-               if state == 1:
-                       self["now_button_sel"].show()
+               if state == 0:
                        self["now_button"].hide()
                        self["now_button"].hide()
-               else:
-                       self["now_button"].show()
                        self["now_button_sel"].hide()
                        self["now_button_sel"].hide()
-
-               if state == 2:
-                       self["next_button_sel"].show()
                        self["next_button"].hide()
                        self["next_button"].hide()
-               else:
-                       self["next_button"].show()
                        self["next_button_sel"].hide()
                        self["next_button_sel"].hide()
-
-               if state == 3:
-                       self["more_button_sel"].show()
                        self["more_button"].hide()
                        self["more_button"].hide()
-               else:
-                       self["more_button"].show()
                        self["more_button_sel"].hide()
                        self["more_button_sel"].hide()
+                       self["now_text"].hide()
+                       self["next_text"].hide()
+                       self["more_text"].hide()
+               else:
+                       if state == 1:
+                               self["now_button_sel"].show()
+                               self["now_button"].hide()
+                       else:
+                               self["now_button"].show()
+                               self["now_button_sel"].hide()
+
+                       if state == 2:
+                               self["next_button_sel"].show()
+                               self["next_button"].hide()
+                       else:
+                               self["next_button"].show()
+                               self["next_button_sel"].hide()
+
+                       if state == 3:
+                               self["more_button_sel"].show()
+                               self["more_button"].hide()
+                       else:
+                               self["more_button"].show()
+                               self["more_button_sel"].hide()
 
        def onSelectionChanged(self):
                if self.type == EPG_TYPE_MULTI:
                        count = self["list"].getCurrentChangeCount()
 
        def onSelectionChanged(self):
                if self.type == EPG_TYPE_MULTI:
                        count = self["list"].getCurrentChangeCount()
-                       if count > 1:
+                       if self.asked_specific_time:
+                               self.applyButtonState(0)
+                       elif count > 1:
                                self.applyButtonState(3)
                        elif count > 0:
                                self.applyButtonState(2)
                                self.applyButtonState(3)
                        elif count > 0:
                                self.applyButtonState(2)