--- a/plcopen/plcopen.py Fri Jul 27 10:03:24 2007 +0200
+++ b/plcopen/plcopen.py Thu Aug 02 16:51:58 2007 +0200
@@ -4,7 +4,7 @@
#This file is part of PLCOpenEditor, a library implementing an IEC 61131-3 editor
#based on the plcopen standard.
#
-#Copyright (C): Edouard TISSERANT and Laurent BESSARD
+#Copyright (C) 2007: Edouard TISSERANT and Laurent BESSARD
#
#See COPYING file for copyrights details.
#
@@ -16,7 +16,7 @@
#This library is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-#Lesser General Public License for more details.
+#General Public License for more details.
#
#You should have received a copy of the GNU General Public
#License along with this library; if not, write to the Free Software
@@ -106,6 +106,18 @@
return ind1 + "<%s>%s</%s>\n"%(name, self.text, name)
setattr(cls, "generateXMLText", generateXMLText)
+ def updateElementName(self, old_name, new_name):
+ index = self.text.find(old_name)
+ while index != -1:
+ if index > 0 and (self.text[index - 1].isalnum() or self.text[index - 1] == "_"):
+ index = self.text.find(old_name, index + len(old_name))
+ elif index < len(self.text) - len(old_name) and (self.text[index + len(old_name)].isalnum() or self.text[index + len(old_name)] == "_"):
+ index = self.text.find(old_name, index + len(old_name))
+ else:
+ self.text = self.text[:index] + new_name + self.text[index + len(old_name):]
+ index = self.text.find(old_name, index + len(new_name))
+ setattr(cls, "updateElementName", updateElementName)
+
if "project" in PLCOpenClasses:
cls = PLCOpenClasses["project"]
cls.singleLineAttributes = False
@@ -233,8 +245,52 @@
raise ValueError, "\"%s\" resource doesn't exist in \"%s\" configuration !!!"%(name, config_name)
setattr(cls, "removeConfigurationResource", removeConfigurationResource)
+ def updateElementName(self, old_name, new_name):
+ for pou in self.types.getPouElements():
+ pou.updateElementName(old_name, new_name)
+ for configuration in self.instances.configurations.getConfiguration():
+ configuration.updateElementName(old_name, new_name)
+ setattr(cls, "updateElementName", updateElementName)
+
PLCOpenClasses["project_fileHeader"].singleLineAttributes = False
+if "configurations_configuration" in PLCOpenClasses:
+ cls = PLCOpenClasses["configurations_configuration"]
+
+ def updateElementName(self, old_name, new_name):
+ for resource in self.getResource():
+ resource.updateElementName(old_name, new_name)
+ setattr(cls, "updateElementName", updateElementName)
+
+
+if "configuration_resource" in PLCOpenClasses:
+ cls = PLCOpenClasses["configuration_resource"]
+
+ def updateElementName(self, old_name, new_name):
+ for instance in self.getPouInstance():
+ instance.updateElementName(old_name, new_name)
+ for task in self.getTask():
+ task.updateElementName(old_name, new_name)
+ setattr(cls, "updateElementName", updateElementName)
+
+if "resource_task" in PLCOpenClasses:
+ cls = PLCOpenClasses["resource_task"]
+
+ def updateElementName(self, old_name, new_name):
+ if self.single == old_name:
+ self.single = new_name
+ for instance in self.getPouInstance():
+ instance.updateElementName(old_name, new_name)
+ setattr(cls, "updateElementName", updateElementName)
+
+if "pouInstance" in PLCOpenClasses:
+ cls = PLCOpenClasses["pouInstance"]
+
+ def updateElementName(self, old_name, new_name):
+ if self.type == old_name:
+ self.type = new_name
+ setattr(cls, "updateElementName", updateElementName)
+
if "project_types" in PLCOpenClasses:
cls = PLCOpenClasses["project_types"]
@@ -425,6 +481,14 @@
raise ValueError, "Action with name %s doesn't exists!"%name
setattr(cls, "removeAction", removeAction)
+ def updateElementName(self, old_name, new_name):
+ self.body.updateElementName(old_name, new_name)
+ for action in self.getActionList():
+ action.updateElementName(old_name, new_name)
+ for transition in self.getTransitionList():
+ transition.updateElementName(old_name, new_name)
+ setattr(cls, "updateElementName", updateElementName)
+
if "transitions_transition" in PLCOpenClasses:
cls = PLCOpenClasses["transitions_transition"]
@@ -439,6 +503,10 @@
setattr(cls, "setText", setText)
setattr(cls, "getText", getText)
+ def updateElementName(self, old_name, new_name):
+ self.body.updateElementName(old_name, new_name)
+ setattr(cls, "updateElementName", updateElementName)
+
if "actions_action" in PLCOpenClasses:
cls = PLCOpenClasses["actions_action"]
@@ -453,6 +521,10 @@
setattr(cls, "setText", setText)
setattr(cls, "getText", getText)
+ def updateElementName(self, old_name, new_name):
+ self.body.updateElementName(old_name, new_name)
+ setattr(cls, "updateElementName", updateElementName)
+
if "body" in PLCOpenClasses:
cls = PLCOpenClasses["body"]
@@ -531,6 +603,14 @@
else:
raise TypeError, "%s body don't have text!"%self.content["name"]
setattr(cls, "getText", getText)
+
+ def updateElementName(self, old_name, new_name):
+ if self.content["name"] in ["IL", "ST"]:
+ self.content["value"].updateElementName(old_name, new_name)
+ else:
+ for element in self.content["value"].getContent():
+ element["value"].updateElementName(old_name, new_name)
+ setattr(cls, "updateElementName", updateElementName)
def getX(self):
return self.position.getX()
@@ -558,6 +638,10 @@
def getContentText(self):
return self.content.getText()
setattr(cls, "getContentText", getContentText)
+
+ def updateElementName(self, old_name, new_name):
+ self.content.updateElementName(old_name, new_name)
+ setattr(cls, "updateElementName", updateElementName)
if "block" in PLCOpenClasses:
cls = PLCOpenClasses["block"]
@@ -566,6 +650,11 @@
setattr(cls, "setX", setX)
setattr(cls, "setY", setY)
+ def updateElementName(self, old_name, new_name):
+ if self.typeName == old_name:
+ self.typeName = new_name
+ setattr(cls, "updateElementName", updateElementName)
+
if "inputVariables_variable" in PLCOpenClasses:
cls = PLCOpenClasses["inputVariables_variable"]
@@ -603,6 +692,10 @@
setattr(cls, "setX", setX)
setattr(cls, "setY", setY)
+ def updateElementName(self, old_name, new_name):
+ pass
+ setattr(cls, "updateElementName", updateElementName)
+
if "contact" in PLCOpenClasses:
cls = PLCOpenClasses["contact"]
setattr(cls, "getX", getX)
@@ -622,6 +715,11 @@
return None
setattr(cls, "getContactEdge", getContactEdge)
+ def updateElementName(self, old_name, new_name):
+ if self.variable == old_name:
+ self.variable = new_name
+ setattr(cls, "updateElementName", updateElementName)
+
if "coil" in PLCOpenClasses:
cls = PLCOpenClasses["coil"]
setattr(cls, "getX", getX)
@@ -641,12 +739,21 @@
return None
setattr(cls, "getCoilStorage", getCoilStorage)
+ def updateElementName(self, old_name, new_name):
+ if self.variable == old_name:
+ self.variable = new_name
+ setattr(cls, "updateElementName", updateElementName)
+
if "rightPowerRail" in PLCOpenClasses:
cls = PLCOpenClasses["rightPowerRail"]
setattr(cls, "getX", getX)
setattr(cls, "getY", getY)
setattr(cls, "setX", setX)
setattr(cls, "setY", setY)
+
+ def updateElementName(self, old_name, new_name):
+ pass
+ setattr(cls, "updateElementName", updateElementName)
if "step" in PLCOpenClasses:
cls = PLCOpenClasses["step"]
@@ -655,6 +762,10 @@
setattr(cls, "setX", setX)
setattr(cls, "setY", setY)
+ def updateElementName(self, old_name, new_name):
+ pass
+ setattr(cls, "updateElementName", updateElementName)
+
if "transition" in PLCOpenClasses:
cls = PLCOpenClasses["transition"]
setattr(cls, "getX", getX)
@@ -687,6 +798,16 @@
return ""
setattr(cls, "getConditionContent", getConditionContent)
+ def updateElementName(self, old_name, new_name):
+ if self.condition:
+ content = self.condition.getContent()
+ if content["name"] == "reference":
+ if content["value"].getName() == old_name:
+ content["value"].setName(new_name)
+ elif content["name"] == "inline":
+ content["value"].updateElementName(old_name, new_name)
+ setattr(cls, "updateElementName", updateElementName)
+
if "selectionDivergence" in PLCOpenClasses:
cls = PLCOpenClasses["selectionDivergence"]
setattr(cls, "getX", getX)
@@ -694,6 +815,10 @@
setattr(cls, "setX", setX)
setattr(cls, "setY", setY)
+ def updateElementName(self, old_name, new_name):
+ pass
+ setattr(cls, "updateElementName", updateElementName)
+
if "selectionConvergence" in PLCOpenClasses:
cls = PLCOpenClasses["selectionConvergence"]
setattr(cls, "getX", getX)
@@ -701,6 +826,10 @@
setattr(cls, "setX", setX)
setattr(cls, "setY", setY)
+ def updateElementName(self, old_name, new_name):
+ pass
+ setattr(cls, "updateElementName", updateElementName)
+
if "simultaneousDivergence" in PLCOpenClasses:
cls = PLCOpenClasses["simultaneousDivergence"]
setattr(cls, "getX", getX)
@@ -708,12 +837,20 @@
setattr(cls, "setX", setX)
setattr(cls, "setY", setY)
+ def updateElementName(self, old_name, new_name):
+ pass
+ setattr(cls, "updateElementName", updateElementName)
+
if "simultaneousDivergence" in PLCOpenClasses:
cls = PLCOpenClasses["simultaneousConvergence"]
setattr(cls, "getX", getX)
setattr(cls, "getY", getY)
setattr(cls, "setX", setX)
setattr(cls, "setY", setY)
+
+ def updateElementName(self, old_name, new_name):
+ pass
+ setattr(cls, "updateElementName", updateElementName)
if "jumpStep" in PLCOpenClasses:
cls = PLCOpenClasses["jumpStep"]
@@ -721,6 +858,11 @@
setattr(cls, "getY", getY)
setattr(cls, "setX", setX)
setattr(cls, "setY", setY)
+
+ def updateElementName(self, old_name, new_name):
+ pass
+ setattr(cls, "updateElementName", updateElementName)
+
if "actionBlock_action" in PLCOpenClasses:
cls = PLCOpenClasses["actionBlock_action"]
@@ -759,6 +901,13 @@
return None
setattr(cls, "getInlineContent", getInlineContent)
+ def updateElementName(self, old_name, new_name):
+ if self.reference and self.reference.getName() == old_name:
+ self.reference.setName(new_name)
+ if self.inline:
+ self.inline.updateElementName(old_name, new_name)
+ setattr(cls, "updateElementName", updateElementName)
+
if "actionBlock" in PLCOpenClasses:
cls = PLCOpenClasses["actionBlock"]
setattr(cls, "getX", getX)
@@ -806,6 +955,11 @@
return actions
setattr(cls, "getActions", getActions)
+ def updateElementName(self, old_name, new_name):
+ for action in self.action:
+ action.updateElementName(old_name, new_name)
+ setattr(cls, "updateElementName", updateElementName)
+
if "inVariable" in PLCOpenClasses:
cls = PLCOpenClasses["inVariable"]
setattr(cls, "getX", getX)
@@ -824,6 +978,11 @@
return self.edge.getValue()
return None
setattr(cls, "getConnectorEdge", getConnectorEdge)
+
+ def updateElementName(self, old_name, new_name):
+ if self.expression == old_name:
+ self.expression = new_name
+ setattr(cls, "updateElementName", updateElementName)
if "outVariable" in PLCOpenClasses:
cls = PLCOpenClasses["outVariable"]
@@ -844,6 +1003,11 @@
return None
setattr(cls, "getConnectorEdge", getConnectorEdge)
+ def updateElementName(self, old_name, new_name):
+ if self.expression == old_name:
+ self.expression = new_name
+ setattr(cls, "updateElementName", updateElementName)
+
if "inOutVariable" in PLCOpenClasses:
cls = PLCOpenClasses["inOutVariable"]
setattr(cls, "getX", getX)
@@ -875,12 +1039,21 @@
return None
setattr(cls, "getOutputEdge", getOutputEdge)
+ def updateElementName(self, old_name, new_name):
+ if self.expression == old_name:
+ self.expression = new_name
+ setattr(cls, "updateElementName", updateElementName)
+
if "continuation" in PLCOpenClasses:
cls = PLCOpenClasses["continuation"]
setattr(cls, "getX", getX)
setattr(cls, "getY", getY)
setattr(cls, "setX", setX)
setattr(cls, "setY", setY)
+
+ def updateElementName(self, old_name, new_name):
+ pass
+ setattr(cls, "updateElementName", updateElementName)
if "connector" in PLCOpenClasses:
cls = PLCOpenClasses["connector"]
@@ -888,6 +1061,10 @@
setattr(cls, "getY", getY)
setattr(cls, "setX", setX)
setattr(cls, "setY", setY)
+
+ def updateElementName(self, old_name, new_name):
+ pass
+ setattr(cls, "updateElementName", updateElementName)
if "connection" in PLCOpenClasses:
cls = PLCOpenClasses["connection"]