generic show/hide support for GUIComponents
[enigma2.git] / lib / python / Screens / EpgSelection.py
index 9458e39564a209ccd1d0a61edd01083f1a33ecc8..378e0d8976b727539cc351a9ec70b4d3cceef628 100644 (file)
@@ -1,36 +1,52 @@
 from Screen import Screen
 from Components.Button import Button
 from Screen import Screen
 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 Components.ScrollLabel import ScrollLabel
+from Screens.EventView import EventViewSimple
 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 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
+from time import localtime
 
 import xml.dom.minidom
 
 class EPGSelection(Screen):
 
 import xml.dom.minidom
 
 class EPGSelection(Screen):
-       def __init__(self, session, service):
+       def __init__(self, session, service, zapFunc=None):
                Screen.__init__(self, session)
                Screen.__init__(self, session)
-
                self["key_red"] = Button("")
                self["key_red"] = Button("")
-               self["key_green"] = Button(_("Add timer"))
-
+               self.closeRecursive = False
                if isinstance(service, eServiceReference):
                        self.type = EPG_TYPE_SINGLE
                        self["key_yellow"] = Button()
                        self["key_blue"] = Button()
                        self.currentService=ServiceReference(service)
                else:
                if isinstance(service, eServiceReference):
                        self.type = EPG_TYPE_SINGLE
                        self["key_yellow"] = Button()
                        self["key_blue"] = Button()
                        self.currentService=ServiceReference(service)
                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(self.type, self.onSelectionChanged)
 
                class ChannelActionMap(ActionMap):
                        def action(self, contexts, action):
 
                class ChannelActionMap(ActionMap):
                        def action(self, contexts, action):
@@ -38,22 +54,31 @@ class EPGSelection(Screen):
 
                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,
+                               "zapTo": self.zapTo
                        })
                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 closeScreen(self):
+               self.close(self.closeRecursive or self.type == EPG_TYPE_SINGLE)
+
+       def infoKeyPressed(self):
+               if self.type == EPG_TYPE_MULTI:
+                       cur = self["list"].getCurrent()
+                       event = cur[0]
+                       service = cur[1]
+               else:
+                       event = self["list"].getCurrent()
+                       service = self.currentService
+               if event is not None:
+                       self.session.open(EventViewSimple, event, service, self.eventViewCallback)
 
        #just used in multipeg
        def onCreate(self):
 
        #just used in multipeg
        def onCreate(self):
@@ -83,16 +108,17 @@ class EPGSelection(Screen):
                                setEvent(cur[0])
                                setService(cur[1])
 
                                setEvent(cur[0])
                                setService(cur[1])
 
+       def zapTo(self): # just used in multiepg
+               if self.zapFunc != None:
+                       self.closeRecursive = True
+                       ref = self["list"].getCurrent()[1]
+                       self.zapFunc(ref.ref)
+
        def eventSelected(self):
                if self.type == EPG_TYPE_SINGLE:
        def eventSelected(self):
                if self.type == EPG_TYPE_SINGLE:
-                       event = self["list"].getCurrent()
-                       service = self.currentService
+                       self.infoKeyPressed()
                else: # EPG_TYPE_MULTI
                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.zapTo()
 
        def yellowButtonPressed(self):
                if self.type == EPG_TYPE_MULTI:
 
        def yellowButtonPressed(self):
                if self.type == EPG_TYPE_MULTI:
@@ -116,7 +142,7 @@ class EPGSelection(Screen):
                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 +152,48 @@ class EPGSelection(Screen):
 
        def moveDown(self):
                self["list"].moveDown()
 
        def moveDown(self):
                self["list"].moveDown()
+
+       def applyButtonState(self, state):
+               if state == 1:
+                       self["now_button_sel"].show()
+                       self["now_button"].hide()
+               else:
+                       self["now_button"].show()
+                       self["now_button_sel"].hide()
+
+               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 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)