- fixed left/right in language selection (updates language on the fly)
[enigma2.git] / lib / python / Screens / EpgSelection.py
index 03228f60a44241d52420fd8c988726087dfab4f9..d6fee56759e5b50b32642a5ce888c9a3ae0bc261 100644 (file)
 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
+from Components.config import config, currentConfigSelectionElement
 
 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.closeScreen,
                                "ok": self.eventSelected,
                                "ok": self.eventSelected,
-                               "timerAdd": self.timerAdd
+                               "timerAdd": self.timerAdd,
+                               "yellow": self.yellowButtonPressed,
+                               "blue": self.blueButtonPressed,
+                               "info": self.infoKeyPressed
                        })
                self["actions"].csel = self
                        })
                self["actions"].csel = self
-               self.setRoot(root)
 
 
-       def eventViewCallback(self, setEvent, val):
+               self.onLayoutFinish.append(self.onCreate)
+
+       def infoKeyPressed(self):
+               if currentConfigSelectionElement(config.usage.epgtoggle) == "yes":
+                       self.close(True)
+               else:
+                       self.close(False)
+
+       def closeScreen(self):
+               self.close(False)
+
+
+       #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.eventViewCallback)
-       
+               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)
+
+       def blueButtonPressed(self):
+               if self.type == EPG_TYPE_MULTI:
+                       self["list"].updateMultiEPG(1)
+
        def timerAdd(self):
        def timerAdd(self):
-               epg = self["list"].getCurrent()
-               
-               if (epg == None):
-                       description = "unknown event"
+               if self.type == EPG_TYPE_SINGLE:
+                       event = self["list"].getCurrent()
+                       serviceref = self.currentService
                else:
                else:
-                       description = epg.getEventName()
-                       # FIXME we need a timestamp here:
-                       begin = epg.getBeginTime()
-                       
-                       print begin
-                       print epg.getDuration()
-                       end = begin + epg.getDuration()
-
-
-               # FIXME only works if already playing a service
-               serviceref = ServiceReference(self.session.nav.getCurrentlyPlayingServiceReference())
-               
-               newEntry = RecordTimerEntry(begin, end, serviceref, epg, description)
+                       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):
        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"       
-                       
-       def setRoot(self, root):
-               self["list"].setRoot(root)
 
        def moveUp(self):
                self["list"].moveUp()
 
        def moveUp(self):
                self["list"].moveUp()