add possibility to change services in single service epg with bouquet +/- key
[enigma2.git] / lib / python / Screens / EpgSelection.py
index b40f445f1022a2c821786e176db4774f63d6e3ab..49308994fe593e3ab4437e10a8a9da1df816340a 100644 (file)
@@ -19,15 +19,20 @@ from time import localtime, time
 mepg_config_initialized = False
 
 class EPGSelection(Screen):
-       ADD_TIMER = 0
-       REMOVE_TIMER = 1
+       EMPTY = 0
+       ADD_TIMER = 1
+       REMOVE_TIMER = 2
+       
+       ZAP = 1
 
-       def __init__(self, session, service, zapFunc=None, eventid=None, bouquetChangeCB=None):
+       def __init__(self, session, service, zapFunc=None, eventid=None, bouquetChangeCB=None, serviceChangeCB=None):
                Screen.__init__(self, session)
                self.bouquetChangeCB = bouquetChangeCB
+               self.serviceChangeCB = serviceChangeCB
                self.ask_time = -1 #now
                self["key_red"] = Button("")
                self.closeRecursive = False
+               self.saved_title = None
                if isinstance(service, str) and eventid != None:
                        self.type = EPG_TYPE_SIMILAR
                        self["key_yellow"] = Button()
@@ -64,7 +69,8 @@ class EPGSelection(Screen):
 
                self["key_green"] = Button(_("Add timer"))
                self.key_green_choice = self.ADD_TIMER
-               self["list"] = EPGList(type = self.type, selChangedCB = self.onSelectionChanged, timer = self.session.nav.RecordTimer)
+               self.key_red_choice = self.EMPTY
+               self["list"] = EPGList(type = self.type, selChangedCB = self.onSelectionChanged, timer = session.nav.RecordTimer)
 
                self["actions"] = ActionMap(["EPGSelectActions", "OkCancelActions"],
                        {
@@ -77,19 +83,22 @@ class EPGSelection(Screen):
                                "red": self.zapTo,
                                "input_date_time": self.enterDateTime,
                                "nextBouquet": self.nextBouquet,
-                               "prevBouquet": self.prevBouquet
+                               "prevBouquet": self.prevBouquet,
                        })
                self["actions"].csel = self
-
                self.onLayoutFinish.append(self.onCreate)
 
        def nextBouquet(self):
-               if self.bouquetChangeCB:
+               if self.serviceChangeCB:
+                       self.serviceChangeCB(1, self)
+               elif self.bouquetChangeCB:
                        self.bouquetChangeCB(1, self)
 
        def prevBouquet(self):
                if self.bouquetChangeCB:
                        self.bouquetChangeCB(-1, self)
+               elif self.serviceChangeCB:
+                       self.serviceChangeCB(-1, self)
 
        def enterDateTime(self):
                if self.type == EPG_TYPE_MULTI:
@@ -125,14 +134,24 @@ class EPGSelection(Screen):
                self.services = services
                self.onCreate()
 
+       def setService(self, service):
+               self.currentService = service
+               self.onCreate()
+
        #just used in multipeg
        def onCreate(self):
                l = self["list"]
                l.recalcEntrySize()
                if self.type == EPG_TYPE_MULTI:
                        l.fillMultiEPG(self.services, self.ask_time)
+                       l.moveToService(self.session.nav.getCurrentlyPlayingServiceReference())
                elif self.type == EPG_TYPE_SINGLE:
-                       l.fillSingleEPG(self.currentService)
+                       service = self.currentService
+                       if self.saved_title is None:
+                               self.saved_title = self.instance.getTitle()
+                       title = self.saved_title + ' - ' + service.getServiceName()
+                       self.instance.setTitle(title)
+                       l.fillSingleEPG(service)
                else:
                        l.fillSimilarList(self.currentService, self.eventid)
 
@@ -151,7 +170,7 @@ class EPGSelection(Screen):
                        setEvent(cur[0])
 
        def zapTo(self): # just used in multiepg
-               if self.zapFunc and self["key_red"].getText() == "Zap":
+               if self.zapFunc and self.key_red_choice == self.ZAP:
                        lst = self["list"]
                        count = lst.getCurrentChangeCount()
                        if count == 0:
@@ -214,11 +233,11 @@ class EPGSelection(Screen):
                        entry = answer[1]
                        simulTimerList = self.session.nav.RecordTimer.record(entry)
                        if simulTimerList is not None:
