1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
from Tools.Directories import fileExists
from Components.config import config, ConfigSubsection, ConfigInteger, ConfigYesNo, ConfigText, ConfigSelection, getConfigListEntry, ConfigSequence
class ConfigColor(ConfigSequence):
def __init__(self):
ConfigSequence.__init__(self, seperator = "#", limits = [(0,255),(0,255),(0,255)])
class ConfigPixelvals(ConfigSequence):
def __init__(self):
ConfigSequence.__init__(self, seperator = ",", limits = [(0,200),(0,200),(0,200)])
class ConfigPixelvals(ConfigSequence):
def __init__(self):
ConfigSequence.__init__(self, seperator = ",", limits = [(0,200),(0,200),(0,200)])
class ConfigFilename(ConfigText):
def __init__(self):
ConfigText.__init__(self, default = "", fixed_size = True, visible_width = False)
def getMulti(self, selected):
filename = (self.text.rstrip("/").rsplit("/",1))[1].encode("utf-8")[:40] + " "
print "ConfigFilename =", filename
if self.allmarked:
mark = range(0, len(filename))
else:
mark = [filename]
return ("mtext"[1-selected:], filename, mark)
class DVDProject:
def __init__(self):
self.titles = [ ]
self.target = None
self.settings = ConfigSubsection()
self.settings.name = ConfigText(fixed_size = False, visible_width = 40)
self.settings.authormode = ConfigSelection(choices = [("menu_linked", _("Linked titles with a DVD menu")), ("just_linked", _("Direct playback of linked titles without menu")), ("menu_seperate", _("Seperate titles with a main menu")), ])
self.settings.menubg = ConfigFilename()
self.settings.menuaudio = ConfigFilename()
self.settings.titleformat = ConfigText(fixed_size = False, visible_width = 40)
self.settings.subtitleformat = ConfigText(fixed_size = False, visible_width = 40)
self.settings.color_headline = ConfigColor()
self.settings.color_highlight = ConfigColor()
self.settings.color_button = ConfigColor()
self.settings.font_face = ConfigFilename()
self.settings.font_size = ConfigPixelvals()
self.settings.space = ConfigPixelvals()
self.settings.vmgm = ConfigFilename()
self.settings.autochapter = ConfigInteger(default = 0, limits = (0, 99))
self.filekeys = ["vmgm", "menubg", "menuaudio", "font_face"]
def addService(self, service):
import DVDTitle
title = DVDTitle.DVDTitle()
title.addService(service)
self.titles.append(title)
return title
def saveProject(self, path):
import xml.dom.minidom
from Tools.XMLTools import elementsWithTag, mergeText, stringToXML
list = []
list.append('<?xml version="1.0" encoding="utf-8" ?>\n')
list.append('<DreamDVDBurnerProject>\n')
list.append('\t<settings ')
for key, val in self.settings.dict().iteritems():
list.append( key + '="' + str(val.getValue()) + '" ' )
list.append(' />\n')
list.append('\t<titles>\n')
for title in self.titles:
list.append('\t\t<path>')
list.append(stringToXML(title.source.getPath()))
list.append('</path>\n')
list.append('\t</titles>\n')
list.append('</DreamDVDBurnerProject>\n')
name = self.settings.name.getValue()
i = 0
filename = path + name + ".ddvdp.xml"
while fileExists(filename):
i = i+1
filename = path + name + str(i).zfill(3) + ".ddvdp.xml"
try:
file = open(filename, "w")
for x in list:
file.write(x)
file.close()
except:
return False
return filename
def loadProject(self, filename):
import xml.dom.minidom
try:
if not fileExists(filename):
self.error = "xml file not found!"
raise AttributeError
else:
self.error = ""
file = open(filename, "r")
data = file.read().decode("utf-8").replace('&',"&").encode("ascii",'xmlcharrefreplace')
file.close()
projectfiledom = xml.dom.minidom.parseString(data)
for project in projectfiledom.childNodes[0].childNodes:
if project.nodeType == xml.dom.minidom.Element.nodeType:
if project.tagName == 'settings':
i = 0
if project.attributes.length < 11:
self.error = "project attributes missing"
raise AttributeError
while i < project.attributes.length:
item = project.attributes.item(i)
key = item.name.encode("utf-8")
try:
val = eval(item.nodeValue)
except (NameError, SyntaxError):
val = item.nodeValue.encode("utf-8")
try:
self.settings.dict()[key].setValue(val)
except (KeyError):
self.error = "unknown attribute '%s'" % (key)
raise AttributeError
i += 1
for key in self.filekeys:
val = self.settings.dict()[key].getValue()
if not fileExists(val):
self.error += "\n%s '%s' not found" % (key, val)
if len(self.error):
raise AttributeError
except AttributeError:
self.error += (" in project '%s'") % (filename)
return False
return True
|