graphics/SFC_Objects.py
changeset 112 317148fc1225
parent 110 29b6b70e1721
child 127 436268f31dae
--- 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)