33 |
33 |
34 SFC_Objects = (SFC_Step, SFC_ActionBlock, SFC_Transition, SFC_Divergence, SFC_Jump) |
34 SFC_Objects = (SFC_Step, SFC_ActionBlock, SFC_Transition, SFC_Divergence, SFC_Jump) |
35 |
35 |
36 |
36 |
37 class SFC_Viewer(Viewer): |
37 class SFC_Viewer(Viewer): |
38 |
38 |
39 SFC_StandardRules = { |
39 SFC_StandardRules = { |
40 # The key of this dict is a block that user try to connect, |
40 # The key of this dict is a block that user try to connect, |
41 # and the value is a list of blocks, that can be connected with the current block |
41 # and the value is a list of blocks, that can be connected with the current block |
42 # and with directions of connection |
42 # and with directions of connection |
43 "SFC_Step": [("SFC_ActionBlock", EAST), |
43 "SFC_Step": [("SFC_ActionBlock", EAST), |
59 ("LD_Coil", EAST)], |
59 ("LD_Coil", EAST)], |
60 |
60 |
61 SELECTION_DIVERGENCE: [("SFC_Transition", SOUTH)], |
61 SELECTION_DIVERGENCE: [("SFC_Transition", SOUTH)], |
62 |
62 |
63 SELECTION_CONVERGENCE: [("SFC_Step", SOUTH), |
63 SELECTION_CONVERGENCE: [("SFC_Step", SOUTH), |
64 ("SFC_Jump", SOUTH)], |
64 ("SFC_Jump", SOUTH)], |
65 |
65 |
66 SIMULTANEOUS_DIVERGENCE: [("SFC_Step", SOUTH)], |
66 SIMULTANEOUS_DIVERGENCE: [("SFC_Step", SOUTH)], |
67 |
67 |
68 SIMULTANEOUS_CONVERGENCE: [("SFC_Transition", SOUTH)], |
68 SIMULTANEOUS_CONVERGENCE: [("SFC_Transition", SOUTH)], |
69 |
69 |
80 "LD_PowerRail": [("SFC_Transition", WEST)], |
80 "LD_PowerRail": [("SFC_Transition", WEST)], |
81 |
81 |
82 "LD_Coil": [("SFC_Transition", WEST)] |
82 "LD_Coil": [("SFC_Transition", WEST)] |
83 } |
83 } |
84 |
84 |
85 def __init__(self, parent, tagname, window, controler, debug = False, instancepath = ""): |
85 def __init__(self, parent, tagname, window, controler, debug=False, instancepath=""): |
86 Viewer.__init__(self, parent, tagname, window, controler, debug, instancepath) |
86 Viewer.__init__(self, parent, tagname, window, controler, debug, instancepath) |
87 self.CurrentLanguage = "SFC" |
87 self.CurrentLanguage = "SFC" |
88 |
88 |
89 def ConnectConnectors(self, start, end): |
89 def ConnectConnectors(self, start, end): |
90 startpoint = [start.GetPosition(False), start.GetDirection()] |
90 startpoint = [start.GetPosition(False), start.GetDirection()] |
91 endpoint = [end.GetPosition(False), end.GetDirection()] |
91 endpoint = [end.GetPosition(False), end.GetDirection()] |
92 wire = Wire(self, startpoint, endpoint) |
92 wire = Wire(self, startpoint, endpoint) |
93 self.AddWire(wire) |
93 self.AddWire(wire) |
94 start.Connect((wire, 0), False) |
94 start.Connect((wire, 0), False) |
95 end.Connect((wire, -1), False) |
95 end.Connect((wire, -1), False) |
96 wire.ConnectStartPoint(None, start) |
96 wire.ConnectStartPoint(None, start) |
97 wire.ConnectEndPoint(None, end) |
97 wire.ConnectEndPoint(None, end) |
98 return wire |
98 return wire |
99 |
99 |
100 def CreateTransition(self, connector, next = None): |
100 def CreateTransition(self, connector, next=None): |
101 previous = connector.GetParentBlock() |
101 previous = connector.GetParentBlock() |
102 id = self.GetNewId() |
102 id = self.GetNewId() |
103 transition = SFC_Transition(self, "reference", "", 0, id) |
103 transition = SFC_Transition(self, "reference", "", 0, id) |
104 pos = connector.GetPosition(False) |
104 pos = connector.GetPosition(False) |
105 transition.SetPosition(pos.x, pos.y + SFC_WIRE_MIN_SIZE) |
105 transition.SetPosition(pos.x, pos.y + SFC_WIRE_MIN_SIZE) |
122 wire.SetPoints([wx.Point(pos.x, pos.y + SFC_WIRE_MIN_SIZE), wx.Point(pos.x, pos.y)]) |
122 wire.SetPoints([wx.Point(pos.x, pos.y + SFC_WIRE_MIN_SIZE), wx.Point(pos.x, pos.y)]) |
123 if isinstance(next_block, SFC_Divergence): |
123 if isinstance(next_block, SFC_Divergence): |
124 next_block.RefreshPosition() |
124 next_block.RefreshPosition() |
125 transition.RefreshOutputModel(True) |
125 transition.RefreshOutputModel(True) |
126 return transition |
126 return transition |
127 |
127 |
128 def RemoveTransition(self, transition): |
128 def RemoveTransition(self, transition): |
129 connectors = transition.GetConnectors() |
129 connectors = transition.GetConnectors() |
130 input_wires = connectors["input"].GetWires() |
130 input_wires = connectors["input"].GetWires() |
131 if len(input_wires) != 1: |
131 if len(input_wires) != 1: |
132 return |
132 return |
144 transition.Clean() |
144 transition.Clean() |
145 self.RemoveBlock(transition) |
145 self.RemoveBlock(transition) |
146 self.Controler.RemoveEditedElementInstance(self.TagName, transition.GetId()) |
146 self.Controler.RemoveEditedElementInstance(self.TagName, transition.GetId()) |
147 wire = self.ConnectConnectors(next, previous) |
147 wire = self.ConnectConnectors(next, previous) |
148 return wire |
148 return wire |
149 |
149 |
150 def CreateStep(self, name, connector, next = None): |
150 def CreateStep(self, name, connector, next=None): |
151 previous = connector.GetParentBlock() |
151 previous = connector.GetParentBlock() |
152 id = self.GetNewId() |
152 id = self.GetNewId() |
153 step = SFC_Step(self, name, False, id) |
153 step = SFC_Step(self, name, False, id) |
154 if next: |
154 if next: |
155 step.AddOutput() |
155 step.AddOutput() |
211 wire = self.ConnectConnectors(next, previous) |
211 wire = self.ConnectConnectors(next, previous) |
212 return wire |
212 return wire |
213 else: |
213 else: |
214 return None |
214 return None |
215 |
215 |
216 #------------------------------------------------------------------------------- |
216 # ------------------------------------------------------------------------------- |
217 # Mouse event functions |
217 # Mouse event functions |
218 #------------------------------------------------------------------------------- |
218 # ------------------------------------------------------------------------------- |
219 |
219 |
220 def OnViewerLeftDown(self, event): |
220 def OnViewerLeftDown(self, event): |
221 if self.GetDrawingMode() == FREEDRAWING_MODE: |
221 if self.GetDrawingMode() == FREEDRAWING_MODE: |
222 Viewer.OnViewerLeftDown(self, event) |
222 Viewer.OnViewerLeftDown(self, event) |
223 elif self.Mode == MODE_SELECTION: |
223 elif self.Mode == MODE_SELECTION: |
287 self.SelectedElement.OnMotion(event, self.GetLogicalDC(), self.Scaling) |
287 self.SelectedElement.OnMotion(event, self.GetLogicalDC(), self.Scaling) |
288 self.SelectedElement.GeneratePoints() |
288 self.SelectedElement.GeneratePoints() |
289 self.SelectedElement.RefreshModel() |
289 self.SelectedElement.RefreshModel() |
290 self.SelectedElement.SetSelected(True) |
290 self.SelectedElement.SetSelected(True) |
291 event.Skip() |
291 event.Skip() |
292 |
292 |
293 def OnViewerRightUp(self, event): |
293 def OnViewerRightUp(self, event): |
294 if self.GetDrawingMode() == FREEDRAWING_MODE: |
294 if self.GetDrawingMode() == FREEDRAWING_MODE: |
295 Viewer.OnViewerRightUp(self, event) |
295 Viewer.OnViewerRightUp(self, event) |
296 else: |
296 else: |
297 element = self.FindElement(event) |
297 element = self.FindElement(event) |
305 self.SelectedElement.SetSelected(True) |
305 self.SelectedElement.SetSelected(True) |
306 self.SelectedElement.OnRightUp(event, self.GetLogicalDC(), self.Scaling) |
306 self.SelectedElement.OnRightUp(event, self.GetLogicalDC(), self.Scaling) |
307 self.SelectedElement.Refresh() |
307 self.SelectedElement.Refresh() |
308 wx.CallAfter(self.SetCurrentCursor, 0) |
308 wx.CallAfter(self.SetCurrentCursor, 0) |
309 event.Skip() |
309 event.Skip() |
310 |
310 |
311 def OnViewerLeftDClick(self, event): |
311 def OnViewerLeftDClick(self, event): |
312 if self.GetDrawingMode() == FREEDRAWING_MODE: |
312 if self.GetDrawingMode() == FREEDRAWING_MODE: |
313 Viewer.OnViewerLeftDClick(self, event) |
313 Viewer.OnViewerLeftDClick(self, event) |
314 elif self.Mode == MODE_SELECTION and self.SelectedElement: |
314 elif self.Mode == MODE_SELECTION and self.SelectedElement: |
315 self.SelectedElement.OnLeftDClick(event, self.GetLogicalDC(), self.Scaling) |
315 self.SelectedElement.OnLeftDClick(event, self.GetLogicalDC(), self.Scaling) |
316 self.Refresh(False) |
316 self.Refresh(False) |
317 event.Skip() |
317 event.Skip() |
318 |
318 |
319 def OnViewerMotion(self, event): |
319 def OnViewerMotion(self, event): |
320 if self.GetDrawingMode() == FREEDRAWING_MODE: |
320 if self.GetDrawingMode() == FREEDRAWING_MODE: |
321 Viewer.OnViewerMotion(self, event) |
321 Viewer.OnViewerMotion(self, event) |
322 else: |
322 else: |
323 if self.rubberBand.IsShown(): |
323 if self.rubberBand.IsShown(): |
339 if blockName == "SFC_Divergence": |
339 if blockName == "SFC_Divergence": |
340 blockName = block.Type |
340 blockName = block.Type |
341 return blockName |
341 return blockName |
342 |
342 |
343 # This method check the IEC 61131-3 compatibility between two SFC blocks |
343 # This method check the IEC 61131-3 compatibility between two SFC blocks |
344 def BlockCompatibility(self,startblock = None, endblock = None, direction = None): |
344 def BlockCompatibility(self, startblock=None, endblock=None, direction=None): |
345 if startblock!= None and endblock != None and (isinstance(startblock,SFC_Objects)\ |
345 if startblock is not None and endblock is not None and \ |
346 or isinstance(endblock,SFC_Objects)): |
346 (isinstance(startblock, SFC_Objects) or isinstance(endblock, SFC_Objects)): |
347 # Full "SFC_StandardRules" table would be symmetrical and |
347 # Full "SFC_StandardRules" table would be symmetrical and |
348 # to avoid duplicate records and minimize the table only upper part is defined. |
348 # to avoid duplicate records and minimize the table only upper part is defined. |
349 if (direction == SOUTH or direction == EAST): |
349 if (direction == SOUTH or direction == EAST): |
350 startblock, endblock = endblock, startblock |
350 startblock, endblock = endblock, startblock |
351 start = self.GetBlockName(startblock) |
351 start = self.GetBlockName(startblock) |
354 if end in val: |
354 if end in val: |
355 return True |
355 return True |
356 return False |
356 return False |
357 return True |
357 return True |
358 |
358 |
359 #------------------------------------------------------------------------------- |
359 # ------------------------------------------------------------------------------- |
360 # Keyboard event functions |
360 # Keyboard event functions |
361 #------------------------------------------------------------------------------- |
361 # ------------------------------------------------------------------------------- |
362 |
362 |
363 def OnChar(self, event): |
363 def OnChar(self, event): |
364 if self.GetDrawingMode() == FREEDRAWING_MODE: |
364 if self.GetDrawingMode() == FREEDRAWING_MODE: |
365 Viewer.OnChar(self, event) |
365 Viewer.OnChar(self, event) |
366 else: |
366 else: |
422 self.RefreshBuffer() |
422 self.RefreshBuffer() |
423 self.RefreshScrollBars() |
423 self.RefreshScrollBars() |
424 self.RefreshRect(self.GetScrolledRect(self.SelectedElement.GetRedrawRect(0, scaling[1])), False) |
424 self.RefreshRect(self.GetScrolledRect(self.SelectedElement.GetRedrawRect(0, scaling[1])), False) |
425 else: |
425 else: |
426 event.Skip() |
426 event.Skip() |
427 |
427 |
428 #------------------------------------------------------------------------------- |
428 # ------------------------------------------------------------------------------- |
429 # Adding element functions |
429 # Adding element functions |
430 #------------------------------------------------------------------------------- |
430 # ------------------------------------------------------------------------------- |
431 |
431 |
432 def AddInitialStep(self, pos): |
432 def AddInitialStep(self, pos): |
433 dialog = SFCStepNameDialog(self.ParentWindow, _("Please enter step name"), _("Add a new initial step"), "", wx.OK|wx.CANCEL) |
433 dialog = SFCStepNameDialog(self.ParentWindow, _("Please enter step name"), _("Add a new initial step"), "", wx.OK | wx.CANCEL) |
434 dialog.SetPouNames(self.Controler.GetProjectPouNames(self.Debug)) |
434 dialog.SetPouNames(self.Controler.GetProjectPouNames(self.Debug)) |
435 dialog.SetVariables(self.Controler.GetEditedElementInterfaceVars(self.TagName, debug=self.Debug)) |
435 dialog.SetVariables(self.Controler.GetEditedElementInterfaceVars(self.TagName, debug=self.Debug)) |
436 dialog.SetStepNames([block.GetName() for block in self.Blocks if isinstance(block, SFC_Step)]) |
436 dialog.SetStepNames([block.GetName() for block in self.Blocks if isinstance(block, SFC_Step)]) |
437 if dialog.ShowModal() == wx.ID_OK: |
437 if dialog.ShowModal() == wx.ID_OK: |
438 id = self.GetNewId() |
438 id = self.GetNewId() |
450 self.Refresh(False) |
450 self.Refresh(False) |
451 dialog.Destroy() |
451 dialog.Destroy() |
452 |
452 |
453 def AddStep(self): |
453 def AddStep(self): |
454 if self.SelectedElement in self.Wires or isinstance(self.SelectedElement, SFC_Step): |
454 if self.SelectedElement in self.Wires or isinstance(self.SelectedElement, SFC_Step): |
455 dialog = SFCStepNameDialog(self.ParentWindow, _("Add a new step"), _("Please enter step name"), "", wx.OK|wx.CANCEL) |
455 dialog = SFCStepNameDialog(self.ParentWindow, _("Add a new step"), _("Please enter step name"), "", wx.OK | wx.CANCEL) |
456 dialog.SetPouNames(self.Controler.GetProjectPouNames(self.Debug)) |
456 dialog.SetPouNames(self.Controler.GetProjectPouNames(self.Debug)) |
457 dialog.SetVariables(self.Controler.GetEditedElementInterfaceVars(self.TagName, debug=self.Debug)) |
457 dialog.SetVariables(self.Controler.GetEditedElementInterfaceVars(self.TagName, debug=self.Debug)) |
458 dialog.SetStepNames([block.GetName() for block in self.Blocks if isinstance(block, SFC_Step)]) |
458 dialog.SetStepNames([block.GetName() for block in self.Blocks if isinstance(block, SFC_Step)]) |
459 if dialog.ShowModal() == wx.ID_OK: |
459 if dialog.ShowModal() == wx.ID_OK: |
460 name = dialog.GetValue() |
460 name = dialog.GetValue() |
501 self.SelectedElement.SetSelected(True) |
501 self.SelectedElement.SetSelected(True) |
502 self.RefreshBuffer() |
502 self.RefreshBuffer() |
503 self.RefreshScrollBars() |
503 self.RefreshScrollBars() |
504 self.Refresh(False) |
504 self.Refresh(False) |
505 dialog.Destroy() |
505 dialog.Destroy() |
506 |
506 |
507 def AddStepAction(self): |
507 def AddStepAction(self): |
508 if isinstance(self.SelectedElement, SFC_Step): |
508 if isinstance(self.SelectedElement, SFC_Step): |
509 connectors = self.SelectedElement.GetConnectors() |
509 connectors = self.SelectedElement.GetConnectors() |
510 if not connectors["action"]: |
510 if not connectors["action"]: |
511 dialog = ActionBlockDialog(self.ParentWindow) |
511 dialog = ActionBlockDialog(self.ParentWindow) |
530 self.RefreshActionBlockModel(actionblock) |
530 self.RefreshActionBlockModel(actionblock) |
531 self.RefreshBuffer() |
531 self.RefreshBuffer() |
532 self.RefreshScrollBars() |
532 self.RefreshScrollBars() |
533 self.Refresh(False) |
533 self.Refresh(False) |
534 dialog.Destroy() |
534 dialog.Destroy() |
535 |
535 |
536 def AddDivergence(self): |
536 def AddDivergence(self): |
537 if self.SelectedElement in self.Wires or isinstance(self.SelectedElement, Graphic_Group) or isinstance(self.SelectedElement, SFC_Step): |
537 if self.SelectedElement in self.Wires or isinstance(self.SelectedElement, Graphic_Group) or isinstance(self.SelectedElement, SFC_Step): |
538 dialog = SFCDivergenceDialog(self.ParentWindow) |
538 dialog = SFCDivergenceDialog(self.ParentWindow) |
539 dialog.SetPreviewFont(self.GetFont()) |
539 dialog.SetPreviewFont(self.GetFont()) |
540 if dialog.ShowModal() == wx.ID_OK: |
540 if dialog.ShowModal() == wx.ID_OK: |
541 value = dialog.GetValues() |
541 value = dialog.GetValues() |
542 if value["type"] == SELECTION_DIVERGENCE: |
542 if value["type"] == SELECTION_DIVERGENCE: |
727 self.CreateStep("Step", previous) |
727 self.CreateStep("Step", previous) |
728 self.RefreshBuffer() |
728 self.RefreshBuffer() |
729 self.RefreshScrollBars() |
729 self.RefreshScrollBars() |
730 self.Refresh(False) |
730 self.Refresh(False) |
731 dialog.Destroy() |
731 dialog.Destroy() |
732 |
732 |
733 def AddDivergenceBranch(self, divergence): |
733 def AddDivergenceBranch(self, divergence): |
734 if isinstance(divergence, SFC_Divergence): |
734 if isinstance(divergence, SFC_Divergence): |
735 if self.GetDrawingMode() == FREEDRAWING_MODE: |
735 if self.GetDrawingMode() == FREEDRAWING_MODE: |
736 divergence.AddBranch() |
736 divergence.AddBranch() |
737 self.RefreshDivergenceModel(divergence) |
737 self.RefreshDivergenceModel(divergence) |
748 previous = divergence_connectors["outputs"][-1] |
748 previous = divergence_connectors["outputs"][-1] |
749 step = self.CreateStep("Step", previous) |
749 step = self.CreateStep("Step", previous) |
750 self.RefreshBuffer() |
750 self.RefreshBuffer() |
751 self.RefreshScrollBars() |
751 self.RefreshScrollBars() |
752 self.Refresh(False) |
752 self.Refresh(False) |
753 |
753 |
754 def RemoveDivergenceBranch(self, divergence): |
754 def RemoveDivergenceBranch(self, divergence): |
755 if isinstance(divergence, SFC_Divergence): |
755 if isinstance(divergence, SFC_Divergence): |
756 if self.GetDrawingMode() == FREEDRAWING_MODE: |
756 if self.GetDrawingMode() == FREEDRAWING_MODE: |
757 divergence.RemoveHandledBranch() |
757 divergence.RemoveHandledBranch() |
758 self.RefreshDivergenceModel(divergence) |
758 self.RefreshDivergenceModel(divergence) |
759 self.RefreshBuffer() |
759 self.RefreshBuffer() |
760 self.RefreshScrollBars() |
760 self.RefreshScrollBars() |
761 self.Refresh(False) |
761 self.Refresh(False) |
762 |
762 |
763 def AddJump(self): |
763 def AddJump(self): |
764 if isinstance(self.SelectedElement, SFC_Step) and not self.SelectedElement.Output: |
764 if isinstance(self.SelectedElement, SFC_Step) and not self.SelectedElement.Output: |
765 choices = [] |
765 choices = [] |
766 for block in self.Blocks: |
766 for block in self.Blocks: |
767 if isinstance(block, SFC_Step): |
767 if isinstance(block, SFC_Step): |
768 choices.append(block.GetName()) |
768 choices.append(block.GetName()) |
769 dialog = wx.SingleChoiceDialog(self.ParentWindow, |
769 dialog = wx.SingleChoiceDialog(self.ParentWindow, |
770 _("Add a new jump"), _("Please choose a target"), |
770 _("Add a new jump"), |
771 choices, wx.DEFAULT_DIALOG_STYLE|wx.OK|wx.CANCEL) |
771 _("Please choose a target"), |
|
772 choices, |
|
773 wx.DEFAULT_DIALOG_STYLE | wx.OK | wx.CANCEL) |
772 if dialog.ShowModal() == wx.ID_OK: |
774 if dialog.ShowModal() == wx.ID_OK: |
773 value = dialog.GetStringSelection() |
775 value = dialog.GetStringSelection() |
774 self.SelectedElement.AddOutput() |
776 self.SelectedElement.AddOutput() |
775 self.RefreshStepModel(self.SelectedElement) |
777 self.RefreshStepModel(self.SelectedElement) |
776 step_connectors = self.SelectedElement.GetConnectors() |
778 step_connectors = self.SelectedElement.GetConnectors() |
794 |
796 |
795 def EditStepContent(self, step): |
797 def EditStepContent(self, step): |
796 if self.GetDrawingMode() == FREEDRAWING_MODE: |
798 if self.GetDrawingMode() == FREEDRAWING_MODE: |
797 Viewer.EditStepContent(self, step) |
799 Viewer.EditStepContent(self, step) |
798 else: |
800 else: |
799 dialog = SFCStepNameDialog(self.ParentWindow, _("Edit step name"), _("Please enter step name"), step.GetName(), wx.OK|wx.CANCEL) |
801 dialog = SFCStepNameDialog(self.ParentWindow, _("Edit step name"), _("Please enter step name"), step.GetName(), wx.OK | wx.CANCEL) |
800 dialog.SetPouNames(self.Controler.GetProjectPouNames(self.Debug)) |
802 dialog.SetPouNames(self.Controler.GetProjectPouNames(self.Debug)) |
801 dialog.SetVariables(self.Controler.GetEditedElementInterfaceVars(self.TagName, debug=self.Debug)) |
803 dialog.SetVariables(self.Controler.GetEditedElementInterfaceVars(self.TagName, debug=self.Debug)) |
802 dialog.SetStepNames([block.GetName() for block in self.Blocks if isinstance(block, SFC_Step) and block.GetName() != step.GetName()]) |
804 dialog.SetStepNames([block.GetName() for block in self.Blocks if isinstance(block, SFC_Step) and block.GetName() != step.GetName()]) |
803 if dialog.ShowModal() == wx.ID_OK: |
805 if dialog.ShowModal() == wx.ID_OK: |
804 value = dialog.GetValue() |
806 value = dialog.GetValue() |
810 self.RefreshBuffer() |
812 self.RefreshBuffer() |
811 self.RefreshScrollBars() |
813 self.RefreshScrollBars() |
812 self.Refresh(False) |
814 self.Refresh(False) |
813 dialog.Destroy() |
815 dialog.Destroy() |
814 |
816 |
815 #------------------------------------------------------------------------------- |
817 # ------------------------------------------------------------------------------- |
816 # Delete element functions |
818 # Delete element functions |
817 #------------------------------------------------------------------------------- |
819 # ------------------------------------------------------------------------------- |
818 |
820 |
819 def DeleteStep(self, step): |
821 def DeleteStep(self, step): |
820 if self.GetDrawingMode() == FREEDRAWING_MODE: |
822 if self.GetDrawingMode() == FREEDRAWING_MODE: |
821 Viewer.DeleteStep(self, step) |
823 Viewer.DeleteStep(self, step) |
822 else: |
824 else: |
882 previous_block.RemoveBranch(previous) |
884 previous_block.RemoveBranch(previous) |
883 if previous_block.GetBranchNumber() < 2: |
885 if previous_block.GetBranchNumber() < 2: |
884 self.DeleteDivergence(previous_block) |
886 self.DeleteDivergence(previous_block) |
885 else: |
887 else: |
886 self.RefreshDivergenceModel(previous_block) |
888 self.RefreshDivergenceModel(previous_block) |
887 |
889 |
888 def DeleteTransition(self, transition): |
890 def DeleteTransition(self, transition): |
889 if self.GetDrawingMode() == FREEDRAWING_MODE: |
891 if self.GetDrawingMode() == FREEDRAWING_MODE: |
890 Viewer.DeleteTransition(self, transition) |
892 Viewer.DeleteTransition(self, transition) |
891 else: |
893 else: |
892 previous = transition.GetPreviousConnector() |
894 previous = transition.GetPreviousConnector() |
917 next_block.RemoveBranch(next) |
919 next_block.RemoveBranch(next) |
918 if next_block.GetBranchNumber() < 2: |
920 if next_block.GetBranchNumber() < 2: |
919 self.DeleteDivergence(next_block) |
921 self.DeleteDivergence(next_block) |
920 else: |
922 else: |
921 self.RefreshDivergenceModel(next_block) |
923 self.RefreshDivergenceModel(next_block) |
922 |
924 |
923 def DeleteDivergence(self, divergence): |
925 def DeleteDivergence(self, divergence): |
924 if self.GetDrawingMode() == FREEDRAWING_MODE: |
926 if self.GetDrawingMode() == FREEDRAWING_MODE: |
925 Viewer.DeleteDivergence(self, divergence) |
927 Viewer.DeleteDivergence(self, divergence) |
926 else: |
928 else: |
927 connectors = divergence.GetConnectors() |
929 connectors = divergence.GetConnectors() |
977 previous_block = previous.GetParentBlock() |
979 previous_block = previous.GetParentBlock() |
978 previous_pos = previous.GetPosition(False) |
980 previous_pos = previous.GetPosition(False) |
979 next_pos = next.GetPosition(False) |
981 next_pos = next.GetPosition(False) |
980 wire_size = GetWireSize(previous_block) |
982 wire_size = GetWireSize(previous_block) |
981 previous_block.RefreshOutputPosition((0, previous_pos.y + wire_size - next_pos.y)) |
983 previous_block.RefreshOutputPosition((0, previous_pos.y + wire_size - next_pos.y)) |
982 wire.SetPoints([wx.Point(previous_pos.x, previous_pos.y + wire_size), |
984 wire.SetPoints([wx.Point(previous_pos.x, previous_pos.y + wire_size), |
983 wx.Point(previous_pos.x, previous_pos.y)]) |
985 wx.Point(previous_pos.x, previous_pos.y)]) |
984 if isinstance(next_block, SFC_Divergence): |
986 if isinstance(next_block, SFC_Divergence): |
985 next_block.RefreshPosition() |
987 next_block.RefreshPosition() |
986 previous_block.RefreshOutputModel(True) |
988 previous_block.RefreshOutputModel(True) |
987 elif divergence.GetBranchNumber() == 1: |
989 elif divergence.GetBranchNumber() == 1: |
988 wires = connectors["inputs"][0].GetWires() |
990 wires = connectors["inputs"][0].GetWires() |
1007 wire = self.ConnectConnectors(next, previous) |
1009 wire = self.ConnectConnectors(next, previous) |
1008 previous_pos = previous.GetPosition(False) |
1010 previous_pos = previous.GetPosition(False) |
1009 next_pos = next.GetPosition(False) |
1011 next_pos = next.GetPosition(False) |
1010 wire_size = GetWireSize(previous_block) |
1012 wire_size = GetWireSize(previous_block) |
1011 previous_block.RefreshOutputPosition((previous_pos.x - next_pos.x, previous_pos.y + wire_size - next_pos.y)) |
1013 previous_block.RefreshOutputPosition((previous_pos.x - next_pos.x, previous_pos.y + wire_size - next_pos.y)) |
1012 wire.SetPoints([wx.Point(previous_pos.x, previous_pos.y + wire_size), |
1014 wire.SetPoints([wx.Point(previous_pos.x, previous_pos.y + wire_size), |
1013 wx.Point(previous_pos.x, previous_pos.y)]) |
1015 wx.Point(previous_pos.x, previous_pos.y)]) |
1014 if isinstance(next_block, SFC_Divergence): |
1016 if isinstance(next_block, SFC_Divergence): |
1015 next_block.RefreshPosition() |
1017 next_block.RefreshPosition() |
1016 previous_block.RefreshOutputModel(True) |
1018 previous_block.RefreshOutputModel(True) |
1017 |
1019 |
1018 def DeleteJump(self, jump): |
1020 def DeleteJump(self, jump): |
1019 if self.GetDrawingMode() == FREEDRAWING_MODE: |
1021 if self.GetDrawingMode() == FREEDRAWING_MODE: |
1020 Viewer.DeleteJump(self, jump) |
1022 Viewer.DeleteJump(self, jump) |
1021 else: |
1023 else: |
1022 previous = jump.GetPreviousConnector() |
1024 previous = jump.GetPreviousConnector() |
1047 previous_block.RemoveBranch(previous) |
1049 previous_block.RemoveBranch(previous) |
1048 if previous_block.GetBranchNumber() < 2: |
1050 if previous_block.GetBranchNumber() < 2: |
1049 self.DeleteDivergence(previous_block) |
1051 self.DeleteDivergence(previous_block) |
1050 else: |
1052 else: |
1051 previous_block.RefreshModel() |
1053 previous_block.RefreshModel() |
1052 |
1054 |
1053 def DeleteActionBlock(self, actionblock): |
1055 def DeleteActionBlock(self, actionblock): |
1054 if self.GetDrawingMode() == FREEDRAWING_MODE: |
1056 if self.GetDrawingMode() == FREEDRAWING_MODE: |
1055 Viewer.DeleteActionBlock(self, actionblock) |
1057 Viewer.DeleteActionBlock(self, actionblock) |
1056 else: |
1058 else: |
1057 connector = actionblock.GetConnector() |
1059 connector = actionblock.GetConnector() |
1067 self.Controler.RemoveEditedElementInstance(self.TagName, actionblock.GetId()) |
1069 self.Controler.RemoveEditedElementInstance(self.TagName, actionblock.GetId()) |
1068 step.RemoveAction() |
1070 step.RemoveAction() |
1069 self.RefreshStepModel(step) |
1071 self.RefreshStepModel(step) |
1070 step.RefreshOutputPosition() |
1072 step.RefreshOutputPosition() |
1071 step.RefreshOutputModel(True) |
1073 step.RefreshOutputModel(True) |
1072 |
1074 |
1073 def DeleteWire(self, wire): |
1075 def DeleteWire(self, wire): |
1074 if self.GetDrawingMode() == FREEDRAWING_MODE: |
1076 if self.GetDrawingMode() == FREEDRAWING_MODE: |
1075 Viewer.DeleteWire(self, wire) |
1077 Viewer.DeleteWire(self, wire) |
1076 |
1078 |
1077 #------------------------------------------------------------------------------- |
1079 # ------------------------------------------------------------------------------- |
1078 # Model update functions |
1080 # Model update functions |
1079 #------------------------------------------------------------------------------- |
1081 # ------------------------------------------------------------------------------- |
1080 |
1082 |
1081 def RefreshBlockModel(self, block): |
1083 def RefreshBlockModel(self, block): |
1082 blockid = block.GetId() |
1084 blockid = block.GetId() |
1083 infos = {} |
1085 infos = {} |
1084 infos["type"] = block.GetType() |
1086 infos["type"] = block.GetType() |
1085 infos["name"] = block.GetName() |
1087 infos["name"] = block.GetName() |
1086 infos["x"], infos["y"] = block.GetPosition() |
1088 infos["x"], infos["y"] = block.GetPosition() |
1087 infos["width"], infos["height"] = block.GetSize() |
1089 infos["width"], infos["height"] = block.GetSize() |
1088 infos["connectors"] = block.GetConnectors() |
1090 infos["connectors"] = block.GetConnectors() |
1089 self.Controler.SetEditedElementBlockInfos(self.TagName, blockid, infos) |
1091 self.Controler.SetEditedElementBlockInfos(self.TagName, blockid, infos) |
1090 |
|