1 # -*- coding: utf-8 -*- |
|
2 |
|
3 # Copyright (c) 2008 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> |
|
4 # |
|
5 |
|
6 """ |
|
7 Module implementing the writer class for writing an XML multi project file. |
|
8 """ |
|
9 |
|
10 import os |
|
11 import time |
|
12 |
|
13 from .XMLStreamWriterBase import XMLStreamWriterBase |
|
14 from .Config import multiProjectFileFormatVersion |
|
15 |
|
16 import Preferences |
|
17 import Utilities |
|
18 |
|
19 |
|
20 class MultiProjectWriter(XMLStreamWriterBase): |
|
21 """ |
|
22 Class implementing the writer class for writing an XML project file. |
|
23 """ |
|
24 def __init__(self, device, multiProject, multiProjectName): |
|
25 """ |
|
26 Constructor |
|
27 |
|
28 @param device reference to the I/O device to write to (QIODevice) |
|
29 @param multiProject Reference to the multi project object |
|
30 @param multiProjectName name of the project (string) |
|
31 """ |
|
32 XMLStreamWriterBase.__init__(self, device) |
|
33 |
|
34 self.name = multiProjectName |
|
35 self.multiProject = multiProject |
|
36 self.path = os.path.dirname(device.fileName()) |
|
37 |
|
38 def writeXML(self): |
|
39 """ |
|
40 Public method to write the XML to the file. |
|
41 """ |
|
42 XMLStreamWriterBase.writeXML(self) |
|
43 |
|
44 self.writeDTD('<!DOCTYPE MultiProject SYSTEM "MultiProject-{0}.dtd">' |
|
45 .format(multiProjectFileFormatVersion)) |
|
46 |
|
47 # add some generation comments |
|
48 self.writeComment(" eric multi project file for multi project {0} " |
|
49 .format(self.name)) |
|
50 if Preferences.getMultiProject("TimestampFile"): |
|
51 self.writeComment( |
|
52 " Saved: {0} ".format(time.strftime('%Y-%m-%d, %H:%M:%S'))) |
|
53 self.writeComment( |
|
54 " Copyright (C) {0} ".format(time.strftime('%Y'))) |
|
55 |
|
56 # add the main tag |
|
57 self.writeStartElement("MultiProject") |
|
58 self.writeAttribute("version", multiProjectFileFormatVersion) |
|
59 |
|
60 # do description |
|
61 self.writeTextElement("Description", self.multiProject.description) |
|
62 |
|
63 # do the projects |
|
64 self.writeStartElement("Projects") |
|
65 for project in self.multiProject.getProjects(): |
|
66 self.writeStartElement("Project") |
|
67 self.writeAttribute("isMaster", str(project['master'])) |
|
68 self.writeAttribute("uid", project["uid"]) |
|
69 self.writeTextElement("ProjectName", project['name']) |
|
70 self.writeTextElement( |
|
71 "ProjectFile", |
|
72 Utilities.relativeUniversalPath(project['file'], self.path)) |
|
73 self.writeTextElement("ProjectDescription", project['description']) |
|
74 self.writeTextElement("ProjectCategory", project['category']) |
|
75 self.writeEndElement() |
|
76 self.writeEndElement() |
|
77 |
|
78 self.writeEndElement() |
|
79 self.writeEndDocument() |
|