dont open epglist when no epg is avail
[enigma2.git] / lib / python / Screens / InfoBar.py
index e98ebbaee7c12cf40a74acd4dc8d4c96414c01d0..78a47dddf03735587ccf56afb76c1574136f511e 100644 (file)
@@ -1,15 +1,21 @@
 from Screen import Screen
 from Screen import Screen
+from EpgSelection import EPGSelection
 from ChannelSelection import ChannelSelection
 from Components.Clock import Clock
 from ChannelSelection import ChannelSelection
 from Components.Clock import Clock
-from Components.VolumeBar import VolumeBar
 from Components.ActionMap import ActionMap
 from Components.ActionMap import ActionMap
+from Components.ActionMap import NumberActionMap
 from Components.Button import Button
 from Components.ServiceName import ServiceName
 from Components.EventInfo import EventInfo
 from Components.ServicePosition import ServicePosition
 from Components.Button import Button
 from Components.ServiceName import ServiceName
 from Components.EventInfo import EventInfo
 from Components.ServicePosition import ServicePosition
+from Components.config import configfile
+from Components.Label import Label
 
 from Screens.MessageBox import MessageBox
 from Screens.MovieSelection import MovieSelection
 
 from Screens.MessageBox import MessageBox
 from Screens.MovieSelection import MovieSelection
+from Screens.Volume import Volume
+from Screens.Mute import Mute
+from Screens.Standby import Standby
 
 from enigma import *
 
 
 from enigma import *
 
@@ -18,6 +24,50 @@ import time
 # hack alert!
 from Menu import MainMenu, mdom
 
 # hack alert!
 from Menu import MainMenu, mdom
 
+class NumberZap(Screen):
+       def quit(self):
+               self.Timer.stop()
+               self.close()
+
+       def keyOK(self):
+               self.Timer.stop()
+               print "do the action here"
+               self.close()
+
+       def keyNumberGlobal(self, number):
+               self.Timer.start(3000)          #reset timer
+               self.field = self.field + str(number)
+               self["number"].setText(self.field)
+               if len(self.field) >= 4:
+                       self.keyOK()
+
+       def __init__(self, session, number):
+               Screen.__init__(self, session)
+               self.field = str(number)
+               
+               self["number"] = Label(self.field)
+
+               self["actions"] = NumberActionMap( [ "SetupActions" ], 
+                       {
+                               "cancel": self.quit,
+                               "ok": self.keyOK,
+                               "1": self.keyNumberGlobal,
+                               "2": self.keyNumberGlobal,
+                               "3": self.keyNumberGlobal,
+                               "4": self.keyNumberGlobal,
+                               "5": self.keyNumberGlobal,
+                               "6": self.keyNumberGlobal,
+                               "7": self.keyNumberGlobal,
+                               "8": self.keyNumberGlobal,
+                               "9": self.keyNumberGlobal,
+                               "0": self.keyNumberGlobal
+                       })
+
+               self.Timer = eTimer()
+               self.Timer.timeout.get().append(self.keyOK)
+               self.Timer.start(3000)
+
+
 class InfoBar(Screen):
        STATE_HIDDEN = 0
        STATE_HIDING = 1
 class InfoBar(Screen):
        STATE_HIDDEN = 0
        STATE_HIDING = 1
@@ -29,11 +79,21 @@ class InfoBar(Screen):
 
                #instantiate forever
                self.servicelist = self.session.instantiateDialog(ChannelSelection)
 
                #instantiate forever
                self.servicelist = self.session.instantiateDialog(ChannelSelection)
-               self.volumeBar = VolumeBar()            
                
                self.state = self.STATE_HIDDEN
                
                self.state = self.STATE_HIDDEN
