whitespace cleanup
[enigma2.git] / lib / python / Screens / EpgSelection.py
index 9458e39564a209ccd1d0a61edd01083f1a33ecc8..3103bfa71743266a770336b6f220006a56803006 100644 (file)
 from Screen import Screen
 from Screen import Screen
+from Components.config import config, ConfigClock
 from Components.Button import Button
 from Components.Button import Button
+from Components.Pixmap import Pixmap
+from Components.Label import Label
 from Components.EpgList import *
 from Components.ActionMap import ActionMap
 from Components.EpgList import *
 from Components.ActionMap import ActionMap
-from Screens.EventView import EventView
-from enigma import eServiceReference, eServiceEventPtr
+from Components.ScrollLabel import ScrollLabel
+from Screens.EventView import EventViewSimple
+from TimeDateInput import TimeDateInput
+from enigma import eServiceReference
 from Screens.FixedMenu import FixedMenu
 from RecordTimer import RecordTimerEntry, parseEvent
 from TimerEdit import TimerEditList
 from TimerEntry import TimerEntry
 from ServiceReference import ServiceReference
 from Screens.FixedMenu import FixedMenu
 from RecordTimer import RecordTimerEntry, parseEvent
 from TimerEdit import TimerEditList
 from TimerEntry import TimerEntry
 from ServiceReference import ServiceReference
+from time import localtime, time
 
 import xml.dom.minidom
 
 
 import xml.dom.minidom
 
+mepg_config_initialized = False
+
 class EPGSelection(Screen):
 class EPGSelection(Screen):
-       def __init__(self, session, service):
+       def __init__(self, session, service, zapFunc=None, eventid=None, bouquetChangeCB=None):
                Screen.__init__(self, session)
                Screen.__init__(self, session)
-
+               self.bouquetChangeCB = bouquetChangeCB
+               self.ask_time = -1 #now
                self["key_red"] = Button("")
                self["key_red"] = Button("")
-               self["key_green"] = Button(_("Add timer"))
-
-               if isinstance(service, eServiceReference):
+               self.closeRecursive = False
+               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
+                       self.zapFunc = None
+               elif isinstance(service, eServiceReference) or isinstance(service, str):
                        self.type = EPG_TYPE_SINGLE
                        self["key_yellow"] = Button()
                        self["key_blue"] = Button()
                        self.currentService=ServiceReference(service)
                        self.type = EPG_TYPE_SINGLE
                        self["key_yellow"] = Button()
                        self["key_blue"] = Button()
                        self.currentService=ServiceReference(service)
+                       self.zapFunc = None
                else:
                else:
+                       self.skinName = "EPGSelectionMulti"
                        self.type = EPG_TYPE_MULTI
                        self["key_yellow"] = Button(_("Prev"))
                        self["key_blue"] = Button(_("Next"))
                        self.type = EPG_TYPE_MULTI
                        self["key_yellow"] = Button(_("Prev"))
                        self["key_blue"] = Button(_("Next"))
+                       self["now_button"] = Pixmap()
+                       self["next_button"] = Pixmap()
+                       self["more_button"] = Pixmap()
+                       self["now_button_sel"] = Pixmap()
+                       self["next_button_sel"] = Pixmap()
+                       self["more_button_sel"] = Pixmap()
+                       self["now_text"] = Label()
+                       self["next_text"] = Label()
+                       self["more_text"] = Label()
+                       self["date"] = Label()
                        self.services = service
                        self.services = service
+                       self.zapFunc = zapFunc
 
 
-               self["list"] = EPGList(self.type)
+               self["key_green"] = Button(_("Add timer"))
+               self["list"] = EPGList(type = self.type, selChangedCB = self.onSelectionChanged, timer = self.session.nav.RecordTimer)
 
                class ChannelActionMap(ActionMap):
                        def action(self, contexts, action):
 
                class ChannelActionMap(ActionMap):
                        def action(self, contexts, action):
