diff -r dae55dd9ee14 -r fc23e1f415d8 SFCViewer.py --- 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) +