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