diff -r 55ed55ef7aea -r b1705000eba1 CodeFileTreeNode.py
--- a/CodeFileTreeNode.py Sun May 12 23:32:30 2013 +0200
+++ b/CodeFileTreeNode.py Mon May 13 14:31:23 2013 +0200
@@ -2,26 +2,82 @@
from xml.dom import minidom
import cPickle
-from xmlclass import *
+from xmlclass import GenerateClassesFromXSDstring, UpdateXMLClassGlobals
from PLCControler import UndoBuffer
-from editors.CodeFileEditor import SECTIONS_NAMES
-CodeFileClasses = GenerateClassesFromXSD(os.path.join(os.path.dirname(__file__), "code_file.xsd"))
+CODEFILE_XSD = """
+
+
+
+
+ %(includes_section)s
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ %(sections)s
+
+
+
+
+
+ Formatted text according to parts of XHTML 1.1
+
+
+
+
+
+"""
+
+SECTION_TAG_ELEMENT = ""
class CodeFile:
+ CODEFILE_NAME = "CodeFile"
+ SECTIONS_NAMES = []
+
def __init__(self):
+ sections_str = {"codefile_name": self.CODEFILE_NAME}
+ if "includes" in self.SECTIONS_NAMES:
+ sections_str["includes_section"] = SECTION_TAG_ELEMENT % "includes"
+ else:
+ sections_str["includes_section"] = ""
+ sections_str["sections"] = "\n".join(
+ [SECTION_TAG_ELEMENT % name
+ for name in self.SECTIONS_NAMES if name != "includes"])
+
+ self.CodeFileClasses = GenerateClassesFromXSDstring(
+ CODEFILE_XSD % sections_str)
+
filepath = self.CodeFileName()
- self.CodeFile = CodeFileClasses["CodeFile"]()
+ self.CodeFile = self.CodeFileClasses[self.CODEFILE_NAME]()
if os.path.isfile(filepath):
xmlfile = open(filepath, 'r')
tree = minidom.parse(xmlfile)
xmlfile.close()
for child in tree.childNodes:
- if child.nodeType == tree.ELEMENT_NODE and child.nodeName in ["CodeFile", "CFile"]:
+ if child.nodeType == tree.ELEMENT_NODE and child.nodeName in [self.CODEFILE_NAME]:
self.CodeFile.loadXMLTree(child, ["xmlns", "xmlns:xsi", "xsi:schemaLocation"])
self.CreateCodeFileBuffer(True)
else:
@@ -37,7 +93,7 @@
def SetVariables(self, variables):
self.CodeFile.variables.setvariable([])
for var in variables:
- variable = CodeFileClasses["variables_variable"]()
+ variable = self.CodeFileClasses["variables_variable"]()
variable.setname(var["Name"])
variable.settype(var["Type"])
variable.setinitial(var["Initial"])
@@ -46,33 +102,21 @@
def GetVariables(self):
datas = []
for var in self.CodeFile.variables.getvariable():
- datas.append({"Name" : var.getname(), "Type" : var.gettype(), "Initial" : var.getinitial()})
+ datas.append({"Name" : var.getname(),
+ "Type" : var.gettype(),
+ "Initial" : var.getinitial()})
return datas
def SetTextParts(self, parts):
- for section, code_object in zip(
- SECTIONS_NAMES,
- [self.CodeFile.includes,
- self.CodeFile.globals,
- self.CodeFile.initFunction,
- self.CodeFile.cleanUpFunction,
- self.CodeFile.retrieveFunction,
- self.CodeFile.publishFunction]):
- code_object.settext(parts[section])
-
+ for section in self.SECTIONS_NAMES:
+ section_code = parts.get(section)
+ if section_code is not None:
+ getattr(self.CodeFile, section).settext(section_code)
+
def GetTextParts(self):
- parts = {}
- for section, code_object in zip(
- SECTIONS_NAMES,
- [self.CodeFile.includes,
- self.CodeFile.globals,
- self.CodeFile.initFunction,
- self.CodeFile.cleanUpFunction,
- self.CodeFile.retrieveFunction,
- self.CodeFile.publishFunction]):
- parts[section] = code_object.gettext()
- return parts
-
+ return dict([(section, getattr(self.CodeFile, section).gettext())
+ for section in self.SECTIONS_NAMES])
+
def CTNTestModified(self):
return self.ChangesToSave or not self.CodeFileIsSaved()
@@ -80,10 +124,7 @@
filepath = self.CodeFileName()
text = "\n"
- extras = {"xmlns":"http://www.w3.org/2001/XMLSchema",
- "xmlns:xsi":"http://www.w3.org/2001/XMLSchema-instance",
- "xsi:schemaLocation" : "code_file.xsd"}
- text += self.CodeFile.generateXMLText("CodeFile", 0, extras)
+ text += self.CodeFile.generateXMLText(self.CODEFILE_NAME, 0)
xmlfile = open(filepath,"w")
xmlfile.write(text.encode("utf-8"))
@@ -103,25 +144,33 @@
# Current Buffering Management Functions
#-------------------------------------------------------------------------------
+ def cPickle_loads(self, str_obj):
+ UpdateXMLClassGlobals(self.CodeFileClasses)
+ return cPickle.loads(str_obj)
+
+ def cPickle_dumps(self, obj):
+ UpdateXMLClassGlobals(self.CodeFileClasses)
+ return cPickle.dumps(obj)
+
"""
Return a copy of the codefile model
"""
def Copy(self, model):
- return cPickle.loads(cPickle.dumps(model))
+ return self.cPickle_loads(self.cPickle_dumps(model))
def CreateCodeFileBuffer(self, saved):
self.Buffering = False
- self.CodeFileBuffer = UndoBuffer(cPickle.dumps(self.CodeFile), saved)
+ self.CodeFileBuffer = UndoBuffer(self.cPickle_dumps(self.CodeFile), saved)
def BufferCodeFile(self):
- self.CodeFileBuffer.Buffering(cPickle.dumps(self.CodeFile))
+ self.CodeFileBuffer.Buffering(self.cPickle_dumps(self.CodeFile))
def StartBuffering(self):
self.Buffering = True
def EndBuffering(self):
if self.Buffering:
- self.CodeFileBuffer.Buffering(cPickle.dumps(self.CodeFile))
+ self.CodeFileBuffer.Buffering(self.cPickle_dumps(self.CodeFile))
self.Buffering = False
def MarkCodeFileAsSaved(self):
@@ -133,10 +182,10 @@
def LoadPrevious(self):
self.EndBuffering()
- self.CodeFile = cPickle.loads(self.CodeFileBuffer.Previous())
+ self.CodeFile = self.cPickle_loads(self.CodeFileBuffer.Previous())
def LoadNext(self):
- self.CodeFile = cPickle.loads(self.CodeFileBuffer.Next())
+ self.CodeFile = self.cPickle_loads(self.CodeFileBuffer.Next())
def GetBufferState(self):
first = self.CodeFileBuffer.IsFirst() and not self.Buffering