+               
+               self.volumeDialog = self.session.instantiateDialog(Volume)
+               self.muteDialog = self.session.instantiateDialog(Mute)
+               
+               self.hideTimer = eTimer()
+               self.hideTimer.timeout.get().append(self.doTimerHide)
+               #self.hideTimer.start(1000)
+               
+               self.hideVolTimer = eTimer()
+               self.hideVolTimer.timeout.get().append(self.volHide)
 
 
-               self["actions"] = ActionMap( [ "InfobarActions" ], 
+               #self["actions"] = ActionMap( [ "InfobarActions" ], 
+               self["actions"] = NumberActionMap( [ "InfobarActions" ], 
                        {
                                "switchChannelUp": self.switchChannelUp,
                                "switchChannelDown": self.switchChannelDown,
                        {
                                "switchChannelUp": self.switchChannelUp,
                                "switchChannelDown": self.switchChannelDown,
@@ -47,7 +107,21 @@ class InfoBar(Screen):
                                "hide": self.hide,
                                "toggleShow": self.toggleShow,
                                "showMovies": self.showMovies,
                                "hide": self.hide,
                                "toggleShow": self.toggleShow,
                                "showMovies": self.showMovies,
-                               "quit": self.quit
+                               "quit": self.quit,
+                               "1": self.keyNumberGlobal,
+                               "2": self.keyNumberGlobal,
+                               "3": self.keyNumberGlobal,
+                               "4": self.keyNumberGlobal,
+                               "5": self.keyNumberGlobal,
+                               "6": self.keyNumberGlobal,
+                               "7": self.keyNumberGlobal,
+                               "8": self.keyNumberGlobal,
+                               "9": self.keyNumberGlobal,
+                               "0": self.keyNumberGlobal,
+                               "showEPGList": self.showEPGList,
+                               
+                               "pauseService": self.pauseService,
+                               "unPauseService": self.unPauseService,
                        })
 #              self["okbutton"] = Button("mainMenu", [self.mainMenu])
                
                        })
 #              self["okbutton"] = Button("mainMenu", [self.mainMenu])
                
@@ -55,10 +129,11 @@ class InfoBar(Screen):
                # ServicePosition(self.session.nav, ServicePosition.TYPE_REMAINING)
                # Clock()
 
                # ServicePosition(self.session.nav, ServicePosition.TYPE_REMAINING)
                # Clock()
 
-               self["Volume"] = self.volumeBar
-               
                self["ServiceName"] = ServiceName(self.session.nav)
                
                self["ServiceName"] = ServiceName(self.session.nav)
                
+               self["Event_Now_StartTime"] = EventInfo(self.session.nav, EventInfo.Now_StartTime)
+               self["Event_Next_StartTime"] = EventInfo(self.session.nav, EventInfo.Next_StartTime)
+                               
                self["Event_Now"] = EventInfo(self.session.nav, EventInfo.Now)
                self["Event_Next"] = EventInfo(self.session.nav, EventInfo.Next)
 
                self["Event_Now"] = EventInfo(self.session.nav, EventInfo.Now)
                self["Event_Next"] = EventInfo(self.session.nav, EventInfo.Next)
 
@@ -75,6 +150,10 @@ class InfoBar(Screen):
                assert menu.tagName == "menu", "root element in menu must be 'menu'!"
                self.session.open(MainMenu, menu, menu.childNodes)
 
                assert menu.tagName == "menu", "root element in menu must be 'menu'!"
                self.session.open(MainMenu, menu, menu.childNodes)
 
+       def keyNumberGlobal(self, number):
+               print "You pressed number " + str(number)
+               self.session.open(NumberZap, number)
+
        def switchChannelUp(self):      
                self.servicelist.moveUp()
                self.session.execDialog(self.servicelist)
        def switchChannelUp(self):      
                self.servicelist.moveUp()
                self.session.execDialog(self.servicelist)
@@ -86,13 +165,23 @@ class InfoBar(Screen):
        def hide(self): 
                self.instance.hide()
 
        def hide(self): 
                self.instance.hide()
 
+       def doTimerHide(self):
+               if self.state == self.STATE_SHOWN:
+                       self.instance.hide()
+                       self.state = self.STATE_HIDDEN
+
        def toggleShow(self):
                if self.state == self.STATE_SHOWN:
        def toggleShow(self):
                if self.state == self.STATE_SHOWN:
-#                      self.instance.hide()
-                       self.startHide()
+                       self.instance.hide()
+                       #pls check animation support, sorry
+#                      self.startHide()
+                       self.state = self.STATE_HIDDEN
                else:
                else:
-#                      self.instance.show()
-                       self.startShow()
+                       self.instance.show()
+#                      self.startShow()
+                       self.state = self.STATE_SHOWN
+                       #TODO: make it customizable
+                       self.hideTimer.start(5000)
 
        def     zapUp(self):
                self.servicelist.moveUp()
 
        def     zapUp(self):
                self.servicelist.moveUp()
@@ -104,12 +193,19 @@ class InfoBar(Screen):
 
        def     volUp(self):
                eDVBVolumecontrol.getInstance().volumeUp()
 
        def     volUp(self):
                eDVBVolumecontrol.getInstance().volumeUp()
