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 resolveFilename, SCOPE_PLUGINS, SCOPE_FONTS 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)" 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)" 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() else: ret = self["filelist"].getCurrentDirectory() + '/' + self["filelist"].getFilename() self.close(ret,self.scope) def exit(self): 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.settings.authormode.getValue()) 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): if self.keydict[self["config"].getCurrent()[1]] == "authormode": self.initConfigList(self.settings.authormode.getValue()) def initConfigList(self, authormode=""): print "initConfigList(%s)" % authormode self.list = [] self.list.append(getConfigListEntry(_("Collection name"), self.settings.name)) self.list.append(getConfigListEntry(_("Authoring mode"), self.settings.authormode)) if authormode.startswith("menu"): self.list.append(getConfigListEntry(_("Menu")+' '+_("background image"), self.settings.menubg)) self.list.append(getConfigListEntry(_("Menu")+' '+_("Title"), self.settings.titleformat)) self.list.append(getConfigListEntry(_("Menu")+' '+_("Subtitles"), self.settings.subtitleformat)) 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(_("VMGM (intro trailer)"), self.settings.vmgm)) self.list.append(getConfigListEntry(_("Auto chapter split every ? minutes (0=never)"), self.settings.autochapter)) self["config"].setList(self.list) def keyLeft(self): ConfigListScreen.keyLeft(self) if self.keydict[self["config"].getCurrent()[1]] == "authormode": self.initConfigList(self.settings.authormode.getValue()) def keyRight(self): ConfigListScreen.keyRight(self) if self.keydict[self["config"].getCurrent()[1]] == "authormode": self.initConfigList(self.settings.authormode.getValue()) 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 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)