SFCViewer.py
changeset 28 fc23e1f415d8
parent 27 dae55dd9ee14
child 42 4a8400732001
--- a/SFCViewer.py	Mon Jul 09 11:10:14 2007 +0200
+++ b/SFCViewer.py	Tue Jul 10 09:52:53 2007 +0200
@@ -767,78 +767,230 @@
 #-------------------------------------------------------------------------------
 
     def DeleteStep(self, step):
-        step_connectors = step.GetConnectors()
-        if not step.GetInitial() or not step_connectors["output"]:
-            previous = step.GetPreviousConnector()
-            if previous:
-                previous_block = previous.GetParentBlock()
-            else:
-                previous_block = None
-            next = step.GetNextConnector()
-            if next:
-                next_block = next.GetParentBlock()
-            else:
-                next_block = None
-            if isinstance(next_block, SFC_Transition):
-                self.RemoveTransition(next_block)
+        if self.GetDrawingMode() == FREEDRAWING_MODE:
+            Viewer.DeleteStep(self, step)
+        else:
+            step_connectors = step.GetConnectors()
+            if not step.GetInitial() or not step_connectors["output"]:
+                previous = step.GetPreviousConnector()
+                if previous:
+                    previous_block = previous.GetParentBlock()
+                else:
+                    previous_block = None
                 next = step.GetNextConnector()
                 if next:
                     next_block = next.GetParentBlock()
                 else:
                     next_block = None
-            elif isinstance(previous_block, SFC_Transition):
-                self.RemoveTransition(previous_block)
-                previous = step.GetPreviousConnector()
-                if previous:
-                    previous_block = previous.GetParentBlock()
-                else:
-                    previous_block = None
-            wire = self.RemoveStep(step)
-            self.SelectedElement = None
-            if next_block:
-                if isinstance(next_block, SFC_Divergence) and next_block.GetType() == SIMULTANEOUS_CONVERGENCE and isinstance(previous_block, SFC_Divergence) and previous_block.GetType() == SIMULTANEOUS_DIVERGENCE:
-                    wire.Clean()
-                    self.Wires.remove(wire)
-                    self.Elements.remove(wire)
-                    next_block.RemoveBranch(next)
-                    if next_block.GetBranchNumber() < 2:
-                        self.DeleteDivergence(next_block)
+                if isinstance(next_block, SFC_Transition):
+                    self.RemoveTransition(next_block)
+                    next = step.GetNextConnector()
+                    if next:
+                        next_block = next.GetParentBlock()
                     else:
-                        next_block.RefreshModel()
-                    previous_block.RemoveBranch(previous)
-                    if previous_block.GetBranchNumber() < 2:
-                        self.DeleteDivergence(previous_block)
+                        next_block = None
+                elif isinstance(previous_block, SFC_Transition):
+                    self.RemoveTransition(previous_block)
+                    previous = step.GetPreviousConnector()
+                    if previous:
+                        previous_block = previous.GetParentBlock()
                     else:
