Пример #1
0
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)
Пример #2
0
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()