fix cast
[enigma2.git] / lib / python / Screens / InfoBar.py
index d868fd8bce5937ed389f170cb89dc3a530dbddcd..39f547e604e046a6fcb5f6ac0213ad3bc8336214 100644 (file)
@@ -1,25 +1,50 @@
 from Screen import Screen
 from Screen import Screen
+from EpgSelection import EPGSelection
 from ChannelSelection import ChannelSelection
 from Components.Clock import Clock
 from Components.ActionMap import ActionMap
 from Components.Button import Button
 from Components.ServiceName import ServiceName
 from Components.EventInfo import EventInfo
 from ChannelSelection import ChannelSelection
 from Components.Clock import Clock
 from Components.ActionMap import ActionMap
 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 Screens.MessageBox import MessageBox
+from Screens.MovieSelection import MovieSelection
+from Screens.Volume import Volume
+from Screens.Mute import Mute
 
 from enigma import *
 
 import time
 
 # hack alert!
 
 from enigma import *
 
 import time
 
 # hack alert!
-from Menu import *
+from Menu import MainMenu, mdom
 
 class InfoBar(Screen):
 
 class InfoBar(Screen):
+       STATE_HIDDEN = 0
+       STATE_HIDING = 1
+       STATE_SHOWING = 2
+       STATE_SHOWN = 3
+       
        def __init__(self, session):
                Screen.__init__(self, session)
 
                #instantiate forever
                self.servicelist = self.session.instantiateDialog(ChannelSelection)
                
        def __init__(self, session):
                Screen.__init__(self, session)
 
                #instantiate forever
                self.servicelist = self.session.instantiateDialog(ChannelSelection)
                
+               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" ], 
                        {
                                "switchChannelUp": self.switchChannelUp,
                self["actions"] = ActionMap( [ "InfobarActions" ], 
                        {
                                "switchChannelUp": self.switchChannelUp,
@@ -27,14 +52,22 @@ class InfoBar(Screen):
                                "mainMenu": self.mainMenu,
                                "zapUp": self.zapUp,
                                "zapDown": self.zapDown,
                                "mainMenu": self.mainMenu,
                                "zapUp": self.zapUp,
                                "zapDown": self.zapDown,
+                               "volumeUp": self.volUp,
+                               "volumeDown": self.volDown,
+                               "volumeMute": self.volMute,
                                "instantRecord": self.instantRecord,
                                "hide": self.hide,
                                "instantRecord": self.instantRecord,
                                "hide": self.hide,
-                               "toggleShow": self.toggleShow
+                               "toggleShow": self.toggleShow,
+                               "showMovies": self.showMovies,
+                               "quit": self.quit,
+                               "showEPGList": self.showEPGList
                        })
                        })
-               self["okbutton"] = Button("mainMenu", [self.mainMenu])
+#              self["okbutton"] = Button("mainMenu", [self.mainMenu])
                
                self["CurrentTime"] = Clock()
                
                self["CurrentTime"] = Clock()
-               
+               # ServicePosition(self.session.nav, ServicePosition.TYPE_REMAINING)
+               # Clock()
+
                self["ServiceName"] = ServiceName(self.session.nav)
                
                self["Event_Now"] = EventInfo(self.session.nav, EventInfo.Now)
                self["ServiceName"] = ServiceName(self.session.nav)
                
                self["Event_Now"] = EventInfo(self.session.nav, EventInfo.Now)
@@ -44,12 +77,14 @@ class InfoBar(Screen):
                self["Event_Next_Duration"] = EventInfo(self.session.nav, EventInfo.Next_Duration)
                
                self.recording = None
                self["Event_Next_Duration"] = EventInfo(self.session.nav, EventInfo.Next_Duration)
                
                self.recording = None
+               
+               self.pos = 0
        
        def mainMenu(self):
                print "loading mainmenu XML..."
                menu = mdom.childNodes[0]
                assert menu.tagName == "menu", "root element in menu must be 'menu'!"
        
        def mainMenu(self):
                print "loading mainmenu XML..."
                menu = mdom.childNodes[0]
                assert menu.tagName == "menu", "root element in menu must be 'menu'!"