-                        previous_block.RefreshModel()
-                else:
-                    pos = previous.GetPosition(False)
-                    next_pos = next.GetPosition(False)
-                    wire_size = GetWireSize(previous_block)
-                    previous_block.RefreshOutputPosition((0, pos.y + wire_size - next_pos.y))
-                    wire.SetPoints([wxPoint(pos.x, pos.y + wire_size), wxPoint(pos.x, pos.y)])
-                    if isinstance(next_block, SFC_Divergence):
-                        next_block.RefreshPosition()
-                    previous_block.RefreshOutputModel(True)
-            else:
-                if isinstance(previous_block, SFC_Step):
-                    previous_block.RemoveOutput()
-                    self.RefreshStepModel(previous_block)
-                elif isinstance(previous_block, SFC_Divergence):
-                    if previous_block.GetType() in [SELECTION_CONVERGENCE, SIMULTANEOUS_CONVERGENCE]:
-                        self.DeleteDivergence(previous_block)
-                    else:
+                        previous_block = None
+                wire = self.RemoveStep(step)
+                self.SelectedElement = None
+                if next_block:
+                    if isinstance(next_block, SFC_Divergence) and next_block.GetType() == SIMULTANEOUS_CONVERGENCE and isinstance(previous_block, SFC_Divergence) and previous_block.GetType() == SIMULTANEOUS_DIVERGENCE:
+                        wire.Clean()
+                        self.Wires.remove(wire)
+                        self.Elements.remove(wire)
+                        next_block.RemoveBranch(next)
+                        if next_block.GetBranchNumber() < 2:
+                            self.DeleteDivergence(next_block)
+                        else:
+                            next_block.RefreshModel()
                         previous_block.RemoveBranch(previous)
                         if previous_block.GetBranchNumber() < 2:
                             self.DeleteDivergence(previous_block)
                         else:
-                            self.RefreshDivergenceModel(previous_block)
+                            previous_block.RefreshModel()
+                    else:
+                        pos = previous.GetPosition(False)
+                        next_pos = next.GetPosition(False)
+                        wire_size = GetWireSize(previous_block)
+                        previous_block.RefreshOutputPosition((0, pos.y + wire_size - next_pos.y))
+                        wire.SetPoints([wxPoint(pos.x, pos.y + wire_size), wxPoint(pos.x, pos.y)])
+                        if isinstance(next_block, SFC_Divergence):
+                            next_block.RefreshPosition()
+                        previous_block.RefreshOutputModel(True)
+                else:
+                    if isinstance(previous_block, SFC_Step):
+                        previous_block.RemoveOutput()
+                        self.RefreshStepModel(previous_block)
+                    elif isinstance(previous_block, SFC_Divergence):
+                        if previous_block.GetType() in [SELECTION_CONVERGENCE, SIMULTANEOUS_CONVERGENCE]:
+                            self.DeleteDivergence(previous_block)
+                        else:
+                            previous_block.RemoveBranch(previous)
+                            if previous_block.GetBranchNumber() < 2:
+                                self.DeleteDivergence(previous_block)
+                            else:
+                                self.RefreshDivergenceModel(previous_block)
         
     def DeleteTransition(self, transition):
