Merge branch 'master' of fraxinas@git.opendreambox.org:/git/enigma2
[enigma2.git] / lib / python / Plugins / Extensions / DVDBurn / TitleProperties.py
1 from Screens.Screen import Screen
2 from Screens.ChoiceBox import ChoiceBox
3 from Screens.InputBox import InputBox
4 from Screens.MessageBox import MessageBox
5 from Screens.HelpMenu import HelpableScreen
6 from Components.ActionMap import HelpableActionMap, ActionMap
7 from Components.Sources.List import List
8 from Components.Sources.StaticText import StaticText
9 from Components.Sources.Progress import Progress
10 from Components.FileList import FileList
11 from enigma import eListboxPythonMultiContent, gFont, RT_HALIGN_LEFT
12 from Tools.Directories import fileExists, resolveFilename, SCOPE_PLUGINS, SCOPE_FONTS, SCOPE_HDD
13 from Components.config import config, getConfigListEntry, ConfigInteger, ConfigSubsection, ConfigSelection
14 from Components.ConfigList import ConfigListScreen
15 import DVDTitle
16
17 class TitleProperties(Screen,ConfigListScreen):
18         skin = """
19                 <screen position="90,83" size="560,445" title="Title properties" >
20                     <ePixmap pixmap="skin_default/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
21                     <ePixmap pixmap="skin_default/buttons/green.png" position="140,0" size="140,40" alphatest="on" />
22                     <ePixmap pixmap="skin_default/buttons/yellow.png" position="280,0" size="140,40" alphatest="on" />
23                     <ePixmap pixmap="skin_default/buttons/blue.png" position="420,0" size="140,40" alphatest="on" />
24                     <widget source="key_red" render="Label" position="0,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
25                     <widget source="key_green" render="Label" position="140,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
26                     <widget source="key_yellow" render="Label" position="280,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" transparent="1" />
27                     <widget source="key_blue" render="Label" position="420,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#18188b" transparent="1" />
28                     <widget name="config" position="10,50" size="540,300" scrollbarMode="showOnDemand" />
29                     <widget source="serviceinfo_headline" render="Label" position="20,360" size="520,20" font="Regular;20" />
30                     <widget source="serviceinfo" render="Label" position="20,382" size="520,66" font="Regular;16" />
31                 </screen>"""
32
33         def __init__(self, session, parent, project, title_idx):
34                 Screen.__init__(self, session)
35                 self.parent = parent
36                 self.project = project
37                 self.title_idx = title_idx
38
39                 self["key_red"] = StaticText(_("Cancel"))
40                 self["key_green"] = StaticText(_("OK"))
41                 self["key_yellow"] = StaticText(_("Edit Title"))
42                 self["key_blue"] = StaticText(_("Save"))
43                 self["serviceinfo_headline"] = StaticText("DVB info:")
44                 self["serviceinfo"] = StaticText()
45
46                 self.properties = project.titles[title_idx].properties
47                 ConfigListScreen.__init__(self, [])
48                 self.properties.crop = DVDTitle.ConfigFixedText("crop")
49                 self.properties.autochapter.addNotifier(self.initConfigList)
50                 self.properties.aspect.addNotifier(self.initConfigList)
51                 for audiotrack in self.properties.audiotracks:
52                         audiotrack.active.addNotifier(self.initConfigList)
53                 
54                 self.initConfigList()
55                         
56                 self["setupActions"] = ActionMap(["SetupActions", "ColorActions"],
57                 {
58                     "green": self.exit,
59                     "red": self.cancel,
60                     #"blue": self.saveProject,
61                     "yellow": self.editTitle,
62                     "cancel": self.cancel,
63                     "ok": self.ok,
64                 }, -2)
65
66         def initConfigList(self, element=None):
67                 self.properties.position = ConfigInteger(default = self.title_idx+1, limits = (1, len(self.project.titles)))
68                 title = self.project.titles[self.title_idx]
69                 self.list = []
70                 self.list.append(getConfigListEntry("DVD " + _("Track"), self.properties.position))
71                 self.list.append(getConfigListEntry("DVD " + _("Title"), self.properties.menutitle))
72                 self.list.append(getConfigListEntry("DVD " + _("Description"), self.properties.menusubtitle))
73                 for audiotrack in self.properties.audiotracks:
74                         DVB_aud = audiotrack.DVB_lang.getValue() or audiotrack.pid.getValue()
75                         self.list.append(getConfigListEntry("burn audio track (%s)" % DVB_aud, audiotrack.active))
76                         if audiotrack.active.getValue():
77                                 self.list.append(getConfigListEntry("audio track (%s) format" % DVB_aud, audiotrack.format))
78                                 self.list.append(getConfigListEntry("audio track (%s) language" % DVB_aud, audiotrack.language))
79                                 
80                 self.list.append(getConfigListEntry("DVD " + _("Aspect Ratio"), self.properties.aspect))
81                 if self.properties.aspect.getValue() == "16:9":
82                         self.list.append(getConfigListEntry("DVD " + "widescreen", self.properties.widescreen))
83                 else:
84                         self.list.append(getConfigListEntry("DVD " + "widescreen", self.properties.crop))
85                 
86                 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")
87                 self["info"] = StaticText(infotext)
88                 
89                 if len(title.chaptermarks) == 0:
90                         self.list.append(getConfigListEntry(_("Auto chapter split every ? minutes (0=never)"), self.properties.autochapter))
91                 infotext = _("Title") + ': ' + title.DVBname + "\n" + _("Description") + ': ' + title.DVBdescr + "\n" + _("Channel") + ': ' + title.DVBchannel
92                 chaptermarks = title.getChapterMarks(template="$h:$m:$s")
93                 chapters_count = len(chaptermarks)
94                 if chapters_count >= 1:
95                         infotext += ', ' + str(chapters_count+1) + ' ' + _("chapters") + ' ('
96                         infotext += ' / '.join(chaptermarks) + ')'
97                 self["serviceinfo"].setText(infotext)
98                 self["config"].setList(self.list)
99
100         def editTitle(self):
101                 self.parent.editTitle()
102                 self.initConfigList()
103
104         def changedConfigList(self):
105                 self.initConfigList()
106
107         def exit(self):
108                 self.applySettings()
109                 self.close()
110
111         def applySettings(self):
112                 for x in self["config"].list:
113                         x[1].save()
114                 current_pos = self.title_idx+1
115                 new_pos = self.properties.position.getValue()
116                 if new_pos != current_pos:
117                         print "title got repositioned from ", current_pos, "to", new_pos
118                         swaptitle = self.project.titles.pop(current_pos-1)
119                         self.project.titles.insert(new_pos-1, swaptitle)
120
121         def ok(self):
122                 #key = self.keydict[self["config"].getCurrent()[1]]
123                 #if key in self.project.filekeys:
124                         #self.session.openWithCallback(self.FileBrowserClosed, FileBrowser, key, self.settings)
125                 pass
126
127         def cancel(self):
128                 self.close()
129
130 from Tools.ISO639 import LanguageCodes
131 class LanguageChoices():
132         def __init__(self):
133                 from Components.Language import language as syslanguage
134                 syslang = syslanguage.getLanguage()[:2]
135                 self.langdict = { }
136                 self.choices = []
137                 for key, val in LanguageCodes.iteritems():
138                         if len(key) == 2:
139                                 self.langdict[key] = val[0]
140                 for key, val in self.langdict.iteritems():
141                         if key not in [syslang, 'en']:
142                                 self.langdict[key] = val
143                                 self.choices.append((key, val))
144                 self.choices.sort()
145                 self.choices.insert(0,("nolang", ("unspecified")))
146                 self.choices.insert(1,(syslang, self.langdict[syslang]))
147                 self.choices.insert(2,("en", self.langdict["en"]))
148
149         def getLanguage(self, DVB_lang):
150                 DVB_lang = DVB_lang.lower()
151                 isocodes = [ ]
152                 stripwords = ["stereo", "audio", "description", "2ch"]
153                 for word in stripwords:
154                         DVB_lang = DVB_lang.replace(word,"").strip()
155                 for key, val in LanguageCodes.iteritems():
156                         if DVB_lang.find(key.lower()) == 0:
157                                 if len(key) == 2:
158                                         return key
159                                 else:
160                                         DVB_lang = (LanguageCodes[key])[0]
161                         elif DVB_lang.find(val[0].lower()) > -1:
162                                 if len(key) == 2:
163                                         return key
164                                 else:
165                                         DVB_lang = (LanguageCodes[key])[0]
166                 for key, val in self.langdict.iteritems():
167                         if val == DVB_lang:
168                                 return key
169                 return "nolang"
170
171 languageChoices = LanguageChoices()