use local listbox styles for servicelist
[enigma2.git] / lib / python / Components / ServiceList.py
index 0532d248a1b30e4f3ede7a56596cad2669fe4404..46c024dd8017fa3e15ff42c3300bdfbb6a36236f 100644 (file)
@@ -1,11 +1,12 @@
-from HTMLComponent import *
-from GUIComponent import *
+from HTMLComponent import HTMLComponent
+from GUIComponent import GUIComponent
+from skin import parseColor
 
 from enigma import loadPNG, eListboxServiceContent, eListbox, eServiceCenter, eServiceReference, gFont, eRect
 
 from string import upper
 
 
 from enigma import loadPNG, eListboxServiceContent, eListbox, eServiceCenter, eServiceReference, gFont, eRect
 
 from string import upper
 
-from Tools.Directories import resolveFilename, SCOPE_SKIN, SCOPE_SKIN_IMAGE, SCOPE_FONTS
+from Tools.Directories import resolveFilename, SCOPE_SKIN_IMAGE
 
 class ServiceList(HTMLComponent, GUIComponent):
        MODE_NORMAL = 0
 
 class ServiceList(HTMLComponent, GUIComponent):
        MODE_NORMAL = 0
@@ -35,8 +36,45 @@ class ServiceList(HTMLComponent, GUIComponent):
                if pic:
                        self.l.setPixmap(self.l.picDVB_T, pic)
 
                if pic:
                        self.l.setPixmap(self.l.picDVB_T, pic)
 
+               pic = loadPNG(resolveFilename(SCOPE_SKIN_IMAGE, "ico_service_group-fs8.png"))
+               if pic:
+                       self.l.setPixmap(self.l.picServiceGroup, pic)
+
                self.root = None
                self.mode = self.MODE_NORMAL
                self.root = None
                self.mode = self.MODE_NORMAL
+               self.onSelectionChanged = [ ]
+
+       def applySkin(self, desktop):
+               attribs = [ ]
+               if self.skinAttributes is not None:
+                       attribs = [ ]
+                       for (attrib, value) in self.skinAttributes:
+                               if attrib == "foregroundColorMarked":
+                                       self.l.setColor(eListboxServiceContent.markedForeground, parseColor(value))
+                               elif attrib == "foregroundColorMarkedSelected":
+                                       self.l.setColor(eListboxServiceContent.markedForegroundSelected, parseColor(value))
+                               elif attrib == "backgroundColorMarked":
+                                       self.l.setColor(eListboxServiceContent.markedBackground, parseColor(value))
+                               elif attrib == "backgroundColorMarkedSelected":
+                                       self.l.setColor(eListboxServiceContent.markedBackgroundSelected, parseColor(value))
+                               elif attrib == "foregroundColorServiceNotAvail":
+                                       self.l.setColor(eListboxServiceContent.serviceNotAvail, parseColor(value))
+                               else:
+                                       attribs.append((attrib, value))
+               self.skinAttributes = attribs
+               return GUIComponent.applySkin(self, desktop)
+
+       def connectSelChanged(self, fnc):
+               if not fnc in self.onSelectionChanged:
+                       self.onSelectionChanged.append(fnc)
+
+       def disconnectSelChanged(self, fnc):
+               if fnc in self.onSelectionChanged:
+                       self.onSelectionChanged.remove(fnc)
+
+       def selectionChanged(self):
+               for x in self.onSelectionChanged:
+                       x()
 
        def setCurrent(self, ref):
                self.l.setCurrent(ref)
 
        def setCurrent(self, ref):
                self.l.setCurrent(ref)
@@ -89,6 +127,7 @@ class ServiceList(HTMLComponent, GUIComponent):
        def postWidgetCreate(self, instance):
                instance.setWrapAround(True)
                instance.setContent(self.l)
        def postWidgetCreate(self, instance):
                instance.setWrapAround(True)
                instance.setContent(self.l)
+               instance.selectionChanged.get().append(self.selectionChanged)
                self.setMode(self.mode)
 
        def getRoot(self):
                self.setMode(self.mode)
 
        def getRoot(self):
@@ -118,6 +157,7 @@ class ServiceList(HTMLComponent, GUIComponent):
                self.l.setRoot(root, justSet)
                if not justSet:
                        self.l.sort()
                self.l.setRoot(root, justSet)
                if not justSet:
                        self.l.sort()
+               self.selectionChanged()
 
        def removeCurrent(self):
                self.l.removeCurrent()
 
        def removeCurrent(self):
                self.l.removeCurrent()
@@ -160,13 +200,13 @@ class ServiceList(HTMLComponent, GUIComponent):
                self.mode = mode
 
                if mode == self.MODE_NORMAL:
                self.mode = mode
 
                if mode == self.MODE_NORMAL:
-                       self.instance.setItemHeight(28)
+                       self.l.setItemHeight(28)
                        self.l.setVisualMode(eListboxServiceContent.visModeComplex)
                        self.l.setElementFont(self.l.celServiceName, gFont("Regular", 22))
                        self.l.setElementPosition(self.l.celServiceName, eRect(0, 0, self.instance.size().width(), 28))
                        self.l.setElementFont(self.l.celServiceInfo, gFont("Regular", 18))
                else:
                        self.l.setVisualMode(eListboxServiceContent.visModeComplex)
                        self.l.setElementFont(self.l.celServiceName, gFont("Regular", 22))
                        self.l.setElementPosition(self.l.celServiceName, eRect(0, 0, self.instance.size().width(), 28))
                        self.l.setElementFont(self.l.celServiceInfo, gFont("Regular", 18))
                else:
-                       self.instance.setItemHeight(28)
+                       self.l.setItemHeight(28)
                        self.l.setVisualMode(eListboxServiceContent.visModeComplex)
                        self.l.setElementFont(self.l.celServiceNumber, gFont("Regular", 20))
                        self.l.setElementPosition(self.l.celServiceNumber, eRect(0, 0, 50, 28))
                        self.l.setVisualMode(eListboxServiceContent.visModeComplex)
                        self.l.setElementFont(self.l.celServiceNumber, gFont("Regular", 20))
                        self.l.setElementPosition(self.l.celServiceNumber, eRect(0, 0, 50, 28))