from Screens.Screen import Screen from Screens.ChoiceBox import ChoiceBox from Screens.InputBox import InputBox from Screens.MessageBox import MessageBox from Screens.HelpMenu import HelpableScreen from Components.ActionMap import HelpableActionMap, ActionMap from Components.Sources.List import List from Components.Sources.StaticText import StaticText from Components.Sources.Progress import Progress from Components.FileList import FileList from enigma import eListboxPythonMultiContent, gFont, RT_HALIGN_LEFT from Tools.Directories import fileExists, resolveFilename, SCOPE_PLUGINS, SCOPE_FONTS, SCOPE_HDD from Components.config import config, getConfigListEntry from Components.ConfigList import ConfigListScreen class FileBrowser(Screen, HelpableScreen): skin = """ """ def __init__(self, session, scope, settings): Screen.__init__(self, session) HelpableScreen.__init__(self) self.scope = scope pattern = "" currDir = "/" if self.scope == "project": currDir = self.getDir() pattern = "(?i)^.*\.(ddvdp\.xml)" elif self.scope == "menutemplate": currDir = self.getDir() pattern = "(?i)^.*\.(ddvdm\.xml)" if self.scope == "menubg": currDir = self.getDir(settings.menubg) pattern = "(?i)^.*\.(jpeg|jpg|jpe|png|bmp)" elif self.scope == "menuaudio": currDir = self.getDir(settings.menuaudio) pattern = "(?i)^.*\.(mp2|m2a|ac3)" elif self.scope == "vmgm": currDir = self.getDir(settings.vmgm) pattern = "(?i)^.*\.(mpg|mpeg)" elif self.scope == "font_face": currDir = self.getDir(settings.font_face, resolveFilename(SCOPE_FONTS)) pattern = "(?i)^.*\.(ttf)" elif self.scope == "isopath": currDir = settings.isopath.getValue() elif self.scope == "image": currDir = resolveFilename(SCOPE_HDD) pattern = "(?i)^.*\.(iso)" self.filelist = FileList(currDir, matchingPattern=pattern) self["filelist"] = self.filelist self["FilelistActions"] = ActionMap(["OkCancelActions"], { "ok": self.ok, "cancel": self.exit }) def getDir(self, key=None, defaultDir=None): if key: settingDir = key.getValue() if len(settingDir) > 1: return (settingDir.rstrip("/").rsplit("/",1))[0] return defaultDir or (resolveFilename(SCOPE_PLUGINS)+"Extensions/DVDBurn/") def ok(self): if self.filelist.canDescent(): self.filelist.descent() if self.scope == "image": path = self["filelist"].getCurrentDirectory() or "" if fileExists(path+"VIDEO_TS"): self.close(path,self.scope) else: ret = self["filelist"].getCurrentDirectory() + '/' + self["filelist"].getFilename() self.close(ret,self.scope) def exit(self): if self.scope == "isopath": self.close(self["filelist"].getCurrentDirectory(),self.scope) self.close(None,False) class ProjectSettings(Screen,ConfigListScreen): skin = """ """ def __init__(self, session, project = None): Screen.__init__(self, session) self.project = project self["key_red"] = StaticText(_("Cancel")) self["key_green"] = StaticText(_("OK")) self["key_yellow"] = StaticText(_("Load")) self["key_blue"] = StaticText(_("Save")) infotext = _("Available format variables") + ":\n$i=" + _("Track") + ", $t=" + _("Title") + ", $d=" + _("Description") + ", $l=" + _("length") + ", $c=" + _("chapters") + ",\n" + _("Record") + " $T=" + _("Begin time") + ", $Y=" + _("Year") + ", $M=" + _("month") + ", $D=" + _("day") + ",\n$A=" + _("audio tracks") + ", $C=" + _("Channel") + ", $f=" + _("filename") self["info"] = StaticText(infotext) self.settings = project.settings ConfigListScreen.__init__(self, []) self.initConfigList() self.keydict = {} for key, val in self.settings.dict().iteritems(): self.keydict[val] = key self["setupActions"] = ActionMap(["SetupActions", "ColorActions"], { "green": self.exit, "red": self.cancel, "blue": self.saveProject, "yellow": self.loadProject, "cancel": self.cancel, "ok": self.ok, }, -2) def changedConfigList(self): key = self.keydict[self["config"].getCurrent()[1]] if key == "authormode" or key == "output": self.initConfigList() def initConfigList(self): authormode = self.settings.authormode.getValue() output = self.settings.output.getValue() self.list = [] self.list.append(getConfigListEntry(_("Collection name"), self.settings.name)) self.list.append(getConfigListEntry(_("Authoring mode"), self.settings.authormode)) self.list.append(getConfigListEntry(("Output"), self.settings.output)) if output == "iso": self.list.append(getConfigListEntry(_("ISO path"), self.settings.isopath)) if authormode.startswith("menu"): self.list.append(getConfigListEntry(_("Menu")+' '+_("template file"), self.settings.menutemplate)) self.list.append(getConfigListEntry(_("Menu")+' '+_("Title"), self.project.menutemplate.settings.titleformat)) self.list.append(getConfigListEntry(_("Menu")+' '+_("Subtitles"), self.project.menutemplate.settings.subtitleformat)) self.list.append(getConfigListEntry(_("Menu")+' '+_("background image"), self.project.menutemplate.settings.menubg)) #self.list.append(getConfigListEntry(_("Menu")+' '+_("headline")+' '+_("color"), self.settings.color_headline)) #self.list.append(getConfigListEntry(_("Menu")+' '+_("text")+' '+_("color"), self.settings.color_button)) #self.list.append(getConfigListEntry(_("Menu")+' '+_("highlighted button")+' '+_("color"), self.settings.color_highlight)) #self.list.append(getConfigListEntry(_("Menu")+' '+_("font face"), self.settings.font_face)) #self.list.append(getConfigListEntry(_("Font size")+' ('+_("headline")+', '+_("Title")+', '+_("Subtitles")+')', self.settings.font_size)) #self.list.append(getConfigListEntry(_("Menu")+' '+_("spaces (top, between rows, left)"), self.settings.space)) #self.list.append(getConfigListEntry(_("Menu")+' '+_("Audio"), self.settings.menuaudio)) if authormode != "data_ts": self.list.append(getConfigListEntry(_("Titleset mode"), self.settings.titlesetmode)) if self.settings.titlesetmode.getValue() == "single" or authormode == "just_linked": self.list.append(getConfigListEntry(_("VMGM (intro trailer)"), self.settings.vmgm)) else: self.list.append(getConfigListEntry(("DVD data format"), self.settings.dataformat)) self["config"].setList(self.list) def keyLeft(self): ConfigListScreen.keyLeft(self) key = self.keydict[self["config"].getCurrent()[1]] if key == "authormode" or key == "output" or key=="titlesetmode": self.initConfigList() def keyRight(self): ConfigListScreen.keyRight(self) key = self.keydict[self["config"].getCurrent()[1]] if key == "authormode" or key == "output" or key=="titlesetmode": self.initConfigList() def exit(self): self.applySettings() self.close(True) def applySettings(self): for x in self["config"].list: x[1].save() def ok(self): key = self.keydict[self["config"].getCurrent()[1]] if key in self.project.filekeys: self.session.openWithCallback(self.FileBrowserClosed, FileBrowser, key, self.settings) def cancel(self): self.close(False) def loadProject(self): self.session.openWithCallback(self.FileBrowserClosed, FileBrowser, "project", self.settings) def saveProject(self): self.applySettings() ret = self.project.saveProject(resolveFilename(SCOPE_PLUGINS)+"Extensions/DVDBurn/") if ret.startswith: text = _("Save")+' '+_('OK')+':\n'+ret self.session.open(MessageBox,text,type = MessageBox.TYPE_INFO) else: text = _("Save")+' '+_('Error') self.session.open(MessageBox,text,type = MessageBox.TYPE_ERROR) def FileBrowserClosed(self, path, scope): if scope == "menutemplate": if not self.project.menutemplate.loadTemplate(path): self.session.open(MessageBox,self.project.error,MessageBox.TYPE_ERROR) else: print "[ProjectSettings] menu template loaded" if scope in self.project.filekeys: self.settings.dict()[scope].setValue(path) elif scope == "project": if not self.project.loadProject(path): self.session.open(MessageBox,self.project.error,MessageBox.TYPE_ERROR) else: self.initConfigList()