Ejemplo n.º 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)
Ejemplo n.º 2
0
class SimpleUPnPBrowser(Screen):
	skin = """
		<screen position="center,center" size="600,475"  title="UPnP Demo-Browser" >
			<widget name="list" position="10,5" size="580,410" scrollbarMode="showOnDemand"/>
		</screen>"""

	def __init__(self, session, enableWrapAround = True):
		Screen.__init__(self, session)
		self.list = MenuList([], enableWrapAround, eListboxPythonMultiContent)
		self.list.l.setFont(0, gFont("Regular", 18))
		self.list.l.setItemHeight(23)

		self["list"] = self.list
		self.browser = UPnPBrowser()

		self["actions"] = ActionMap(["ListboxActions", "OkCancelActions", "ColorActions"],
		{
			"ok" : self.ok,
			"cancel" : self.close,
			"moveUp" : self.moveUp,
			"moveDown" : self.moveDown,
			"pageUp" : self.pageUp,
			"pageDown" : self.pageDown,
		});

		self.browser.onMediaServerDetected.append(self._onMediaServerDetected)
		self.browser.onListReady.append(self._onListReady)
		self.onShow.append( self.__onShow )
		self.onClose.append(self.__onClose)

	def __onShow(self):
		self.browser.browse()

	def __onClose(self):
		self.browser.onMediaServerDetected.remove(self._onMediaServerDetected)
		self.browser.onListReady.remove(self._onListReady)

	def ok(self):
		if self.list.getSelectedIndex() == 0 and self.browser.canAscend():
			print "[SimpleUPnPBrowser].ok can Ascend"
			return self.browser.ascend()

		else:
			item = self.getSelection()[0]
			if item != None:
				if self.browser.canDescend(item):
					self.browser.descend(item)
				else:
					clients = self.browser.controlPoint.getRenderingControlClientList()
					list = [(_("Local"), "local", None, item)] #( Name, UUID, instance )
					for client in clients:
						c = UPnPMediaRenderingControlClient(client)
						devicename = c.getDeviceName()
						list.append( (str(devicename), "remote", c, item) )
					if len(list) > 1:
						self.session.openWithCallback(self.__onRendererSelected, ChoiceBox, title=_("Where do you want to play this?"), list = list)
					else:
						self.__onRendererSelected(list[0])

	def __onRendererSelected(self, selection):
		if selection:
			client = selection[2]
			item = selection[3]
			meta = self.browser.getItemMetadata(item)

			if selection[1] == "local":
				service = eServiceReference(4097,0, meta[Statics.META_URI])
				service.setName(meta[Statics.META_TITLE])
				self.session.nav.playService(service)
			else:
				client.setMediaUri(uri = meta[Statics.META_URI])
				client.play()

	def getSelection(self):
		if self.list.l.getCurrentSelection() is None:
			return None
		return self.list.l.getCurrentSelection()[0]

	def moveUp(self):
		self.list.up()

	def moveDown(self):
		self.list.down()

	def pageUp(self):
		self.list.pageUp()

	def pageDown(self):
		self.list.pageDown()

	def _onMediaServerDetected(self, udn, client):
		#If we cannot ascend anymore we are showing the server list
		#that's the only point where we want to react immediately on server list updates
		if not self.browser.canAscend():
			self._onListReady(self.browser.getList())

	def _onListReady(self, list):
		print "[SimpleUPnPBrowser]._onListReady: got %s items" %(len(list))
		l = []
		if self.browser.canAscend():
			l.append(UPnPEntryComponent( _("[up]") ))
		for item in list:
			l.append(UPnPEntryComponent( self.browser.getItemTitle(item), item, self.browser.getItemType(item) ))

		self.list.l.setList(l)