- port to epicload,
authorMoritz Venn <ritzmo@users.schwerkraft.elitedvb.net>
Fri, 5 Dec 2008 08:40:38 +0000 (08:40 +0000)
committerMoritz Venn <ritzmo@users.schwerkraft.elitedvb.net>
Fri, 5 Dec 2008 08:40:38 +0000 (08:40 +0000)
 - use tabs for indentation,
 - some cleanups

webcamviewer/src/FTPDownloader.py
webcamviewer/src/PictureScreen.py
webcamviewer/src/WebcamViewConfig.py
webcamviewer/src/plugin.py

index 8c7aeb7..17e574c 100644 (file)
@@ -119,3 +119,4 @@ class FTPDownloader(Protocol):
                if self.file is not None:
                        self.file.close()
                self.deferred.errback(reason)
+
index 38a53aa..ab0dfbc 100755 (executable)
@@ -1,6 +1,4 @@
-from enigma import loadPic
-from enigma import eTimer
-from enigma import getDesktop
+from enigma import ePicLoad, eTimer, getDesktop
 
 from Screens.Screen import Screen
 from Components.AVSwitch import AVSwitch
@@ -105,12 +103,13 @@ def download(url, file, contextFactory = None, *args, **kwargs):
 
 class PictureScreen(Screen):
        skin = ""
-       prozessing =False # if fetching or converting is active
-       autoreload =False
+       processing = False # if fetching or converting is active
+       autoreload = False
        def __init__(self, session,title,filename, slideshowcallback = None,args=0):
                self.slideshowcallback=slideshowcallback
                self.screentitle = title
-               ##
+               self.filename = filename
+
                size_w = getDesktop(0).size().width()
                size_h = getDesktop(0).size().height()
                self.skin = """
@@ -118,7 +117,11 @@ class PictureScreen(Screen):
                         <widget name="pixmap" position="0,0" size="%i,%i" backgroundColor=\"black\"/>
                </screen>""" % (size_w,size_h,filename,size_w,size_h)
                Screen.__init__(self, session)