-                               ActionMap.action(self, contexts, action)
+                               return ActionMap.action(self, contexts, action)
 
                self["actions"] = ChannelActionMap(["EPGSelectActions", "OkCancelActions"],
                        {
 
                self["actions"] = ChannelActionMap(["EPGSelectActions", "OkCancelActions"],
                        {
-                               "cancel": self.closeClose,
+                               "cancel": self.closeScreen,
                                "ok": self.eventSelected,
                                "timerAdd": self.timerAdd,
                                "yellow": self.yellowButtonPressed,
                                "blue": self.blueButtonPressed,
                                "ok": self.eventSelected,
                                "timerAdd": self.timerAdd,
                                "yellow": self.yellowButtonPressed,
                                "blue": self.blueButtonPressed,
-                               "info": self.closeInfo
+                               "info": self.infoKeyPressed,
+                               "red": self.zapTo,
+                               "input_date_time": self.enterDateTime,
+                               "nextBouquet": self.nextBouquet,
+                               "prevBouquet": self.prevBouquet
                        })
                self["actions"].csel = self
 
                self.onLayoutFinish.append(self.onCreate)
 
                        })
                self["actions"].csel = self
 
                self.onLayoutFinish.append(self.onCreate)
 
-       def closeClose(self):
-               self.close(False)
-               
-       def closeInfo(self):
-               self.close(True)
+       def nextBouquet(self):
+               if self.bouquetChangeCB:
+                       self.bouquetChangeCB(1, self)
+
+       def prevBouquet(self):
+               if self.bouquetChangeCB:
+                       self.bouquetChangeCB(-1, self)
+
+       def enterDateTime(self):
+               if self.type == EPG_TYPE_MULTI:
+                       global mepg_config_initialized
+                       if not mepg_config_initialized:
+                               config.misc.prev_mepg_time=ConfigClock(default = time())
+                               mepg_config_initialized = True
+                       self.session.openWithCallback(self.onDateTimeInputClosed, TimeDateInput, config.misc.prev_mepg_time )
+
+       def onDateTimeInputClosed(self, ret):
+               if len(ret) > 1:
+                       if ret[0]:
+                               self.ask_time=ret[1]
+                               self["list"].fillMultiEPG(self.services, ret[1])
+
+       def closeScreen(self):
+               self.close(self.closeRecursive)
+
+       def infoKeyPressed(self):
+               cur = self["list"].getCurrent()
+               event = cur[0]
+               service = cur[1]
+               if event is not None:
+                       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)
+
+       def setServices(self, services):
+               self.services = services
+               self.onCreate()
 
        #just used in multipeg
        def onCreate(self):
                l = self["list"]
 
        #just used in multipeg
        def onCreate(self):
                l = self["list"]
+               l.recalcEntrySize()
                if self.type == EPG_TYPE_MULTI:
                if self.type == EPG_TYPE_MULTI:
-                       l.recalcEntrySize()
-                       l.fillMultiEPG(self.services)
-               else:
-                       if SINGLE_CPP == 0:
-                               l.recalcEntrySize()
+                       l.fillMultiEPG(self.services, self.ask_time)
+               elif self.type == EPG_TYPE_SINGLE:
                        l.fillSingleEPG(self.currentService)
                        l.fillSingleEPG(self.currentService)
+               else:
+                       l.fillSimilarList(self.currentService, self.eventid)
 
        def eventViewCallback(self, setEvent, setService, val):
                l = self["list"]
 
        def eventViewCallback(self, setEvent, setService, val):
                l = self["list"]
@@ -74,25 +144,23 @@ class EPGSelection(Screen):
                elif val == +1:
                        self.moveDown()
                cur = l.getCurrent()
                elif val == +1:
                        self.moveDown()
                cur = l.getCurrent()
-               if self.type == EPG_TYPE_SINGLE:
-                       setEvent(cur)
+               if self.type == EPG_TYPE_MULTI and cur[0] is None and cur[1].ref != old[1].ref:
+                       self.eventViewCallback(setEvent, setService, val)
                else:
                else:
