diff -r b67a5de5a24a -r 4fb225afddf4 plcopen/plcopen.py --- 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()