class PictureViewer(Screen): 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="275,1" size="275,200" backgroundColor="red" /> <widget name="slist" position="275,200" size="275,200" scrollbarMode="showOnDemand" /> <widget name="key_red" position="6,405" size="130,40" backgroundColor="red" valign="center" halign="center" zPosition="2" foregroundColor="white" font="Regular;18" /> <widget name="key_green" position="142,405" size="130,40" backgroundColor="green" valign="center" halign="center" zPosition="2" foregroundColor="white" font="Regular;18" /> <widget name="key_yellow" position="278,405" size="130,40" backgroundColor="yellow" valign="center" halign="center" zPosition="2" foregroundColor="white" font="Regular;18" /> <widget name="key_blue" 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.preview = Pixmap() self["pixmap"] = self.preview self.slideshowfiles = [] self.slideshowlist =MenuList(self.slideshowfiles) self["slist"] = self.slideshowlist self["key_red"] = Label("") self["key_green"] = Label("") self["key_yellow"] = Label("") self["key_blue"] = 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 as e: print("["+myname+"] IOError:", e) except OSError as 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 as 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 as 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["key_red"].setText("speichern") self["key_green"].setText("laden") self["key_yellow"].setText("loeschen") self["key_blue"].setText("Dateien") self.currList = "slideshowlist" else: # filelist activieren self.filelist.selectionEnabled(1) self.slideshowlist.selectionEnabled(0) self["key_red"].setText("starte Slideshow") self["key_green"].setText("alle hinzufuegen") self["key_yellow"].setText("hinzufuegen") self["key_blue"].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] sc=AVSwitch().getFramebufferScale() self.picload = ePicLoad() self.picload.PictureData.get().append(self.updateInfoPanelCB) self.picload.setPara((self["pixmap"].instance.size().width(), self["pixmap"].instance.size().height(), sc[0], sc[1], False, 1, "#FF000000")) self.picload.startDecode(selectedfile) def updateInfoPanelCB(self, picInfo = None): ptr = self.picload.getData() if ptr is not None: self["pixmap"].instance.setPixmap(ptr) else: pass def output(self, str): print("+" * 10, str) def openMenu(self): self.session.open(WebcamViewerMenu)
class epgShareScreen(Screen): skin = """ <screen name="EPG Share" title="EPG Share" position="center,center" size="1280,720"> <widget name="info" position="10,10" size="600,50" zPosition="5" transparent="0" halign="left" valign="top" font="Regular; 30" /> <widget name="list" position="10,80" size="1260,570" scrollbarMode="showOnDemand" scrollbarSliderBorderWidth="0" scrollbarWidth="5" scrollbarBackgroundPicture="/usr/lib/enigma2/python/Plugins/Extensions/EpgShare/pic/scrollbarbg.png" /> <widget name="key_red" position="99,680" size="265,30" zPosition="1" font="Regular;22" halign="left" foregroundColor="#00ffffff" transparent="0" /> <widget name="key_green" position="411,680" size="265,30" zPosition="1" font="Regular;22" halign="left" foregroundColor="#00ffffff" transparent="0" /> <widget name="key_yellow" position="761,680" size="265,30" zPosition="1" font="Regular;22" halign="left" foregroundColor="#00ffffff" transparent="0" /> <widget name="key_blue" position="1073,680" size="200,30" zPosition="1" font="Regular;22" halign="left" foregroundColor="#00ffffff" transparent="0" /> <ePixmap position="59,684" size="25,25" zPosition="-1" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/EpgShare/pic/button_red.png" alphatest="on" /> <ePixmap position="374,684" size="25,25" zPosition="-1" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/EpgShare/pic/button_green.png" alphatest="on" /> <ePixmap position="726,684" size="25,25" zPosition="-1" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/EpgShare/pic/button_yellow.png" alphatest="on" /> <ePixmap position="1037,684" size="25,25" zPosition="-1" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/EpgShare/pic/button_blue.png" alphatest="on" /> </screen>""" def __init__(self, session): self.session = session Screen.__init__(self, session) self["actions"] = ActionMap( [ "OkCancelActions", "ShortcutActions", "WizardActions", "ColorActions", "SetupActions", "NumberActions", "MenuActions", "EPGSelectActions" ], { "cancel": self.keyCancel, "red": self.keyCancel, "yellow": self.keyRun, "blue": self.keyConfig }, -1) self.chooseMenuList = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent) font, size = skin.parameters.get("EPGShareListFont", ('Regular', 20)) self.itemheight = int( skin.parameters.get("EPGShareListItemHeight", (38, ))[0]) self.listwidth = int( skin.parameters.get("EPGShareListWidth", (1260, ))[0]) self.chooseMenuList.l.setFont(0, gFont(font, int(size))) self.chooseMenuList.l.setItemHeight(self.itemheight) self.chooseMenuList.selectionEnabled(False) self['info'] = Label(_("Info")) self['list'] = self.chooseMenuList self['key_red'] = Label(_("Exit")) self['key_green'] = Label(_(" ")) self['key_yellow'] = Label(_("EPG Download")) self['key_blue'] = Label(_("Einstellungen")) self.list = [] self.onLayoutFinish.append(self.startrun) def startrun(self): self.onLayoutFinish.remove(self.startrun) global epgDownloadThread if not epgDownloadThread is None: self.isEpgDownload = True epgDownloadThread.setCallback(self.callbacks) if epgDownloadThread.isRunning: self['key_yellow'].hide() else: self.isEpgDownload = False def callbacks(self, text): if text == "EPG Download beendet.": self['key_yellow'].show() self.isEpgDownload = False self.showInfo(text) def showInfo(self, text): try: self.list.insert(0, text) self.chooseMenuList.setList(map(self.showList, self.list)) except: pass def showList(self, entry): return [ entry, (eListboxPythonMultiContent.TYPE_TEXT, 10, 0, self.listwidth - 20, self.itemheight, 0, RT_HALIGN_LEFT | RT_VALIGN_CENTER, entry) ] def keyConfig(self): self.session.open(epgShareSetup) def keyRun(self): canrun = False global epgDownloadThread if epgDownloadThread is None: epgDownloadThread = epgShareDownload(self.session, True) canrun = True else: if not epgDownloadThread.isRunning: epgDownloadThread = None epgDownloadThread = epgShareDownload(self.session, True) canrun = True else: epgDownloadThread.setCallback(self.callbacks) self['key_yellow'].hide() if canrun: self.list = [] self.isEpgDownload = True epgDownloadThread.setCallback(self.callbacks) epgDownloadThread.start() self['key_yellow'].hide() def keyCancel(self): if self.isEpgDownload: global epgDownloadThread self.isEpgDownload = False if not epgDownloadThread is None: epgDownloadThread.setCallback(None) self.close()