fix
[enigma2.git] / lib / python / Screens / EpgSelection.py
index 9ab18fb0b64004d18f85ec3d5ba214420bff7709..64be16b758700409d536c73ef7c0e9517d80b9be 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, parseEvent
+from TimerEdit import TimerEditList
+from TimerEntry import TimerEntry
+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,
+                               "yellow": self.yellowButtonPressed,
+                               "blue": self.blueButtonPressed,
+                               "info": self.closeClose
                        })
                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.eventViewCallback)
-       
-       def setRoot(self, root):
-               self["list"].setRoot(root)
+               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):
+               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)
+
+       def timerEditFinished(self, answer):
+               if (answer[0]):
+                       self.session.nav.RecordTimer.record(answer[1])
+               else:
+                       print "Timeredit aborted"       
 
        def moveUp(self):
                self["list"].moveUp()
 
        def moveUp(self):
                self["list"].moveUp()