PicturePlayer/plugin.py: - center screens where needed.
[vuplus_dvbapp] / lib / python / Plugins / Extensions / PicturePlayer / plugin.py
old mode 100644 (file)
new mode 100755 (executable)
index 10e4e51..3925b07
@@ -6,12 +6,11 @@ from Plugins.Plugin import PluginDescriptor
 
 from Components.Pixmap import Pixmap, MovingPixmap
 from Components.ActionMap import ActionMap, NumberActionMap
-from Components.Label import Label
-from Components.Button import Button
+from Components.Sources.StaticText import StaticText
 from Components.FileList import FileList
 from Components.AVSwitch import AVSwitch
 from Components.Sources.List import List
-from Components.ConfigList import ConfigList
+from Components.ConfigList import ConfigList, ConfigListScreen
 
 from Components.config import config, ConfigSubsection, ConfigInteger, ConfigSelection, ConfigText, ConfigEnableDisable, KEY_LEFT, KEY_RIGHT, KEY_0, getConfigListEntry
 
@@ -30,37 +29,39 @@ config.pic.bgcolor = ConfigSelection(default="#00000000", choices = [("#00000000
 config.pic.textcolor = ConfigSelection(default="#0038FF48", choices = [("#00000000", _("black")),("#009eb9ff", _("blue")),("#00ff5a51", _("red")), ("#00ffe875", _("yellow")), ("#0038FF48", _("green"))])
 
 class picshow(Screen):
-       def __init__(self, session):
-               self.skin = """<screen position="80,80" size="560,440" title="PicturePlayer" >
-                       <ePixmap position="0,0" size="140,40" pixmap="skin_default/buttons/red.png" alphatest="on" />
-                       <ePixmap position="140,0" size="140,40" pixmap="skin_default/buttons/green.png" alphatest="on" />
-                       <ePixmap position="280,0" size="140,40" pixmap="skin_default/buttons/yellow.png" alphatest="on" />
-                       <ePixmap position="420,0" size="140,40" pixmap="skin_default/buttons/blue.png" alphatest="on" />
-                       <widget name="key_red" position="0,0" size="140,40" font="Regular;20" backgroundColor="#9f1313" zPosition="2" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
-                       <widget name="key_green" position="140,0" size="140,40" font="Regular;20" backgroundColor="#1f771f" zPosition="2" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
-                       <widget name="key_yellow" position="280,0" size="140,40" font="Regular;20" backgroundColor="#a08500" zPosition="2" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
-                       <widget name="key_blue" position="420,0" size="140,40" font="Regular;20" backgroundColor="#18188b" zPosition="2" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
-                       <widget name="label" position="5,55" size="350,140" font="Regular;19" />
+       skin = """
+               <screen name="picshow" position="center,center" size="560,440" title="PicturePlayer" >
+                       <ePixmap pixmap="skin_default/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
+                       <ePixmap pixmap="skin_default/buttons/green.png" position="140,0" size="140,40" alphatest="on" />
+                       <ePixmap pixmap="skin_default/buttons/yellow.png" position="280,0" size="140,40" alphatest="on" />
+                       <ePixmap pixmap="skin_default/buttons/blue.png" position="420,0" size="140,40" alphatest="on" />
+                       <widget source="key_red" render="Label" position="0,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
+                       <widget source="key_green" render="Label" position="140,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
+                       <widget source="key_yellow" render="Label" position="280,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" transparent="1" />
+                       <widget source="key_blue" render="Label" position="420,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#18188b" transparent="1" />
+                       <widget source="label" render="Label" position="5,55" size="350,140" font="Regular;19" backgroundColor="#25062748" transparent="1"  />
                        <widget name="thn" position="360,40" size="180,160" alphatest="on" />
                        <widget name="filelist" position="5,205" zPosition="2" size="550,230" scrollbarMode="showOnDemand" />
-                       </screen>"""
+               </screen>"""
 
+       def __init__(self, session):
                Screen.__init__(self, session)
 
                self["actions"] = ActionMap(["OkCancelActions", "ColorActions", "DirectionActions"],
                {
                        "cancel": self.KeyExit,
-                       "red": self.KeyRed,
+                       "red": self.KeyExit,
+                       "green": self.KeyGreen,
                        "yellow": self.KeyYellow,
                        "blue": self.KeyBlue,
                        "ok": self.KeyOk
                }, -1)
 
-               self["key_red"] = Button(_("Thumbnails"))
-               self["key_green"] = Button()
-               self["key_yellow"] = Button(_("Exif"))
-               self["key_blue"] = Button(_("Setup"))
-               self["label"] = Label()
+               self["key_red"] = StaticText(_("Close"))
+               self["key_green"] = StaticText(_("Thumbnails"))
+               self["key_yellow"] = StaticText("")
+               self["key_blue"] = StaticText(_("Setup"))
+               self["label"] = StaticText("")
                self["thn"] = Pixmap()
 
                currDir = config.pic.lastDir.value
@@ -70,13 +71,13 @@ class picshow(Screen):
                self.filelist = FileList(currDir, matchingPattern = "(?i)^.*\.(jpeg|jpg|jpe|png|bmp|gif)")
                self["filelist"] = self.filelist
                self["filelist"].onSelectionChanged.append(self.selectionChanged)
-               
+
                self.ThumbTimer = eTimer()
                self.ThumbTimer.callback.append(self.showThumb)
 
                self.picload = ePicLoad()
                self.picload.PictureData.get().append(self.showPic)
-               
+
                self.onLayoutFinish.append(self.setConf)
 
        def showPic(self, picInfo=""):
@@ -87,8 +88,8 @@ class picshow(Screen):
 
                text = picInfo.split('\n',1)
                self["label"].setText(text[1])
-               self["label"].show()
-               
+               self["key_yellow"].setText(_("Exif"))
+
        def showThumb(self):
                if not self.filelist.canDescent():
                        if self.filelist.getCurrentDirectory() and self.filelist.getFilename():
@@ -99,17 +100,18 @@ class picshow(Screen):
                if not self.filelist.canDescent():
                        self.ThumbTimer.start(500, True)
                else:
-                       self["label"].hide()
+                       self["label"].setText("")
                        self["thn"].hide()
-               
-       def KeyRed(self):
+                       self["key_yellow"].setText("")
+
+       def KeyGreen(self):
                #if not self.filelist.canDescent():
                self.session.openWithCallback(self.callbackView, Pic_Thumb, self.filelist.getFileList(), self.filelist.getSelectionIndex(), self.filelist.getCurrentDirectory())
-       
+
        def KeyYellow(self):
                if not self.filelist.canDescent():
                        self.session.open(Pic_Exif, self.picload.getInfo(self.filelist.getCurrentDirectory() + self.filelist.getFilename()))
-       
+
        def KeyBlue(self):
                self.session.openWithCallback(self.setConf ,Pic_Setup)
 
@@ -120,10 +122,11 @@ class picshow(Screen):
                        self.session.openWithCallback(self.callbackView, Pic_Full_View, self.filelist.getFileList(), self.filelist.getSelectionIndex(), self.filelist.getCurrentDirectory())
 
        def setConf(self):
+               self.setTitle(_("PicturePlayer"))
                sc = getScale()
                #0=Width 1=Height 2=Aspect 3=use_cache 4=resize_type 5=Background(#AARRGGBB)
                self.picload.setPara((self["thn"].instance.size().width(), self["thn"].instance.size().height(), sc[0], sc[1], config.pic.cache.value, int(config.pic.resize.value), "#00000000"))
-               
+
        def callbackView(self, val=0):
                if val > 0:
                        self.filelist.moveToIndex(val)
@@ -139,70 +142,83 @@ class picshow(Screen):
                config.pic.save()
                self.close()
 
-#------------------------------------------------------------------------------------------
 
-class Pic_Setup(Screen):
+class Pic_Setup(Screen, ConfigListScreen):
+       skin = """
+               <screen name="Pic_Setup" position="center,center" size="550,350" title="Settings" >
+                       <ePixmap pixmap="skin_default/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
+                       <ePixmap pixmap="skin_default/buttons/green.png" position="140,0" size="140,40" alphatest="on" />
+                       <widget source="key_red" render="Label" position="0,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
+                       <widget source="key_green" render="Label" position="140,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
+                       <widget name="config" position="5,50" size="540,300" />
+               </screen>"""
        def __init__(self, session):
-               self.skin = """<screen position="120,180" size="480,210" title="Settings" >
-                                       <widget name="liste" position="5,5" size="470,200" />
-                               </screen>"""
                Screen.__init__(self, session)
+               self.session = session
+
+               self["actions"] = ActionMap(["SetupActions", "ColorActions"],
+                       {
+                               "cancel": self.keyCancel,
+                               "save": self.keySave,
+                       }, -2)
+
+               self["key_red"] = StaticText(_("Cancel"))
+               self["key_green"] = StaticText(_("OK"))
+
+               self.list = []
+               ConfigListScreen.__init__(self, self.list, session = self.session)
+               self.createSetup()
+               self.onLayoutFinish.append(self.layoutFinished)
+
+       def layoutFinished(self):
+               self.setTitle(_("Settings"))
+
+       def createSetup(self):
+               self.list = []
+               self.list.append(getConfigListEntry(_("Slideshow Interval (sec.)"), config.pic.slidetime))
+               self.list.append(getConfigListEntry(_("Scaling Mode"), config.pic.resize))
+               self.list.append(getConfigListEntry(_("Cache Thumbnails"), config.pic.cache))
+               self.list.append(getConfigListEntry(_("show Infoline"), config.pic.infoline))
+               self.list.append(getConfigListEntry(_("Frame size in full view"), config.pic.framesize))
+               self.list.append(getConfigListEntry(_("slide picture in loop"), config.pic.loop))
+               self.list.append(getConfigListEntry(_("backgroundcolor"), config.pic.bgcolor))
+               self.list.append(getConfigListEntry(_("textcolor"), config.pic.textcolor))
+               self["config"].list = self.list
+               self["config"].l.setList(self.list)
 
-               self["actions"] = NumberActionMap(["SetupActions"],
-               {
-                       "cancel": self.close,
-                       "left": self.keyLeft,
-                       "right": self.keyRight,
-                       "0": self.keyNumber,
-                       "1": self.keyNumber,
-                       "2": self.keyNumber,
-                       "3": self.keyNumber,
-                       "4": self.keyNumber,
-                       "5": self.keyNumber,
-                       "6": self.keyNumber,
-                       "7": self.keyNumber,
-                       "8": self.keyNumber,
-                       "9": self.keyNumber
-               }, -1)
-               
-               list = []
-               self["liste"] = ConfigList(list)
-               list.append(getConfigListEntry(_("Slideshow Interval (sec.)"), config.pic.slidetime))
-               list.append(getConfigListEntry(_("Scaling Mode"), config.pic.resize))
-               list.append(getConfigListEntry(_("Cache Thumbnails"), config.pic.cache))
-               list.append(getConfigListEntry(_("show Infoline"), config.pic.infoline))
-               list.append(getConfigListEntry(_("Frame size in full view"), config.pic.framesize))
-               list.append(getConfigListEntry(_("slide picture in loop"), config.pic.loop))
-               list.append(getConfigListEntry(_("backgroundcolor"), config.pic.bgcolor))
-               list.append(getConfigListEntry(_("textcolor"), config.pic.textcolor))
-               
        def keyLeft(self):
-               self["liste"].handleKey(KEY_LEFT)
+               ConfigListScreen.keyLeft(self)
 
        def keyRight(self):
-               self["liste"].handleKey(KEY_RIGHT)
-               
-       def keyNumber(self, number):
-               self["liste"].handleKey(KEY_0 + number)
+               ConfigListScreen.keyRight(self)
 
-#---------------------------------------------------------------------------
 
 class Pic_Exif(Screen):
-       def __init__(self, session, exiflist):
-               self.skin = """<screen position="80,120" size="560,360" title="Info" >
-                               <widget source="menu" render="Listbox" position="0,0" size="560,360" scrollbarMode="showOnDemand" selectionDisabled="1" >
+       skin = """
+               <screen name="Pic_Exif" position="center,center" size="560,360" title="Info" >
+                       <ePixmap pixmap="skin_default/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
+                       <widget source="key_red" render="Label" position="0,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
+                       <widget source="menu" render="Listbox" position="5,50" size="550,310" scrollbarMode="showOnDemand" selectionDisabled="1" >
                                <convert type="TemplatedMultiContent">
-                                       {"template": [  MultiContentEntryText(pos = (5, 5), size = (250, 30), flags = RT_HALIGN_LEFT, text = 0), MultiContentEntryText(pos = (260, 5), size = (290, 30), flags = RT_HALIGN_LEFT, text = 1)], "fonts": [gFont("Regular", 20)], "itemHeight": 30 }
+                               {
+                                       "template": [  MultiContentEntryText(pos = (5, 5), size = (250, 30), flags = RT_HALIGN_LEFT, text = 0), MultiContentEntryText(pos = (260, 5), size = (290, 30), flags = RT_HALIGN_LEFT, text = 1)],
+                                       "fonts": [gFont("Regular", 20)],
+                                       "itemHeight": 30
+                               }
                                </convert>
-                               </widget>
-                       </screen>"""
+                       </widget>
+               </screen>"""
+
+       def __init__(self, session, exiflist):
                Screen.__init__(self, session)
 
                self["actions"] = ActionMap(["OkCancelActions"],
                {
                        "cancel": self.close
                }, -1)
-               
+
+               self["key_red"] = StaticText(_("Close"))
+
                exifdesc = [_("filename")+':', "EXIF-Version:", "Make:", "Camera:", "Date/Time:", "Width / Height:", "Flash used:", "Orientation:", "User Comments:", "Metering Mode:", "Exposure Program:", "Light Source:", "CompressedBitsPerPixel:", "ISO Speed Rating:", "X-Resolution:", "Y-Resolution:", "Resolution Unit:", "Brightness:", "Exposure Time:", "Exposure Bias:", "Distance:", "CCD-Width:", "ApertureFNumber:"]
                list = []
 
@@ -213,8 +229,11 @@ class Pic_Exif(Screen):
                                name = exiflist[x].split('/')[-1]
                                list.append((exifdesc[x], name))
                self["menu"] = List(list)
+               self.onLayoutFinish.append(self.layoutFinished)
+
+       def layoutFinished(self):
+               self.setTitle(_("Info"))
 
-#----------------------------------------------------------------------------------------
 
 T_INDEX = 0
 T_FRAME_POS = 1
@@ -252,7 +271,7 @@ class Pic_Thumb(Screen):
                        absX = self.spaceX + (posX*(self.spaceX + self.picX))
                        absY = self.spaceY + (posY*(self.spaceY + self.picY))
                        self.positionlist.append((absX, absY))
-                       skincontent += "<widget name=\"label" + str(x) + "\" position=\"" + str(absX+5) + "," + str(absY+self.picY-textsize) + "\" size=\"" + str(self.picX - 10) + ","  + str(textsize) + "\" font=\"Regular;14\" zPosition=\"2\" transparent=\"1\" noWrap=\"1\" foregroundColor=\"" + self.textcolor + "\" />"
+                       skincontent += "<widget source=\"label" + str(x) + "\" render=\"Label\" position=\"" + str(absX+5) + "," + str(absY+self.picY-textsize) + "\" size=\"" + str(self.picX - 10) + ","  + str(textsize) + "\" font=\"Regular;14\" zPosition=\"2\" transparent=\"1\" noWrap=\"1\" foregroundColor=\"" + self.textcolor + "\" />"
                
                        skincontent += "<widget name=\"thumb" + str(x) + "\" position=\"" + str(absX+5)+ "," + str(absY+5) + "\" size=\"" + str(self.picX -10) + "," + str(self.picY - (textsize*2)) + "\" zPosition=\"2\" transparent=\"1\" alphatest=\"on\" />"
                
@@ -276,7 +295,7 @@ class Pic_Thumb(Screen):
                
                self["frame"] = MovingPixmap()
                for x in range(self.thumbsC):
-                       self["label"+str(x)] = Label()
+                       self["label"+str(x)] = StaticText()
                        self["thumb"+str(x)] = Pixmap()
                        
                self.Thumbnaillist = []
@@ -418,7 +437,7 @@ class Pic_Full_View(Screen):
                        <eLabel position=\"0,0\" zPosition=\"0\" size=\""+ str(size_w) + "," + str(size_h) + "\" backgroundColor=\""+ self.bgcolor +"\" /><widget name=\"pic\" position=\"" + str(space) + "," + str(space) + "\" size=\"" + str(size_w-(space*2)) + "," + str(size_h-(space*2)) + "\" zPosition=\"1\" alphatest=\"on\" /> \
                        <widget name=\"point\" position=\""+ str(space+5) + "," + str(space+2) + "\" size=\"20,20\" zPosition=\"2\" pixmap=\"skin_default/icons/record.png\" alphatest=\"on\" /> \
                        <widget name=\"play_icon\" position=\""+ str(space+25) + "," + str(space+2) + "\" size=\"20,20\" zPosition=\"2\" pixmap=\"skin_default/icons/ico_mp_play.png\"  alphatest=\"on\" /> \
-                       <widget name=\"file\" position=\""+ str(space+45) + "," + str(space) + "\" size=\""+ str(size_w-(space*2)-50) + ",25\" font=\"Regular;20\" halign=\"left\" foregroundColor=\"" + self.textcolor + "\" zPosition=\"2\" noWrap=\"1\" transparent=\"1\" /></screen>"
+                       <widget source=\"file\" render=\"Label\" position=\""+ str(space+45) + "," + str(space) + "\" size=\""+ str(size_w-(space*2)-50) + ",25\" font=\"Regular;20\" halign=\"left\" foregroundColor=\"" + self.textcolor + "\" zPosition=\"2\" noWrap=\"1\" transparent=\"1\" /></screen>"
 
                Screen.__init__(self, session)
                
@@ -437,7 +456,7 @@ class Pic_Full_View(Screen):
                self["point"] = Pixmap()
                self["pic"] = Pixmap()
                self["play_icon"] = Pixmap()
-               self["file"] = Label(_("please wait, loading picture..."))
+               self["file"] = StaticText(_("please wait, loading picture..."))
                
                self.old_index = 0
                self.filelist = []
@@ -480,7 +499,7 @@ class Pic_Full_View(Screen):
                
                self["play_icon"].hide()
                if config.pic.infoline.value == False:
-                       self["file"].hide()
+                       self["file"].setText("")
                self.start_decode()
 
        def ShowPicture(self):