-        previous = transition.GetPreviousConnector()
-        previous_block = previous.GetParentBlock()
-        next = transition.GetNextConnector()
-        next_block = next.GetParentBlock()
-        if isinstance(previous_block, SFC_Divergence) and previous_block.GetType() == SELECTION_DIVERGENCE and isinstance(next_block, SFC_Divergence) and next_block.GetType() == SELECTION_CONVERGENCE:
+        if self.GetDrawingMode() == FREEDRAWING_MODE:
+            Viewer.DeleteTransition(self, transition)
+        else:
+            previous = transition.GetPreviousConnector()
+            previous_block = previous.GetParentBlock()
+            next = transition.GetNextConnector()
+            next_block = next.GetParentBlock()
+            if isinstance(previous_block, SFC_Divergence) and previous_block.GetType() == SELECTION_DIVERGENCE and isinstance(next_block, SFC_Divergence) and next_block.GetType() == SELECTION_CONVERGENCE:
+                wires = previous.GetWires()
+                if len(wires) != 1:
+                    return
+                wire = wires[0][0]
+                wire.Clean()
+                self.Wires.remove(wire)
+                self.Elements.remove(wire)
+                wires = next.GetWires()
+                if len(wires) != 1:
+                    return
+                wire = wires[0][0]
+                wire.Clean()
+                self.Wires.remove(wire)
+                self.Elements.remove(wire)
+                transition.Clean()
+                self.Blocks.remove(transition)
+                self.Elements.remove(transition)
+                self.Controler.RemoveCurrentElementEditingInstance(transition.GetId())
+                previous_block.RemoveBranch(previous)
+                if previous_block.GetBranchNumber() < 2:
+                    self.DeleteDivergence(previous_block)
+                else:
+                    self.RefreshDivergenceModel(previous_block)
+                next_block.RemoveBranch(next)
+                if next_block.GetBranchNumber() < 2:
+                    self.DeleteDivergence(next_block)
+                else:
+                    self.RefreshDivergenceModel(next_block)
+            self.Parent.RefreshProjectTree()
+
+    def DeleteDivergence(self, divergence):
+        if self.GetDrawingMode() == FREEDRAWING_MODE:
+            Viewer.DeleteDivergence(self, divergence)
+        else:
+            connectors = divergence.GetConnectors()
+            type = divergence.GetType()
+            if type in [SELECTION_CONVERGENCE, SIMULTANEOUS_CONVERGENCE]:
+                wires = connectors["outputs"][0].GetWires()
+                if len(wires) > 1:
+                    return
+                elif len(wires) == 1:
+                    next = wires[0][0].StartConnected
+                    next_block = next.GetParentBlock()
+                    wire = wires[0][0]
+                    wire.Clean()
+                    self.Wires.remove(wire)
+                    self.Elements.remove(wire)
+                else:
+                    next = None
+                    next_block = None
+                for index, connector in enumerate(connectors["inputs"]):
+                    if next and index == 0:
+                        wires = connector.GetWires()
+                        wire = wires[0][0]
+                        previous = wires[0][0].EndConnected
+                        wire.Clean()
+                        self.Wires.remove(wire)
+                        self.Elements.remove(wire)
+                    else:
+                        if type == SELECTION_CONVERGENCE:
+                            wires = connector.GetWires()
+                            previous_block = wires[0][0].EndConnected.GetParentBlock()
+                            self.RemoveTransition(previous_block)
+                        wires = connector.GetWires()
+                        wire = wires[0][0]
+                        previous_connector = wire.EndConnected
+                        previous_block = previous_connector.GetParentBlock()
+                        wire.Clean()
+                        self.Wires.remove(wire)
+                        self.Elements.remove(wire)
+                        if isinstance(previous_block, SFC_Step):
+                            previous_block.RemoveOutput()
+                            self.RefreshStepModel(previous_block)
+                        elif isinstance(previous_block, SFC_Divergence):
+                            if previous_block.GetType() in [SELECTION_DIVERGENCE, SIMULTANEOUS_DIVERGENCE]:
+                                previous_block.RemoveBranch(previous_connector)
+                                if previous_block.GetBranchNumber() < 2:
+                                    self.DeleteDivergence(previous_block)
+                                else:
+                                    self.RefreshDivergenceModel(previous_block)
+                            else:
+                                self.DeleteDivergence(previous_block)
+                divergence.Clean()
+                self.Blocks.remove(divergence)
+                self.Elements.remove(divergence)
+                self.Controler.RemoveCurrentElementEditingInstance(divergence.GetId())
+                if next:
+                    wire = self.ConnectConnectors(next, previous)
+                    previous_block = previous.GetParentBlock()
+                    pos = previous.GetPosition(False)
+                    next_pos = next.GetPosition(False)
+                    wire_size = GetWireSize(previous_block)
+                    previous_block.RefreshOutputPosition((0, previous_pos.y + wire_size - next_pos.y))
+                    wire.SetPoints([wxPoint(previous_pos.x, previous_pos.y + wire_size), 
+                        wxPoint(previous_pos.x, previous_pos.y)])
+                    if isinstance(next_block, SFC_Divergence):
+                        next_block.RefreshPosition()
+                    previous_block.RefreshOutputModel(True)
+            elif divergence.GetBranchNumber() == 1:
+                wires = connectors["inputs"][0].GetWires()
+                if len(wires) != 1:
+                    return
+                wire = wires[0][0]
+                previous = wire.EndConnected
+                previous_block = previous.GetParentBlock()
+                wire.Clean()
+                self.Wires.remove(wire)
+                self.Elements.remove(wire)
+                wires = connectors["outputs"][0].GetWires()
+                if len(wires) != 1:
+                    return
+                wire = wires[0][0]
+                next = wire.StartConnected
+                next_block = next.GetParentBlock()
+                wire.Clean()
+                self.Wires.remove(wire)
+                self.Elements.remove(wire)
+                divergence.Clean()
+                self.Blocks.remove(divergence)
+                self.Elements.remove(divergence)
+                self.Controler.RemoveCurrentElementEditingInstance(divergence.GetId())
+                wire = self.ConnectConnectors(next, previous)
+                previous_pos = previous.GetPosition(False)
+                next_pos = next.GetPosition(False)
+                wire_size = GetWireSize(previous_block)
+                previous_block.RefreshOutputPosition((previous_pos.x - next_pos.x, previous_pos.y + wire_size - next_pos.y))
+                wire.SetPoints([wxPoint(previous_pos.x, previous_pos.y + wire_size), 
+                    wxPoint(previous_pos.x, previous_pos.y)])
+                if isinstance(next_block, SFC_Divergence):
+                    next_block.RefreshPosition()
+                previous_block.RefreshOutputModel(True)
+            self.Parent.RefreshProjectTree()
+
+    def DeleteJump(self, jump):
+        if self.GetDrawingMode() == FREEDRAWING_MODE:
+            Viewer.DeleteJump(self, jump)
+        else:
+            previous = jump.GetPreviousConnector()
+            previous_block = previous.GetParentBlock()
+            if isinstance(previous_block, SFC_Transition):
+                self.RemoveTransition(previous_block)
+                previous = jump.GetPreviousConnector()
+                if previous:
+                    previous_block = previous.GetParentBlock()
+                else:
+                    previous_block = None
             wires = previous.GetWires()
             if len(wires) != 1:
                 return
