- ask before start/stop record
[enigma2.git] / lib / python / Screens / InfoBar.py
index be6b65c9de45c837fb3ca02a4d90251ae6409727..73825f251218b72fd33f1ada235b02df118c60bd 100644 (file)
@@ -1,10 +1,13 @@
 from Screen import Screen
 from ChannelSelection import ChannelSelection
 from Components.Clock import Clock
 from Screen import Screen
 from ChannelSelection import ChannelSelection
 from Components.Clock import Clock
+from Components.VolumeBar import VolumeBar
 from Components.ActionMap import ActionMap
 from Components.Button import Button
 from Components.ServiceName import ServiceName
 from Components.EventInfo import EventInfo
 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.MessageBox import MessageBox
 from Screens.MovieSelection import MovieSelection
@@ -17,12 +20,25 @@ import time
 from Menu import MainMenu, mdom
 
 class InfoBar(Screen):
 from Menu import MainMenu, mdom
 
 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.volumeBar = VolumeBar()            
+               
+               self.state = self.STATE_HIDDEN
                
                
+               self.hideTimer = eTimer()
+               self.hideTimer.timeout.get().append(self.doTimerHide)
+               #self.hideTimer.start(1000)
+
+
                self["actions"] = ActionMap( [ "InfobarActions" ], 
                        {
                                "switchChannelUp": self.switchChannelUp,
                self["actions"] = ActionMap( [ "InfobarActions" ], 
                        {
                                "switchChannelUp": self.switchChannelUp,
@@ -30,14 +46,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,
                                "toggleShow": self.toggleShow,
                                "showMovies": self.showMovies,
                                "instantRecord": self.instantRecord,
                                "hide": self.hide,
                                "toggleShow": self.toggleShow,
                                "showMovies": self.showMovies,
+                               "quit": self.quit
                        })
 #              self["okbutton"] = Button("mainMenu", [self.mainMenu])
                
                self["CurrentTime"] = Clock()
                        })
 #              self["okbutton"] = Button("mainMenu", [self.mainMenu])
                
                self["CurrentTime"] = 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)
                
@@ -48,6 +72,8 @@ 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..."
        
        def mainMenu(self):
                print "loading mainmenu XML..."
@@ -66,11 +92,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()
@@ -79,29 +117,66 @@ 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.volumeBar.setValue(eDVBVolumecontrol.getInstance().getVolume())
+
+       def     volDown(self):
+               eDVBVolumecontrol.getInstance().volumeDown()
+               self.volumeBar.setValue(eDVBVolumecontrol.getInstance().getVolume())
                
                
-       def instantRecord(self):
-               self.session.open(MessageBox, "this would be an instant recording! do you really know what you're doing?!")
-               return
+       def startShow(self):
+               self.instance.m_animation.startMoveAnimation(ePoint(0, 600), ePoint(0, 380), 100)
+               self.state = self.STATE_SHOWN
        
        
-               if self.recording != None:
-                       print "remove entry"
-                       self.session.nav.RecordTimer.removeEntry(self.recording)
-                       self.recording = None
-               else:
-                       serviceref = self.session.nav.getCurrentlyPlayingServiceReference()
+       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.volumeBar.setValue(eDVBVolumecontrol.getInstance().getVolume())
+
+       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
-                       # fix me, description. 
-                       self.recording = self.session.nav.recordWithTimer(time.time(), time.time() + 30, serviceref, epg, "instant record")
-       
+                       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()
+
+       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)
        def showMovies(self):
                self.session.open(MovieSelection)