--- a/plcopen/plcopen.py Fri Jan 04 17:49:17 2008 +0100
+++ b/plcopen/plcopen.py Fri Jan 11 17:51:56 2008 +0100
@@ -91,6 +91,14 @@
if cls:
cls.singleLineAttributes = False
+ def setName(self, name):
+ self.contentHeader.setName(name)
+ setattr(cls, "setName", setName)
+
+ def getName(self):
+ return self.contentHeader.getName()
+ setattr(cls, "getName", getName)
+
def getFileHeader(self):
fileheader = {}
fileheader["companyName"] = self.fileHeader.getCompanyName()
@@ -119,14 +127,40 @@
self.fileHeader.setContentDescription(fileheader["contentDescription"])
setattr(cls, "setFileHeader", setFileHeader)
- def setName(self, name):
- self.contentHeader.setName(name)
- setattr(cls, "setName", setName)
-
- def getName(self):
- return self.contentHeader.getName()
- setattr(cls, "getName", getName)
-
+ def getContentHeader(self):
+ contentheader = {}
+ contentheader["projectName"] = self.contentHeader.getName()
+ if self.contentHeader.getVersion():
+ contentheader["projectVersion"] = self.contentHeader.getVersion()
+ if self.contentHeader.getModificationDateTime():
+ contentheader["modificationDateTime"] = self.contentHeader.getModificationDateTime()
+ if self.contentHeader.getOrganization():
+ contentheader["organization"] = self.contentHeader.getOrganization()
+ if self.contentHeader.getAuthor():
+ contentheader["authorName"] = self.contentHeader.getAuthor()
+ if self.contentHeader.getLanguage():
+ contentheader["language"] = self.contentHeader.getLanguage()
+ contentheader["pageSize"] = self.contentHeader.getPageSize()
+ contentheader["scaling"] = self.contentHeader.getScaling()
+ return contentheader
+ setattr(cls, "getContentHeader", getContentHeader)
+
+ def setContentHeader(self, contentheader):
+ self.contentHeader.setName(contentheader["projectName"])
+ if "projectVersion" in contentheader:
+ self.contentHeader.setVersion(contentheader["projectVersion"])
+ if "modificationDateTime" in contentheader:
+ self.contentHeader.setModificationDateTime(contentheader["modificationDateTime"])
+ if "organization" in contentheader:
+ self.contentHeader.setOrganization(contentheader["organization"])
+ if "authorName" in contentheader:
+ self.contentHeader.setAuthor(contentheader["authorName"])
+ if "language" in contentheader:
+ self.contentHeader.setLanguage(contentheader["language"])
+ self.contentHeader.setPageSize(*contentheader["pageSize"])
+ self.contentHeader.setScaling(contentheader["scaling"])
+ setattr(cls, "setContentHeader", setContentHeader)
+
def getDataTypes(self):
return self.types.getDataTypeElements()
setattr(cls, "getDataTypes", getDataTypes)
@@ -219,7 +253,7 @@
new_resource = PLCOpenClasses["configuration_resource"]()
new_resource.setName(name)
configuration.appendResource(new_resource)
- setattr(cls, "addConfigurationResource", addConfigurationResource)
+ setattr(cls, "addConfigurationResource", addConfigurationResource)
def removeConfigurationResource(self, config_name, name):
configuration = self.getConfiguration(config_name)
@@ -245,6 +279,71 @@
if cls:
cls.singleLineAttributes = False
+cls = PLCOpenClasses.get("project_contentHeader", None)
+if cls:
+ cls.singleLineAttributes = False
+
+ def setPageSize(self, width, height):
+ self.coordinateInfo.setPageSize(width, height)
+ setattr(cls, "setPageSize", setPageSize)
+
+ def getPageSize(self):
+ return self.coordinateInfo.getPageSize()
+ setattr(cls, "getPageSize", getPageSize)
+
+ def setScaling(self, scaling):
+ for language, (x, y) in scaling.items():
+ self.coordinateInfo.setScaling(language, x, y)
+ setattr(cls, "setScaling", setScaling)
+
+ def getScaling(self):
+ scaling = {}
+ scaling["FBD"] = self.coordinateInfo.getScaling("FBD")
+ scaling["LD"] = self.coordinateInfo.getScaling("LD")
+ scaling["SFC"] = self.coordinateInfo.getScaling("SFC")
+ return scaling
+ setattr(cls, "getScaling", getScaling)
+
+cls = PLCOpenClasses.get("contentHeader_coordinateInfo", None)
+if cls:
+ def setPageSize(self, width, height):
+ if width == 0 and height == 0:
+ self.deletePageSize()
+ else:
+ if self.pageSize is None:
+ self.addPageSize()
+ self.pageSize.setX(width)
+ self.pageSize.setY(height)
+ setattr(cls, "setPageSize", setPageSize)
+
+ def getPageSize(self):
+ if self.pageSize is not None:
+ return self.pageSize.getX(), self.pageSize.getY()
+ return 0, 0
+ setattr(cls, "getPageSize", getPageSize)
+
+ def setScaling(self, language, x, y):
+ if language == "FBD":
+ self.fbd.scaling.setX(x)
+ self.fbd.scaling.setY(y)
+ elif language == "LD":
+ self.ld.scaling.setX(x)
+ self.ld.scaling.setY(y)
+ elif language == "SFC":
+ self.sfc.scaling.setX(x)
+ self.sfc.scaling.setY(y)
+ setattr(cls, "setScaling", setScaling)
+
+ def getScaling(self, language):
+ if language == "FBD":
+ return self.fbd.scaling.getX(), self.fbd.scaling.getY()
+ elif language == "LD":
+ return self.ld.scaling.getX(), self.ld.scaling.getY()
+ elif language == "SFC":
+ return self.sfc.scaling.getX(), self.sfc.scaling.getY()
+ return 0, 0
+ setattr(cls, "getScaling", getScaling)
+
cls = PLCOpenClasses.get("configurations_configuration", None)
if cls:
def updateElementName(self, old_name, new_name):
@@ -1455,13 +1554,27 @@
return self.content["value"].getValue()
setattr(cls, "getValue", getValue)
+def extractValues(self, values):
+ items = values.split(",")
+ i = 1
+ while i < len(items):
+ opened = items[i - 1].count("(") + items[i - 1].count("[")
+ closed = items[i - 1].count(")") + items[i - 1].count("]")
+ if opened > closed:
+ items[i - 1] = ','.join([items[i - 1], items.pop(i)])
+ elif opened == closed:
+ i += 1
+ else:
+ raise ValueError, "\"%s\" is an invalid value!"%value
+ return items
+
cls = PLCOpenClasses.get("value_arrayValue", None)
if cls:
- arrayValue_model = re.compile("([0-9]*)\((.*)\)")
+ arrayValue_model = re.compile("([0-9]*)\((.*)\)$")
def setValue(self, value):
self.value = []
- for item in value[1:-1].split(","):
+ for item in extractValues(value[1:-1]):
item = item.strip()
element = PLCOpenClasses["arrayValue_value"]()
result = arrayValue_model.match(item)
@@ -1491,7 +1604,7 @@
def setValue(self, value):
self.value = []
- for item in value[1:-1].split(","):
+ for item in extractValues(value[1:-1]):
result = arrayValue_model.match(item)
if result is not None:
groups = result.groups()