from enigma import ePicLoad, eTimer, getDesktop
from Screens.Screen import Screen
-from Tools.Directories import resolveFilename, pathExists, SCOPE_MEDIA
+from Tools.Directories import resolveFilename, pathExists, fileExists, SCOPE_MEDIA
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
-def getAspectforPic():
+def getScale():
return AVSwitch().getFramebufferScale()
config.pic = ConfigSubsection()
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
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=""):
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.picload.getThumbnail(self.filelist.getCurrentDirectory() + self.filelist.getFilename()) == 1:
- self.ThumbTimer.start(500, True)
+ if self.filelist.getCurrentDirectory() and self.filelist.getFilename():
+ if self.picload.getThumbnail(self.filelist.getCurrentDirectory() + self.filelist.getFilename()) == 1:
+ self.ThumbTimer.start(500, True)
def selectionChanged(self):
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)
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(), getAspectforPic(), config.pic.cache.value, int(config.pic.resize.value), "#00000000"])
-
+ 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)
#------------------------------------------------------------------------------------------
-class Pic_Setup(Screen):
+class Pic_Setup(Screen, ConfigListScreen):
+
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)
+ # for the skin: first try MediaPlayerSettings, then Setup, this allows individual skinning
+ self.skinName = ["PicturePlayerSetup", "Setup" ]
+ self.setup_title = _("Settings")
+ self.onChangedEntry = [ ]
+ self.session = session
+
+ self["actions"] = ActionMap(["SetupActions"],
+ {
+ "cancel": self.keyCancel,
+ "save": self.keySave,
+ "ok": self.keySave,
+ }, -2)
+
+ self["key_red"] = StaticText(_("Cancel"))
+ self["key_green"] = StaticText(_("OK"))
+
+ self.list = []
+ ConfigListScreen.__init__(self, self.list, session = self.session, on_change = self.changedEntry)
+ self.createSetup()
+ self.onLayoutFinish.append(self.layoutFinished)
+
+ def layoutFinished(self):
+ self.setTitle(self.setup_title)
+
+ 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)
+
+ # for summary:
+ def changedEntry(self):
+ for x in self.onChangedEntry:
+ x()
+
+ def getCurrentEntry(self):
+ return self["config"].getCurrent()[0]
+
+ def getCurrentValue(self):
+ return str(self["config"].getCurrent()[1].getText())
+
+ def createSummary(self):
+ from Screens.Setup import SetupSummary
+ return SetupSummary
#---------------------------------------------------------------------------
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"],
+ self["actions"] = ActionMap(["SetupActions", "ColorActions"],
{
"cancel": self.close
}, -1)
-
- 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:"]
+
+ 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 = []
for x in range(len(exiflist)):
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"))
#----------------------------------------------------------------------------------------
self.picX = 190
self.spaceY = 30
self.picY = 200
-
+
size_w = getDesktop(0).size().width()
size_h = getDesktop(0).size().height()
self.thumbsX = size_w / (self.spaceX + self.picX) # thumbnails in X
self.thumbsY = size_h / (self.spaceY + self.picY) # thumbnails in Y
self.thumbsC = self.thumbsX * self.thumbsY # all thumbnails
-
+
self.positionlist = []
skincontent = ""
posX += 1
if posX >= self.thumbsX:
posX = 0
-
+
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\" />"
-
-
+
# Screen, backgroundlabel and MovingPixmap
self.skin = "<screen position=\"0,0\" size=\"" + str(size_w) + "," + str(size_h) + "\" flags=\"wfNoBorder\" > \
<eLabel position=\"0,0\" zPosition=\"0\" size=\""+ str(size_w) + "," + str(size_h) + "\" backgroundColor=\"" + self.color + "\" /><widget name=\"frame\" position=\"35,30\" size=\"190,200\" pixmap=\"pic_frame.png\" zPosition=\"1\" alphatest=\"on\" />" + skincontent + "</screen>"
-
+
Screen.__init__(self, session)
-
+
self["actions"] = ActionMap(["OkCancelActions", "ColorActions", "DirectionActions", "MovieSelectionActions"],
{
"cancel": self.Exit,
"down": self.key_down,
"showEventInfo": self.StartExif,
}, -1)
-
+
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 = []
self.filelist = []
self.currPage = -1
Page += 1
else:
self.dirlistcount += 1
-
+
self.maxentry = len(self.filelist)-1
self.index = lastindex - self.dirlistcount
if self.index < 0:
self.picload = ePicLoad()
self.picload.PictureData.get().append(self.showPic)
-
+
self.onLayoutFinish.append(self.setPicloadConf)
-
+
self.ThumbTimer = eTimer()
self.ThumbTimer.callback.append(self.showPic)
def setPicloadConf(self):
- self.picload.setPara([self["thumb0"].instance.size().width(), self["thumb0"].instance.size().height(), getAspectforPic(), config.pic.cache.value, int(config.pic.resize.value), self.color])
+ sc = getScale()
+ self.picload.setPara([self["thumb0"].instance.size().width(), self["thumb0"].instance.size().height(), sc[0], sc[1], config.pic.cache.value, int(config.pic.resize.value), self.color])
self.paintFrame()
-
-
+
def paintFrame(self):
#print "index=" + str(self.index)
if self.maxentry < self.index or self.index < 0:
pos = self.positionlist[self.filelist[self.index][T_FRAME_POS]]
self["frame"].moveTo( pos[0], pos[1], 1)
self["frame"].startMoving()
-
+
if self.currPage != self.filelist[self.index][T_PAGE]:
self.currPage = self.filelist[self.index][T_PAGE]
self.newPage()
if x[T_PAGE] == self.currPage:
self["label"+str(x[T_FRAME_POS])].setText("(" + str(x[T_INDEX]+1) + ") " + x[T_NAME])
self.Thumbnaillist.append([0, x[T_FRAME_POS], x[T_FULL]])
-
+
#paint Thumbnail start
self.showPic()
if self.index < 0:
self.index = self.maxentry
self.paintFrame()
-
+
def key_right(self):
self.index += 1
if self.index > self.maxentry:
self.index = 0
self.paintFrame()
-
+
def key_up(self):
self.index -= self.thumbsX
if self.index < 0:
self.index =self.maxentry
self.paintFrame()
-
+
def key_down(self):
self.index += self.thumbsX
if self.index > self.maxentry:
space = config.pic.framesize.value
size_w = getDesktop(0).size().width()
size_h = getDesktop(0).size().height()
-
+
self.skin = "<screen position=\"0,0\" size=\"" + str(size_w) + "," + str(size_h) + "\" flags=\"wfNoBorder\" > \
<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)
-
+
self["actions"] = ActionMap(["OkCancelActions", "ColorActions", "DirectionActions", "MovieSelectionActions"],
{
"cancel": self.Exit,
"right": self.nextPic,
"showEventInfo": self.StartExif,
}, -1)
-
+
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 = []
self.lastindex = index
self.filelist.append(path + x[0][0])
else:
self.dirlistcount += 1
+ elif len(filelist[0]) == 2: #scanlist
+ if x[0][1] == False:
+ self.filelist.append(x[0][0])
+ else:
+ self.dirlistcount += 1
else: # thumbnaillist
self.filelist.append(x[T_FULL])
self.index = index - self.dirlistcount
if self.index < 0:
self.index = 0
-
+
self.picload = ePicLoad()
self.picload.PictureData.get().append(self.finish_decode)
-
+
self.slideTimer = eTimer()
self.slideTimer.callback.append(self.slidePic)
self.onLayoutFinish.append(self.setPicloadConf)
def setPicloadConf(self):
- self.picload.setPara([self["pic"].instance.size().width(), self["pic"].instance.size().height(), getAspectforPic(), 0, int(config.pic.resize.value), self.bgcolor])
-
+ sc = getScale()
+ self.picload.setPara([self["pic"].instance.size().width(), self["pic"].instance.size().height(), sc[0], sc[1], 0, int(config.pic.resize.value), self.bgcolor])
+
self["play_icon"].hide()
if config.pic.infoline.value == False:
- self["file"].hide()
+ self["file"].setText("")
self.start_decode()
def ShowPicture(self):
self.lastindex = self.currPic[1]
self["pic"].instance.setPixmap(self.currPic[2].__deref__())
self.currPic = []
-
+
self.next()
self.start_decode()
-
+
def finish_decode(self, picInfo=""):
self["point"].hide()
ptr = self.picload.getData()
def nextPic(self):
self.shownow = True
self.ShowPicture()
-
+
def StartExif(self):
if self.maxentry < 0:
return
ScanPath(path = "", with_subdirs = False),
],
name = "Pictures",
- description = "View Photos...",
+ description = _("View Photos..."),
openfnc = filescan_open,
)