use a configElement_nonSave instead of constructor argument in configElement
[enigma2.git] / lib / python / Screens / InfoBar.py
index 5eb5ab10f2d075b91ae6ac55a98851b8af63cabb..c10dad2d6a8573ec47916b02c344ffd7e1884837 100644 (file)
@@ -1,36 +1,67 @@
 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 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.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" ], 
                        {
                self["actions"] = ActionMap( [ "InfobarActions" ], 
                        {
-                               "switchChannel": self.switchChannel,
+                               "switchChannelUp": self.switchChannelUp,
+                               "switchChannelDown": self.switchChannelDown,
                                "mainMenu": self.mainMenu,
                                "zapUp": self.zapUp,
                                "zapDown": self.zapDown,
                                "mainMenu": self.mainMenu,
                                "zapUp": self.zapUp,
                                "zapDown": self.zapDown,
-                               "instantRecord": self.instantRecord
+                               "volumeUp": self.volUp,
+                               "volumeDown": self.volDown,
+                               "volumeMute": self.volMute,
+                               "instantRecord": self.instantRecord,
+                               "hide": self.hide,
+                               "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["Volume"] = self.volumeBar
                
                self["ServiceName"] = ServiceName(self.session.nav)
                
                
                self["ServiceName"] = ServiceName(self.session.nav)
                
@@ -41,23 +72,80 @@ 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()
+               self.session.execDialog(self.servicelist)
 
 
-       def switchChannel(self):        
+       def switchChannelDown(self):    
+               self.servicelist.moveDown()
                self.session.execDialog(self.servicelist)
 
                self.session.execDialog(self.servicelist)
 
+       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:
+                       self.instance.hide()
+                       #pls check animation support, sorry
+#                      self.startHide()
+                       self.state = self.STATE_HIDDEN
+               else:
+                       self.instance.show()
+#                      self.startShow()
+                       self.state = self.STATE_SHOWN
+                       #TODO: make it customizable
+                       self.hideTimer.start(5000)
+
        def     zapUp(self):
        def     zapUp(self):
-               self.servicelist.zapUp()
+               self.servicelist.moveUp()
+               self.servicelist.zap()
 
        def     zapDown(self):
 
        def     zapDown(self):
-               self.servicelist.zapDown()
+               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 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 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:
                        print "remove entry"
                        self.session.nav.RecordTimer.removeEntry(self.recording)
                if self.recording != None:
                        print "remove entry"
                        self.session.nav.RecordTimer.removeEntry(self.recording)
@@ -67,14 +155,16 @@ class InfoBar(Screen):
                        
                        # try to get event info
                        epg = None
                        
                        # 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
-
-                       self.recording = self.session.nav.recordWithTimer(time.time(), time.time() + 30, serviceref, epg)
-                       print "got entry: %s" % (str(self.recording))
-
+                       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 showMovies(self):
+               self.session.open(MovieSelection)