@@ -846,188 +998,48 @@
             wire.Clean()
             self.Wires.remove(wire)
             self.Elements.remove(wire)
-            wires = next.GetWires()
+            jump.Clean()
+            self.Blocks.remove(jump)
+            self.Elements.remove(jump)
+            self.Controler.RemoveCurrentElementEditingInstance(jump.GetId())
+            if isinstance(previous_block, SFC_Step):
+                previous_block.RemoveOutput()
+                self.RefreshStepModel(previous_block)
+            elif isinstance(previous_block, SFC_Divergence):
+                if previous_block.GetType() in [SELECTION_CONVERGENCE, SIMULTANEOUS_CONVERGENCE]:
+                    self.DeleteDivergence(previous_block)
+                else:
+                    previous_block.RemoveBranch(previous)
+                    if previous_block.GetBranchNumber() < 2:
+                        self.DeleteDivergence(previous_block)
+                    else:
+                        previous_block.RefreshModel()
+            self.Parent.RefreshProjectTree()
+
+    def DeleteActionBlock(self, actionblock):
+        if self.GetDrawingMode() == FREEDRAWING_MODE:
+            Viewer.DeleteActionBlock(self, actionblock)
+        else:
+            connector = actionblock.GetConnector()
+            wires = connector.GetWires()
             if len(wires) != 1:
                 return
             wire = wires[0][0]
+            step = wire.EndConnected.GetParentBlock()
             wire.Clean()
             self.Wires.remove(wire)
             self.Elements.remove(wire)
