add Screens/Volume.py
[enigma2.git] / lib / python / Screens / InfoBar.py
index 5112a00..9702eed 100644 (file)
@@ -5,21 +5,41 @@ from Components.ActionMap import ActionMap
 from Components.Button import Button
 from Components.ServiceName import ServiceName
 from Components.EventInfo import EventInfo
 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 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.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,
@@ -27,14 +47,21 @@ 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
                        })
                        })
-               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 +71,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 +91,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,24 +116,79 @@ 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()
+               # FIXME: help wanted :)
+               self.volumeDialog.instance.setValue(eDVBVolumecontrol.getInstance().getVolume())
+               self.hideVolTimer = eTimer()
+               self.hideVolTimer.timeout.get().append(self.volHide)
+               self.hideVolTimer.start(3000)
+
+       def     volDown(self):
+               eDVBVolumecontrol.getInstance().volumeDown()
+               self.volumeDialog.instance.show()
+               # FIXME: help wanted :)
+               self.volumeDialog.setValue(eDVBVolumecontrol.getInstance().getVolume())
+               self.hideVolTimer = eTimer()
+               self.hideVolTimer.timeout.get().append(self.volHide)
+               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 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:
+                       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() + 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:
        def instantRecord(self):
                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)