add support for channellogos (picons)
authorAndreas Monzner <andreas.monzner@multimedia-labs.de>
Mon, 17 Sep 2007 17:44:11 +0000 (17:44 +0000)
committerAndreas Monzner <andreas.monzner@multimedia-labs.de>
Mon, 17 Sep 2007 17:44:11 +0000 (17:44 +0000)
data/skin.xml
lib/python/Components/Renderer/Makefile.am
lib/python/Components/Renderer/Picon.py [new file with mode: 0644]

index 82a67bd..df8e327 100644 (file)
                        <convert type="ValueRange">36700,65536</convert>
                        <convert type="ConditionalShowHide" />
                </widget>
-               <ePixmap pixmap="skin_default/led_green.png" position="528,4" zPosition="2" size="15,15" alphatest="on" />              
+               <ePixmap pixmap="skin_default/led_green.png" position="528,4" zPosition="2" size="15,15" alphatest="on" />
                <widget source="FrontendStatus" render="Pixmap" pixmap="skin_default/led_red.png" position="528,4" zPosition="3" size="15,15" transparent="1" alphatest="on" >
                        <convert type="FrontendInfo">BER</convert>              
                        <convert type="ConditionalShowHide" />
                </widget>       
-               <ePixmap position="47,2" zPosition="1" size="74,57" pixmap="skin_default/enigma2.png" alphatest="on" />
-               <!-- Uncomment for Picon use
-               <widget name="picon" position="76,69" zPosition="2" size="70,53" pixmap="skin_default/enigma2.png" />
-               -->
+               <!-- Channellogo (Picon) -->
+               <widget source="CurrentService" render="Picon" position="47,2" zPosition="2" size="74,57" >
+                       <convert type="ServiceName">Name</convert>
+               </widget>
                <!-- Service name -->
                <widget source="CurrentService" render="Label" position="130,30" size="360,27" font="Regular;21" valign="center" halign="right" noWrap="1" backgroundColor="#263c59" shadowColor="#1d354c" shadowOffset="-1,-1" transparent="1" >
                        <convert type="ServiceName">Name</convert>
index 31439c7..c711ed4 100644 (file)
@@ -2,4 +2,4 @@ installdir = $(LIBDIR)/enigma2/python/Components/Renderer
 
 install_PYTHON = \
        __init__.py Label.py Progress.py Listbox.py Renderer.py Pixmap.py \
-       FixedLabel.py PositionGauge.py Canvas.py
+       FixedLabel.py PositionGauge.py Canvas.py Picon.py
diff --git a/lib/python/Components/Renderer/Picon.py b/lib/python/Components/Renderer/Picon.py
new file mode 100644 (file)
index 0000000..117e08d
--- /dev/null
@@ -0,0 +1,71 @@
+##
+## Picon renderer by Gruffy .. some speedups by Ghost
+##
+from Renderer import Renderer
+from enigma import ePixmap
+from Tools.Directories import pathExists, fileExists, SCOPE_SKIN_IMAGE, resolveFilename
+
+from time import time
+
+class Picon(Renderer):
+       visible = True
+       pngname = ""
+       nameCache = { }
+       searchPaths = ['/etc/picon/',
+                               '/media/cf/picon/',
+                               '/media/usb/picon/',
+                               '/media/hdd/picon/']
+
+       def __init__(self):
+               Renderer.__init__(self)
+
+       GUI_WIDGET = ePixmap
+
+       def changed(self, what):
+               if self.instance:
+                       pngname = ""
+                       if what[0] != self.CHANGED_CLEAR:
+                               sname = self.source.text
+                               pngname = self.nameCache.get(sname, "")
+                               if pngname == "":
+                                       pngname = self.findPicon(self.source.text)
+                                       if pngname == "":
+                                               self.nameCache[sname] = pngname
+                                       else:
+                                               self.nameCache[sname] = pngname
+                       if pngname == "": # no picon for service found
+                               pngname = self.nameCache.get("default", "")
+                               if pngname == "": # no default yet in cache..
+                                       pngname = self.findPicon("picon_default")
+                                       self.nameCache[sname] = pngname
+                                       if pngname == "": # Fallback to enigma2 logo
+                                               pngname = resolveFilename(SCOPE_SKIN_IMAGE, "skin_default/enigma2.png")
+                                       self.nameCache["default"] = pngname
+                       if pngname != "":
+                               if self.pngname != pngname:
+                                       self.instance.setPixmapFromFile(pngname)
+                                       if not self.visible:
+                                               self.instance.show()
+                                               self.visible=True
+                       elif self.visible:
+                               self.instance.hide()
+                               self.visible = False
+                       self.pngname = pngname
+
+       def findPicon(self, serviceName):
+               for path in self.searchPaths:
+                       if pathExists(path):
+                               png = self.findFile(path, serviceName)
+                               if png != "":
+                                       return png
+               return ""
+
+       def findFile(self, path, serviceName):
+               pngname = path + serviceName + ".png"
+               if fileExists(pngname):
+                       return pngname
+               else:
+                       for i in range(len(serviceName), 1, -1):
+                               if fileExists(path + serviceName[0:i] + ".png"):
+                                       return path + serviceName[0:i] + ".png"
+                       return ""