-            transition.Clean()
-            self.Blocks.remove(transition)
-            self.Elements.remove(transition)
-            self.Controler.RemoveCurrentElementEditingInstance(transition.GetId())
-            previous_block.RemoveBranch(previous)
-            if previous_block.GetBranchNumber() < 2:
-                self.DeleteDivergence(previous_block)
-            else:
-                self.RefreshDivergenceModel(previous_block)
-            next_block.RemoveBranch(next)
-            if next_block.GetBranchNumber() < 2:
-                self.DeleteDivergence(next_block)
-            else:
-                self.RefreshDivergenceModel(next_block)
-        self.Parent.RefreshProjectTree()
-
-    def DeleteDivergence(self, divergence):
-        connectors = divergence.GetConnectors()
-        type = divergence.GetType()
-        if type in [SELECTION_CONVERGENCE, SIMULTANEOUS_CONVERGENCE]:
-            wires = connectors["outputs"][0].GetWires()
-            if len(wires) > 1:
-                return
-            elif len(wires) == 1:
-                next = wires[0][0].StartConnected
-                next_block = next.GetParentBlock()
-                wire = wires[0][0]
-                wire.Clean()
-                self.Wires.remove(wire)
-                self.Elements.remove(wire)
-            else:
-                next = None
-                next_block = None
-            for index, connector in enumerate(connectors["inputs"]):
-                if next and index == 0:
-                    wires = connector.GetWires()
-                    wire = wires[0][0]
-                    previous = wires[0][0].EndConnected
-                    wire.Clean()
-                    self.Wires.remove(wire)
-                    self.Elements.remove(wire)
-                else:
-                    if type == SELECTION_CONVERGENCE:
-                        wires = connector.GetWires()
-                        previous_block = wires[0][0].EndConnected.GetParentBlock()
-                        self.RemoveTransition(previous_block)
-                    wires = connector.GetWires()
-                    wire = wires[0][0]
-                    previous_connector = wire.EndConnected
-                    previous_block = previous_connector.GetParentBlock()
-                    wire.Clean()
-                    self.Wires.remove(wire)
-                    self.Elements.remove(wire)
-                    if isinstance(previous_block, SFC_Step):
-                        previous_block.RemoveOutput()
-                        self.RefreshStepModel(previous_block)
-                    elif isinstance(previous_block, SFC_Divergence):
-                        if previous_block.GetType() in [SELECTION_DIVERGENCE, SIMULTANEOUS_DIVERGENCE]:
-                            previous_block.RemoveBranch(previous_connector)
-                            if previous_block.GetBranchNumber() < 2:
-                                self.DeleteDivergence(previous_block)
-                            else:
-                                self.RefreshDivergenceModel(previous_block)
-                        else:
-                            self.DeleteDivergence(previous_block)
-            divergence.Clean()
-            self.Blocks.remove(divergence)
-            self.Elements.remove(divergence)
-            self.Controler.RemoveCurrentElementEditingInstance(divergence.GetId())
-            if next:
-                wire = self.ConnectConnectors(next, previous)
-                previous_block = previous.GetParentBlock()
-                pos = previous.GetPosition(False)
-                next_pos = next.GetPosition(False)
-                wire_size = GetWireSize(previous_block)
-                previous_block.RefreshOutputPosition((0, previous_pos.y + wire_size - next_pos.y))
-                wire.SetPoints([wxPoint(previous_pos.x, previous_pos.y + wire_size), 
-                    wxPoint(previous_pos.x, previous_pos.y)])
-                if isinstance(next_block, SFC_Divergence):
-                    next_block.RefreshPosition()
-                previous_block.RefreshOutputModel(True)
-        elif divergence.GetBranchNumber() == 1:
-            wires = connectors["inputs"][0].GetWires()
-            if len(wires) != 1:
-                return
-            wire = wires[0][0]
-            previous = wire.EndConnected
-            previous_block = previous.GetParentBlock()
-            wire.Clean()
-            self.Wires.remove(wire)
-            self.Elements.remove(wire)
-            wires = connectors["outputs"][0].GetWires()
-            if len(wires) != 1:
-                return
-            wire = wires[0][0]
-            next = wire.StartConnected
-            next_block = next.GetParentBlock()
-            wire.Clean()
-            self.Wires.remove(wire)
-            self.Elements.remove(wire)
-            divergence.Clean()
-            self.Blocks.remove(divergence)
-            self.Elements.remove(divergence)
-            self.Controler.RemoveCurrentElementEditingInstance(divergence.GetId())
-            wire = self.ConnectConnectors(next, previous)
-            previous_pos = previous.GetPosition(False)
-            next_pos = next.GetPosition(False)
-            wire_size = GetWireSize(previous_block)
-            previous_block.RefreshOutputPosition((previous_pos.x - next_pos.x, previous_pos.y + wire_size - next_pos.y))
-            wire.SetPoints([wxPoint(previous_pos.x, previous_pos.y + wire_size), 
-                wxPoint(previous_pos.x, previous_pos.y)])
-            if isinstance(next_block, SFC_Divergence):
-                next_block.RefreshPosition()
-            previous_block.RefreshOutputModel(True)
-        self.Parent.RefreshProjectTree()
-
-    def DeleteJump(self, jump):
-        previous = jump.GetPreviousConnector()
-        previous_block = previous.GetParentBlock()
-        if isinstance(previous_block, SFC_Transition):
-            self.RemoveTransition(previous_block)
-            previous = jump.GetPreviousConnector()
-            if previous:
-                previous_block = previous.GetParentBlock()
-            else:
-                previous_block = None
-        wires = previous.GetWires()
-        if len(wires) != 1:
-            return
-        wire = wires[0][0]
-        wire.Clean()
-        self.Wires.remove(wire)
-        self.Elements.remove(wire)
-        jump.Clean()
-        self.Blocks.remove(jump)
-        self.Elements.remove(jump)
-        self.Controler.RemoveCurrentElementEditingInstance(jump.GetId())
-        if isinstance(previous_block, SFC_Step):
-            previous_block.RemoveOutput()
-            self.RefreshStepModel(previous_block)
-        elif isinstance(previous_block, SFC_Divergence):
-            if previous_block.GetType() in [SELECTION_CONVERGENCE, SIMULTANEOUS_CONVERGENCE]:
-                self.DeleteDivergence(previous_block)
-            else:
-                previous_block.RemoveBranch(previous)
-                if previous_block.GetBranchNumber() < 2:
-                    self.DeleteDivergence(previous_block)
-                else:
-                    previous_block.RefreshModel()
-        self.Parent.RefreshProjectTree()
-
-    def DeleteActionBlock(self, actionblock):
-        connector = actionblock.GetConnector()
-        wires = connector.GetWires()
-        if len(wires) != 1:
-            return
-        wire = wires[0][0]
-        step = wire.EndConnected.GetParentBlock()
-        wire.Clean()
-        self.Wires.remove(wire)
-        self.Elements.remove(wire)
-        actionblock.Clean()
-        self.Blocks.remove(actionblock)
-        self.Elements.remove(actionblock)
-        self.Controler.RemoveCurrentElementEditingInstance(actionblock.GetId())
-        step.RemoveAction()
-        self.RefreshStepModel(step)
-        step.RefreshOutputPosition()
-        step.RefreshOutputModel(True)
-        self.Parent.RefreshProjectTree()
-
-    def DeleteComment(self, comment):
-        self.Elements.remove(self.SelectedElement)
-        self.Controler.RemoveCurrentElementEditingInstance(comment.GetId())
-        
+            actionblock.Clean()
+            self.Blocks.remove(actionblock)
+            self.Elements.remove(actionblock)
+            self.Controler.RemoveCurrentElementEditingInstance(actionblock.GetId())
+            step.RemoveAction()
+            self.RefreshStepModel(step)
+            step.RefreshOutputPosition()
+            step.RefreshOutputModel(True)
+            self.Parent.RefreshProjectTree()
+
     def DeleteWire(self, wire):
-        pass
-
+        if self.GetDrawingMode() == FREEDRAWING_MODE:
+            Viewer.DeleteWire(self, wire)
+