--- a/graphics/SFC_Objects.py Fri Oct 19 17:08:46 2007 +0200
+++ b/graphics/SFC_Objects.py Wed Oct 24 15:59:46 2007 +0200
@@ -64,6 +64,17 @@
self.Output = None
self.Action = None
+ # Make a clone of this SFC_Step
+ def Clone(self, id = None, pos = None):
+ step = SFC_Step(self.Parent, self.Type, self.Name, id)
+ step.SetSize(self.Size[0], self.Size[1])
+ if pos is not None:
+ step.SetPosition(pos.x, pos.y)
+ step.Input = self.Input.Clone(step)
+ step.Output = self.Output.Clone(step)
+ step.Action = self.Action.Clone(step)
+ return step
+
# Delete this step by calling the appropriate method
def Delete(self):
self.Parent.DeleteStep(self)
@@ -462,6 +473,16 @@
if self.Type == "connection":
self.Condition = None
+ # Make a clone of this SFC_Transition
+ def Clone(self, id = None, pos = None):
+ transition = SFC_Transition(self.Parent, self.Type, self.Condition, self.Priority, id)
+ transition.SetSize(self.Size[0], self.Size[1])
+ if pos is not None:
+ transition.SetPosition(pos.x, pos.y)
+ transition.Input = self.Input.Clone(transition)
+ transition.Output = self.Output.Clone(transition)
+ return transition
+
# Forbids to change the transition size
def SetSize(self, width, height):
if self.Parent.GetDrawingMode() == FREEDRAWING_MODE:
@@ -799,6 +820,16 @@
self.Inputs = []
self.Outputs = []
+ # Make a clone of this SFC_Divergence
+ def Clone(self, id = None, pos = None):
+ divergence = SFC_Divergence(self.Parent, self.Type, max(len(self.Inputs), len(self.Outputs)), id)
+ divergence.SetSize(self.Size[0], self.Size[1])
+ if pos is not None:
+ divergence.SetPosition(pos.x, pos.y)
+ divergence.Inputs = [input.Clone(divergence) for input in self.Inputs]
+ divergence.Outputs = [output.Clone(divergence) for output in self.Outputs]
+ return divergence
+
# Forbids to resize the divergence
def Resize(self, x, y, width, height):
if self.Parent.GetDrawingMode() == FREEDRAWING_MODE:
@@ -1173,6 +1204,15 @@
def __del__(self):
self.Input = None
+ # Make a clone of this SFC_Jump
+ def Clone(self, id = None, pos = None):
+ jump = SFC_Jump(self.Parent, self.Target, id)
+ jump.SetSize(self.Size[0], self.Size[1])
+ if pos is not None:
+ jump.SetPosition(pos.x, pos.y)
+ jump.Input = self.Input.Clone(jump)
+ return jump
+
# Forbids to change the jump size
def SetSize(self, width, height):
if self.Parent.GetDrawingMode() == FREEDRAWING_MODE:
@@ -1346,6 +1386,16 @@
def __del__(self):
self.Input = None
+ # Make a clone of this SFC_ActionBlock
+ def Clone(self, id = None, pos = None):
+ actions = [action.copy() for action in self.Actions]
+ action_block = SFC_ActionBlock(self.Parent, actions, id)
+ action_block.SetSize(self.Size[0], self.Size[1])
+ if pos is not None:
+ action_block.SetPosition(pos.x, pos.y)
+ action_block.Input = self.Input.Clone(action_block)
+ return jump
+
# Returns the number of action lines
def GetLineNumber(self):
return len(self.Actions)