-               self.filename = filename
+
+               self.picload = ePicLoad()
+               self.picload.PictureData.get().append(self.setPictureCB)
+               sc = AVSwitch().getFramebufferScale()
+               self.picload.setPara((size_w, size_h, sc[0], sc[1], False, 1, '#00000000'))
                self["pixmap"] = Pixmap()
 
                self["actions"] = ActionMap(["WizardActions", "DirectionActions","ChannelSelectBaseActions","ShortcutActions"],
@@ -131,17 +134,17 @@ class PictureScreen(Screen):
                self.onLayoutFinish.append(self.do)
 
        def AutoReloaderSwitch(self):
-               if self.filename.startswith("http") or self.filename.startswith("ftp"):
-                       if self.autoreload is False:
+               if self.filename.startswith(("http://", "https://", "ftp://")):
+                       if not self.autoreload:
                                self.autoreload = True
                                self.do()
                        else:
                                self.autoreload = False
 
        def do(self):
-               if self.prozessing:
+               if self.processing:
                        pass
-               elif self.filename.startswith("http") or self.filename.startswith("ftp"):
+               elif self.filename.startswith(("http://", "https://", "ftp://")):
                        self.fetchFile(self.filename)
                else:
                        self.sourcefile = self.filename
@@ -158,27 +161,30 @@ class PictureScreen(Screen):
                except:## OSerror??
                        pass
 
-       def fetchFile(self,url):
-               self.prozessing =True
+       def fetchFile(self, url):
+               self.processing = True
                self.setTitle("loading File")
-               print "fetching URL ",url
+               print "fetching URL", url
                self.sourcefile = "/tmp/loadedfile"
-               download(url,self.sourcefile).addCallback(self.fetchFinished).addErrback(self.fetchFailed)
+               download(url, self.sourcefile).addCallback(self.fetchFinished).addErrback(self.fetchFailed)
 
        def fetchFailed(self,string):
-               print "fetch failed",string
-               self.setTitle( "fetch failed: "+string)
+               print "fetch failed", string
+               self.setTitle("fetch failed: "+string)
 
        def fetchFinished(self,string):
-               print "fetching finished "
+               print "fetching finished"
                self.setPicture(self.sourcefile)
 
-       def setPicture(self,string):
+       def setPicture(self, string):
                self.setTitle(self.filename.split("/")[-1])
-               pixmap = loadPic(string,getDesktop(0).size().width(),getDesktop(0).size().height(), AVSwitch().getAspectRatioSetting()/2,1, 0,1)
-               if pixmap is not None:
-                       self["pixmap"].instance.setPixmap(pixmap)
-               self.prozessing =False
+               self.picload.startDecode(string)
+
+       def setPictureCB(self, picInfo = None):
+               ptr = self.picload.getData()
+               if ptr is not None:
+                       self["pixmap"].instance.setPixmap(ptr.__deref__())
+               self.processing = False
 
                if self.autoreload is True:
                                self.cleanUP()
@@ -186,6 +192,6 @@ class PictureScreen(Screen):
                elif self.slideshowcallback is not None:
                                self.closetimer = eTimer()
                                self.closetimer.timeout.get().append(self.slideshowcallback)
-                               print "waiting ",config.plugins.pictureviewer.slideshowtime.value," seconds for next picture"
+                               print "waiting", config.plugins.pictureviewer.slideshowtime.value, "seconds for next picture"
                                self.closetimer.start(int(config.plugins.pictureviewer.slideshowtime.value))
 
index 1b0309e..5bd807c 100755 (executable)
@@ -4,42 +4,41 @@ from Components.Label import Label
 from Components.config import config, getConfigListEntry
 from Components.ActionMap import ActionMap
 
-
 class WebcamViewerMenu(ConfigListScreen,Screen):
-    skin = """
-        <screen position="100,100" size="550,400" title="Setup" >
-        <widget name="config" position="0,0" size="550,360" scrollbarMode="showOnDemand" />
-        <widget name="buttonred" position="10,360" size="100,40" backgroundColor="red" valign="center" halign="center" zPosition="2"  foregroundColor="white" font="Regular;18"/> 
-        <widget name="buttongreen" position="120,360" size="100,40" backgroundColor="green" valign="center" halign="center" zPosition="2"  foregroundColor="white" font="Regular;18"/> 
-        </screen>"""
-    def __init__(self, session, args = 0):
-        self.session = session
-        Screen.__init__(self, session)
-        self.list = []
-        self.list.append(getConfigListEntry(_("Slideshow Time"), config.plugins.pictureviewer.slideshowtime))
-        self.list.append(getConfigListEntry(_("Slideshow Mode"), config.plugins.pictureviewer.slideshowmode))
-        self.list.append(getConfigListEntry(_("stop Service on Start"), config.plugins.pictureviewer.stopserviceonstart))
-        
-        ConfigListScreen.__init__(self, self.list)
-        self["buttonred"] = Label(_("cancel"))
-        self["buttongreen"] = Label(_("ok"))
-        self["setupActions"] = ActionMap(["SetupActions"],
-        {
-            "green": self.save,
-            "red": self.cancel,
-            "save": self.save,
-            "cancel": self.cancel,
-            "ok": self.save,
-        }, -2)
+       skin = """
+               <screen position="100,100" size="550,400" title="Setup" >
+               <widget name="config" position="0,0" size="550,360" scrollbarMode="showOnDemand" />
+               <widget name="buttonred" position="10,360" size="100,40" backgroundColor="red" valign="center" halign="center" zPosition="2"  foregroundColor="white" font="Regular;18"/> 
+               <widget name="buttongreen" position="120,360" size="100,40" backgroundColor="green" valign="center" halign="center" zPosition="2"  foregroundColor="white" font="Regular;18"/> 
+               </screen>"""
+       def __init__(self, session, args = 0):
+               Screen.__init__(self, session)
+               self.list = []
+               self.list.append(getConfigListEntry(_("Slideshow Time"), config.plugins.pictureviewer.slideshowtime))
+               self.list.append(getConfigListEntry(_("Slideshow Mode"), config.plugins.pictureviewer.slideshowmode))
+               self.list.append(getConfigListEntry(_("stop Service on Start"), config.plugins.pictureviewer.stopserviceonstart))
+               
+               ConfigListScreen.__init__(self, self.list)
+               self["buttonred"] = Label(_("cancel"))
+               self["buttongreen"] = Label(_("ok"))
+               self["setupActions"] = ActionMap(["SetupActions"],
+               {
+                       "green": self.save,
+                       "red": self.cancel,
+                       "save": self.save,
+                       "cancel": self.cancel,
+                       "ok": self.save,
+               }, -2)
+
+       def save(self):
+               print "saving"
+               for x in self["config"].list:
+                       x[1].save()
+               self.close(True,self.session)
 
-    def save(self):
-        print "saving"
-        for x in self["config"].list:
-            x[1].save()
-        self.close(True,self.session)
+       def cancel(self):
+               print "cancel"
+               for x in self["config"].list:
+                       x[1].cancel()
+               self.close(False,self.session)
 
-    def cancel(self):
-        print "cancel"
-        for x in self["config"].list:
-            x[1].cancel()
-        self.close(False,self.session)
index df98bfc..78db416 100755 (executable)
@@ -1,6 +1,6 @@
 from enigma import eListbox
 from enigma import eListboxPythonMultiContent
-from enigma import loadPic
+from enigma import ePicLoad
 from enigma import loadPNG
 from enigma import gFont
 ### Picturelist
@@ -30,11 +30,9 @@ from Tools.XMLTools import elementsWithTag
 from WebcamViewConfig import WebcamViewerMenu
 from PictureScreen import PictureScreen
 ###
-myname = "Webcam/Picture Viewer"    
+myname = "Webcam/Picture Viewer"
 myversion = "1.1"
 
-
-
 config.plugins.pictureviewer = ConfigSubsection()
 config.plugins.pictureviewer.slideshowtime = ConfigSelection(default="5000", choices = [("5000", _("5 Sekunden")), ("10000", _("10 Sekunden")), ("20000", _("20 Sekunden")), ("60000", _("1 Minute"))])
 config.plugins.pictureviewer.slideshowmode = ConfigSelection(default="0", choices = [("0", _("normal")), ("1", _("endlos"))])
@@ -49,484 +47,530 @@ SLIDESHOWMODE_REPEAT = 1
 
 originalservice = None
 mysession = None
-  
-def main1(session,**kwargs):
-    global originalservice,mysession
-    mysession = session
-    originalservice = session.nav.getCurrentlyPlayingServiceReference()
-    if config.plugins.pictureviewer.stopserviceonstart.value:
-        session.nav.stopService()
-    session.openWithCallback(mainCB,PictureViewer)
-
-def main2(session,**kwargs):
-    global originalservice,mysession
-    mysession = session
-    originalservice = session.nav.getCurrentlyPlayingServiceReference()
-    if config.plugins.pictureviewer.stopserviceonstart.value:
-        session.nav.stopService()
-    xmlfile = "/usr/lib/enigma2/python/Plugins/Extensions/WebcamViewer/webcam.xml"
-    if os.path.isfile(xmlfile):
-        try:
-            xmlnode = xml.dom.minidom.parse( open(xmlfile) )
-            session.openWithCallback(mainCB,WebcamViewer,xmlnode.childNodes[1])
-        except ExpatError,e:
-            session.open(MessageBox,_("Loading config file failed!\n\n%s"%e), MessageBox.TYPE_WARNING)
-    else:
-        session.open(MessageBox,_("Loading config file failed!\n\nconfigfile not found!"), MessageBox.TYPE_WARNING)
-        
+
+def main1(session, **kwargs):
+       global originalservice, mysession
+       mysession = session
+       originalservice = session.nav.getCurrentlyPlayingServiceReference()
+       if config.plugins.pictureviewer.stopserviceonstart.value:
+               session.nav.stopService()
+       session.openWithCallback(mainCB, PictureViewer)
+
+def main2(session, **kwargs):
+       global originalservice, mysession
+       mysession = session
+       originalservice = session.nav.getCurrentlyPlayingServiceReference()
+       if config.plugins.pictureviewer.stopserviceonstart.value:
+               session.nav.stopService()
+       xmlfile = "/usr/lib/enigma2/python/Plugins/Extensions/WebcamViewer/webcam.xml"
+       if os.path.isfile(xmlfile):
+               try:
+                       xmlnode = xml.dom.minidom.parse(open(xmlfile))
+                       session.openWithCallback(mainCB, WebcamViewer, xmlnode.childNodes[1])
+               except ExpatError,e:
+                       session.open(
+                               MessageBox,
+                               _("Loading config file failed!\n\n%s") % e,
+                               MessageBox.TYPE_WARNING
+                       )
+       else:
+               session.open(
+                       MessageBox,
+                       _("Loading config file failed!\n\nconfigfile not found!"),
+                       MessageBox.TYPE_WARNING
+               )
+
 def mainCB():
-    global originalservice,mysession
-    if config.plugins.pictureviewer.stopserviceonstart.value:
-        mysession.nav.playService(originalservice)
-    
-def Plugins(path,**kwargs):
-    p = [
-             PluginDescriptor(
-                              name="PictureViewer", 
-                              description="browse your local pictures", 
-                              where = PluginDescriptor.WHERE_PLUGINMENU,
-                              fnc = main1,
-                              icon="pictureviewer.png"
-                              )
-        ,
-            PluginDescriptor(
-                             name="WebcamViewer", 
-                             description="view webcams around the world", 
-                             where = PluginDescriptor.WHERE_PLUGINMENU,
-                             fnc = main2,
-                             icon="webcamviewer.png"
-                             )
-         ]
-    return p 
-
-
-        
+       global originalservice, mysession
+       if config.plugins.pictureviewer.stopserviceonstart.value:
+               mysession.nav.playService(originalservice)
+
+def Plugins(path, **kwargs):
+       p = [
+                       PluginDescriptor(
+                                                       name="PictureViewer",
+                                                       description="browse your local pictures",
+                                                       where = PluginDescriptor.WHERE_PLUGINMENU,
+                                                       fnc = main1,
+                                                       icon="pictureviewer.png"
+                         ),
+                       PluginDescriptor(
+                                                       name="WebcamViewer",
+                                                       description="view webcams around the world",
+                                                       where = PluginDescriptor.WHERE_PLUGINMENU,
+                                                       fnc = main2,
+                                                       icon="webcamviewer.png"
+                       )
+                ]
+       return p
 
 ###################
 class Slideshow:
-    filelist=[]
-    currentslideshowitem =0
-    wbviewer = False
-    def __init__(self,session,callback):
-        self.session = session
-        self.callback = callback
-    def setfiles(self,filelist):
-        self.filelist = filelist 
-
-    def start(self):
-        if len(self.filelist)>0:            
-            self.currentslideshowitem = -1
-            self.nextSlideshowItem()
-            
-    def nextSlideshowItem(self):
-        if self.currentslideshowitem is not (len(self.filelist)-1):
-            self.currentslideshowitem = self.currentslideshowitem+1
-            filetoshow = self.filelist[self.currentslideshowitem][1]
-            if self.wbviewer is False:
-                self.wbviewer = self.session.openWithCallback(self.cb,PictureScreen,filetoshow.split("/")[-1],filetoshow,slideshowcallback=self.nextSlideshowItem)              
-            else:
-                self.wbviewer.filename = filetoshow
-                self.wbviewer.do()    
-        elif self.currentslideshowitem is (len(self.filelist)-1) and int(config.plugins.pictureviewer.slideshowmode.value) is SLIDESHOWMODE_REPEAT:
-            print "["+myname+"] restarting slideshow"
-            self.start()
-        else:
-            print "["+myname+"] slideshow finished"
-            self.wbviewer.exit()
-            self.cb()
-    def cb(self):
-        self.callback()
+       filelist = []
+       currentslideshowitem = 0
+       wbviewer = False
+
+       def __init__(self, session, callback):
+               self.session = session
+               self.callback = callback
+
+       def setfiles(self, filelist):
+               self.filelist = filelist
+
+       def start(self):
+               if len(self.filelist) > 0:
+                       self.currentslideshowitem = -1
+                       self.nextSlideshowItem()
+
+       def nextSlideshowItem(self):
+               if self.currentslideshowitem is not (len(self.filelist) - 1):
+                       self.currentslideshowitem = self.currentslideshowitem + 1
+                       filetoshow = self.filelist[self.currentslideshowitem][1]
+                       if not self.wbviewer:
+                               self.wbviewer = self.session.openWithCallback(
+                                                                       self.cb,
+                                                                       PictureScreen,
+                                                                       filetoshow.split("/")[-1],
+                                                                       filetoshow,
+                                                                       slideshowcallback = self.nextSlideshowItem
+                               )
+                       else:
+                               self.wbviewer.filename = filetoshow
+                               self.wbviewer.do()
+               elif self.currentslideshowitem is (len(self.filelist) - 1) and int(config.plugins.pictureviewer.slideshowmode.value) is SLIDESHOWMODE_REPEAT:
+                       print "["+myname+"] restarting slideshow"
+                       self.start()
+               else:
+                       print "["+myname+"] slideshow finished"
+                       self.wbviewer.exit()
+                       self.cb()
+
+       def cb(self):
+               self.callback()
 ###################
 class PictureViewer(Screen):
-    skin = ""
-    filelist = []
-    currList = "slideshowlist"
-    wbviewer = False
-    loadedslideshowlistlistname = False
-    def __init__(self, session, args = 0):
-        self.session = session
-        s =   "<screen position=\"93,70\" size=\"550,450\" title=\"%s\">\n" %config.plugins.pictureviewer.rootdir.value
-        s = s+"<widget name=\"menu\" position=\"1,1\" size=\"275,400\"  scrollbarMode=\"showOnDemand\" />\n"
-        s = s+"<widget name=\"pixmap\" position=\"550,450\" size=\"275,200\" backgroundColor=\"red\"/>\n" 
-        s = s+"<widget name=\"slist\" position=\"275,200\" size=\"275,200\"  scrollbarMode=\"showOnDemand\"/>\n" 
-        s = s+"<widget name=\"buttonred\" position=\"6,405\" size=\"130,40\" backgroundColor=\"red\" valign=\"center\" halign=\"center\" zPosition=\"2\"  foregroundColor=\"white\" font=\"Regular;18\"/>\n" 
-        s = s+"<widget name=\"buttongreen\" position=\"142,405\" size=\"130,40\" backgroundColor=\"green\" valign=\"center\" halign=\"center\" zPosition=\"2\"  foregroundColor=\"white\" font=\"Regular;18\"/>\n" 
-        s = s+"<widget name=\"buttonyellow\" position=\"278,405\" size=\"130,40\" backgroundColor=\"yellow\" valign=\"center\" halign=\"center\" zPosition=\"2\"  foregroundColor=\"white\" font=\"Regular;18\"/>\n" 
-        s = s+"<widget name=\"buttonblue\" position=\"414,405\" size=\"130,40\" backgroundColor=\"blue\" valign=\"center\" halign=\"center\" zPosition=\"2\"  foregroundColor=\"white\" font=\"Regular;18\"/>\n" 
-        self.skin = s+"</screen>"
-        Screen.__init__(self, session)
-        self.filelist = PictureList(config.plugins.pictureviewer.rootdir.value, matchingPattern = config.plugins.pictureviewer.matchingPattern.value)
-        self["menu"] = self.filelist
-        self.preview = Pixmap()
-        self["pixmap"] = self.preview
-        self.slideshowfiles = []
-        self.slideshowlist =MenuList(self.slideshowfiles)
-        self["slist"] = self.slideshowlist
-        self["buttonred"] = Label("")
-        self["buttongreen"] = Label("")
-        self["buttonyellow"] = Label("")
-        self["buttonblue"] = Label("")
-        self["actions"] = ActionMap(["WizardActions","MenuActions", "DirectionActions","ShortcutActions"], 
-            {
-             "ok": self.go,
-             "back": self.close,
-             "menu": self.openMenu,
-             "up": self.up,
-             "down": self.down,
-             "left": self.leftUp,
-             "right": self.rightUp,
-             "red": self.KeyRed,
-             "green": self.KeyGreen,
-             "yellow": self.KeyYellow,
-             "blue": self.switchList,
-             }, -1)
-        self.onLayoutFinish.append(self.switchList)
-        self.onLayoutFinish.append(self.updateInfoPanel)
-    def KeyGreen(self):
-        if self.currList is "filelist" :
-            ## adding all files in current dir to slideshowlist
-            dirname = self["menu"].getCurrentDir()
-            if os.path.isdir(dirname):
-                s = os.listdir(dirname)
-                s.sort()
-                for file in s:
-                    if compile(config.plugins.pictureviewer.matchingPattern.value).search(dirname+file):
-                        self.slideshowfiles.append((_(file),dirname+file))
-                self["slist"].l.setList(self.slideshowfiles)
-                    
-        else:
-            #loading list
-            list = []
-            try:
-                for file in os.listdir(config.plugins.pictureviewer.slideshowdir.value):
-                    if file.endswith(config.plugins.pictureviewer.slideshowext.value):
-                        list.append((_(file.split("/")[-1]),file))
-                self.session.openWithCallback(self.fileToLoadFilelistEntered,ChoiceBox,_("select List to load"),list)
-            except IOError,e:
-                print "["+myname+"] IOError:",e
-            except OSError,e:
-                print "["+myname+"] OSError:",e
-               
-    def KeyRed(self):
-        if self.currList is "filelist" :
-            #do slideshow
-            self.hide()
-            x = Slideshow(self.session,self.show)
-            x.setfiles(self.slideshowfiles)
-            x.start()
-        else:
-            # save filelist
-            if self.loadedslideshowlistlistname is False:
-                newname = "slideshowlist"
-            else:
-                newname = self.loadedslideshowlistlistname
-            self.session.openWithCallback(self.fileToSaveFilelistEntered,InputBox, title=_("Enter filename to save the List:"), text=newname, maxSize=False, type=Input.TEXT)
-
-    def fileToLoadFilelistEntered(self,fileselection):
-        if fileselection is not None: 
-               try:
-                   filename = fileselection[1]
-                   fp = open(config.plugins.pictureviewer.slideshowdir.value+filename)
-                   list = []
-                   for x in fp.readlines():
-                       file = x.replace("\n","")
-                       if x.startswith("#"):
-                           pass
-                       elif os.path.exists(file) is not True:
-                           print "["+myname+"] loaded file from filelist isnt avaible! ignoreing ->",file
-                       else:
-                           list.append((_(file.split("/")[-1]),file))
-                   self.slideshowfiles =list
-                   self["slist"].l.setList(self.slideshowfiles)
-                   self.loadedslideshowlistlistname = filename.replace(config.plugins.pictureviewer.slideshowext.value,"")
-               except IOError,e:
-                   print "["+myname+"] error:",e
-               
-    def fileToSaveFilelistEntered(self,filename):
-        if filename is not None:    
-            print "["+myname+"] saving list to ",config.plugins.pictureviewer.slideshowdir.value+filename+config.plugins.pictureviewer.slideshowext.value
-            try:
-                if os.path.exists(config.plugins.pictureviewer.slideshowdir.value) is not True:
-                    print "+"*10,os.path.basename(filename)
-                    os.mkdir(config.plugins.pictureviewer.slideshowdir.value)
-                fp = open(config.plugins.pictureviewer.slideshowdir.value+filename+config.plugins.pictureviewer.slideshowext.value,"w")
-                fp.write("# this is a slideshow file for "+myname+" made by V"+myversion+"\n")
-                fp.write("# you can make your own... each line with full path of the imagefile\n")
-                fp.write("# by importing this file,we will ignoring a file if is doesnt exist\n")
-                for x in self.slideshowfiles:
-                    fp.write(x[1]+"\n")
-                fp.close()
-            except IOError,e:
-                print "["+myname+"] error:",e
-    def KeyYellow(self):
-        if self.currList is "filelist" :
-            # add picture to list
-            fullfile = self["menu"].getSelection()[0]
-            if os.path.isfile(fullfile):
-                self.slideshowfiles.append((_(fullfile.split("/")[-1]),fullfile))
-                self["slist"].l.setList(self.slideshowfiles)
-        else:
-            # deleting an Picture
-            if len(self.slideshowfiles) >=1:
-                indexinlist = self["slist"].l.getCurrentSelectionIndex()
-                self.slideshowfiles.pop(indexinlist)
-                self["slist"].l.setList(self.slideshowfiles)
-
-    def switchList(self):
-        if self.currList is "filelist" :
-            # Slideshow activieren
-            self.filelist.selectionEnabled(0)
-            self.slideshowlist.selectionEnabled(1)
-            self["buttonred"].setText("speichern")
-            self["buttongreen"].setText("laden")
-            self["buttonyellow"].setText("loeschen")        
-            self["buttonblue"].setText("Dateien")
-            self.currList = "slideshowlist"
-        else:
-            # filelist activieren
-            self.filelist.selectionEnabled(1)
-            self.slideshowlist.selectionEnabled(0)
-            self["buttonred"].setText("starte Slideshow")
-            self["buttongreen"].setText("alle hinzufuegen")
-            self["buttonyellow"].setText("hinzufuegen")        
-            self["buttonblue"].setText("Slideshow bearbeiten")
-            self.currList = "filelist"
-                
-    def go(self):
-        if self.currList is "filelist" :
-            selection = self["menu"].getSelection()
-            if self.filelist.canDescent():
-                self.setTitle(selection[0])
-                self.filelist.descent()
-            else:
-                if selection[1] == True: # isDir
-                    pass
-                else:
-                    print "["+myname+"] file selected ",selection[0]
-                    if os.path.isfile(selection[0]):
-                        self.session.open(PictureScreen,selection[0].split("/")[-1],selection[0])
-                    else:
-                        print "["+myname+"] file not found " + selection[0]+""
-        else:
-            self.updateInfoPanel()
-    def up(self):
-         if self.currList is "filelist" :
-             self.filelist.up()
-             self.updateInfoPanel()
-         else:
-             self.slideshowlist.up()
-    def leftUp(self):
-         if self.currList is "filelist" :
-             self.filelist.pageUp()         
-             self.updateInfoPanel()
-         else:
-
-             self.slideshowlist.pageUp()
-    def rightUp(self):
-        if self.currList is "filelist" :
-             self.filelist.pageDown()
-             self.updateInfoPanel()
-        else:
-             self.slideshowlist.pageDown()
-    def down(self):
-         if self.currList is "filelist" :
-             self.filelist.down()
-             self.updateInfoPanel()
-         else:
-             self.slideshowlist.down()
-             
-    def updateInfoPanel(self):
-        if self.currList is "filelist" :
-            selectedfile = self["menu"].getSelection()[0]
-        else:
-            selectedfile = self["slist"].l.getCurrentSelection()[1]
-        pixmap = loadPic(selectedfile, 275,200, 1,1, 0,1)
-        if pixmap is not None:
-            self["pixmap"].instance.setPixmap(pixmap.__deref__())
-            self["pixmap"].move(275,0)
-        else:
-            pass
-                
-    def output(self,str):
-        print "+"*10,str  
-    def openMenu(self):
-        self.session.open(WebcamViewerMenu)
+       skin = ""
+       filelist = []
+       currList = "slideshowlist"
+       wbviewer = False
+       loadedslideshowlistlistname = False
+
+       def __init__(self, session, args = 0):
+               skin =  """<screen position="93,70" size="550,450" title="%s">
+               <widget name="menu" position="1,1" size="275,400"  scrollbarMode="showOnDemand" />
+               <widget name="pixmap" position="550,450" size="275,200" backgroundColor="red" />
+               <widget name="slist" position="275,200" size="275,200"  scrollbarMode="showOnDemand" />
+               <widget name="buttonred" position="6,405" size="130,40" backgroundColor="red" valign="center" halign="center" zPosition="2" foregroundColor="white" font="Regular;18" />
+               <widget name="buttongreen" position="142,405" size="130,40" backgroundColor="green" valign="center" halign="center" zPosition="2" foregroundColor="white" font="Regular;18" />
+               <widget name="buttonyellow" position="278,405" size="130,40" backgroundColor="yellow" valign="center" halign="center" zPosition="2" foregroundColor="white" font="Regular;18" />
+               <widget name="buttonblue" position="414,405" size="130,40" backgroundColor="blue" valign="center" halign="center" zPosition="2" foregroundColor="white" font="Regular;18" />
+               </screen>""" % config.plugins.pictureviewer.rootdir.value
+               self.skin = skin
+               Screen.__init__(self, session)
+
+               self.filelist = PictureList(config.plugins.pictureviewer.rootdir.value, matchingPattern = config.plugins.pictureviewer.matchingPattern.value)
+               self["menu"] = self.filelist
+
+               self.picload = ePicLoad()
+               self.picload.PictureData.get().append(self.updateInfoPanelCB)
+               self.picload.setPara((275, 200, 1, 1, False, 1, "#00000000"))
+               self.preview = Pixmap()
+               self["pixmap"] = self.preview
+
+               self.slideshowfiles = []
+               self.slideshowlist =MenuList(self.slideshowfiles)
+               self["slist"] = self.slideshowlist
+
+               self["buttonred"] = Label("")
+               self["buttongreen"] = Label("")
+               self["buttonyellow"] = Label("")
+               self["buttonblue"] = Label("")
+
+               self["actions"] = ActionMap(["WizardActions", "MenuActions", "DirectionActions", "ShortcutActions"],
+                       {
+                        "ok": self.go,
+                        "back": self.close,
+                        "menu": self.openMenu,
+                        "up": self.up,
+                        "down": self.down,
+                        "left": self.leftUp,
+                        "right": self.rightUp,
+                        "red": self.KeyRed,
+                        "green": self.KeyGreen,
+                        "yellow": self.KeyYellow,
+                        "blue": self.switchList,
+                        }, -1)
+
+               self.onLayoutFinish.append(self.switchList)
+               self.onLayoutFinish.append(self.updateInfoPanel)
+
+       def KeyGreen(self):
+               if self.currList is "filelist":
+                       # adding all files in current dir to slideshowlist
+                       dirname = self["menu"].getCurrentDir()
+                       if os.path.isdir(dirname):
+                               s = os.listdir(dirname)
+                               s.sort()
+                               for file in s:
+                                       if compile(config.plugins.pictureviewer.matchingPattern.value).search(dirname + file):
+                                               self.slideshowfiles.append((_(file),dirname + file))
+                               self["slist"].l.setList(self.slideshowfiles)
+               else:
+                       #loading list
+                       list = []
+                       try:
+                               for file in os.listdir(config.plugins.pictureviewer.slideshowdir.value):
+                                       if file.endswith(config.plugins.pictureviewer.slideshowext.value):
+                                               list.append((_(file.split("/")[-1]),file))
+                               self.session.openWithCallback(
+                                               self.fileToLoadFilelistEntered,
+                                               ChoiceBox,
+                                               _("select List to load"),
+                                               list
+                               )
+                       except IOError,e:
+                               print "["+myname+"] IOError:",e
+                       except OSError,e:
+                               print "["+myname+"] OSError:",e
+
+       def KeyRed(self):
+               if self.currList is "filelist" :
+                       #do slideshow
+                       self.hide()
+                       x = Slideshow(self.session, self.show)
+                       x.setfiles(self.slideshowfiles)
+                       x.start()
+               else:
+                       # save filelist
+                       if not self.loadedslideshowlistlistname:
+                               newname = "slideshowlist"
+                       else:
+                               newname = self.loadedslideshowlistlistname
+                       self.session.openWithCallback(
+                                       self.fileToSaveFilelistEntered,
+                                       InputBox,
+                                       title = _("Enter filename to save the List:"),
+                                       text = newname,
+                                       maxSize = False,
+                                       type = Input.TEXT
+                       )
+
+       def fileToLoadFilelistEntered(self, fileselection):
+               if fileselection is not None:
+                          try:
+                                  filename = fileselection[1]
+                                  fp = open(config.plugins.pictureviewer.slideshowdir.value + filename)
+                                  list = []
+                                  for x in fp.readlines():
+                                          file = x.replace("\n","")
+                                          if x.startswith("#"):
+                                                  pass
+                                          elif not os.path.exists(file):
+                                                  print "["+myname+"] loaded file from filelist isnt avaible! ignoreing ->", file
+                                          else:
+                                                  list.append((_(file.split("/")[-1]), file))
+                                  self.slideshowfiles = list
+                                  self["slist"].l.setList(self.slideshowfiles)
+                                  self.loadedslideshowlistlistname = filename.replace(config.plugins.pictureviewer.slideshowext.value, "")
+                          except IOError, e:
+                                  print "["+myname+"] error:", e
+
+       def fileToSaveFilelistEntered(self, filename):
+               if filename is not None:
+                       print "["+myname+"] saving list to ", config.plugins.pictureviewer.slideshowdir.value+filename + config.plugins.pictureviewer.slideshowext.value
+                       try:
+                               if not os.path.exists(config.plugins.pictureviewer.slideshowdir.value):
+                                       print "+" * 10, os.path.basename(filename)
+                                       os.mkdir(config.plugins.pictureviewer.slideshowdir.value)
+                               fp = open(config.plugins.pictureviewer.slideshowdir.value + filename+config.plugins.pictureviewer.slideshowext.value, "w")
+                               fp.write("# this is a slideshow file for "+myname+" made by V"+myversion+"\n")
+                               fp.write("# you can make your own... each line with full path of the imagefile\n")
+                               fp.write("# by importing this file,we will ignoring a file if is doesnt exist\n")
+                               for x in self.slideshowfiles:
+                                       fp.write(x[1] + "\n")
+                               fp.close()
+                       except IOError, e:
+                               print "["+myname+"] error:", e
+
+       def KeyYellow(self):
+               if self.currList is "filelist":
+                       # add picture to list
+                       fullfile = self["menu"].getSelection()[0]
+                       if os.path.isfile(fullfile):
+                               self.slideshowfiles.append((_(fullfile.split("/")[-1]), fullfile))
+                               self["slist"].l.setList(self.slideshowfiles)
+               else:
+                       # deleting an Picture
+                       if len(self.slideshowfiles) >= 1:
+                               indexinlist = self["slist"].l.getCurrentSelectionIndex()
+                               self.slideshowfiles.pop(indexinlist)
+                               self["slist"].l.setList(self.slideshowfiles)
+
+       def switchList(self):
+               if self.currList is "filelist" :
+                       # Slideshow activieren
+                       self.filelist.selectionEnabled(0)
+                       self.slideshowlist.selectionEnabled(1)
+                       self["buttonred"].setText("speichern")
+                       self["buttongreen"].setText("laden")
+                       self["buttonyellow"].setText("loeschen")
+                       self["buttonblue"].setText("Dateien")
+                       self.currList = "slideshowlist"
+               else:
+                       # filelist activieren
+                       self.filelist.selectionEnabled(1)
+                       self.slideshowlist.selectionEnabled(0)
+                       self["buttonred"].setText("starte Slideshow")
+                       self["buttongreen"].setText("alle hinzufuegen")
+                       self["buttonyellow"].setText("hinzufuegen")
+                       self["buttonblue"].setText("Slideshow bearbeiten")
+                       self.currList = "filelist"
+
+       def go(self):
+               if self.currList is "filelist" :
+                       selection = self["menu"].getSelection()
+                       if self.filelist.canDescent():
+                               self.setTitle(selection[0])
+                               self.filelist.descent()
+                       else:
+                               if selection[1] == True: # isDir
+                                       pass
+                               else:
+                                       print "["+myname+"] file selected ", selection[0]
+                                       if os.path.isfile(selection[0]):
+                                               self.session.open(PictureScreen,selection[0].split("/")[-1], selection[0])
+                                       else:
+                                               print "["+myname+"] file not found ", selection[0]
+               else:
+                       self.updateInfoPanel()
+
+       def up(self):
+                if self.currList is "filelist":
+                        self.filelist.up()
+                        self.updateInfoPanel()
+                else:
+                        self.slideshowlist.up()
+
+       def leftUp(self):
+                if self.currList is "filelist":
+                        self.filelist.pageUp()
+                        self.updateInfoPanel()
+                else:
+                        self.slideshowlist.pageUp()
+
+       def rightUp(self):
+               if self.currList is "filelist":
+                        self.filelist.pageDown()
+                        self.updateInfoPanel()
+               else:
+                        self.slideshowlist.pageDown()
+
+       def down(self):
+                if self.currList is "filelist":
+                        self.filelist.down()
+                        self.updateInfoPanel()
+                else:
+                        self.slideshowlist.down()
+
+       def updateInfoPanel(self):
+               if self.currList is "filelist":
+                       selectedfile = self["menu"].getSelection()[0]
+               else:
+                       selectedfile = self["slist"].l.getCurrentSelection()[1]
+               self.picload.startDecode(selectedfile)
+
+       def updateInfoPanelCB(self, picInfo = None):
+               ptr = self.picload.getData()
+               if ptr is not None:
+                       self["pixmap"].instance.setPixmap(ptr.__deref__())
+                       self["pixmap"].move(275,0)
+               else:
+                       pass
+
+       def output(self,str):
+               print "+" * 10, str
+
+       def openMenu(self):
+               self.session.open(WebcamViewerMenu)
 ###################
 class WebcamViewer(Screen):
-    skin = ""
-    filelist = []
-    def __init__(self, session,xmlnode, args = 0):
-        self.xmlnode = xmlnode
-        screen_x = 736
-        screen_y = 576
-        size_x = 350
-        size_y = 250
-        pos_x = (screen_x/2)-(size_x/2)
-        pos_y = (screen_y/2)-(size_y/2)
-        self.session = session
-        self.skin = """
-        <screen position="%i,%i" size="%i,%i" title="%s">
-            <widget name="menu" position="1,1" size="%i,%i"  scrollbarMode="showOnDemand"/>
-        </screen>""" % (pos_x,pos_y,size_x,size_y,myname,size_x,size_y) 
-        Screen.__init__(self, session)
-        self.filelist = MenuList(self.getMenuData())
-        self["menu"] = self.filelist
-        self["actions"] = ActionMap(["WizardActions", "DirectionActions"], 
-            {
-             "ok": self.go,
-             "back": self.close,
-             }, -1)
-        self.onLayoutFinish.append(self.settingTitle)
-        
-    def settingTitle(self):
-        self.setTitle(myname+": "+self.menutitle)
-        
-    def go(self):
-        selected = self["menu"].l.getCurrentSelection()[1]
-        menuitemtitle = self["menu"].l.getCurrentSelection()[0]
-        type = selected[0]
-        data = selected[1]
-        if type.startswith("cam"):
-            self.session.open(PictureScreen,menuitemtitle,data)
-        else:
-            self.hide()
-            self.session.openWithCallback(self.cb,WebcamViewer,data)
-
-    def cb(self):
-        self.show() 
-               
-    def getMenuData(self):
-        xloader = XMLloader()
-        self.menutitle = xloader.getScreenXMLTitle(self.xmlnode)
-        data =[]        
-        for node in  elementsWithTag(self.xmlnode._get_childNodes(), 'menu'):
-            nodex={}
-            nodex['name'] =  xloader.get_txt( node, "name", "no name" )
-            data.append((_("*"+nodex['name']),["node",node]))
-        
-        for node2 in elementsWithTag(self.xmlnode._get_childNodes(), 'cam'):
-            nodex={}
-            nodex['name'] =  xloader.get_txt( node2, "name", "no name" )
-            nodex['url'] =  xloader.get_txt( node2, "url", "no url" )
-            data.append((_(nodex['name']),["cam",nodex['url']]))
-        return data
+       skin = ""
+       filelist = []
+       def __init__(self, session,xmlnode, args = 0):
+               self.xmlnode = xmlnode
+               screen_x = 736
+               screen_y = 576
+               size_x = 350
+               size_y = 250
+               pos_x = (screen_x/2)-(size_x/2)
+               pos_y = (screen_y/2)-(size_y/2)
+               skin = """
+               <screen position="%i,%i" size="%i,%i" title="%s">
+                       <widget name="menu" position="1,1" size="%i,%i"  scrollbarMode="showOnDemand"/>
+               </screen>""" % (pos_x,pos_y,size_x,size_y,myname,size_x,size_y)
+               self.skin = skin
+               Screen.__init__(self, session)
+
+               self.filelist = MenuList(self.getMenuData())
+               self["menu"] = self.filelist
+               self["actions"] = ActionMap(["WizardActions", "DirectionActions"],
+                       {
+                        "ok": self.go,
+                        "back": self.close,
+                        }, -1)
+               self.onLayoutFinish.append(self.settingTitle)
+
+       def settingTitle(self):
+               self.setTitle(myname + ": " + self.menutitle)
+
+       def go(self):
+               selected = self["menu"].l.getCurrentSelection()[1]
+               menuitemtitle = self["menu"].l.getCurrentSelection()[0]
+               type = selected[0]
+               data = selected[1]
+               if type.startswith("cam"):
+                       self.session.open(PictureScreen, menuitemtitle, data)
+               else:
+                       self.hide()
+                       self.session.openWithCallback(self.cb, WebcamViewer, data)
+
+       def cb(self):
+               self.show()
+
+       def getMenuData(self):
+               xloader = XMLloader()
+               self.menutitle = xloader.getScreenXMLTitle(self.xmlnode)
+               data =[]
+               for node in elementsWithTag(self.xmlnode._get_childNodes(), 'menu'):
+                       nodex = {}
+                       nodex['name'] = xloader.get_txt(node, "name", "no name")
+                       data.append((_("*" + nodex['name']), ["node", node]))
+
+               for node in elementsWithTag(self.xmlnode._get_childNodes(), 'cam'):
+                       nodex = {}
+                       nodex['name'] = xloader.get_txt(node, "name", "no name")
+                       nodex['url'] =xloader.get_txt(node, "url", "no url")
+                       data.append((_(nodex['name']), ["cam", nodex['url']]))
+               return data
 ###################
 
 ##################
 class PictureList(MenuList):
-    def __init__(self, directory, matchingPattern = None, enableWrapAround = False):
-        MenuList.__init__(self, None, enableWrapAround, eListboxPythonMultiContent)
-        self.showDirectories = True
-        self.showFiles = True
-        self.isTop = False
-        self.matchingPattern = matchingPattern
-        self.changeDir(directory)
-        self.l.setFont(0, gFont("Regular", 18))
-        self.currentDir = directory
-
-    def getCurrentDir(self):
-        return self.currentDir
-    
-    def getSelection(self):
-        return self.l.getCurrentSelection()[0]
-    
-    def getFileList(self):
-        return self.list
-    
-    def changeDir(self, directory):
-        self.currentDir = directory
-        self.list = []
-        
-        directories = []
-        files = []
-        files = os.listdir(directory)
-        files.sort()
-        tmpfiles = files[:]
-        for x in tmpfiles:
-            if os.path.isdir(directory +"/"+ x):
-                directories.append(x)
-                files.remove(x)
-        directories.sort()
-        files.sort()
-        if directory != "/" and self.showDirectories and not self.isTop:
-            self.list.append(self.getPictureEntryComponent("..",'/'.join(directory.split('/')[:-2]) + '/',True))
-
-        if self.showDirectories:
-            for x in directories:
-                name = (directory+x).split('/')[-1]
-                self.list.append(self.getPictureEntryComponent(name,'/'.join(directory.split('/')[:-1]) + '/'+x+'/',True))
-
-        if self.showFiles:
-            for x in files:
-                path = directory + x
-                name = x
-                if self.matchingPattern is not None:
-                    if compile(self.matchingPattern).search(path):
-                        self.list.append(self.getPictureEntryComponent(name,path ,False))
-                else:
-                    pass 
-                
-        self.l.setList(self.list)
-        
-    def canDescent(self):
-        return self.getSelection()[1]
-    
-    def descent(self):
-        self.changeDir(self.getSelection()[0])
-        
-    def getFilename(self):
-        return self.getSelection()[0].getPath()
-
-    def getServiceRef(self):
-        return self.getSelection()[0]
-
-    def postWidgetCreate(self, instance):
-        MenuList.postWidgetCreate(self, instance)
-        instance.setItemHeight(23)
-    
-    def getPictureEntryComponent(self,name, absolute, isDir):
-        """ name={angezeigter Name}, absolute={vollstaendiger Pfad}, isDir={True,False} """
-        res = [ (absolute, isDir) ]
-        res.append((eListboxPythonMultiContent.TYPE_TEXT, 35, 1, 200, 20, 0, 0, name))
-        if isDir:
-            png = loadPNG("/usr/share/enigma2/extensions/directory.png")
-        else: 
-            extension = name.split('.')
-            extension = extension[-1].lower()
-            if EXTENSIONS.has_key(extension):
-                png = loadPNG("/usr/share/enigma2/extensions/" + EXTENSIONS[extension] + ".png")
-            else:
-                png = None
-        if png is not None:
-            res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, 10, 2, 20, 20, png))
-        return res
+       def __init__(self, directory, matchingPattern = None, enableWrapAround = False):
+               MenuList.__init__(self, None, enableWrapAround, eListboxPythonMultiContent)
+               self.showDirectories = True
+               self.showFiles = True
+               self.isTop = False
+               self.matchingPattern = matchingPattern
+               self.changeDir(directory)
+               self.l.setFont(0, gFont("Regular", 18))
+               self.currentDir = directory
+
+       def getCurrentDir(self):
+               return self.currentDir
+
+       def getSelection(self):
+               return self.l.getCurrentSelection()[0]
+
+       def getFileList(self):
+               return self.list
+
+       def changeDir(self, directory):
+               self.currentDir = directory
+               self.list = []
+
+               directories = []
+               files = []
+               files = os.listdir(directory)
+               files.sort()
+               tmpfiles = files[:]
+               for x in tmpfiles:
+                       if os.path.isdir(directory + "/" + x):
+                               directories.append(x)
+                               files.remove(x)
+               directories.sort()
+               files.sort()
+               if directory != "/" and self.showDirectories and not self.isTop:
+                       self.list.append(self.getPictureEntryComponent("..", '/'.join(directory.split('/')[:-2]) + '/', True))
+
+               if self.showDirectories:
+                       for x in directories:
+                               name = (directory+x).split('/')[-1]
+                               self.list.append(self.getPictureEntryComponent(name, '/'.join(directory.split('/')[:-1]) + '/' + x + '/', True))
+
+               if self.showFiles:
+                       for x in files:
+                               path = directory + x
+                               name = x
+                               if self.matchingPattern is not None:
+                                       if compile(self.matchingPattern).search(path):
+                                               self.list.append(self.getPictureEntryComponent(name,path, False))
+                               else:
+                                       pass
+
+               self.l.setList(self.list)
+
+       def canDescent(self):
+               return self.getSelection()[1]
+
+       def descent(self):
+               self.changeDir(self.getSelection()[0])
+
+       def getFilename(self):
+               return self.getSelection()[0].getPath()
+
+       def getServiceRef(self):
+               return self.getSelection()[0]
+
+       def postWidgetCreate(self, instance):
+               MenuList.postWidgetCreate(self, instance)
+               instance.setItemHeight(23)
+
+       def getPictureEntryComponent(self,name, absolute, isDir):
+               """ name={angezeigter Name}, absolute={vollstaendiger Pfad}, isDir={True,False} """
+               res = [ (absolute, isDir) ]
+               res.append((eListboxPythonMultiContent.TYPE_TEXT, 35, 1, 200, 20, 0, 0, name))
+               if isDir:
+                       png = loadPNG("/usr/share/enigma2/extensions/directory.png")
+               else:
+                       extension = name.split('.')
+                       extension = extension[-1].lower()
+                       if EXTENSIONS.has_key(extension):
+                               png = loadPNG("/usr/share/enigma2/extensions/" + EXTENSIONS[extension] + ".png")
+                       else:
+                               png = None
+               if png is not None:
+                       res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, 10, 2, 20, 20, png))
+               return res
 
 
 ##################
 class XMLloader:
-    DEFAULT_NAMESPACES = (
-          None, # RSS 0.91, 0.92, 0.93, 0.94, 2.0
-          'http://purl.org/rss/1.0/', # RSS 1.0
-          'http://my.netscape.com/rdf/simple/0.9/' # RSS 0.90
-        )
-    DUBLIN_CORE = ('http://purl.org/dc/elements/1.1/',)
-    def getElementsByTagName( self, node, tagName, possibleNamespaces=DEFAULT_NAMESPACES ):
-        for namespace in possibleNamespaces:
-            children = node.getElementsByTagNameNS(namespace, tagName)
-            if len(children): return children
-        return []
-
-    def node_data( self, node, tagName, possibleNamespaces=DEFAULT_NAMESPACES):
-        children = self.getElementsByTagName(node, tagName, possibleNamespaces)
-        node = len(children) and children[0] or None
-        return node and "".join([child.data.encode("utf-8") for child in node.childNodes]) or None
-
-    def get_txt( self, node, tagName, default_txt="" ):
-        """
-        Liefert den Inhalt >tagName< des >node< zurueck, ist dieser nicht
-        vorhanden, wird >default_txt< zurueck gegeben.
-        """
-        return self.node_data( node, tagName ) or self.node_data( node, tagName, self.DUBLIN_CORE ) or default_txt
-
-    def getScreenXMLTitle( self,node ):
-        return self.get_txt( node, "name", "no title" )
+       DEFAULT_NAMESPACES = (
+                 None, # RSS 0.91, 0.92, 0.93, 0.94, 2.0
+                 'http://purl.org/rss/1.0/', # RSS 1.0
+                 'http://my.netscape.com/rdf/simple/0.9/' # RSS 0.90
+               )
+       DUBLIN_CORE = ('http://purl.org/dc/elements/1.1/',)
+       def getElementsByTagName(self, node, tagName, possibleNamespaces = DEFAULT_NAMESPACES):
+               for namespace in possibleNamespaces:
+                       children = node.getElementsByTagNameNS(namespace, tagName)
+                       if len(children):
+                               return children
+               return []
+
+       def node_data(self, node, tagName, possibleNamespaces = DEFAULT_NAMESPACES):
+               children = self.getElementsByTagName(node, tagName, possibleNamespaces)
+               node = len(children) and children[0] or None
+               return node and "".join([child.data.encode("utf-8") for child in node.childNodes]) or None
+
+       def get_txt(self, node, tagName, default_txt = ""):
+               """
+               Liefert den Inhalt >tagName< des >node< zurueck, ist dieser nicht
+               vorhanden, wird >default_txt< zurueck gegeben.
+               """
+               return self.node_data(node, tagName) or self.node_data(node, tagName, self.DUBLIN_CORE) or default_txt
+
+       def getScreenXMLTitle(self,node):
+               return self.get_txt(node, "name", "no title")
+