diff ide/project.py @ 7:2db4d2b362e6

Added xml project
author windel
date Sat, 15 Oct 2011 10:03:21 +0200
parents
children edd70006d3e4
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ide/project.py	Sat Oct 15 10:03:21 2011 +0200
@@ -0,0 +1,60 @@
+"""
+ Project that can be stored to and loaded from XML.
+"""
+
+from xml.sax import ContentHandler, make_parser
+import xml.dom.minidom as md
+import os.path
+
+class ProjectContentHandler(ContentHandler):
+   def __init__(self, project):
+      self.project =  project
+      self.inFiles = False
+   def startElement(self, name, attrs):
+      if name == 'Project':
+         self.project.name = attrs['name']
+      if name == 'Files':
+         self.inFiles = True
+      if name == 'File' and self.inFiles:
+         self.project.files.append(attrs['Filename'])
+   def endElement(self, name):
+      if name == 'Files':
+         self.inFiles = False
+
+class Project:
+   def __init__(self):
+      self.name = ""
+      self.files = []
+      self.settings = {}
+
+   def save(self, filename):
+      """ Save the project in XML format """
+      # Create document:
+      doc = md.Document()
+      # Add project:
+      project = doc.createElement("Project")
+      project.setAttribute("name", self.name)
+      doc.appendChild(project)
+
+      # Add project files:
+      filesNode = doc.createElement("Files")
+      project.appendChild(filesNode)
+      for f in self.files:
+         fe = doc.createElement("File")
+         fe.setAttribute("Filename", f)
+         filesNode.appendChild(fe)
+
+      # Write the XML file:
+      xml = doc.toprettyxml()
+      with open(filename, 'w') as f:
+         f.write(xml)
+
+   def load(self, filename):
+      """ Load the project from the XML file """
+      if not os.path.exists(filename):
+         return
+      parser = make_parser()
+      handler = ProjectContentHandler(self)
+      parser.setContentHandler(handler)
+      parser.parse(filename)
+