def runMenuEntry(self): selection = self["filelist"].getSelection() if selection is None: return elif selection[1] == True: # isDir if selection[0] is not None and self.filelist.getCurrentDirectory() is not None and \ len(selection[0]) > len(self.filelist.getCurrentDirectory()) or self.LastFolderSelected == None: self.LastFolderSelected = selection[0] self["filelist"].changeDir(selection[0], "FakeFolderName") else: print "Folder Down" self["filelist"].changeDir(selection[0], self.LastFolderSelected) return else: #file selected d = self.filelist.getCurrentDirectory() if d is None: d="" elif not d.endswith('/'): d +='/' f = self.filelist.getFilename() printDEBUG("self.selectFile>> " + d + f) if path.exists(self.UserSkin_Selections_dir + f): remove(self.UserSkin_Selections_dir + f) else: try: symlink(d + f, self.UserSkin_Selections_dir + f) except: system('ln -sf %s %s' %(d + f,self.UserSkin_Selections_dir + f)) self.__refreshList()
def doExportAction(self, what): printDEBUG('doExportAction') def SaveWidget(WidgetFile = None): if WidgetFile is not None: if not WidgetFile.endswith('.xml'): WidgetFile += '.xml' WidgetPathName = path.dirname(self.ScreenFile).replace('allScreens','allWidgets') if not path.exists(WidgetPathName): mkdir(WidgetPathName) printDEBUG("Writing %s/%s" % (WidgetPathName,WidgetFile)) with open("%s/%s" % (WidgetPathName, WidgetFile), "w") as f: f.write(ET.tostring(self.root[0][self["menu"].getIndex()])) myText=self.root[0][what].tag if 'name' in self.root[0][what].attrib: myText += '_' + self.root[0][what].attrib['name'] if 'text' in self.root[0][what].attrib: myText += '_' + self.root[0][what].attrib['text'] if 'render' in self.root[0][what].attrib: myText += '_' + self.root[0][what].attrib['render'] if 'source' in self.root[0][what].attrib: myText += '_' + self.root[0][what].attrib['source'] from Screens.VirtualKeyBoard import VirtualKeyBoard self.session.openWithCallback(SaveWidget, VirtualKeyBoard, title=(_("Enter filename")), text = myText.replace('.','-'))
def setWigetPixMapPictureInScale(self, myIndex, myWidget = "WigetPixMapPictureInScale", myWidgetFile = 'widgetmarker.png' ): if not 'position' in self.root[self.currentScreenID][myIndex].attrib: self[myWidget].hide() return elif not 'size' in self.root[self.currentScreenID][myIndex].attrib: self[myWidget].hide() return elif not 'pixmap' in self.root[self.currentScreenID][myIndex].attrib: if path.exists("%sAtileHDpics/%s" % (SkinPath, myWidgetFile) ): pic = "%sAtileHDpics/%s" % (SkinPath, myWidgetFile) else: pic = "%spic/edit/%s" % (PluginPath, myWidgetFile) else: pic = resolveFilename(SCOPE_SKIN, self.root[self.currentScreenID][myIndex].attrib['pixmap'] ) #position="x,y" size="x,y" printDEBUG("setWigetPixMapPictureInScale, pic=%s" % pic) WidgetPosition=self.root[self.currentScreenID][myIndex].attrib['position'].split(',') WidgetSize=self.root[self.currentScreenID][myIndex].attrib['size'].split(',') if WidgetPosition[0] == 'center': WidgetPosition[0] = self.currentWidth/2 - int(WidgetSize[0])/2 if WidgetPosition[1] == 'center': WidgetPosition[1] = self.currentHeight/2 - int(WidgetSize[1])/2 if path.exists(pic): self[myWidget].instance.resize(eSize(int(int(WidgetSize[0])*self.WidgetPreviewScale) , int(int(WidgetSize[1])*self.WidgetPreviewScale) )) self[myWidget].instance.setScale(1) self[myWidget].instance.setPixmapFromFile(pic) self[myWidget].show() self[myWidget].instance.move(ePoint(int(int(WidgetPosition[0])*self.WidgetPreviewScale) + self.WidgetPreviewX , \ int(int(WidgetPosition[1])*self.WidgetPreviewScale + self.WidgetPreviewY))) else: self[myWidget].hide()
def update_user_skin(self): #print "[UserSkin} update_user_skin" if self.isVTI == True: #jesli mamy VTI, to nie musimy robic pliku return user_skin_file=resolveFilename(SCOPE_CONFIG, 'skin_user' + self.currentSkin + '.xml') if path.exists(user_skin_file): remove(user_skin_file) if self.myUserSkin_active.value: printDEBUG("update_user_skin.self.myUserSkin_active.value") user_skin = "" if path.exists(self.skin_base_dir + 'skin_user_header.xml'): user_skin = user_skin + self.readXMLfile(self.skin_base_dir + 'skin_user_header.xml' , 'fonts') if path.exists(self.skin_base_dir + 'skin_user_colors.xml'): user_skin = user_skin + self.readXMLfile(self.skin_base_dir + 'skin_user_colors.xml' , 'ALLSECTIONS') if path.exists(self.skin_base_dir + 'skin_user_window.xml'): user_skin = user_skin + self.readXMLfile(self.skin_base_dir + 'skin_user_window.xml' , 'ALLSECTIONS') if path.exists(self.skin_base_dir + 'mySkin'): for f in listdir(self.skin_base_dir + "mySkin/"): user_skin = user_skin + self.readXMLfile(self.skin_base_dir + "mySkin/" + f, 'screen') if user_skin != '': user_skin = "<skin>\n" + user_skin user_skin = user_skin + "</skin>\n" with open (user_skin_file, "w") as myFile: printDEBUG("update_user_skin.self.myUserSkin_active.value write myFile") myFile.write(user_skin) myFile.flush() myFile.close() #checking if all renderers are in system self.checkComponent(user_skin, 'render' , resolveFilename(SCOPE_PLUGINS, '../Components/Renderer/') ) self.checkComponent(user_skin, 'pixmap' , resolveFilename(SCOPE_SKIN, '') )
def readXMLfile(self, XMLfilename, XMLsection): #sections:ALLSECTIONS|fonts| myPath=path.realpath(XMLfilename) if not path.exists(myPath): remove(XMLfilename) return '' filecontent = '' if XMLsection == 'ALLSECTIONS': sectionmarker = True else: sectionmarker = False with open (XMLfilename, "r") as myFile: lineNo = 0 for line in myFile: lineNo += 1 if line.find('<skin>') != -1 or line.find('</skin>') != -1: continue if line.find('<%s' % XMLsection) != -1 and sectionmarker == False: printDEBUG('<%s marker found at %s' % (XMLsection, lineNo)) sectionmarker = True if line.find('</%s>' %XMLsection) != -1 and sectionmarker == True: printDEBUG('</%s> marker found at %s' % (XMLsection, lineNo)) sectionmarker = False filecontent = filecontent + line if sectionmarker == True: filecontent = filecontent + line myFile.close() return filecontent
def keyBlue(self): selection = self["filelist"].getSelection() if selection is None or selection[1] == True: # isDir return if path.exists(self.filelist.getCurrentDirectory() + '/' + self.filelist.getFilename()): import xml.etree.cElementTree as ET root = ET.parse(self.filelist.getCurrentDirectory() + '/' + self.filelist.getFilename()).getroot() NumberOfScreens = len(root.findall('screen')) if NumberOfScreens == 1: self.keyBlueRet( ('First screen',1) ) elif NumberOfScreens > 1: from Screens.ChoiceBox import ChoiceBox NumberOfChilds = len(root.findall('*')) currentScreenID = 0 childID = 0 screensList = [] while childID < NumberOfChilds: if root[childID].tag == 'screen': try: currentScreenID += 1 screensList.append((root[childID].attrib['name'], currentScreenID)) except Exception, e: printDEBUG("Exception:" + str(e)) childID += 1 if len(screensList) > 0: self.session.openWithCallback(self.keyBlueRet, ChoiceBox, title = _("Select screen:"), list = screensList)
def setWigetPixMapPictureInScale(self, myIndex, myWidget = "WigetPixMapPictureInScale", myWidgetFile = 'widgetmarker.png' ): if not 'position' in self.root[self.currentScreenID][myIndex].attrib: self[myWidget].hide() return elif not 'size' in self.root[self.currentScreenID][myIndex].attrib: self[myWidget].hide() return elif not 'pixmap' in self.root[self.currentScreenID][myIndex].attrib: if path.exists("%sUserSkinpics/%s" % (SkinPath, myWidgetFile) ): pic = "%sUserSkinpics/%s" % (SkinPath, myWidgetFile) else: pic = "%spic/edit/%s" % (PluginPath, myWidgetFile) else: pic = resolveFilename(SCOPE_SKIN, self.root[self.currentScreenID][myIndex].attrib['pixmap'] ) #position="x,y" size="x,y" printDEBUG("setWigetPixMapPictureInScale, pic=%s" % pic) WidgetPosition=self.root[self.currentScreenID][myIndex].attrib['position'].split(',') WidgetSize=self.root[self.currentScreenID][myIndex].attrib['size'].split(',') if WidgetPosition[0] == 'center': WidgetPosition[0] = self.currentWidth/2 - int(WidgetSize[0])/2 if WidgetPosition[1] == 'center': WidgetPosition[1] = self.currentHeight/2 - int(WidgetSize[1])/2 if path.exists(pic): self[myWidget].instance.resize(eSize(int(int(WidgetSize[0])*self.WidgetPreviewScale) , int(int(WidgetSize[1])*self.WidgetPreviewScale) )) self[myWidget].instance.setScale(1) self[myWidget].instance.setPixmapFromFile(pic) self[myWidget].show() self[myWidget].instance.move(ePoint(int(int(WidgetPosition[0])*self.WidgetPreviewScale) + self.WidgetPreviewX , \ int(int(WidgetPosition[1])*self.WidgetPreviewScale + self.WidgetPreviewY))) else: self[myWidget].hide()
def restartGUI(self): def restartGUIcb(answer): if answer is True: self.session.open(TryQuitMainloop, 3) else: self.close() def restartNotOKcb(answer): if answer is True: self.session.open(TryQuitMainloop, 3) else: user_skin_file=resolveFilename(SCOPE_CONFIG, 'skin_user' + self.currentSkin + '.xml') if path.exists(user_skin_file): remove(user_skin_file) self.close() myMessage = '' if self.LackOfFile != '': printDEBUG("missing components: %s" % self.LackOfFile) myMessage += _("Missing components found: %s\n\n") % self.LackOfFile myMessage += _("Skin will NOT work properly and GS expected!!!\n\n") myMessage += _("Are you sure you want to use it?") restartbox = self.session.openWithCallback(restartNotOKcb,MessageBox, myMessage, MessageBox.TYPE_YESNO, default = False) else: myMessage += _("Restart GUI now?") restartbox = self.session.openWithCallback(restartGUIcb,MessageBox, myMessage, MessageBox.TYPE_YESNO, default = False) restartbox.setTitle(_("Message"))
def buildList(self, xml): if DBG: printDEBUG('MSNWeatherSearchResultList:buildList(%s)' % xml,'>>>') root = cet_fromstring(xml) searchlocation = "" weatherlocationcode = "" weatherSearchFullName = "" geolatitude = "" geolongitude = "" list = [] for childs in root: if childs.tag == "weather": weatherlocationcode = childs.attrib.get("weatherlocationcode").encode("utf-8", 'ignore') searchlocation = childs.attrib.get("weatherlocationname").encode("utf-8", 'ignore') weatherSearchFullName = childs.attrib.get("weatherfullname").encode("utf-8", 'ignore') geolatitude = childs.attrib.get("lat").encode("utf-8", 'ignore') geolongitude = childs.attrib.get("long").encode("utf-8", 'ignore') res = [ (weatherlocationcode, searchlocation, weatherSearchFullName, geolatitude, geolongitude), (eListboxPythonMultiContent.TYPE_TEXT, self.DimText0[0], self.DimText0[1], self.DimText0[2], self.DimText0[3], self.DimText0[4], RT_HALIGN_LEFT|RT_VALIGN_CENTER, searchlocation), (eListboxPythonMultiContent.TYPE_TEXT, self.DimText1[0], self.DimText1[1], self.DimText1[2], self.DimText1[3], self.DimText1[4], RT_HALIGN_LEFT|RT_VALIGN_CENTER, '%s , (lat=%s, long=%s)' % (weatherSearchFullName, geolatitude, geolongitude)), ] list.append(res) self.list = list self.l.setList(list) self.moveToIndex(0)
def doExportAction(self, what): printDEBUG('doExportAction') def SaveWidget(WidgetFile=None): if WidgetFile is not None: if not WidgetFile.endswith('.xml'): WidgetFile += '.xml' WidgetPathName = path.dirname(self.ScreenFile).replace( 'allScreens', 'allWidgets') if not path.exists(WidgetPathName): mkdir(WidgetPathName) printDEBUG("Writing %s/%s" % (WidgetPathName, WidgetFile)) with open("%s/%s" % (WidgetPathName, WidgetFile), "w") as f: f.write(ET.tostring(self.root[0][self["menu"].getIndex()])) myText = self.root[0][what].tag if 'name' in self.root[0][what].attrib: myText += '_' + self.root[0][what].attrib['name'] if 'text' in self.root[0][what].attrib: myText += '_' + self.root[0][what].attrib['text'] if 'render' in self.root[0][what].attrib: myText += '_' + self.root[0][what].attrib['render'] if 'source' in self.root[0][what].attrib: myText += '_' + self.root[0][what].attrib['source'] from Screens.VirtualKeyBoard import VirtualKeyBoard self.session.openWithCallback(SaveWidget, VirtualKeyBoard, title=(_("Enter filename")), text=myText.replace('.', '-'))
def checkComponent(self, myContent, look4Component , myPath): #look4Component=render| def updateLackOfFile(name, mySeparator =', '): printDEBUG("Missing component found:%s\n" % name) if self.LackOfFile == '': self.LackOfFile = name else: self.LackOfFile += mySeparator + name r=re.findall( r' %s="([a-zA-Z0-9_/\.]+)" ' % look4Component , myContent ) r=list(set(r)) #remove duplicates, no need to check for the same component several times printDEBUG("Found %s:\n" % (look4Component)) print r if r: for myComponent in set(r): #print" [UserSkin] checks if %s exists" % myComponent if look4Component == 'pixmap': #printDEBUG("%s\n%s\n" % (myComponent,myPath + myComponent)) if myComponent.startswith('/'): if not path.exists(myComponent): updateLackOfFile(myComponent, '\n') else: if not path.exists(myPath + myComponent): updateLackOfFile(myComponent) else: if not path.exists(myPath + myComponent + ".pyo") and not path.exists(myPath + myComponent + ".py"): updateLackOfFile(myComponent) return
def keyOk(self): if self["config"].isChanged() or self.updateEntries == True: printDEBUG("[UserSkin:keyOk] self.myUserSkin_font.value=" + self.myUserSkin_font.value) printDEBUG("[UserSkin:keyOk] self.myUserSkin_style.value=" + self.myUserSkin_style.value) printDEBUG("[UserSkin:keyOk] self.myUserSkin_bar.value=" + self.myUserSkin_bar.value) for x in self["config"].list: x[1].save() configfile.save() #Zmieniamy katalog na ten wtyczki chdir(self.skin_base_dir) #FONTS if path.exists(self.user_font_file): remove(self.user_font_file) elif path.islink(self.user_font_file): remove(self.user_font_file) if path.exists('allFonts/' + self.myUserSkin_font.value): symlink('allFonts/' + self.myUserSkin_font.value, self.user_font_file) #COLORS if path.exists(self.color_file): remove(self.color_file) elif path.islink(self.color_file): remove(self.color_file) if path.exists("allColors/" + self.myUserSkin_style.value): symlink("allColors/" + self.myUserSkin_style.value, self.color_file) #SELECTOR if path.exists(self.user_bar_link): remove(self.user_bar_link) elif path.islink(self.user_bar_link): remove(self.user_bar_link) if path.exists("allBars/" + self.myUserSkin_bar.value): symlink("allBars/" + self.myUserSkin_bar.value , self.user_bar_link) sourcePath = path.join(self.skin_base_dir , self.user_bar_link) destFolder = self.myUserSkin_bar.value.split(".", 1)[1] destPath = path.join(self.skin_base_dir , destFolder) printDEBUG("[UserSkin:keyOk]cp -fr %s %s" % (sourcePath,destPath)) with open("/proc/sys/vm/drop_caches", "w") as f: f.write("1\n") printDEBUG("[UserSkin:keyOk]cp -fr %s/* %s/" % (sourcePath,destPath)) system("cp -fr %s/* %s/" %(sourcePath,destPath)) #dla bezpieczenstwa, obsluguje zgrabnie overwrite ;) #SCREENS if self.myUserSkin_active.value: if not path.exists("mySkin") and path.exists("UserSkin_Selections"): symlink("UserSkin_Selections","mySkin") else: if path.exists("mySkin"): if path.exists("UserSkin_Selections"): if path.islink("mySkin"): remove("mySkin") else: shutil.rmtree("mySkin") else: rename("mySkin", "UserSkin_Selections") self.update_user_skin() self.restartGUI() else: if self.changed_screens: self.update_user_skin() self.restartGUI() else: self.close()
def main(session, **kwargs): printDEBUG("Opening UserSkin%s menu ..." % UserSkinInfo) skinHistory, skinUpdate, skinAddOns, skinComponents = readSkinConfig() if skinHistory or skinUpdate or skinAddOns or skinComponents: session.open(UserSkin_Menu) else: from skinconfig import UserSkin_Config session.open(UserSkin_Config)
def cancelConfirm(self, result): if result is None or result is False: printDEBUG("Cancel confirmed.") else: printDEBUG("Cancel confirmed. Config changes will be lost.") for x in self["config"].list: x[1].cancel() self.close()
def doDeleteAction(self, what): childAttributes='' for key, value in self.root[0][what].items(): childAttributes += key + '=' + value + ' ' printDEBUG('doDeleteAction <%s %s>\n' % (self.root[0][what].tag,childAttributes)) self.root[0].remove(self.root[0][what]) self.createWidgetsList()
def restartGUI(self): myMessage = '' if self.BrakPlikuInfo != '': printDEBUG("missing components: %s" % self.BrakPlikuInfo) myMessage += _("Missing components found: %s\n\n") % self.BrakPlikuInfo myMessage += _("Restart necessary, restart GUI now?") restartbox = self.session.openWithCallback(self.restartGUIcb,MessageBox, myMessage, MessageBox.TYPE_YESNO) restartbox.setTitle(_("Message"))
def keyYellowRet(result): if result is None or result is False: printDEBUG("Deletion cancelled.") else: remove(self.filelist.getCurrentDirectory() + "/" + self.filelist.getFilename()) pic = self.filelist.getFilename().replace(".xml", ".png") if path.exists(SkinPath + "allPreviews/preview_" + pic): remove(SkinPath + "allPreviews/preview_" + pic) self.__refreshList()
def restartGUI(self): myMessage = '' if self.LackOfFile != '': printDEBUG("missing components: %s" % self.LackOfFile) myMessage += _("Missing components found: %s\n\n") % self.LackOfFile myMessage += _("Skin will NOT work properly!!!\n\n") myMessage += _("Restart necessary, restart GUI now?") restartbox = self.session.openWithCallback(self.restartGUIcb,MessageBox, myMessage, MessageBox.TYPE_YESNO, default = False) restartbox.setTitle(_("Message"))
def SaveWidget(WidgetFile = None): if WidgetFile is not None: if not WidgetFile.endswith('.xml'): WidgetFile += '.xml' WidgetPathName = path.dirname(self.ScreenFile).replace('allScreens','allWidgets') if not path.exists(WidgetPathName): mkdir(WidgetPathName) printDEBUG("Writing %s/%s" % (WidgetPathName,WidgetFile)) with open("%s/%s" % (WidgetPathName, WidgetFile), "w") as f: f.write(ET.tostring(self.root[0][self["menu"].getIndex()]))
def keyYellowRet(self, result): if result is None or result is False: printDEBUG("Deletion cancelled.") else: sel = self["menu"].getCurrent() remove((self.skin_base_dir + self.allScreens_dir + "/" + sel[0])) pic = sel[0].replace(".xml", ".png") if path.exists(self.skin_base_dir + "allPreviews/preview_" + pic): remove(self.skin_base_dir + "allPreviews/preview_" + pic) self.createMenuList()
def getCurrentBar(self): myfile = self.skin_base_dir + self.user_bar_link printDEBUG("[UserSkin:getCurrentBar] myfile='%s'" % myfile) if not path.exists(myfile): return (self.default_user_bar_link, self.default_user_bar_link) else: filename = path.realpath(myfile) filename = path.basename(filename) friendly_name = filename.replace("bar_", "").replace("_", " ") return (filename, friendly_name)
def buildListEntry(self, description, image, optionname): try: printDEBUG("Trying to load %sUserSkinpics/%s" % (SkinPath,image)) pixmap = LoadPixmap("%sUserSkinpics/%s" % (SkinPath,image)) except: pixmap = None if pixmap == None: printDEBUG("%spic/%s" % (PluginPath, image)) pixmap = LoadPixmap(cached=True, path="%spic/%s" % (PluginPath, image)); return((pixmap, description, optionname))
def __init__(self, session, ScreenFile, whichScreen = 1): printDEBUG("!!!!!!!!!! PREVIEW screen %s, %s" %(whichScreen,ScreenFile)) self.ScreenFile = ScreenFile self.skin = self.readSkin(whichScreen) self.session = session Screen.__init__(self, session) self["actions"] = ActionMap(["UserSkinPreviewSkinActions"], { "keyCancel": self.close, "keyOK": self.close, }, -1)
def xmlCallback(self, xmlstring): if DBG: printDEBUG('MSNWeatherPluginEntryConfigScreen().xmlCallback >>>') if xmlstring: errormessage = "" root = cet_fromstring(xmlstring) for childs in root: if childs.tag == "weather" and childs.attrib.has_key("errormessage"): errormessage = childs.attrib.get("errormessage").encode("utf-8", 'ignore') break if len(errormessage) !=0: self.session.open(MessageBox, errormessage, MessageBox.TYPE_ERROR) else: self.session.openWithCallback(self.searchCallback, MSNWeatherSearch, xmlstring)
def changedEntry(self): self.updateEntries = True printDEBUG("[UserSkin:changedEntry]") if self["config"].getCurrent() == self.set_color: self.setPicture(self.myUserSkin_style.value) elif self["config"].getCurrent() == self.set_font: self.setPicture(self.myUserSkin_font.value) elif self["config"].getCurrent() == self.set_bar: self.setPicture(self.myUserSkin_bar.value) elif self["config"].getCurrent() == self.set_myatile: if self.myUserSkin_active.value: self["key_yellow"].setText(_("User skins")) else: self["key_yellow"].setText("")
def setPicture(self, f): preview = self.skin_base_dir + "allPreviews/" if not path.exists(preview): mkdir(preview) pic = f[:-4] if f.startswith("bar_"): pic = f + ".png" printDEBUG("[UserSkin:setPicture] pic =" + pic + '[jpg|png]') previewJPG = preview + "preview_" + picJPG if path.exists(preview + "preview_" + pic + '.jpg'): self.UpdatePreviewPicture(preview + "preview_" + pic + '.jpg') if path.exists(preview + "preview_" + pic + '.png'): self.UpdatePreviewPicture(preview + "preview_" + pic + '.png') else: self["Picture"].hide()
def getScreenNames(XMLfilename): myPath=path.realpath(XMLfilename) if not path.exists(myPath): system('rm -f %s' % XMLfilename) return [] filecontent = '' screenNames = [] with open (XMLfilename, "r") as myFile: for line in myFile: filecontent = filecontent + line if line.find('<screen') >= 0: screenNames.append(line.strip()) printDEBUG("getScreenNames found %s" % line.strip()) myFile.close() return screenNames
def setPicture(self, f): pic = f.replace(".xml", ".png") if f.startswith("bar_"): pic = f + ".png" printDEBUG("[UserSkin:setPicture] pic =" + pic) preview = self.skin_base_dir + "allPreviews/" if not path.exists(preview): mkdir(preview) preview = preview + "preview_" + pic if path.exists(preview): self["Picture"].instance.setScale(1) self["Picture"].instance.setPixmapFromFile(preview) self["Picture"].show() else: self["Picture"].hide()
def getPossibleBars(self): #printDEBUG("[UserSkin:getPossibleBars] >>>") bar_list = [] if not listdir(self.skin_base_dir + "allBars/"): bar_list.append(self.defaults) return bar_list for f in sorted(listdir(self.skin_base_dir + "allBars/"), key=str.lower): fpath = path.join(self.skin_base_dir + "allBars/", f) printDEBUG("[UserSkin:getPossibleBars] f='%s'" % f) if path.isdir(fpath) and f.startswith('bar_') and f.find('.') > 1: friendly_name = f.split(".", 1)[0] friendly_name = friendly_name.replace("bar_", "").replace("_", " ") bar_list.append((f, _(friendly_name))) return bar_list
def __init__(self, session): Screen.__init__(self, session) self.title = _("MSN weather NP @j00zek %s" % Version) self.setTitle(_("MSN weather NP @j00zek %s") % Version) self["actions"] = ActionMap( ["MSNweatherNP"], { "keyCancel": self.close, "keyMenu": self.config, "keyRight": self.nextItem, "keyLeft": self.previousItem, "keyRed": self.keyRed, "keyGreen": self.keyGreen, "keyYellow": self.keyYellow, "keyBlue": self.keyBlue, }, -1) self["statustext"] = StaticText() self["currenticon"] = j00zekAccellPixmap() self["caption"] = StaticText() self["currentTemp"] = StaticText() self["condition"] = StaticText() self["wind_condition"] = StaticText() self["humidity"] = StaticText() self["observationtime"] = StaticText() self["observationpoint"] = StaticText() self["feelsliketemp"] = StaticText() self["key_red"] = Label(config.plugins.WeatherPlugin.AC1inf.value) self["key_green"] = Label(config.plugins.WeatherPlugin.AC2inf.value) self["key_yellow"] = Label(_("Show Histograms")) self["key_blue"] = Label(_("Show Maps")) self.weatherPluginEntryIndex = -1 self.weatherPluginEntry = None try: config.plugins.WeatherPlugin.currEntry.value = 0 self.weatherPluginEntryCount = config.plugins.WeatherPlugin.entrycount.value if self.weatherPluginEntryCount >= 1: self.weatherPluginEntry = config.plugins.WeatherPlugin.Entry[0] self.weatherPluginEntryIndex = 1 except Exception as e: printDEBUG('MSNweather.__init__', ' Exception %s' % str(e)) self.webSite = "" self.weatherData = None self.onLayoutFinish.append(self.startRun) self.onClose.append(self.__onClose)
def SaveScreen(ScreenFileName = None): if ScreenFileName is not None: if not ScreenFileName.endswith('.xml'): ScreenFileName += '.xml' if not ScreenFileName.startswith('skin_'): ScreenFileName = 'skin_' + ScreenFileName printDEBUG("Writing %s%s/%s" % (SkinPath, 'allScreens',ScreenFileName)) for skinScreen in root.findall('screen'): if 'name' in skinScreen.attrib: if skinScreen.attrib['name'] == self.ScreenSelectedToExport: SkinContent = ET.tostring(skinScreen) break with open("%s%s/%s" % (SkinPath, 'allScreens', ScreenFileName), "w") as f: f.write('<skin>\n') f.write(SkinContent) f.write('</skin>\n')
def setPicture(self, f): if f == '': return elif f[-4:] == '.xml': pic = f[:-4] else: pic = f #check for jpg if path.exists(SkinPath + "allPreviews/" + pic + '.jpg'): self.UpdatePreviewPicture(SkinPath + "allPreviews/" + pic + '.jpg') elif path.exists(SkinPath + "allPreviews/preview_" + pic + '.jpg'): self.UpdatePreviewPicture(SkinPath + "allPreviews/preview_" + pic + '.jpg') #check for png elif path.exists(SkinPath + "allPreviews/" + pic + '.png'): self.UpdatePreviewPicture(SkinPath + "allPreviews/" + pic + '.png') elif path.exists(SkinPath + "allPreviews/preview_" + pic + '.png'): self.UpdatePreviewPicture(SkinPath + "allPreviews/preview_" + pic + '.png') else: printDEBUG("[UserSkin:setPicture] pic for '%s' not found" % pic ) self["Picture"].hide()
def setPreviewFont(self, myIndex): if not 'font' in self.root[self.currentScreenID][myIndex].attrib: self["PreviewFont"].setText('') return #### Now we know we have font, so we can preview it :) myfont = self.root[self.currentScreenID][myIndex].attrib['font'] #print myfont try: self["PreviewFont"].instance.setFont(gFont(myfont.split(';')[0], int(myfont.split(';')[1]))) except: printDEBUG("Missing font '%s' definition in skin.xml" % self.root[self.currentScreenID][myIndex].attrib['font']) if 'text' in self.root[self.currentScreenID][myIndex].attrib: self["PreviewFont"].setText('%s' % self.root[self.currentScreenID][myIndex].attrib['text']) else: self["PreviewFont"].setText(_('Sample Text')) if 'foregroundColor' in self.root[self.currentScreenID][myIndex].attrib: try: self["PreviewFont"].instance.setForegroundColor(parseColor(self.root[self.currentScreenID][myIndex].attrib['foregroundColor'])) except: printDEBUG("Missing color '%s' definition in skin.xml" % self.root[self.currentScreenID][myIndex].attrib['foregroundColor']) else: self["PreviewFont"].instance.setForegroundColor(parseColor("#00ffffff")) if 'backgroundColor' in self.root[self.currentScreenID][myIndex].attrib: try: self["PreviewFont"].instance.setBackgroundColor(parseColor(self.root[self.currentScreenID][myIndex].attrib['backgroundColor'])) except: printDEBUG("Missing color '%s' definition in skin.xml" % self.root[self.currentScreenID][myIndex].attrib['backgroundColor'])
def keyBlue(self): import xml.etree.cElementTree as ET from Screens.VirtualKeyBoard import VirtualKeyBoard def SaveScreen(ScreenFileName = None): if ScreenFileName is not None: if not ScreenFileName.endswith('.xml'): ScreenFileName += '.xml' if not ScreenFileName.startswith('skin_'): ScreenFileName = 'skin_' + ScreenFileName printDEBUG("Writing %s%s/%s" % (SkinPath, 'allScreens',ScreenFileName)) for skinScreen in root.findall('screen'): if 'name' in skinScreen.attrib: if skinScreen.attrib['name'] == self.ScreenSelectedToExport: SkinContent = ET.tostring(skinScreen) break with open("%s%s/%s" % (SkinPath, 'allScreens', ScreenFileName), "w") as f: f.write('<skin>\n') f.write(SkinContent) f.write('</skin>\n') def ScreenSelected(ret): if ret: self.ScreenSelectedToExport = ret[0] printDEBUG('Selected: %s' % self.ScreenSelectedToExport) self.session.openWithCallback(SaveScreen, VirtualKeyBoard, title=(_("Enter filename")), text = self.ScreenSelectedToExport + '_new') ScreensList= [] root = ET.parse(SkinPath + 'skin.xml').getroot() for skinScreen in root.findall('screen'): if 'name' in skinScreen.attrib: printDEBUG('Found in skin.xml: %s' % skinScreen.attrib['name']) ScreensList.append((skinScreen.attrib['name'],skinScreen.attrib['name'])) if len(ScreensList) > 0: ScreensList.sort() self.session.openWithCallback(ScreenSelected, ChoiceBox, title = _("Select skin to export:"), list = ScreensList)
def getWeatherDataCallback(self, result, errortext): self["statustext"].text = "" if result == getWeather.ERROR: if DBG: printDEBUG( 'MSNWeatherPlugin(Screen)getWeatherDataCallback result == getWeather.ERROR' ) self.error(errortext) else: if DBG: printDEBUG('getWeatherDataCallback result == %s' % result) self["caption"].text = self.weatherData.city self.webSite = self.weatherData.url #current data item = self.weatherData.weatherItems.get('-1', None) if item is not None: self["currentTemp"].text = "%s°%s" % ( item.temperature, self.weatherData.degreetype) self["condition"].text = item.skytext self["humidity"].text = _("Humidity: %s %%") % item.humidity self["wind_condition"].text = item.winddisplay c = time.strptime(item.observationtime, "%H:%M:%S") self["observationtime"].text = _( "Observation time: %s") % time.strftime("%H:%M", c) self["observationpoint"].text = _( "Observation point: %s") % item.observationpoint self["feelsliketemp"].text = _( "Feels like %s" ) % item.feelslike + "°" + self.weatherData.degreetype if DBG: printDEBUG('getWeatherDataCallback item.skytext == %s' % item.skytext) self.showIcon(-1, item.iconFilename) if WeatherMSNComp is not None: if DBG: printDEBUG( 'getWeatherDataCallback invoking WeatherMSNComp.updateWeather' ) WeatherMSNComp.updateWeather(self.weatherData, result, errortext) #update data source
def refreshWeatherMSNComp(self, configElement=None): if WeatherMSNComp is not None: if self.weatherData is not None: if DBG: printDEBUG( 'refreshWeatherMSNComp is invoking WeatherMSNComp.updateWeather' ) WeatherMSNComp.updateWeather(self.weatherData, getWeather.OK, None) #update data source again else: if DBG: printDEBUG( 'MSNWeatherPlugin(Screen).refreshWeatherMSNComp self.weatherData is None = no WeatherMSNComp update!!!' ) else: if DBG: printDEBUG( 'MSNWeatherPlugin(Screen)/refreshWeatherMSNComp WeatherMSNComp is None - nothing to update!!!' )
def main(session, **kwargs): printDEBUG("Opening UserSkin%s menu ..." % UserSkinInfo) session.open(UserSkin_Menu)
def main(session, **kwargs): printDEBUG("Opening Menu ...") session.open(UserSkin_Menu)
default=False) config.plugins.WeatherPlugin.DebugMSNweatherHistograms = ConfigEnableDisable( default=False) config.plugins.WeatherPlugin.DebugMSNweatherMaps = ConfigEnableDisable( default=True) config.plugins.WeatherPlugin.HistoryPeriod = ConfigSelection(choices=[ ("86400", _("Last 24h")), ("43200", _("Last 12h")), ("21600", _("Last 6h")), ("10800", _("Last 3h")), ("3600", _("Last hour")), ], default="43200") printDEBUG('INIT', ' MSNweather NP plugin %s' % Version) printDEBUG('config.plugins.WeatherPlugin.IconsType = "%s"' % config.plugins.WeatherPlugin.IconsType.value) initConfig() try: from updater import weathermsn WeatherMSNComp = weathermsn #printDEBUG('WeatherMSNComp initiated invoking getData()') #WeatherMSNComp.getData() except Exception as e: WeatherMSNComp = None printDEBUG('Exception: %s' % str(e))
def main(session, **kwargs): printDEBUG("Opening Menu ...") session.open(AtileHD_Menu)
def __init__(self, session, ScreenFile=''): Screen.__init__(self, session) self.session = session #valid ScreenFile is mandatory if ScreenFile == '': self.close() return elif not path.exists(ScreenFile): self.close() return self.ScreenFile = ScreenFile try: self.root = ET.parse(self.ScreenFile).getroot() self.myScreenName = self.root.find('screen').attrib['name'] self.NumberOfScreens = len(self.root.findall('screen')) self.NumberOfChilds = len(self.root.findall('*')) except: printDEBUG("%s -Is NOT proper xml file - END!!!" % self.ScreenFile) self.close() return printDEBUG("%s has been loaded successfully. :)" % self.ScreenFile) if self.NumberOfChilds != self.NumberOfScreens: iindex = 0 for child in self.root.findall('*'): if child.tag == 'screen': break iindex += 1 self.currentScreenID = iindex if self.myScreenName == None: myTitle = _("UserSkin %s - EditScreens") % UserSkinInfo else: if self.NumberOfScreens == 1: myTitle = _("UserSkin %s - Edit %s screen") % ( UserSkinInfo, self.myScreenName) else: myTitle = _("UserSkin %s - Edit %s screen (1/%d)") % ( UserSkinInfo, self.myScreenName, self.NumberOfScreens) self.setTitle(myTitle) self["key_red"] = StaticText(_("Exit")) self["key_green"] = StaticText("") if self.NumberOfScreens == 1: self["key_yellow"] = StaticText("") else: self["key_yellow"] = StaticText(_("Switch screen")) self['key_blue'] = StaticText(_('Actions')) self["PreviewFont"] = Label() self["widgetDetailsTXT"] = Label() self["PixMapPreview"] = Pixmap() self["SkinPicture"] = Pixmap() self["ScreenPixMapPictureInScale"] = Pixmap() self["WigetPixMapPictureInScale"] = Pixmap() self["WigetPixMapPictureInScale1"] = Pixmap() self["WigetPixMapPictureInScale2"] = Pixmap() menu_list = [] self["menu"] = List(menu_list) self["shortcuts"] = ActionMap( ["UserSkinEditActions"], { "ok": self.keyOK, "cancel": self.keyExit, "red": self.keyExit, "green": self.keyGreen, "yellow": self.keyYellow, "blue": self.keyBlue, "keyup": self.channelup, "keydown": self.channeldown, }, -2) self.skin_base_dir = SkinPath #self.screen_dir = "allScreens" self.allScreens_dir = "allScreens" #check if we have preview files isPreview = 0 for xpreview in listdir(SkinPath + "allPreviews/"): if len(xpreview) > 4 and xpreview[-4:] == ".png": isPreview += 1 if isPreview >= 2: break self.elabel_png = LoadPixmap( cached=True, path=self.getPicFileNameWithPath("elabel.png")) self.epixmap_png = LoadPixmap( cached=True, path=self.getPicFileNameWithPath("epixmap.png")) self.label_png = LoadPixmap( cached=True, path=self.getPicFileNameWithPath("label.png")) self.pixmap_png = LoadPixmap( cached=True, path=self.getPicFileNameWithPath("pixmap.png")) self.widget_png = LoadPixmap( cached=True, path=self.getPicFileNameWithPath("widget.png")) if not self.selectionChanged in self["menu"].onSelectionChanged: self["menu"].onSelectionChanged.append(self.selectionChanged) self.onLayoutFinish.append(self.LayoutFinished)
def keyExitRetSave(self): printDEBUG("Writing %s" % self.ScreenFile) with open(self.ScreenFile, "w") as f: f.write(ET.tostring(self.root, encoding='utf-8')) self.close()