- split 2 (Screens)
authorFelix Domke <tmbinc@elitedvb.net>
Thu, 5 May 2005 23:38:38 +0000 (23:38 +0000)
committerFelix Domke <tmbinc@elitedvb.net>
Thu, 5 May 2005 23:38:38 +0000 (23:38 +0000)
lib/python/Screens/ChannelSelection.py [new file with mode: 0644]
lib/python/Screens/ClockDisplay.py [new file with mode: 0644]
lib/python/Screens/ConfigMenu.py [new file with mode: 0644]
lib/python/Screens/InfoBar.py [new file with mode: 0644]
lib/python/Screens/Menu.py [new file with mode: 0644]
lib/python/Screens/ScartLoopThrough.py [new file with mode: 0644]
lib/python/Screens/Screen.py [new file with mode: 0644]
lib/python/Screens/ServiceScan.py [new file with mode: 0644]
lib/python/Screens/__init__.py [new file with mode: 0644]
screens.py [deleted file]
skin.py

diff --git a/lib/python/Screens/ChannelSelection.py b/lib/python/Screens/ChannelSelection.py
new file mode 100644 (file)
index 0000000..fa2f9da
--- /dev/null
@@ -0,0 +1,57 @@
+from Screen import Screen
+from Components.Button import Button
+from Components.ServiceList import ServiceList
+from Components.ActionMap import ActionMap
+
+from enigma import eServiceReference
+
+class ChannelSelection(Screen):
+       def __init__(self, session):
+               Screen.__init__(self, session)
+
+               self["key_red"] = Button("red")
+               self["key_green"] = Button("green")
+               self["key_yellow"] = Button("yellow")
+               self["key_blue"] = Button("blue")
+               
+               self["list"] = ServiceList()
+               self["list"].setRoot(eServiceReference("""1:0:1:0:0:0:0:0:0:0:(provider=="ARD") && (type == 1)"""))
+               
+               #self["okbutton"] = Button("ok", [self.channelSelected])
+               
+               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"], 
+                       {
+                               "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()
+
+       #called from infoBar
+       def zapUp(self):
+               self["list"].moveUp()
+               self.session.nav.playService(self["list"].getCurrent())
+
+       def zapDown(self):
+               self["list"].moveDown()
+               self.session.nav.playService(self["list"].getCurrent())
+
diff --git a/lib/python/Screens/ClockDisplay.py b/lib/python/Screens/ClockDisplay.py
new file mode 100644 (file)
index 0000000..8c1e292
--- /dev/null
@@ -0,0 +1,13 @@
+# a clock display dialog
+class ClockDisplay(Screen):
+       def okbutton(self):
+               self.session.close()
+       
+       def __init__(self, session, clock):
+               Screen.__init__(self, session)
+               self["theClock"] = clock
+               b = Button("bye")
+               b.onClick = [ self.okbutton ]
+               self["okbutton"] = b
+               self["title"] = Header("clock dialog: here you see the current uhrzeit!")
+
diff --git a/lib/python/Screens/ConfigMenu.py b/lib/python/Screens/ConfigMenu.py
new file mode 100644 (file)
index 0000000..8827175
--- /dev/null
@@ -0,0 +1,37 @@
+from Screen import Screen
+from Components.ConfigList import ConfigList
+from Components.config import *
+from Components.ActionMap import ActionMap
+
+class ConfigMenu(Screen):
+       #create a generic class for view/edit settings
+       #all stuff come from xml file
+       #configtype / datasource / validate-call / ...
+
+       def __init__(self, session):
+               Screen.__init__(self, session)
+
+               self["actions"] = ActionMap(["OkCancelActions"], 
+                       {
+                               #"ok": self.okbuttonClick,
+                               "cancel": self.close
+                       })
+
+class configTest(Screen):
+
+       def __init__(self, session):
+               Screen.__init__(self, session)
+               
+
+               self["config"] = ConfigList(
+                       [
+                               configEntry("HKEY_LOCAL_ENIGMA/IMPORTANT/USER_ANNOYING_STUFF/SDTV/FLASHES/GREEN"),
+                               configEntry("HKEY_LOCAL_ENIGMA/IMPORTANT/USER_ANNOYING_STUFF/HDTV/FLASHES/GREEN"),
+                       ])
+
+               self["actions"] = ActionMap(["OkCancelActions"], 
+                       {
+                               "ok": self["config"].toggle,
+                               "cancel": self.close
+                       })
+               
diff --git a/lib/python/Screens/InfoBar.py b/lib/python/Screens/InfoBar.py
new file mode 100644 (file)
index 0000000..5eb5ab1
--- /dev/null
@@ -0,0 +1,80 @@
+from Screen import Screen
+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 enigma import *
+
+import time
+
+# hack alert!
+from Menu import *
+
+class InfoBar(Screen):
+       def __init__(self, session):
+               Screen.__init__(self, session)
+
+               #instantiate forever
+               self.servicelist = self.session.instantiateDialog(ChannelSelection)
+               
+               self["actions"] = ActionMap( [ "InfobarActions" ], 
+                       {
+                               "switchChannel": self.switchChannel,
+                               "mainMenu": self.mainMenu,
+                               "zapUp": self.zapUp,
+                               "zapDown": self.zapDown,
+                               "instantRecord": self.instantRecord
+                       })
+               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)
+               
+               self.recording = None
+       
+       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)
+
+       def switchChannel(self):        
+               self.session.execDialog(self.servicelist)
+
+       def     zapUp(self):
+               self.servicelist.zapUp()
+
+       def     zapDown(self):
+               self.servicelist.zapDown()
+               
+       def instantRecord(self):
+               if self.recording != None:
+                       print "remove entry"
+                       self.session.nav.RecordTimer.removeEntry(self.recording)
+                       self.recording = None
+               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
+
+                       self.recording = self.session.nav.recordWithTimer(time.time(), time.time() + 30, serviceref, epg)
+                       print "got entry: %s" % (str(self.recording))
+
diff --git a/lib/python/Screens/Menu.py b/lib/python/Screens/Menu.py
new file mode 100644 (file)
index 0000000..ce73a95
--- /dev/null
@@ -0,0 +1,210 @@
+from Screen import *
+from Components.MenuList import MenuList
+from Components.ActionMap import ActionMap
+from Components.Header import Header
+
+# hack ... must be made dynamic
+from ServiceScan import ServiceScan
+from ScartLoopThrough import ScartLoopThrough
+from Components.Button import Button
+from Components.Label import Label
+from Components.ProgressBar import ProgressBar
+from ConfigMenu import *
+
+from enigma import quitMainloop
+
+import xml.dom.minidom
+from xml.dom import EMPTY_NAMESPACE
+from skin import elementsWithTag
+
+# some screens
+def doGlobal(screen):
+       screen["clock"] = Clock()
+
+
+mdom = xml.dom.minidom.parseString(
+        """
+       <menu text="Mainmenu" title="the real Mainmenu">
+               <item text="Standby debug">quitMainloop()</item>
+               <item text="Automatic Scan">self.openDialog(ServiceScan)</item>
+
+               <item text="TV-Mode">self.setModeTV()</item>
+               <item text="Radio-Mode">self.setModeRadio()</item>
+               <item text="File-Mode">self.setModeFile()</item>
+               <item text="Scart">self.openDialog(ScartLoopThrough)</item>
+               <item text="Timer"></item>
+               <menu text="Setup">
+                       <menu text="Service Organising">
+                               <item text="New Bouquets"></item>
+                               <item text="Add to Bouquets"></item>
+                               <item text="Edit Bouquets"></item>
+                       </menu>
+                       <menu text="Service Searching">
+                               <item text="Satelliteconfig"></item>
+                               <item text="Satfinder"></item>
+                               <item text="Rotor Control"></item>
+                               <item text="Edit Transponder"></item>
+                               <item text="Automatic Scan">self.openDialog(ServiceScan)</item>
+                               <item text="Automatic 'Multisat' Scan"></item>
+                               <item text="Manual Scan"></item>
+                       </menu>
+                       <menu text="System">
+                               <item text="Time Date"></item>
+                               <item text="Video Audio"></item>
+                               <item text="UHF Modulator"></item>
+                               <item text="Harddisk"></item>
+                               <item text="Keyboard"></item>
+                               <item text="OSD">self.openDialog(configOSD)</item>
+                               <item text="Language"></item>
+                               <item text="LCD"></item>
+                       </menu>
+                       <item text="Common Interface"></item>
+                       <item text="Parental Control"></item>
+                       <item text="Expert"></item>
+               </menu>
+               <item text="Games"></item>
+               <item text="Information"></item>
+               <menu text="Standby">
+                       <item text="PowerOff"></item>
+                       <item text="Restart"></item>
+                       <item text="Standby"></item>
+                       <item text="Sleep Timer">self.goSetup()</item>
+               </menu>
+       </menu>""")
+
+def getText(nodelist):
+       rc = ""
+       for node in nodelist:
+               if node.nodeType == node.TEXT_NODE:
+                       rc = rc + node.data
+       return rc
+
+def getValbyAttr(x, attr):
+       for p in range(x.attributes.length):
+               a = x.attributes.item(p)
+               attrib = str(a.name)
+               value = str(a.value)
+               if attrib == attr:
+                       return value
+                       
+       return ""
+
+class boundFunction:
+       def __init__(self, fnc, *args):
+               self.fnc = fnc
+               self.args = args
+       def __call__(self):
+               self.fnc(*self.args)
+
+class configOSD(Screen):
+       #this needs focus handling - so not useable
+
+       def okbuttonClick(self):
+               self.close
+       def __init__(self, session):
+               Screen.__init__(self, session)
+
+               self["actions"] = ActionMap(["OkCancelActions"], 
+                       {
+                               "ok": self.okbuttonClick,
+                               "cancel": self.close
+                       })
+
+               self["okbutton"] = Button("Save")
+
+               self["txt_alpha"] = Label("Alpha:")
+               self["sld_alpha"] = ProgressBar()
+               self["sld_alpha"].setValue(50)
+
+               self["txt_brightness"] = Label("Brightness:")
+               self["sld_brightness"] = ProgressBar()
+               self["sld_brightness"].setValue(50)
+
+               self["txt_gamma"] = Label("Contrast:")
+               self["sld_gamma"] = ProgressBar()
+               self["sld_gamma"].setValue(50)
+
+
+
+
+class Menu(Screen):
+       #add file load functions for the xml-file
+       #remove old code (i.e. goScan / goClock...)
+
+       def openDialog(self, dialog):
+               self.session.open(dialog)
+
+       def goSetup(self):
+               self.session.open(configTest)
+       
+       def setModeTV(self):
+               print "set Mode to TV"
+               pass
+
+       def setModeRadio(self):
+               print "set Mode to Radio"
+               pass
+
+       def setModeFile(self):
+               print "set Mode to File"
+               pass
+
+       def goScan(self):
+               self.session.open(ServiceScan)
+       
+       def goClock(self):
+               self.session.open(clockDisplay, Clock())
+
+       def okbuttonClick(self):
+               selection = self["menu"].getCurrent()
+               selection[1]()
+
+       def evalText(self, text):
+               eval(text)
+               
+       def nothing(self):                                                                                                                                      #dummy
+               pass
+
+       def addMenu(self, destList, node):
+               MenuTitle = getValbyAttr(node, "text")
+               if MenuTitle != "":                                                                                                                                     #check for title
+                       a = boundFunction(self.session.open, Menu, node, node.childNodes)
+                       #TODO add check if !empty(node.childNodes)
+                       destList.append((MenuTitle, a))
+               
+       def addItem(self, destList, node):
+               ItemText = getValbyAttr(node, "text")
+               if ItemText != "":                                                                                                                                      #check for name
+                       b = getText(node.childNodes)
+                       if b != "":                                                                                                                                                             #check for function
+                               destList.append((ItemText,boundFunction(self.evalText,b)))
+                       else:
+                               destList.append((ItemText,self.nothing))                                #use dummy as function
+
+       def __init__(self, session, parent, childNode):
+               Screen.__init__(self, session)
+               
+               list = []
+
+               for x in childNode:                                                     #walk through the actual nodelist
+                       if x.nodeType != xml.dom.minidom.Element.nodeType:
+                           continue
+                       elif x.tagName == 'item':
+                               self.addItem(list, x)
+                       elif x.tagName == 'menu':
+                               self.addMenu(list, x)
+
+               self["menu"] = MenuList(list)   
+                                                       
+               self["actions"] = ActionMap(["OkCancelActions"], 
+                       {
+                               "ok": self.okbuttonClick,
+                               "cancel": self.close
+                       })
+               
+               a = getValbyAttr(parent, "title")
+               if a == "":                                                                                                             #if empty use name
+                       a = getValbyAttr(parent, "text")
+               self["title"] = Header(a)
+
diff --git a/lib/python/Screens/ScartLoopThrough.py b/lib/python/Screens/ScartLoopThrough.py
new file mode 100644 (file)
index 0000000..b46d169
--- /dev/null
@@ -0,0 +1,12 @@
+from Screen import Screen
+from Components.ActionMap import ActionMap
+
+class ScartLoopThrough(Screen):
+       def __init__(self, session):
+               Screen.__init__(self, session)
+
+               self["actions"] = ActionMap(["OkCancelActions"], 
+                       {
+                               "cancel": self.close
+                       })
+
diff --git a/lib/python/Screens/Screen.py b/lib/python/Screens/Screen.py
new file mode 100644 (file)
index 0000000..ef9b2bb
--- /dev/null
@@ -0,0 +1,37 @@
+from Components.HTMLSkin import *
+from Components.GUISkin import *
+
+import sys
+
+class Screen(dict, HTMLSkin, GUISkin):
+       """ bla """
+
+       def __init__(self, session):
+               self.skinName = self.__class__.__name__
+               self.session = session
+               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()
+
diff --git a/lib/python/Screens/ServiceScan.py b/lib/python/Screens/ServiceScan.py
new file mode 100644 (file)
index 0000000..0c27237
--- /dev/null
@@ -0,0 +1,27 @@
+from Screen import Screen
+from Components.ServiceScan import ServiceScan as CScan
+from Components.ProgressBar import ProgressBar
+from Components.Label import Label
+from Components.ActionMap import ActionMap
+
+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)
+               
+               self["scan_progress"] = ProgressBar()
+               self["scan_state"] = Label("scan state")
+               self["scan"] = CScan(self["scan_progress"], self["scan_state"])
+
+               self["actions"] = ActionMap(["OkCancelActions"], 
+                       {
+                               "ok": self.ok,
+                               "cancel": self.cancel
+                       })
diff --git a/lib/python/Screens/__init__.py b/lib/python/Screens/__init__.py
new file mode 100644 (file)
index 0000000..90b22c2
--- /dev/null
@@ -0,0 +1,3 @@
+__all__ = ["ChannelSelection", "ClockDisplay", "ConfigMenu", 
+       "InfoBar", "Menu", "ScartLoopThrough", "Screen", "ServiceScan"]
+
diff --git a/screens.py b/screens.py
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/skin.py b/skin.py
index 9de0a722bd5df209e86e9d0a017ed8c5e87bf858..dc01e34ef24b839fcbd369e1375ebf645020c06b 100644 (file)
--- a/skin.py
+++ b/skin.py
@@ -76,7 +76,7 @@ dom = xml.dom.minidom.parseString(
                        <widget name="title" position="10,120" size="280,50" />
                        <widget name="theClock" position="10,60" size="280,50" />
                </screen>
                        <widget name="title" position="10,120" size="280,50" />
                        <widget name="theClock" position="10,60" size="280,50" />
                </screen>
-               <screen name="infoBar" position="0,380" size="720,151" title="InfoBar" flags="wfNoBorder">
+               <screen name="InfoBar" position="0,380" size="720,151" title="InfoBar" flags="wfNoBorder">
                        <ePixmap position="0,0" size="720,151" pixmap="data/info-bg.png" />
                        
                        <widget name="ServiceName" position="69,30" size="427,26" valign="center" font="Arial;32" backgroundColor="#101258" />
                        <ePixmap position="0,0" size="720,151" pixmap="data/info-bg.png" />
                        
                        <widget name="ServiceName" position="69,30" size="427,26" valign="center" font="Arial;32" backgroundColor="#101258" />
@@ -87,7 +87,7 @@ dom = xml.dom.minidom.parseString(
                        <widget name="Event_Next_Duration" position="555,98" size="70,26" font="Arial;26" backgroundColor="dark" />
 <!--                   <eLabel position="70,0" size="300,30" text=".oO skin Oo." font="Arial;20" /> -->
                </screen>
                        <widget name="Event_Next_Duration" position="555,98" size="70,26" font="Arial;26" backgroundColor="dark" />
 <!--                   <eLabel position="70,0" size="300,30" text=".oO skin Oo." font="Arial;20" /> -->
                </screen>
-               <screen name="channelSelection" position="90,100" size="560,420" title="Channel Selection">
+               <screen name="ChannelSelection" position="90,100" size="560,420" title="Channel Selection">
                        <widget name="list" position="0,50" size="560,340" />
 <!--                   <widget name="okbutton" position="340,50" size="140,30" />-->
                        <widget name="key_red" position="0,0" size="140,40" backgroundColor="red" />
                        <widget name="list" position="0,50" size="560,340" />
 <!--                   <widget name="okbutton" position="340,50" size="140,30" />-->
                        <widget name="key_red" position="0,0" size="140,40" backgroundColor="red" />
@@ -95,7 +95,7 @@ dom = xml.dom.minidom.parseString(
                        <widget name="key_yellow" position="280,0" size="140,40" backgroundColor="yellow" />
                        <widget name="key_blue" position="420,0" size="140,40" backgroundColor="blue" />
                </screen>
                        <widget name="key_yellow" position="280,0" size="140,40" backgroundColor="yellow" />
                        <widget name="key_blue" position="420,0" size="140,40" backgroundColor="blue" />
                </screen>
-               <screen name="serviceScan" position="150,100" size="300,200" title="Service Scan">
+               <screen name="ServiceScan" position="150,100" size="300,200" title="Service Scan">
                        <widget name="scan_progress" position="10,10" size="280,50" />
                        <widget name="scan_state" position="10,60" size="280,30" />
                </screen>
                        <widget name="scan_progress" position="10,10" size="280,50" />
                        <widget name="scan_state" position="10,60" size="280,30" />
                </screen>