-               self.session.open(Menu, menu, menu.childNodes)
+               self.session.open(MainMenu, menu, menu.childNodes)
 
        def switchChannelUp(self):      
                self.servicelist.moveUp()
 
        def switchChannelUp(self):      
                self.servicelist.moveUp()
@@ -62,11 +97,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):
        def toggleShow(self):
-               if self.instance.isVisible():
+               if self.state == self.STATE_SHOWN:
                        self.instance.hide()
                        self.instance.hide()
+                       #pls check animation support, sorry
+#                      self.startHide()
+                       self.state = self.STATE_HIDDEN
                else:
                        self.instance.show()
                else:
                        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()
@@ -75,25 +122,83 @@ class InfoBar(Screen):
        def     zapDown(self):
                self.servicelist.moveDown()
                self.servicelist.zap()
        def     zapDown(self):
                self.servicelist.moveDown()
                self.servicelist.zap()
+
+       def     volUp(self):
+               eDVBVolumecontrol.getInstance().volumeUp()
+               self.volumeDialog.instance.show()
+               self.volumeDialog.setValue(eDVBVolumecontrol.getInstance().getVolume())
+               self.hideVolTimer.start(3000)
+
+       def     volDown(self):
+               eDVBVolumecontrol.getInstance().volumeDown()
+               self.volumeDialog.instance.show()
+               self.volumeDialog.setValue(eDVBVolumecontrol.getInstance().getVolume())
+               self.hideVolTimer.start(3000)
                
                
-       def instantRecord(self):
-               if self.recording != None:
-                       print "remove entry"
-                       self.session.nav.RecordTimer.removeEntry(self.recording)
-                       self.recording = None
+       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 startHide(self):
+               self.instance.m_animation.startMoveAnimation(ePoint(0, 380), ePoint(0, 600), 100)
+               self.state = self.STATE_HIDDEN
+
+       def     volMute(self):
+               eDVBVolumecontrol.getInstance().volumeToggleMute()
+               self.volumeDialog.setValue(eDVBVolumecontrol.getInstance().getVolume())
+               
+               if (eDVBVolumecontrol.getInstance().isMuted()):
+                       self.muteDialog.instance.show()
                else:
                else:
-                       serviceref = self.session.nav.getCurrentlyPlayingServiceReference()
+                       self.muteDialog.instance.hide()
+
+       def showEPGList(self):
+# TODO hier irgendwie EPGSelection benutzen und setRoot benutzen um nen service zu uebergeben
+# self.session.nav.getCurrentlyPlayingServiceReference() sollte das wohl sein
+               print "hier soll mal ne EPGList aufgehen"
+
+       def quit(self):
+               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 to get event info
+               epg = None
+               try:
                        service = self.session.nav.getCurrentService()
                        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
+                       info = service.info()
+                       ev = info.getEvent(0)
+                       epg = ev
+               except:
+                       pass
+               
+               # fix me, description. 
+               self.recording = self.session.nav.recordWithTimer(time.time(), time.time() + 30, serviceref, epg, "instant record")
+
+       def recordQuestionCallback(self, answer):
+               if answer == False:
+                       return
+               
+               if self.recording != None:
+                       self.stopCurrentRecording()
+               else:
+                       self.startInstantRecording()
 
 
-                       self.recording = self.session.nav.recordWithTimer(time.time(), time.time() + 30, serviceref, epg)
-                       print "got entry: %s" % (str(self.recording))
+       def instantRecord(self):
+               if self.recording != None:
+                       self.session.openWithCallback(self.recordQuestionCallback, MessageBox, "Do you want to stop the current\n(instant) recording?")
+               else:
+                       self.session.openWithCallback(self.recordQuestionCallback, MessageBox, "Start recording?")
 
 
+       def showMovies(self):
+               self.session.open(MovieSelection)