show plugin description in plugin list
[enigma2.git] / lib / python / Screens / EpgSelection.py
index 9ab18fb0b64004d18f85ec3d5ba214420bff7709..ec461e2f7177a3b33bc48d24f51f5bd3896f1a17 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
+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,
+                               "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)
-       
-       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()