toggle between epg types with info
[enigma2.git] / lib / python / Screens / EpgSelection.py
index def51d49d66e9affa2ccb384294bf0b1b17c316a..9458e39564a209ccd1d0a61edd01083f1a33ecc8 100644 (file)
@@ -1,11 +1,11 @@
 from Screen import Screen
 from Components.Button import Button
 from Screen import Screen
 from Components.Button import Button
-from Components.EpgList import EPGList
+from Components.EpgList import *
 from Components.ActionMap import ActionMap
 from Screens.EventView import EventView
 from enigma import eServiceReference, eServiceEventPtr
 from Screens.FixedMenu import FixedMenu
 from Components.ActionMap import ActionMap
 from Screens.EventView import EventView
 from enigma import eServiceReference, eServiceEventPtr
 from Screens.FixedMenu import FixedMenu
-from RecordTimer import RecordTimerEntry
+from RecordTimer import RecordTimerEntry, parseEvent
 from TimerEdit import TimerEditList
 from TimerEntry import TimerEntry
 from ServiceReference import ServiceReference
 from TimerEdit import TimerEditList
 from TimerEntry import TimerEntry
 from ServiceReference import ServiceReference
@@ -13,67 +13,114 @@ from ServiceReference import ServiceReference
 import xml.dom.minidom
 
 class EPGSelection(Screen):
 import xml.dom.minidom
 
 class EPGSelection(Screen):
-       def __init__(self, session, root):
+       def __init__(self, session, service):
                Screen.__init__(self, session)
 
                Screen.__init__(self, session)
 
-               self["list"] = EPGList()
+               self["key_red"] = Button("")
+               self["key_green"] = Button(_("Add timer"))
+
+               if isinstance(service, eServiceReference):
+                       self.type = EPG_TYPE_SINGLE
+                       self["key_yellow"] = Button()
+                       self["key_blue"] = Button()
+                       self.currentService=ServiceReference(service)
+               else:
+                       self.type = EPG_TYPE_MULTI
+                       self["key_yellow"] = Button(_("Prev"))
+                       self["key_blue"] = Button(_("Next"))
+                       self.services = service
+
+               self["list"] = EPGList(self.type)
 
                class ChannelActionMap(ActionMap):
                        def action(self, contexts, action):
 
                class ChannelActionMap(ActionMap):
                        def action(self, contexts, action):
-                                       ActionMap.action(self, contexts, action)
+                               ActionMap.action(self, contexts, action)
 
 
-               self["actions"] = ChannelActionMap(["EPGSelectActions", "OkCancelActions"], 
+               self["actions"] = ChannelActionMap(["EPGSelectActions", "OkCancelActions"],
                        {
                        {
-                               "cancel": self.close,
+                               "cancel": self.closeClose,
                                "ok": self.eventSelected,
                                "ok": self.eventSelected,
-                               "timerAdd": self.timerAdd
+                               "timerAdd": self.timerAdd,
+                               "yellow": self.yellowButtonPressed,
+                               "blue": self.blueButtonPressed,
+                               "info": self.closeInfo
                        })
                self["actions"].csel = self
                        })
                self["actions"].csel = self
-               self.setRoot(root)
 
 
-       def eventViewCallback(self, setEvent, val):
+               self.onLayoutFinish.append(self.onCreate)
+
+       def closeClose(self):
+               self.close(False)
+               
+       def closeInfo(self):
+               self.close(True)
+
+       #just used in multipeg
+       def onCreate(self):
+               l = self["list"]
+               if self.type == EPG_TYPE_MULTI:
+                       l.recalcEntrySize()
+                       l.fillMultiEPG(self.services)
+               else:
+                       if SINGLE_CPP == 0:
+                               l.recalcEntrySize()
+                       l.fillSingleEPG(self.currentService)
+
+       def eventViewCallback(self, setEvent, setService, val):
+               l = self["list"]
+               old = l.getCurrent()
                if val == -1:
                        self.moveUp()
                if val == -1:
                        self.moveUp()
-                       setEvent(self["list"].getCurrent())
                elif val == +1:
                        self.moveDown()
                elif val == +1:
                        self.moveDown()
-                       setEvent(self["list"].getCurrent())
+               cur = l.getCurrent()
+               if self.type == EPG_TYPE_SINGLE:
+                       setEvent(cur)
+               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])
 
        def eventSelected(self):
 
        def eventSelected(self):
-               event = self["list"].getCurrent()
-               self.session.open(EventView, event, self.currentService, self.eventViewCallback)
-       
-       def timerAdd(self):
-               epg = self["list"].getCurrent()
-               
-               if (epg == None):
-                       description = "unknown event"
-               else:
-                       description = epg.getEventName()
-                       # FIXME we need a timestamp here:
-                       begin = epg.getBeginTime()
-                       
-                       print begin
-                       print epg.getDuration()
-                       end = begin + epg.getDuration()
+               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)
 
 
+       def yellowButtonPressed(self):
+               if self.type == EPG_TYPE_MULTI:
+                       self["list"].updateMultiEPG(-1)
 
 
-               # FIXME only works if already playing a service
-               serviceref = ServiceReference(self.session.nav.getCurrentlyPlayingServiceReference())
-               
-               newEntry = RecordTimerEntry(begin, end, serviceref, epg, description)
+       def blueButtonPressed(self):
+               if self.type == EPG_TYPE_MULTI:
+                       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]
+               if event is None:
+                       return
+               newEntry = RecordTimerEntry(serviceref, *parseEvent(event))
                self.session.openWithCallback(self.timerEditFinished, TimerEntry, newEntry)
                self.session.openWithCallback(self.timerEditFinished, TimerEntry, newEntry)
-       
+
        def timerEditFinished(self, answer):
                if (answer[0]):
                        self.session.nav.RecordTimer.record(answer[1])
                else:
                        print "Timeredit aborted"       
 
        def timerEditFinished(self, answer):
                if (answer[0]):
                        self.session.nav.RecordTimer.record(answer[1])
                else:
                        print "Timeredit aborted"       
 
-       def setRoot(self, root):
-               self.currentService=ServiceReference(root)
-               self["list"].setRoot(root)
-
        def moveUp(self):
                self["list"].moveUp()
 
        def moveUp(self):
                self["list"].moveUp()