-
Notifications
You must be signed in to change notification settings - Fork 1
/
RVPresentationDocument.py
137 lines (119 loc) · 5.78 KB
/
RVPresentationDocument.py
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
133
134
135
136
137
from NSColor import NSColor
from RVDateTime import RVDateTime
from RVObject import RVObject
from RVBibleReference import RVBibleReference
from RVSlideGrouping import RVSlideGrouping
from RVTimeline import RVTimeline
import xml.etree.ElementTree as xmltree
class RVPresentationDocument(RVObject):
def __init__(self,xmlelement=None):
# Create all variables here.
self.versionNumber = 600
self.docType = 0
self.width = 1280
self.height = 720
self.usedCount = 0
self.backgroundColor = NSColor()
self.buildNumber = 15122
self.drawingBackgroundColor = False
self.CCLIDisplay = True
self.lastDateUsed = RVDateTime()
self.selectedArrangementID = ""
self.category = "Default"
self.resourcesDirectory = ""
self.notes = ""
self.os = 2
self.CCLIAuthor = ""
self.CCLIArtistCredits = ""
self.CCLISongTitle = ""
self.CCLIPublisher = ""
self.CCLICopyrightYear = ""
self.CCLISongNumber = ""
self.chordChartPath = ""
# Create child objects here.
self.biblereference = None
self.timeline = None
self.arrangements = []
self.groups = []
if xmlelement is None:
return
# Load variables from XML.
self.deserializexml(xmlelement)
def deserializexml(self,xmlelement):
"""
:type xmlelement: xml.etree.ElementTree.Element
"""
# Load from each XML attribute.
self.versionNumber = int(xmlelement.get('versionNumber'))
self.docType = int(xmlelement.get('docType'))
self.width = int(xmlelement.get('width'))
self.height = int(xmlelement.get('height'))
self.usedCount = int(xmlelement.get('usedCount'))
self.backgroundColor = NSColor(RGBAstring=xmlelement.get('backgroundColor'))
self.buildNumber = int(xmlelement.get('buildNumber', default=str(self.buildNumber)))
self.drawingBackgroundColor = xmlelement.get('drawingBackgroundColor').lower() == 'true'
self.CCLIDisplay = xmlelement.get('CCLIDisplay').lower() == 'true'
self.lastDateUsed = RVDateTime(datetimestring=xmlelement.get('lastDateUsed'))
self.selectedArrangementID = xmlelement.get('selectedArrangementID')
self.category = xmlelement.get('category')
self.resourcesDirectory = xmlelement.get('resourcesDirectory')
self.notes = xmlelement.get('notes')
self.os = int(xmlelement.get('os', default=str(self.buildNumber)))
self.CCLIAuthor = xmlelement.get('CCLIAuthor')
self.CCLIArtistCredits = xmlelement.get('CCLIArtistCredits')
self.CCLISongTitle = xmlelement.get('CCLISongTitle')
self.CCLIPublisher = xmlelement.get('CCLIPublisher')
self.CCLICopyrightYear = xmlelement.get('CCLICopyrightYear')
self.CCLISongNumber = xmlelement.get('CCLISongNumber')
self.chordChartPath = xmlelement.get('chordChartPath')
xml_timeline = xmlelement.find("RVTimeline")
if xml_timeline is not None:
self.timeline = RVTimeline(xml_timeline)
# Build the bible reference.
xml_biblereference = xmlelement.find("RVBibleReference")
if xml_biblereference is not None:
self.biblereference = RVBibleReference(xml_biblereference)
# Use XPath to find the arrangements object and the groups object
xml_arrangements = xmlelement.find("./*[@rvXMLIvarName='arrangements']")
xml_groups = xmlelement.find("./*[@rvXMLIvarName='groups']")
# Create the slide groups.
for xml_group in xml_groups:
self.groups.append(RVSlideGrouping(xml_group))
def serializexml(self):
xmlelement = xmltree.Element('RVPresentationDocument')
xmlelement.set('versionNumber', str(self.versionNumber))
xmlelement.set('docType', str(self.docType))
xmlelement.set('drawingBackgroundColor', str(self.drawingBackgroundColor).lower())
xmlelement.set('width', str(self.width))
xmlelement.set('height', str(self.height))
xmlelement.set('usedCount', str(self.usedCount))
xmlelement.set('backgroundColor', str(self.backgroundColor))
xmlelement.set('buildNumber', str(self.buildNumber))
xmlelement.set('CCLIDisplay', str(self.CCLIDisplay).lower())
xmlelement.set('lastDateUsed', str(self.lastDateUsed))
xmlelement.set('selectedArrangementID', str(self.selectedArrangementID))
xmlelement.set('category', str(self.category))
xmlelement.set('resourcesDirectory', str(self.resourcesDirectory))
xmlelement.set('notes', str(self.notes))
xmlelement.set('os', str(self.os))
xmlelement.set('CCLIAuthor', str(self.CCLIAuthor))
xmlelement.set('CCLIArtistCredits', str(self.CCLIArtistCredits))
xmlelement.set('CCLISongTitle', str(self.CCLISongTitle))
xmlelement.set('CCLIPublisher', str(self.CCLIPublisher))
xmlelement.set('CCLICopyrightYear', str(self.CCLICopyrightYear))
xmlelement.set('CCLISongNumber', str(self.CCLISongNumber))
xmlelement.set('chordChartPath', str(self.chordChartPath))
# Serialize back out to xml.
if self.timeline is not None:
xmlelement.append(self.timeline.serializexml())
if self.biblereference is not None:
xmlelement.append(self.biblereference.serializexml())
# Serialize the groups list.
rvGroupsArrayElement = self.createarray('groups')
for cslidegroup in self.groups:
rvGroupsArrayElement.append(cslidegroup.serializexml())
xmlelement.append(rvGroupsArrayElement)
# Serialize the arrangements list.
rvArrangementsArrayElement = self.createarray('arrangements')
xmlelement.append(rvArrangementsArrayElement)
return xmlelement