-                               if (len(simulTimerList) == 2) and (simulTimerList[1].dontSave) and (simulTimerList[1].autoincrease):
-                                       simulTimerList[1].end = entry.begin - 30
-                                       self.session.nav.RecordTimer.timeChanged(simulTimerList[1])
-                                       self.session.nav.RecordTimer.record(entry)
-                               else:
+                               for x in simulTimerList:
+                                       if x.setAutoincreaseEnd(entry):
+                                               self.session.nav.RecordTimer.timeChanged(x)
+                               simulTimerList = self.session.nav.RecordTimer.record(entry)
+                               if simulTimerList is not None:
                                        self.session.openWithCallback(self.finishSanityCorrection, TimerSanityConflict, simulTimerList)
                        self["key_green"].setText(_("Remove timer"))
                        self.key_green_choice = self.REMOVE_TIMER
@@ -250,13 +269,11 @@ class EPGSelection(Screen):
                        self["key_red"].setText("")
                else:
                        if state == 1:
-                               self["key_red"].setText("Zap")
                                self["now_button_sel"].show()
                                self["now_button"].hide()
                        else:
                                self["now_button"].show()
                                self["now_button_sel"].hide()
-                               self["key_red"].setText("")
 
                        if state == 2:
                                self["next_button_sel"].show()
@@ -274,6 +291,15 @@ class EPGSelection(Screen):
 
        def onSelectionChanged(self):
                cur = self["list"].getCurrent()
+               if cur is None:
+                       if self.key_green_choice != self.EMPTY:
+                               self["key_green"].setText("")
+                               self.key_green_choice = self.EMPTY
+                       if self.key_red_choice != self.EMPTY:
+                               self["key_red"].setText("")
+                               self.key_red_choice = self.EMPTY
+                       return
+               event = cur[0]
                if self.type == EPG_TYPE_MULTI:
                        count = self["list"].getCurrentChangeCount()
                        if self.ask_time != -1:
@@ -285,8 +311,7 @@ class EPGSelection(Screen):
                        else:
                                self.applyButtonState(1)
                        days = [ _("Mon"), _("Tue"), _("Wed"), _("Thu"), _("Fri"), _("Sat"), _("Sun") ]
-                       datastr = ""
-                       event = cur[0]
+                       datestr = ""
                        if event is not None:
                                now = time()
                                beg = event.getBeginTime()
@@ -297,23 +322,36 @@ class EPGSelection(Screen):
                                else:
                                        datestr = '%s %d.%d.'%(_("Today"), begTime[2], begTime[1])
                        self["date"].setText(datestr)
-               else:
-                       event = cur[0]
+
+               if cur[1] is None  or cur[1].getServiceName() == "":
+                       if self.key_green_choice != self.EMPTY:
+                               self["key_green"].setText("")
+                               self.key_green_choice = self.EMPTY
+                       if self.key_red_choice != self.EMPTY:
+                               self["key_red"].setText("")
+                               self.key_red_choice = self.EMPTY
+                       return
+               elif self.key_red_choice != self.ZAP and  self.type == EPG_TYPE_MULTI:
+                               self["key_red"].setText("Zap")
+                               self.key_red_choice = self.ZAP
 
                if event is None:
+                       if self.key_green_choice != self.EMPTY:
+                               self["key_green"].setText("")
+                               self.key_green_choice = self.EMPTY
                        return
 
                serviceref = cur[1]
                eventid = event.getEventId()
                refstr = serviceref.ref.toString()
-
+               isRecordEvent = False
                for timer in self.session.nav.RecordTimer.timer_list:
-                       if self.key_green_choice != self.REMOVE_TIMER:
-                               if timer.eit == eventid and timer.service_ref.ref.toString() == refstr:
-                                       self["key_green"].setText(_("Remove timer"))
-                                       self.key_green_choice = self.REMOVE_TIMER
-                                       break
-               else:
-                       if self.key_green_choice != self.ADD_TIMER:
-                               self["key_green"].setText(_("Add timer"))
-                               self.key_green_choice = self.ADD_TIMER
+                       if timer.eit == eventid and timer.service_ref.ref.toString() == refstr:
+                               isRecordEvent = True
+                               break
+               if isRecordEvent and self.key_green_choice != self.REMOVE_TIMER:
+                       self["key_green"].setText(_("Remove timer"))
+                       self.key_green_choice = self.REMOVE_TIMER
+               elif not isRecordEvent and self.key_green_choice != self.ADD_TIMER:
+                       self["key_green"].setText(_("Add timer"))
+                       self.key_green_choice = self.ADD_TIMER