From 1f3de605b9be5751d14c39f785adc5d4af2fced7 Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Fri, 22 Jul 2005 21:50:17 +0000 Subject: [PATCH] - add mark in channellist --- keymap.xml | 3 +- lib/python/Components/ServiceList.py | 13 ++++ lib/python/Screens/ChannelSelection.py | 89 ++++++++++++++++++++++++-- lib/python/Screens/InfoBar.py | 4 +- lib/python/Screens/Menu.py | 80 ++++++++++++++--------- skin.py | 14 ++-- 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 @@ - + + 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( - - + + @@ -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) -- 2.30.2