-               self.volumeBar.setValue(eDVBVolumecontrol.getInstance().getVolume())
+               self.volumeDialog.instance.show()
+               self.volumeDialog.setValue(eDVBVolumecontrol.getInstance().getVolume())
+               self.hideVolTimer.start(3000)
 
        def     volDown(self):
                eDVBVolumecontrol.getInstance().volumeDown()
 
        def     volDown(self):
                eDVBVolumecontrol.getInstance().volumeDown()
-               self.volumeBar.setValue(eDVBVolumecontrol.getInstance().getVolume())
+               self.volumeDialog.instance.show()
+               self.volumeDialog.setValue(eDVBVolumecontrol.getInstance().getVolume())
+               self.hideVolTimer.start(3000)
                
                
+       def volHide(self):
+               self.volumeDialog.instance.hide()
+
        def startShow(self):
                self.instance.m_animation.startMoveAnimation(ePoint(0, 600), ePoint(0, 380), 100)
                self.state = self.STATE_SHOWN
        def startShow(self):
                self.instance.m_animation.startMoveAnimation(ePoint(0, 600), ePoint(0, 380), 100)
                self.state = self.STATE_SHOWN
@@ -120,34 +216,67 @@ class InfoBar(Screen):
 
        def     volMute(self):
                eDVBVolumecontrol.getInstance().volumeToggleMute()
 
        def     volMute(self):
                eDVBVolumecontrol.getInstance().volumeToggleMute()
-               self.volumeBar.setValue(eDVBVolumecontrol.getInstance().getVolume())
+               self.volumeDialog.setValue(eDVBVolumecontrol.getInstance().getVolume())
+               
+               if (eDVBVolumecontrol.getInstance().isMuted()):
+                       self.muteDialog.instance.show()
+               else:
+                       self.muteDialog.instance.hide()
+
+       def showEPGList(self):
+               ref=self.session.nav.getCurrentlyPlayingServiceReference()
+               ptr=eEPGCache.getInstance()
+               if ptr.startTimeQuery(ref) != -1:
+                       self.session.open(EPGSelection, ref)
+               else:
+                       print 'no epg for service', ref.toString()
+
+       def quit(self):
+               self.session.open(Standby)
+               #configfile.save()
+               #quitMainloop()
+       
+       def stopCurrentRecording(self): 
+               print "remove entry"
+               self.session.nav.RecordTimer.removeEntry(self.recording)
+               self.recording = None
+       
+       def startInstantRecording(self):
+               serviceref = self.session.nav.getCurrentlyPlayingServiceReference()
+                       
+               # try to get event info
+               epg = None
+               try:
+                       service = self.session.nav.getCurrentService()
+                       info = service.info()
+                       ev = info.getEvent(0)
+                       epg = ev
+               except:
+                       pass
+               
+               # fix me, description. 
+               self.recording = self.session.nav.recordWithTimer(time.time(), time.time() + 3600, serviceref, epg, "instant record")
 
 
-       def     quit(self):
-               quitMainloop()
+       def recordQuestionCallback(self, answer):
+               if answer == False:
+                       return
                
                
+               if self.recording != None:
+                       self.stopCurrentRecording()
+               else:
+                       self.startInstantRecording()
+
        def instantRecord(self):
        def instantRecord(self):
-               #self.session.open(MessageBox, "this would be an instant recording! do you really know what you're doing?!")
-               #return
-       
                if self.recording != None:
                if self.recording != None:
-                       print "remove entry"
-                       self.session.nav.RecordTimer.removeEntry(self.recording)
-                       self.recording = None
+                       self.session.openWithCallback(self.recordQuestionCallback, MessageBox, "Do you want to stop the current\n(instant) recording?")
                else:
                else:
-                       serviceref = self.session.nav.getCurrentlyPlayingServiceReference()
-                       
-                       # try to get event info
-                       epg = None
-                       service = self.session.nav.getCurrentService()
-                       if service != None:
-                               info = iServiceInformationPtr()
-                               if not service.info(info):
-                                       ev = eServiceEventPtr()
-                                       if info.getEvent(ev, 0) == 0:
-                                               epg = ev
-                       # fix me, description. 
-                       self.recording = self.session.nav.recordWithTimer(time.time(), time.time() + 30, serviceref, epg, "instant record")
-       
+                       self.session.openWithCallback(self.recordQuestionCallback, MessageBox, "Start recording?")
+
        def showMovies(self):
                self.session.open(MovieSelection)
 
        def showMovies(self):
                self.session.open(MovieSelection)
 
+       def pauseService(self):
+               self.session.nav.pause(1)
+               
+       def unPauseService(self):
+               self.session.nav.pause(0)