-                       if self.type == EPG_TYPE_MULTI and cur[0] is None and cur[1].ref != old[1].ref:
-                               self.eventViewCallback(setEvent, setService, val)
-                       else:
-                               setEvent(cur[0])
-                               setService(cur[1])
+                       setService(cur[1])
+                       setEvent(cur[0])
+
+       def zapTo(self): # just used in multiepg
+               if self.zapFunc and self["key_red"].getText() == "Zap":
+                       lst = self["list"]
+                       count = lst.getCurrentChangeCount()
+                       if count == 0:
+                               self.closeRecursive = True
+                               ref = lst.getCurrent()[1]
+                               self.zapFunc(ref.ref)
 
        def eventSelected(self):
 
        def eventSelected(self):
-               if self.type == EPG_TYPE_SINGLE:
-                       event = self["list"].getCurrent()
-                       service = self.currentService
-               else: # EPG_TYPE_MULTI
-                       cur = self["list"].getCurrent()
-                       event = cur[0]
-                       service = cur[1]
-               if event is not None:
-                       self.session.open(EventView, event, service, self.eventViewCallback)
+               self.infoKeyPressed()
 
        def yellowButtonPressed(self):
                if self.type == EPG_TYPE_MULTI:
 
        def yellowButtonPressed(self):
                if self.type == EPG_TYPE_MULTI:
@@ -103,20 +171,16 @@ class EPGSelection(Screen):
                        self["list"].updateMultiEPG(1)
 
        def timerAdd(self):
                        self["list"].updateMultiEPG(1)
 
        def timerAdd(self):
-               if self.type == EPG_TYPE_SINGLE:
-                       event = self["list"].getCurrent()
-                       serviceref = self.currentService
-               else:
-                       cur = self["list"].getCurrent()
-                       event = cur[0]
-                       serviceref = cur[1]
+               cur = self["list"].getCurrent()
+               event = cur[0]
+               serviceref = cur[1]
                if event is None:
                        return
                if event is None:
                        return
-               newEntry = RecordTimerEntry(serviceref, *parseEvent(event))
+               newEntry = RecordTimerEntry(serviceref, checkOldTimers = True, *parseEvent(event))
                self.session.openWithCallback(self.timerEditFinished, TimerEntry, newEntry)
 
        def timerEditFinished(self, answer):
                self.session.openWithCallback(self.timerEditFinished, TimerEntry, newEntry)
 
        def timerEditFinished(self, answer):
-               if (answer[0]):
+               if answer[0]:
                        self.session.nav.RecordTimer.record(answer[1])
                else:
                        print "Timeredit aborted"       
                        self.session.nav.RecordTimer.record(answer[1])
                else:
                        print "Timeredit aborted"       
@@ -126,3 +190,64 @@ class EPGSelection(Screen):
 
        def moveDown(self):
                self["list"].moveDown()
 
        def moveDown(self):
                self["list"].moveDown()
+
+       def applyButtonState(self, state):
+               if state == 0:
+                       self["now_button"].hide()
+                       self["now_button_sel"].hide()
+                       self["next_button"].hide()
+                       self["next_button_sel"].hide()
+                       self["more_button"].hide()
+                       self["more_button_sel"].hide()
+                       self["now_text"].hide()
+                       self["next_text"].hide()
+                       self["more_text"].hide()
+                       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()
+                               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()
+                       if self.ask_time != -1:
+                               self.applyButtonState(0)
+                       elif count > 1:
+                               self.applyButtonState(3)
+                       elif count > 0:
+                               self.applyButtonState(2)
+                       else:
+                               self.applyButtonState(1)
+                       days = [ _("Mon"), _("Tue"), _("Wed"), _("Thu"), _("Fri"), _("Sat"), _("Sun") ]
+                       datastr = ""
+                       event = self["list"].getCurrent()[0]
+                       if event is not None:
+                               now = time()
+                               beg = event.getBeginTime()
+                               nowTime = localtime(now)
+                               begTime = localtime(beg)
+                               if nowTime[2] != begTime[2]:
+                                       datestr = '%s %d.%d.'%(days[begTime[6]], begTime[2], begTime[1])
+                               else:
+                                       datestr = '%s %d.%d.'%(_("Today"), begTime[2], begTime[1])
+                       self["date"].setText(datestr)