- add mark in channellist
authorFelix Domke <tmbinc@elitedvb.net>
Fri, 22 Jul 2005 21:50:17 +0000 (21:50 +0000)
committerFelix Domke <tmbinc@elitedvb.net>
Fri, 22 Jul 2005 21:50:17 +0000 (21:50 +0000)
keymap.xml
lib/python/Components/ServiceList.py
lib/python/Screens/ChannelSelection.py
lib/python/Screens/InfoBar.py
lib/python/Screens/Menu.py
skin.py

index 9d32ea0..dde32c9 100644 (file)
@@ -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" />
index 1aa3d48..5725871 100644 (file)
@@ -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
index 289d2e5..465d3de 100644 (file)
@@ -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
+       
index ee09e57..f89eba0 100644 (file)
@@ -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()
index 3b54577..503990b 100644 (file)
@@ -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 5706507..ab86832 100644 (file)
--- 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)