aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--keymap.xml3
-rw-r--r--lib/python/Components/ServiceList.py13
-rw-r--r--lib/python/Screens/ChannelSelection.py89
-rw-r--r--lib/python/Screens/InfoBar.py4
-rw-r--r--lib/python/Screens/Menu.py80
-rw-r--r--skin.py14
6 files changed, 159 insertions, 44 deletions
diff --git a/keymap.xml b/keymap.xml
index 9d32ea03..dde32c92 100644
--- a/keymap.xml
+++ b/keymap.xml
@@ -50,7 +50,8 @@
<key id="p" mapto="bouquet:(provider == PREMIERE)" flags="m" />
<key id="d" mapto="bouquet:(provider == ARD)" flags="m" />
<key id="a" mapto="bouquet:" flags="m" />
-
+
+ <key id="KEY_C" mapto="contextMenu" flags="m" />
<key id="KEY_M" mapto="mark" flags="m" />
<!-- yes, this is flexible as hell. -->
<key id="KEY_P" mapto="bouquet:(provider == PREMIERE)" flags="m" />
diff --git a/lib/python/Components/ServiceList.py b/lib/python/Components/ServiceList.py
index 1aa3d487..5725871d 100644
--- a/lib/python/Components/ServiceList.py
+++ b/lib/python/Components/ServiceList.py
@@ -32,6 +32,9 @@ class ServiceList(HTMLComponent, GUIComponent):
# mark stuff
def clearMarked(self):
self.l.clearMarked()
+
+ def clearMarks(self):
+ self.l.initMarked()
def isMarked(self, ref):
return self.l.isMarked(ref)
@@ -42,3 +45,13 @@ class ServiceList(HTMLComponent, GUIComponent):
def removeMarked(self, ref):
self.l.removeMarked(ref)
+ def getMarked(self):
+ i = self.l
+ i.markedQueryStart()
+ ref = eServiceReference()
+ marked = [ ]
+ while i.markedQueryNext(ref) == 0:
+ marked.append(ref)
+ ref = eServiceReference()
+
+ return marked
diff --git a/lib/python/Screens/ChannelSelection.py b/lib/python/Screens/ChannelSelection.py
index 289d2e5b..465d3de3 100644
--- a/lib/python/Screens/ChannelSelection.py
+++ b/lib/python/Screens/ChannelSelection.py
@@ -5,17 +5,63 @@ from Components.ActionMap import ActionMap
from enigma import eServiceReference
+from Screens.Menu import FixedMenu
+
+import xml.dom.minidom
+
+class ChannelContextMenu(FixedMenu):
+ def __init__(self, session, csel):
+ self.csel = csel
+
+ menu = [("back", self.close)]
+
+ if csel.movemode:
+ menu.append(("disable move mode", self.moveMode))
+ else:
+ menu.append(("enable move mode", self.moveMode))
+
+ if csel.bouquet_mark_edit:
+ menu.append(("end bouquet edit", self.bouquetMarkEnd))
+ menu.append(("abort bouquet edit", self.bouquetMarkAbort))
+ else:
+ menu.append(("edit bouquet...", self.bouquetMarkStart))
+
+ FixedMenu.__init__(self, session, "Channel Selection", menu)
+ self.skinName = "Menu"
+
+ def moveMode(self):
+ self.csel.setMoveMode(self.csel.movemode)
+ self.close()
+
+ def bouquetMarkStart(self):
+ self.csel.startMarkedEdit()
+ self.close()
+
+ def bouquetMarkEnd(self):
+ self.csel.endMarkedEdit(abort=False)
+ self.close()
+
+ def bouquetMarkAbort(self):
+ self.csel.endMarkedEdit(abort=True)
+ self.close()
+
class ChannelSelection(Screen):
def __init__(self, session):
Screen.__init__(self, session)
-
+
+ self.movemode = False
+ self.bouquet_mark_edit = False
+
+ ## FIXME
+ self.__marked = [ ]
+
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["list"].setRoot(eServiceReference("""1:0:1:0:0:0:0:0:0:0:(type == 1)"""))
#self["okbutton"] = Button("ok", [self.channelSelected])
@@ -31,17 +77,46 @@ class ChannelSelection(Screen):
{
"cancel": self.close,
"ok": self.channelSelected,
- "mark": self.doMark
+ "mark": self.doMark,
+ "contextMenu": self.doContext
})
self["actions"].csel = self
+ # marked edit mode
+
+ def startMarkedEdit(self):
+ self.bouquet_mark_edit = True
+ self.clearMarks()
+
+ # TODO
+ marked = self.__marked
+
+ l = self["list"]
+ for x in marked:
+ print "mark: " + str(x)
+ l.addMarked(x)
+
+ def endMarkedEdit(self, abort):
+ self.bouquet_mark_edit = True
+ new_marked = self["list"].getMarked()
+ self.__marked = new_marked
+ self.clearMarks()
+ self.bouquet_mark_edit = False
+
+ def clearMarks(self):
+ self["list"].clearMarks()
+
def doMark(self):
+ if not self.bouquet_mark_edit:
+ return
+
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()
@@ -56,3 +131,9 @@ class ChannelSelection(Screen):
def moveDown(self):
self["list"].moveDown()
+ def doContext(self):
+ self.session.open(ChannelContextMenu, self)
+
+ def setMoveMode(self, mode):
+ self.movemode = mode
+
diff --git a/lib/python/Screens/InfoBar.py b/lib/python/Screens/InfoBar.py
index ee09e577..f89eba0f 100644
--- a/lib/python/Screens/InfoBar.py
+++ b/lib/python/Screens/InfoBar.py
@@ -13,7 +13,7 @@ from enigma import *
import time
# hack alert!
-from Menu import *
+from Menu import MainMenu, mdom
class InfoBar(Screen):
def __init__(self, session):
@@ -51,7 +51,7 @@ class InfoBar(Screen):
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()
diff --git a/lib/python/Screens/Menu.py b/lib/python/Screens/Menu.py
index 3b54577e..503990b6 100644
--- a/lib/python/Screens/Menu.py
+++ b/lib/python/Screens/Menu.py
@@ -122,37 +122,7 @@ class configOSD(Screen):
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):
print "okbuttonClick"
selection = self["menu"].getCurrent()
@@ -206,3 +176,53 @@ class Menu(Screen):
a = getValbyAttr(parent, "text")
self["title"] = Header(a)
+class FixedMenu(Screen):
+ def okbuttonClick(self):
+ selection = self["menu"].getCurrent()
+ selection[1]()
+
+ def __init__(self, session, title, list):
+ Screen.__init__(self, session)
+
+ self["menu"] = MenuList(list)
+
+ self["actions"] = ActionMap(["OkCancelActions"],
+ {
+ "ok": self.okbuttonClick,
+ "cancel": self.close
+ })
+
+ self["title"] = Header(title)
+
+
+class MainMenu(Menu):
+ #add file load functions for the xml-file
+ #remove old code (i.e. goScan / goClock...)
+
+ def __init__(self, *x):
+ Menu.__init__(self, *x)
+ self.skinName = "Menu"
+
+ 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())
diff --git a/skin.py b/skin.py
index 57065076..ab868327 100644
--- a/skin.py
+++ b/skin.py
@@ -81,8 +81,8 @@ dom = xml.dom.minidom.parseString(
<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">
- <ePixmap position="0,0" size="720,151" pixmap="data/info-bg.png" />
+ <screen name="InfoBar" flags="wfNoBorder" position="0,380" size="720,148" title="InfoBar">
+ <ePixmap position="0,0" size="720,148" pixmap="data/info-bg.png" />
<widget name="ServiceName" position="69,30" size="427,26" valign="center" font="Arial;32" backgroundColor="#101258" />
<widget name="CurrentTime" position="575,10" size="66,30" backgroundColor="dark" font="Arial;16" />
@@ -170,7 +170,7 @@ def collectAttributes(skinAttributes, node):
# TODO: localization? as in e1?
value = str(a.value)
- skinAttributes[attrib] = value
+ skinAttributes.append((attrib, value))
def applySingleAttribute(guiObject, desktop, attrib, value):
# and set attributes
@@ -232,7 +232,7 @@ def applySingleAttribute(guiObject, desktop, attrib, value):
print "widget %s (%s) doesn't support attribute %s!" % ("", guiObject.__class__.__name__, attrib)
def applyAllAttributes(guiObject, desktop, attributes):
- for (attrib, value) in attributes.items():
+ for (attrib, value) in attributes:
applySingleAttribute(guiObject, desktop, attrib, value)
def loadSkin(desktop):
@@ -298,7 +298,7 @@ def readSkin(screen, skin, name, desktop):
assert myscreen != None, "no skin for screen '" + name + "' found!"
- screen.skinAttributes = { }
+ screen.skinAttributes = [ ]
collectAttributes(screen.skinAttributes, myscreen)
screen.additionalWidgets = [ ]
@@ -312,7 +312,7 @@ def readSkin(screen, skin, name, desktop):
# get corresponding gui object
try:
- attributes = screen[wname].skinAttributes = { }
+ attributes = screen[wname].skinAttributes = [ ]
except:
raise str("component with name '" + wname + "' was not found in skin of screen '" + name + "'!")
@@ -345,7 +345,7 @@ def readSkin(screen, skin, name, desktop):
else:
raise str("unsupported stuff : %s" % widget.tagName)
- w.skinAttributes = { }
+ w.skinAttributes = [ ]
collectAttributes(w.skinAttributes, widget)
# applyAttributes(guiObject, widget, desktop)