- improved scan error handling
[enigma2.git] / screens.py
index cf0daae..fe8d69d 100644 (file)
@@ -15,16 +15,25 @@ class Screen(dict, HTMLSkin, GUISkin):
                GUISkin.__init__(self)
                
        def execBegin(self):
+#              assert self.session == None, "a screen can only exec one per time"
+#              self.session = session
                for (name, val) in self.items():
                        val.execBegin()
        
        def execEnd(self):
                for (name, val) in self.items():
                        val.execEnd()
+#              assert self.session != None, "execEnd on non-execing screen!"
+#              self.session = None
        
        # never call this directly - it will be called from the session!
        def doClose(self):
                GUISkin.close(self)
+               
+               del self.session
+               for (name, val) in self.items():
+                       print "%s -> %d" % (name, sys.getrefcount(val))
+                       del self[name]
        
        def close(self, retval=None):
                self.session.close()
@@ -54,9 +63,10 @@ class mainMenu(Screen):
                Screen.__init__(self, session)
                b = Button("ok")
 
-               self["actions"] = ActionMap("MainMenuActions"
+               self["actions"] = ActionMap(["OkCancelActions"]
                        {
-                               "selected": self.okbuttonClick
+                               "ok": self.okbuttonClick,
+                               "cancel": self.close
                        })
 
                b.onClick = [ self.okbuttonClick ]
@@ -73,28 +83,38 @@ class mainMenu(Screen):
                                ("wie spaet ists?!", self.goClock)
                        ])
 
-#class mainMenu(Screen):
-#      def __init__(self):
-#              GUISkin.__init__(self)
-#              
-#              self["title"] = Header("this is the\nMAIN MENU !!!");
-#              self["okbutton"] = Button("ok")
-#              self["okbutton"].onClick = [ self.close ]
-
 class channelSelection(Screen):
        def __init__(self, session):
                Screen.__init__(self, session)
                
                self["list"] = ServiceList()
-               self["list"].setRoot(eServiceReference("1:0:1:0:0:0:0:0:0:0:PREMIERE"))
+               self["list"].setRoot(eServiceReference("""1:0:1:0:0:0:0:0:0:0:(provider=="ARD") && (type == 1)"""))
                
                self["okbutton"] = Button("ok", [self.channelSelected])
-
-               self["actions"] = ActionMap("ChannelSelectActions", 
+               
+               class ChannelActionMap(ActionMap):
+                       def action(self, contexts, action):
+                               if action[:7] == "bouquet":
+                                       print "setting root to " + action[8:]
+                                       self.csel["list"].setRoot(eServiceReference("1:0:1:0:0:0:0:0:0:0:" + action[8:]))
+                               else:
+                                       ActionMap.action(self, contexts, action)
+
+               self["actions"] = ChannelActionMap(["ChannelSelectActions", "OkCancelActions"], 
                        {
-                               "selectChannel": self.channelSelected,
+                               "cancel": self.close,
+                               "ok": self.channelSelected,
+                               "mark": self.doMark
                        })
-
+               self["actions"].csel = self
+
+       def doMark(self):
+               ref = self["list"].getCurrent()
+               if self["list"].isMarked(ref):
+                       self["list"].removeMarked(ref)
+               else:
+                       self["list"].addMarked(ref)
+               
        def channelSelected(self):
                self.session.nav.playService(self["list"].getCurrent())
                self.close()
@@ -104,18 +124,22 @@ class infoBar(Screen):
        def __init__(self, session):
                Screen.__init__(self, session)
                
-               self["actions"] = ActionMap("InfobarActions"
+               self["actions"] = ActionMap( [ "InfobarActions" ]
                        {
                                "switchChannel": self.switchChannel,
                                "mainMenu": self.mainMenu
                        })
-               self["channelSwitcher"] = Button("switch Channel", [self.switchChannel])
                self["okbutton"] = Button("mainMenu", [self.mainMenu])
                
+               self["CurrentTime"] = Clock()
+               
                self["ServiceName"] = ServiceName(self.session.nav)
                
                self["Event_Now"] = EventInfo(self.session.nav, EventInfo.Now)
                self["Event_Next"] = EventInfo(self.session.nav, EventInfo.Next)
+
+               self["Event_Now_Duration"] = EventInfo(self.session.nav, EventInfo.Now_Duration)
+               self["Event_Next_Duration"] = EventInfo(self.session.nav, EventInfo.Next_Duration)
        
        def mainMenu(self):
                self.session.open(mainMenu)
@@ -136,12 +160,15 @@ class clockDisplay(Screen):
                self["okbutton"] = b
                self["title"] = Header("clock dialog: here you see the current uhrzeit!")
 
-
 class serviceScan(Screen):
        def ok(self):
+               print "ok"
                if self["scan"].isDone():
                        self.close()
        
+       def cancel(self):
+               print "cancel not yet implemented ;)"
+       
        def __init__(self, session):
                Screen.__init__(self, session)
                
@@ -149,5 +176,9 @@ class serviceScan(Screen):
                self["scan_state"] = Label("scan state")
                self["scan"] = ServiceScan(self["scan_progress"], self["scan_state"])
 
-               self["okbutton"] = Button("ok", [self.ok])
-               self["okbutton"].disable()
+               self["actions"] = ActionMap(["OkCancelActions"], 
+                       {
+                               "ok": self.ok,
+                               "cancel": self.cancel
+                       })
+