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_PLAYLIST, SCOPE_SKIN, SCOPE_FONTS from Components.config import config, getConfigListEntry from Components.ConfigList import ConfigListScreen class WaitBox(MessageBox): def __init__(self, session, callback): MessageBox.__init__(self, session, text=_("please wait, loading picture..."), type = MessageBox.TYPE_INFO) self.skinName = "MessageBox" self.CB = callback self.onShown.append(self.runCB) def ok(self): pass def runCB(self): from enigma import eTimer self.delayTimer = eTimer() self.delayTimer.callback.append(self.CB) self.delayTimer.start(10,1) 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 = resolveFilename(SCOPE_PLAYLIST) pattern = "(?i)^.*\.(ddvdp\.xml)" if self.scope == "menubg": currDir = self.getDir(settings.menubg, resolveFilename(SCOPE_SKIN)) pattern = "(?i)^.*\.(jpeg|jpg|jpe|png|bmp)" elif self.scope == "menuaudio": currDir = self.getDir(settings.menuaudio, resolveFilename(SCOPE_SKIN)) pattern = "(?i)^.*\.(mp2|m2a|ac3)" elif self.scope == "vmgm": currDir = self.getDir(settings.vmgm, resolveFilename(SCOPE_SKIN)) 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, defaultDir): settingDir = key.getValue() if len(settingDir) > 1: return (settingDir.rstrip("/").rsplit("/",1))[0] else: return defaultDir 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%C=" + _("Channel") + ", %f=" + _("filename") self["info"] = StaticText(infotext) self.settings = project.settings self.list = [] self.list.append(getConfigListEntry(_("Collection name"), self.settings.name)) self.list.append(getConfigListEntry(_("Authoring mode"), self.settings.authormode)) 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)) self.list.append(getConfigListEntry(_("VMGM (intro trailer)"), self.settings.vmgm)) ConfigListScreen.__init__(self, self.list) 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 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]] browseKeys = ["menubg", "menuaudio", "vmgm", "font_face"] if key in browseKeys: 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_PLAYLIST)) 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 == "project": if not self.project.loadProject(path): self.session.open(MessageBox,self.project.error,MessageBox.TYPE_ERROR) elif scope: self.settings.dict()[scope].setValue(path)