changeset 383 | 25ffba02b6a8 |
parent 381 | 98890d848701 |
child 384 | ed27a676d5c9 |
382:42a9b03bba82 | 383:25ffba02b6a8 |
---|---|
73 'other': 'new century schoolbook', |
73 'other': 'new century schoolbook', |
74 'size' : 20, |
74 'size' : 20, |
75 } |
75 } |
76 |
76 |
77 ZOOM_FACTORS = [math.sqrt(2) ** x for x in xrange(-6, 7)] |
77 ZOOM_FACTORS = [math.sqrt(2) ** x for x in xrange(-6, 7)] |
78 |
|
79 |
|
80 def GetVariableCreationFunction(variable_type): |
|
81 def variableCreationFunction(viewer, id, specific_values): |
|
82 return FBD_Variable(viewer, variable_type, |
|
83 specific_values["name"], |
|
84 specific_values["value_type"], |
|
85 id, |
|
86 specific_values["executionOrder"]) |
|
87 return variableCreationFunction |
|
88 |
|
89 def GetConnectorCreationFunction(connector_type): |
|
90 def connectorCreationFunction(viewer, id, specific_values): |
|
91 return FBD_Connector(viewer, connector_type, |
|
92 specific_values["name"], id) |
|
93 return connectorCreationFunction |
|
94 |
|
95 def commentCreationFunction(viewer, id, specific_values): |
|
96 return Comment(viewer, specific_values["content"], id) |
|
97 |
|
98 def GetPowerRailCreationFunction(powerrail_type): |
|
99 def powerRailCreationFunction(viewer, id, specific_values): |
|
100 return LD_PowerRail(viewer, powerrail_type, id, |
|
101 specific_values["connectors"]) |
|
102 return powerRailCreationFunction |
|
103 |
|
104 CONTACT_TYPES = {(True, "none"): CONTACT_REVERSE, |
|
105 (False, "rising"): CONTACT_RISING, |
|
106 (False, "falling"): CONTACT_FALLING} |
|
107 |
|
108 def contactCreationFunction(viewer, id, specific_values): |
|
109 contact_type = CONTACT_TYPES.get((specific_values.get("negated", False), |
|
110 specific_values.get("edge", "none")), |
|
111 CONTACT_NORMAL) |
|
112 return LD_Contact(viewer, contact_type, specific_values["name"], id) |
|
113 |
|
114 COIL_TYPES = {(True, "none", "none"): COIL_REVERSE, |
|
115 (False, "none", "set"): COIL_SET, |
|
116 (False, "none", "reset"): COIL_RESET, |
|
117 (False, "rising", "none"): COIL_RISING, |
|
118 (False, "falling", "none"): COIL_FALLING} |
|
119 |
|
120 def coilCreationFunction(viewer, id, specific_values): |
|
121 coil_type = COIL_TYPES.get((specific_values.get("negated", False), |
|
122 specific_values.get("edge", "none"), |
|
123 specific_values.get("storage", "none")), |
|
124 COIL_NORMAL) |
|
125 return LD_Coil(viewer, coil_type, specific_values["name"], id) |
|
126 |
|
127 def stepCreationFunction(viewer, id, specific_values): |
|
128 step = SFC_Step(viewer, specific_values["name"], |
|
129 specific_values.get("initial", False), id) |
|
130 if specific_values.get("action", None): |
|
131 step.AddAction() |
|
132 connector = step.GetActionConnector() |
|
133 connector.SetPosition(wx.Point(*specific_values["action"]["position"])) |
|
134 return step |
|
135 |
|
136 def transitionCreationFunction(viewer, id, specific_values): |
|
137 transition = SFC_Transition(viewer, specific_values["condition_type"], |
|
138 specific_values.get("condition", None), |
|
139 specific_values["priority"], id) |
|
140 return transition |
|
141 |
|
142 def GetDivergenceCreationFunction(divergence_type): |
|
143 def divergenceCreationFunction(viewer, id, specific_values): |
|
144 return SFC_Divergence(viewer, divergence_type, |
|
145 specific_values["connectors"], id) |
|
146 return divergenceCreationFunction |
|
147 |
|
148 def jumpCreationFunction(viewer, id, specific_values): |
|
149 return SFC_Jump(viewer, specific_values["target"], id) |
|
150 |
|
151 def actionBlockCreationFunction(viewer, id, specific_values): |
|
152 return SFC_ActionBlock(viewer, specific_values["actions"], id) |
|
153 |
|
154 ElementCreationFunctions = { |
|
155 "input": GetVariableCreationFunction(INPUT), |
|
156 "output": GetVariableCreationFunction(OUTPUT), |
|
157 "inout": GetVariableCreationFunction(INOUT), |
|
158 "connector": GetConnectorCreationFunction(CONNECTOR), |
|
159 "continuation": GetConnectorCreationFunction(CONTINUATION), |
|
160 "comment": commentCreationFunction, |
|
161 "leftPowerRail": GetPowerRailCreationFunction(LEFTRAIL), |
|
162 "rightPowerRail": GetPowerRailCreationFunction(RIGHTRAIL), |
|
163 "contact": contactCreationFunction, |
|
164 "coil": coilCreationFunction, |
|
165 "step": stepCreationFunction, |
|
166 "transition": transitionCreationFunction, |
|
167 "selectionDivergence": GetDivergenceCreationFunction(SELECTION_DIVERGENCE), |
|
168 "selectionConvergence": GetDivergenceCreationFunction(SELECTION_CONVERGENCE), |
|
169 "simultaneousDivergence": GetDivergenceCreationFunction(SIMULTANEOUS_DIVERGENCE), |
|
170 "simultaneousConvergence": GetDivergenceCreationFunction(SIMULTANEOUS_CONVERGENCE), |
|
171 "jump": jumpCreationFunction, |
|
172 "actionBlock": actionBlockCreationFunction, |
|
173 } |
|
78 |
174 |
79 #------------------------------------------------------------------------------- |
175 #------------------------------------------------------------------------------- |
80 # Graphic elements Viewer base class |
176 # Graphic elements Viewer base class |
81 #------------------------------------------------------------------------------- |
177 #------------------------------------------------------------------------------- |
82 |
178 |
379 # Initialize Cursors |
475 # Initialize Cursors |
380 ResetCursors() |
476 ResetCursors() |
381 self.CurrentCursor = 0 |
477 self.CurrentCursor = 0 |
382 |
478 |
383 # Initialize Block, Wire and Comment numbers |
479 # Initialize Block, Wire and Comment numbers |
384 self.block_id = self.wire_id = self.comment_id = 0 |
480 self.wire_id = 0 |
385 |
481 |
386 # Initialize Viewer mode to Selection mode |
482 # Initialize Viewer mode to Selection mode |
387 self.Mode = MODE_SELECTION |
483 self.Mode = MODE_SELECTION |
388 self.SavedMode = False |
484 self.SavedMode = False |
389 self.CurrentLanguage = "FBD" |
485 self.CurrentLanguage = "FBD" |
503 #------------------------------------------------------------------------------- |
599 #------------------------------------------------------------------------------- |
504 # Element management functions |
600 # Element management functions |
505 #------------------------------------------------------------------------------- |
601 #------------------------------------------------------------------------------- |
506 |
602 |
507 def AddBlock(self, block): |
603 def AddBlock(self, block): |
508 self.block_id += 1 |
604 self.Blocks[block.GetId()] = block |
509 self.Blocks[block] = self.block_id |
|
510 |
605 |
511 def AddWire(self, wire): |
606 def AddWire(self, wire): |
512 self.wire_id += 1 |
607 self.wire_id += 1 |
513 self.Wires[wire] = self.wire_id |
608 self.Wires[wire] = self.wire_id |
514 |
609 |
515 def AddComment(self, comment): |
610 def AddComment(self, comment): |
516 self.comment_id += 1 |
611 self.Comments[comment.GetId()] = comment |
517 self.Comments[comment] = self.comment_id |
|
518 |
612 |
519 def IsBlock(self, block): |
613 def IsBlock(self, block): |
520 return self.Blocks.get(block, False) |
614 return self.Blocks.get(block.GetId(), False) |
521 |
615 |
522 def IsWire(self, wire): |
616 def IsWire(self, wire): |
523 return self.Wires.get(wire, False) |
617 return self.Wires.get(wire, False) |
524 |
618 |
525 def IsComment(self, comment): |
619 def IsComment(self, comment): |
526 return self.Comments.get(comment, False) |
620 return self.Comments.get(comment.GetId(), False) |
527 |
621 |
528 def RemoveBlock(self, block): |
622 def RemoveBlock(self, block): |
529 self.Blocks.pop(block) |
623 self.Blocks.pop(block.GetId()) |
530 |
624 |
531 def RemoveWire(self, wire): |
625 def RemoveWire(self, wire): |
532 self.Wires.pop(wire) |
626 self.Wires.pop(wire) |
533 |
627 |
534 def RemoveComment(self, comment): |
628 def RemoveComment(self, comment): |
535 self.Comments.pop(comment) |
629 self.Comments.pop(comment.GetId()) |
536 |
630 |
537 def GetElements(self, sort_blocks=False, sort_wires=False, sort_comments=False): |
631 def GetElements(self, sort_blocks=False, sort_wires=False, sort_comments=False): |
538 blocks = self.Blocks.keys() |
632 blocks = self.Blocks.values() |
539 wires = self.Wires.keys() |
633 wires = self.Wires.keys() |
540 comments = self.Comments.keys() |
634 comments = self.Comments.values() |
541 if sort_blocks: |
635 if sort_blocks: |
542 blocks.sort(lambda x, y: cmp(self.Blocks[x], self.Blocks[y])) |
636 blocks.sort(lambda x, y: cmp(x.GetId(), y.GetId())) |
543 if sort_wires: |
637 if sort_wires: |
544 wires.sort(lambda x, y: cmp(self.Wires[x], self.Wires[y])) |
638 wires.sort(lambda x, y: cmp(self.Wires[x], self.Wires[y])) |
545 if sort_comments: |
639 if sort_comments: |
546 comments.sort(lambda x, y: cmp(self.Comments[x], self.Comments[y])) |
640 comments.sort(lambda x, y: cmp(x.GetId(), y.GetId())) |
547 return blocks + wires + comments |
641 return blocks + wires + comments |
548 |
642 |
549 def RefreshVisibleElements(self, xp = None, yp = None): |
643 def RefreshVisibleElements(self, xp = None, yp = None): |
550 x, y = self.CalcUnscrolledPosition(0, 0) |
644 x, y = self.CalcUnscrolledPosition(0, 0) |
551 if xp is not None: |
645 if xp is not None: |
553 if yp is not None: |
647 if yp is not None: |
554 y = yp * self.GetScrollPixelsPerUnit()[1] |
648 y = yp * self.GetScrollPixelsPerUnit()[1] |
555 width, height = self.GetClientSize() |
649 width, height = self.GetClientSize() |
556 screen = wx.Rect(int(x / self.ViewScale[0]), int(y / self.ViewScale[1]), |
650 screen = wx.Rect(int(x / self.ViewScale[0]), int(y / self.ViewScale[1]), |
557 int(width / self.ViewScale[0]), int(height / self.ViewScale[1])) |
651 int(width / self.ViewScale[0]), int(height / self.ViewScale[1])) |
558 for comment in self.Comments: |
652 for comment in self.Comments.itervalues(): |
559 comment.TestVisible(screen) |
653 comment.TestVisible(screen) |
560 for wire in self.Wires: |
654 for wire in self.Wires.iterkeys(): |
561 wire.TestVisible(screen) |
655 wire.TestVisible(screen) |
562 for block in self.Blocks: |
656 for block in self.Blocks.itervalues(): |
563 block.TestVisible(screen) |
657 block.TestVisible(screen) |
564 |
658 |
565 def GetElementIECPath(self, element): |
659 def GetElementIECPath(self, element): |
566 iec_path = None |
660 iec_path = None |
567 if isinstance(element, Wire) and element.EndConnected is not None: |
661 if isinstance(element, Wire) and element.EndConnected is not None: |
602 self.SelectedElement = None |
696 self.SelectedElement = None |
603 self.HighlightedElement = None |
697 self.HighlightedElement = None |
604 |
698 |
605 def Flush(self): |
699 def Flush(self): |
606 self.DeleteDataConsumers() |
700 self.DeleteDataConsumers() |
607 for block in self.Blocks: |
701 for block in self.Blocks.itervalues(): |
608 block.Flush() |
702 block.Flush() |
609 |
703 |
610 # Remove all elements |
704 # Remove all elements |
611 def CleanView(self): |
705 def CleanView(self): |
612 for block in self.Blocks.keys(): |
706 for block in self.Blocks.itervalues(): |
613 block.Clean() |
707 block.Clean() |
614 self.ResetView() |
708 self.ResetView() |
615 |
709 |
616 # Changes Viewer mode |
710 # Changes Viewer mode |
617 def SetMode(self, mode): |
711 def SetMode(self, mode): |
687 |
781 |
688 def ResetBuffer(self): |
782 def ResetBuffer(self): |
689 pass |
783 pass |
690 |
784 |
691 # Refresh Viewer elements |
785 # Refresh Viewer elements |
692 def RefreshView(self): |
786 def RefreshView(self, selection=None): |
693 self.Inhibit(True) |
787 self.Inhibit(True) |
694 self.current_id = 0 |
788 self.current_id = 0 |
695 # Start by reseting Viewer |
789 # Start by reseting Viewer |
696 self.Flush() |
790 self.Flush() |
697 self.ResetView() |
791 self.ResetView() |
700 ids = [] |
794 ids = [] |
701 # Load Blocks until they are all loaded |
795 # Load Blocks until they are all loaded |
702 while instance is not None: |
796 while instance is not None: |
703 instance = self.Controler.GetEditedElementInstanceInfos(self.TagName, exclude = ids, debug = self.Debug) |
797 instance = self.Controler.GetEditedElementInstanceInfos(self.TagName, exclude = ids, debug = self.Debug) |
704 if instance is not None: |
798 if instance is not None: |
705 self.loadInstance(instance, ids) |
799 self.loadInstance(instance, ids, selection) |
706 self.RefreshScrollBars() |
800 self.RefreshScrollBars() |
707 |
801 |
708 for wire in self.Wires: |
802 for wire in self.Wires: |
709 if not wire.IsConnectedCompatible(): |
803 if not wire.IsConnectedCompatible(): |
710 wire.SetValid(False) |
804 wire.SetValid(False) |
711 if self.Debug: |
805 if self.Debug: |
712 block = wire.EndConnected.GetParentBlock() |
806 iec_path = self.GetElementIECPath(wire) |
713 if isinstance(block, LD_PowerRail): |
807 if self.AddDataConsumer(iec_path.upper(), wire) is None: |
714 wire.SetValue(True) |
|
715 if isinstance(block, FBD_Block): |
|
716 blockname = block.GetName() |
|
717 connectorname = wire.EndConnected.GetName() |
|
718 if blockname != "": |
|
719 iec_path = "%s.%s.%s"%(self.InstancePath, blockname, connectorname) |
|
720 else: |
|
721 if connectorname == "": |
|
722 iec_path = "%s.%s%d"%(self.InstancePath, block.GetType(), block.GetId()) |
|
723 else: |
|
724 iec_path = "%s.%s%d_%s"%(self.InstancePath, block.GetType(), block.GetId(), connectorname) |
|
725 if self.AddDataConsumer(iec_path.upper(), wire) is None: |
|
726 wire.SetValue("undefined") |
|
727 elif isinstance(block, FBD_Variable): |
|
728 iec_path = "%s.%s"%(self.InstancePath, block.GetName()) |
|
729 if self.AddDataConsumer(iec_path.upper(), wire) is None: |
|
730 wire.SetValue("undefined") |
|
731 elif isinstance(block, FBD_Connector): |
|
732 wire.SetValue("undefined") |
808 wire.SetValue("undefined") |
733 |
809 |
734 if self.Debug: |
810 if self.Debug: |
735 for block in self.Blocks.keys(): |
811 for block in self.Blocks.itervalues(): |
736 block.SpreadCurrent() |
812 block.SpreadCurrent() |
737 iec_path = self.GetElementIECPath(block) |
813 iec_path = self.GetElementIECPath(block) |
738 if iec_path is not None: |
814 if iec_path is not None: |
739 self.AddDataConsumer(iec_path.upper(), block) |
815 self.AddDataConsumer(iec_path.upper(), block) |
740 |
816 |
790 maxx = int(maxx * self.ViewScale[0]) |
866 maxx = int(maxx * self.ViewScale[0]) |
791 maxy = int(maxy * self.ViewScale[1]) |
867 maxy = int(maxy * self.ViewScale[1]) |
792 self.SetScrollbars(SCROLLBAR_UNIT, SCROLLBAR_UNIT, |
868 self.SetScrollbars(SCROLLBAR_UNIT, SCROLLBAR_UNIT, |
793 round(maxx / SCROLLBAR_UNIT) + width_incr, round(maxy / SCROLLBAR_UNIT) + height_incr, |
869 round(maxx / SCROLLBAR_UNIT) + width_incr, round(maxy / SCROLLBAR_UNIT) + height_incr, |
794 xstart, ystart, True) |
870 xstart, ystart, True) |
871 |
|
872 def SelectInGroup(self, element): |
|
873 element.SetSelected(True) |
|
874 if self.SelectedElement is None: |
|
875 self.SelectedElement = element |
|
876 elif isinstance(self.SelectedElement, Graphic_Group): |
|
877 self.SelectedElement.SelectElement(element) |
|
878 else: |
|
879 group = Graphic_Group(self) |
|
880 group.SelectElement(self.SelectedElement) |
|
881 group.SelectElement(element) |
|
882 self.SelectedElement = group |
|
795 |
883 |
796 # Load instance from given informations |
884 # Load instance from given informations |
797 def loadInstance(self, instance, ids): |
885 def loadInstance(self, instance, ids, selection): |
798 ids.append(instance["id"]) |
886 ids.append(instance["id"]) |
799 self.current_id = max(self.current_id, instance["id"]) |
887 self.current_id = max(self.current_id, instance["id"]) |
800 if instance["type"] == "input": |
888 creation_function = ElementCreationFunctions.get(instance["type"], None) |
801 variable = FBD_Variable(self, INPUT, instance["name"], instance["value_type"], instance["id"], instance["executionOrder"]) |
889 connectors = {"inputs" : [], "outputs" : []} |
802 variable.SetPosition(instance["x"], instance["y"]) |
890 specific_values = instance["specific_values"] |
803 variable.SetSize(instance["width"], instance["height"]) |
891 if creation_function is not None: |
804 self.AddBlock(variable) |
892 element = creation_function(self, instance["id"], specific_values) |
805 connectors = variable.GetConnectors() |
893 if isinstance(element, SFC_Step): |
806 connectors["output"].SetPosition(wx.Point(*instance["connector"]["position"])) |
894 if len(instance["inputs"]) > 0: |
807 if instance["connector"]["negated"]: |
895 element.AddInput() |
808 connectors["output"].SetNegated(True) |
896 if len(instance["outputs"]) > 0: |
809 if instance["connector"]["edge"]: |
897 element.AddOutput() |
810 connectors["output"].SetEdge(instance["connector"]["edge"]) |
898 if isinstance(element, SFC_Transition) and specific_values["condition_type"] == "connection": |
811 elif instance["type"] == "output": |
899 connector = element.GetConditionConnector() |
812 variable = FBD_Variable(self, OUTPUT, instance["name"], instance["value_type"], instance["id"], instance["executionOrder"]) |
900 self.CreateWires(connector, id, specific_values["connection"]["links"], ids, selection) |
813 variable.SetPosition(instance["x"], instance["y"]) |
|
814 variable.SetSize(instance["width"], instance["height"]) |
|
815 self.AddBlock(variable) |
|
816 connectors = variable.GetConnectors() |
|
817 connectors["input"].SetPosition(wx.Point(*instance["connector"]["position"])) |
|
818 if instance["connector"]["negated"]: |
|
819 connectors["input"].SetNegated(True) |
|
820 if instance["connector"]["edge"]: |
|
821 connectors["input"].SetEdge(instance["connector"]["edge"]) |
|
822 self.CreateWires(connectors["input"], instance["connector"]["links"], ids) |
|
823 elif instance["type"] == "inout": |
|
824 variable = FBD_Variable(self, INOUT, instance["name"], instance["value_type"], instance["id"], instance["executionOrder"]) |
|
825 variable.SetPosition(instance["x"], instance["y"]) |
|
826 variable.SetSize(instance["width"], instance["height"]) |
|
827 self.AddBlock(variable) |
|
828 connectors = variable.GetConnectors() |
|
829 connectors["output"].SetPosition(wx.Point(*instance["connectors"]["output"]["position"])) |
|
830 connectors["input"].SetPosition(wx.Point(*instance["connectors"]["input"]["position"])) |
|
831 if instance["connectors"]["output"]["negated"]: |
|
832 connectors["output"].SetNegated(True) |
|
833 if instance["connectors"]["output"]["edge"]: |
|
834 connectors["output"].SetEdge(instance["connectors"]["output"]["edge"]) |
|
835 if instance["connectors"]["input"]["negated"]: |
|
836 connectors["input"].SetNegated(True) |
|
837 if instance["connectors"]["input"]["edge"]: |
|
838 connectors["input"].SetEdge(instance["connectors"]["input"]["edge"]) |
|
839 self.CreateWires(connectors["input"], instance["connectors"]["input"]["links"], ids) |
|
840 elif instance["type"] == "continuation": |
|
841 connection = FBD_Connector(self, CONTINUATION, instance["name"], instance["id"]) |
|
842 connection.SetPosition(instance["x"], instance["y"]) |
|
843 connection.SetSize(instance["width"], instance["height"]) |
|
844 self.AddBlock(connection) |
|
845 connector = connection.GetConnector() |
|
846 connector.SetPosition(wx.Point(*instance["connector"]["position"])) |
|
847 elif instance["type"] == "connection": |
|
848 connection = FBD_Connector(self, CONNECTOR, instance["name"], instance["id"]) |
|
849 connection.SetPosition(instance["x"], instance["y"]) |
|
850 connection.SetSize(instance["width"], instance["height"]) |
|
851 self.AddBlock(connection) |
|
852 connector = connection.GetConnector() |
|
853 connector.SetPosition(wx.Point(*instance["connector"]["position"])) |
|
854 self.CreateWires(connector, instance["connector"]["links"], ids) |
|
855 elif instance["type"] == "comment": |
|
856 comment = Comment(self, instance["content"], instance["id"]) |
|
857 comment.SetPosition(instance["x"], instance["y"]) |
|
858 comment.SetSize(instance["width"], instance["height"]) |
|
859 self.AddComment(comment) |
|
860 elif instance["type"] == "leftPowerRail": |
|
861 leftpowerrail = LD_PowerRail(self, LEFTRAIL, instance["id"], [True for i in range(len(instance["connectors"]))]) |
|
862 leftpowerrail.SetPosition(instance["x"], instance["y"]) |
|
863 leftpowerrail.SetSize(instance["width"], instance["height"]) |
|
864 self.AddBlock(leftpowerrail) |
|
865 connectors = leftpowerrail.GetConnectors() |
|
866 for i, connector in enumerate(instance["connectors"]): |
|
867 connectors[i].SetPosition(wx.Point(*connector["position"])) |
|
868 elif instance["type"] == "rightPowerRail": |
|
869 rightpowerrail = LD_PowerRail(self, RIGHTRAIL, instance["id"], [True for i in range(len(instance["connectors"]))]) |
|
870 rightpowerrail.SetPosition(instance["x"], instance["y"]) |
|
871 rightpowerrail.SetSize(instance["width"], instance["height"]) |
|
872 self.AddBlock(rightpowerrail) |
|
873 connectors = rightpowerrail.GetConnectors() |
|
874 for i, connector in enumerate(instance["connectors"]): |
|
875 connectors[i].SetPosition(wx.Point(*connector["position"])) |
|
876 self.CreateWires(connectors[i], connector["links"], ids) |
|
877 elif instance["type"] == "contact": |
|
878 if instance["negated"]: |
|
879 negated = instance["negated"] |
|
880 else: |
|
881 negated = False |
|
882 if instance["edge"]: |
|
883 edge = instance["edge"] |
|
884 else: |
|
885 edge = "none" |
|
886 if negated and edge == "none": |
|
887 contact_type = CONTACT_REVERSE |
|
888 elif not negated and edge == "rising": |
|
889 contact_type = CONTACT_RISING |
|
890 elif not negated and edge == "falling": |
|
891 contact_type = CONTACT_FALLING |
|
892 else: |
|
893 contact_type = CONTACT_NORMAL |
|
894 contact = LD_Contact(self, contact_type, instance["name"], instance["id"]) |
|
895 contact.SetPosition(instance["x"], instance["y"]) |
|
896 contact.SetSize(instance["width"], instance["height"]) |
|
897 self.AddBlock(contact) |
|
898 connectors = contact.GetConnectors() |
|
899 connectors["input"].SetPosition(wx.Point(*instance["connectors"]["input"]["position"])) |
|
900 self.CreateWires(connectors["input"], instance["connectors"]["input"]["links"], ids) |
|
901 connectors["output"].SetPosition(wx.Point(*instance["connectors"]["output"]["position"])) |
|
902 elif instance["type"] == "coil": |
|
903 if instance["negated"]: |
|
904 negated = instance["negated"] |
|
905 else: |
|
906 negated = False |
|
907 if instance["storage"]: |
|
908 storage = instance["storage"] |
|
909 else: |
|
910 storage = "none" |
|
911 if instance["edge"]: |
|
912 edge = instance["edge"] |
|
913 else: |
|
914 edge = "none" |
|
915 if negated and storage == "none" and edge == "none": |
|
916 coil_type = COIL_REVERSE |
|
917 elif not negated and edge == "none" and storage == "set": |
|
918 coil_type = COIL_SET |
|
919 elif not negated and edge == "none" and storage == "reset": |
|
920 coil_type = COIL_RESET |
|
921 elif not negated and storage == "none" and edge == "rising": |
|
922 coil_type = COIL_RISING |
|
923 elif not negated and storage == "none" and edge == "falling": |
|
924 coil_type = COIL_FALLING |
|
925 else: |
|
926 coil_type = COIL_NORMAL |
|
927 coil = LD_Coil(self, coil_type, instance["name"], instance["id"]) |
|
928 coil.SetPosition(instance["x"], instance["y"]) |
|
929 coil.SetSize(instance["width"], instance["height"]) |
|
930 self.AddBlock(coil) |
|
931 connectors = coil.GetConnectors() |
|
932 connectors["input"].SetPosition(wx.Point(*instance["connectors"]["input"]["position"])) |
|
933 self.CreateWires(connectors["input"], instance["connectors"]["input"]["links"], ids) |
|
934 connectors["output"].SetPosition(wx.Point(*instance["connectors"]["output"]["position"])) |
|
935 elif instance["type"] == "step": |
|
936 if instance["initial"]: |
|
937 initial = instance["initial"] |
|
938 else: |
|
939 initial = False |
|
940 step = SFC_Step(self, instance["name"], initial, instance["id"]) |
|
941 step.SetPosition(instance["x"], instance["y"]) |
|
942 step.SetSize(instance["width"], instance["height"]) |
|
943 self.AddBlock(step) |
|
944 if "output" in instance["connectors"]: |
|
945 step.AddOutput() |
|
946 if "action" in instance["connectors"]: |
|
947 step.AddAction() |
|
948 connectors = step.GetConnectors() |
|
949 if connectors["input"]: |
|
950 connectors["input"].SetPosition(wx.Point(*instance["connectors"]["input"]["position"])) |
|
951 self.CreateWires(connectors["input"], instance["connectors"]["input"]["links"], ids) |
|
952 if connectors["output"]: |
|
953 connectors["output"].SetPosition(wx.Point(*instance["connectors"]["output"]["position"])) |
|
954 if connectors["action"]: |
|
955 connectors["action"].SetPosition(wx.Point(*instance["connectors"]["action"]["position"])) |
|
956 elif instance["type"] == "transition": |
|
957 transition = SFC_Transition(self, instance["condition_type"], instance["condition"], instance["priority"], instance["id"]) |
|
958 transition.SetPosition(instance["x"], instance["y"]) |
|
959 transition.SetSize(instance["width"], instance["height"]) |
|
960 self.AddBlock(transition) |
|
961 connectors = transition.GetConnectors() |
|
962 connectors["input"].SetPosition(wx.Point(*instance["connectors"]["input"]["position"])) |
|
963 self.CreateWires(connectors["input"], instance["connectors"]["input"]["links"], ids) |
|
964 connectors["output"].SetPosition(wx.Point(*instance["connectors"]["output"]["position"])) |
|
965 if instance["condition_type"] == "connection": |
|
966 self.CreateWires(connectors["connection"], instance["connectors"]["connection"]["links"], ids) |
|
967 elif instance["type"] in ["selectionDivergence", "selectionConvergence", "simultaneousDivergence", "simultaneousConvergence"]: |
|
968 if instance["type"] == "selectionDivergence": |
|
969 divergence = SFC_Divergence(self, SELECTION_DIVERGENCE, |
|
970 len(instance["connectors"]["outputs"]), instance["id"]) |
|
971 elif instance["type"] == "selectionConvergence": |
|
972 divergence = SFC_Divergence(self, SELECTION_CONVERGENCE, |
|
973 len(instance["connectors"]["inputs"]), instance["id"]) |
|
974 elif instance["type"] == "simultaneousDivergence": |
|
975 divergence = SFC_Divergence(self, SIMULTANEOUS_DIVERGENCE, |
|
976 len(instance["connectors"]["outputs"]), instance["id"]) |
|
977 else: |
|
978 divergence = SFC_Divergence(self, SIMULTANEOUS_CONVERGENCE, |
|
979 len(instance["connectors"]["inputs"]), instance["id"]) |
|
980 divergence.SetPosition(instance["x"], instance["y"]) |
|
981 divergence.SetSize(instance["width"], instance["height"]) |
|
982 self.AddBlock(divergence) |
|
983 connectors = divergence.GetConnectors() |
|
984 for i, input_connector in enumerate(instance["connectors"]["inputs"]): |
|
985 connector = connectors["inputs"][i] |
|
986 connector.SetPosition(wx.Point(*input_connector["position"])) |
|
987 self.CreateWires(connector, input_connector["links"], ids) |
|
988 for i, output_connector in enumerate(instance["connectors"]["outputs"]): |
|
989 connector = connectors["outputs"][i] |
|
990 connector.SetPosition(wx.Point(*output_connector["position"])) |
|
991 elif instance["type"] == "jump": |
|
992 jump = SFC_Jump(self, instance["target"], instance["id"]) |
|
993 jump.SetPosition(instance["x"], instance["y"]) |
|
994 jump.SetSize(instance["width"], instance["height"]) |
|
995 self.AddBlock(jump) |
|
996 connector = jump.GetConnector() |
|
997 connector.SetPosition(wx.Point(*instance["connector"]["position"])) |
|
998 self.CreateWires(connector, instance["connector"]["links"], ids) |
|
999 elif instance["type"] == "actionBlock": |
|
1000 actionBlock = SFC_ActionBlock(self, instance["actions"], instance["id"]) |
|
1001 actionBlock.SetPosition(instance["x"], instance["y"]) |
|
1002 actionBlock.SetSize(instance["width"], instance["height"]) |
|
1003 self.AddBlock(actionBlock) |
|
1004 connector = actionBlock.GetConnector() |
|
1005 connector.SetPosition(wx.Point(*instance["connector"]["position"])) |
|
1006 self.CreateWires(connector, instance["connector"]["links"], ids) |
|
1007 else: |
901 else: |
1008 connectors = {"inputs" : [], "outputs" : []} |
|
1009 executionControl = False |
902 executionControl = False |
1010 for input in instance["connectors"]["inputs"]: |
903 for input in instance["inputs"]: |
1011 if input["negated"]: |
904 if input["negated"]: |
1012 connectors["inputs"].append((input["name"], None, "negated")) |
905 connectors["inputs"].append((input["name"], None, "negated")) |
1013 elif input["edge"]: |
906 elif input["edge"]: |
1014 connectors["inputs"].append((input["name"], None, input["edge"])) |
907 connectors["inputs"].append((input["name"], None, input["edge"])) |
1015 else: |
908 else: |
1016 connectors["inputs"].append((input["name"], None, "none")) |
909 connectors["inputs"].append((input["name"], None, "none")) |
1017 for output in instance["connectors"]["outputs"]: |
910 for output in instance["outputs"]: |
1018 if output["negated"]: |
911 if output["negated"]: |
1019 connectors["outputs"].append((output["name"], None, "negated")) |
912 connectors["outputs"].append((output["name"], None, "negated")) |
1020 elif output["edge"]: |
913 elif output["edge"]: |
1021 connectors["outputs"].append((output["name"], None, output["edge"])) |
914 connectors["outputs"].append((output["name"], None, output["edge"])) |
1022 else: |
915 else: |
1023 connectors["outputs"].append((output["name"], None, "none")) |
916 connectors["outputs"].append((output["name"], None, "none")) |
1024 if len(connectors["inputs"]) > 0 and connectors["inputs"][0][0] == "EN": |
917 if len(connectors["inputs"]) > 0 and connectors["inputs"][0][0] == "EN": |
1025 connectors["inputs"].pop(0) |
918 connectors["inputs"].pop(0) |
1026 executionControl = True |
919 executionControl = True |
1027 if len(connectors["outputs"]) > 0 and connectors["outputs"][0][0] == "ENO": |
920 if len(connectors["outputs"]) > 0 and connectors["outputs"][0][0] == "ENO": |
1028 connectors["outputs"].pop(0) |
921 connectors["outputs"].pop(0) |
1029 executionControl = True |
922 executionControl = True |
1030 if instance["name"] is None: |
923 if specific_values["name"] is None: |
1031 instance["name"] = "" |
924 specific_values["name"] = "" |
1032 block = FBD_Block(self, instance["type"], instance["name"], |
925 element = FBD_Block(self, instance["type"], specific_values["name"], |
1033 instance["id"], len(connectors["inputs"]), |
926 instance["id"], len(connectors["inputs"]), |
1034 connectors=connectors, executionControl=executionControl, |
927 connectors=connectors, executionControl=executionControl, |
1035 executionOrder=instance["executionOrder"]) |
928 executionOrder=specific_values["executionOrder"]) |
1036 block.SetPosition(instance["x"], instance["y"]) |
929 element.SetPosition(instance["x"], instance["y"]) |
1037 block.SetSize(instance["width"], instance["height"]) |
930 element.SetSize(instance["width"], instance["height"]) |
1038 self.AddBlock(block) |
931 if isinstance(element, Comment): |
1039 connectors = block.GetConnectors() |
932 self.AddComment(element) |
1040 for i, input_connector in enumerate(instance["connectors"]["inputs"]): |
933 else: |
1041 if i < len(connectors["inputs"]): |
934 self.AddBlock(element) |
1042 connector = connectors["inputs"][i] |
935 connectors = element.GetConnectors() |
1043 connector.SetPosition(wx.Point(*input_connector["position"])) |
936 for i, input_connector in enumerate(instance["inputs"]): |
1044 if input_connector["negated"]: |
937 if i < len(connectors["inputs"]): |
1045 connector.SetNegated(True) |
938 connector = connectors["inputs"][i] |
1046 if input_connector["edge"] != "none": |
939 connector.SetPosition(wx.Point(*input_connector["position"])) |
1047 connector.SetEdge(input_connector["edge"]) |
940 if input_connector.get("negated", False): |
1048 self.CreateWires(connector, input_connector["links"], ids) |
941 connector.SetNegated(True) |
1049 for i, output_connector in enumerate(instance["connectors"]["outputs"]): |
942 if input_connector.get("edge", "none") != "none": |
1050 if i < len(connectors["outputs"]): |
943 connector.SetEdge(input_connector["edge"]) |
1051 connector = connectors["outputs"][i] |
944 self.CreateWires(connector, instance["id"], input_connector["links"], ids, selection) |
1052 if output_connector["negated"]: |
945 for i, output_connector in enumerate(instance["outputs"]): |
1053 connector.SetNegated(True) |
946 if i < len(connectors["outputs"]): |
1054 if output_connector["edge"] != "none": |
947 connector = connectors["outputs"][i] |
1055 connector.SetEdge(output_connector["edge"]) |
948 if output_connector.get("negated", False): |
1056 connector.SetPosition(wx.Point(*output_connector["position"])) |
949 connector.SetNegated(True) |
1057 |
950 if output_connector.get("edge", "none") != "none": |
1058 def CreateWires(self, start_connector, links, ids): |
951 connector.SetEdge(output_connector["edge"]) |
952 connector.SetPosition(wx.Point(*output_connector["position"])) |
|
953 if selection is not None and selection[0].get(instance["id"], False): |
|
954 self.SelectInGroup(element) |
|
955 |
|
956 def CreateWires(self, start_connector, id, links, ids, selection=None): |
|
1059 for link in links: |
957 for link in links: |
1060 refLocalId = link["refLocalId"] |
958 refLocalId = link["refLocalId"] |
1061 if refLocalId is not None: |
959 if refLocalId is not None: |
1062 if refLocalId not in ids: |
960 if refLocalId not in ids: |
1063 new_instance = self.Controler.GetEditedElementInstanceInfos(self.TagName, refLocalId, debug = self.Debug) |
961 new_instance = self.Controler.GetEditedElementInstanceInfos(self.TagName, refLocalId, debug = self.Debug) |
1064 if new_instance is not None: |
962 if new_instance is not None: |
1065 self.loadInstance(new_instance, ids) |
963 self.loadInstance(new_instance, ids, selection) |
1066 connected = self.FindElementById(refLocalId) |
964 connected = self.FindElementById(refLocalId) |
1067 if connected is not None: |
965 if connected is not None: |
1068 points = link["points"] |
966 points = link["points"] |
1069 end_connector = connected.GetConnector(wx.Point(points[-1][0], points[-1][1]), link["formalParameter"]) |
967 end_connector = connected.GetConnector(wx.Point(points[-1][0], points[-1][1]), link["formalParameter"]) |
1070 if end_connector is not None: |
968 if end_connector is not None: |
1073 start_connector.Connect((wire, 0), False) |
971 start_connector.Connect((wire, 0), False) |
1074 end_connector.Connect((wire, -1), False) |
972 end_connector.Connect((wire, -1), False) |
1075 wire.ConnectStartPoint(None, start_connector) |
973 wire.ConnectStartPoint(None, start_connector) |
1076 wire.ConnectEndPoint(None, end_connector) |
974 wire.ConnectEndPoint(None, end_connector) |
1077 self.AddWire(wire) |
975 self.AddWire(wire) |
976 if selection is not None and (\ |
|
977 selection[1].get((id, refLocalId), False) or \ |
|
978 selection[1].get((refLocalId, id), False)): |
|
979 self.SelectInGroup(wire) |
|
1078 |
980 |
1079 def IsOfType(self, type, reference): |
981 def IsOfType(self, type, reference): |
1080 return self.Controler.IsOfType(type, reference, self.Debug) |
982 return self.Controler.IsOfType(type, reference, self.Debug) |
1081 |
983 |
1082 def IsEndType(self, type): |
984 def IsEndType(self, type): |
1088 #------------------------------------------------------------------------------- |
990 #------------------------------------------------------------------------------- |
1089 # Search Element functions |
991 # Search Element functions |
1090 #------------------------------------------------------------------------------- |
992 #------------------------------------------------------------------------------- |
1091 |
993 |
1092 def FindBlock(self, pos): |
994 def FindBlock(self, pos): |
1093 for block in self.Blocks: |
995 for block in self.Blocks.itervalues(): |
1094 if block.HitTest(pos) or block.TestHandle(pos) != (0, 0): |
996 if block.HitTest(pos) or block.TestHandle(pos) != (0, 0): |
1095 return block |
997 return block |
1096 return None |
998 return None |
1097 |
999 |
1098 def FindWire(self, pos): |
1000 def FindWire(self, pos): |
1109 if element.HitTest(pos) or element.TestHandle(pos) != (0, 0): |
1011 if element.HitTest(pos) or element.TestHandle(pos) != (0, 0): |
1110 return element |
1012 return element |
1111 return None |
1013 return None |
1112 |
1014 |
1113 def FindBlockConnector(self, pos, direction = None, exclude = None): |
1015 def FindBlockConnector(self, pos, direction = None, exclude = None): |
1114 for block in self.Blocks: |
1016 for block in self.Blocks.itervalues(): |
1115 result = block.TestConnector(pos, direction, exclude) |
1017 result = block.TestConnector(pos, direction, exclude) |
1116 if result: |
1018 if result: |
1117 return result |
1019 return result |
1118 return None |
1020 return None |
1119 |
1021 |
1120 def FindElementById(self, id): |
1022 def FindElementById(self, id): |
1121 for element in self.Blocks: |
1023 block = self.Blocks.get(id, None) |
1122 if element.GetId() == id: |
1024 if block is not None: |
1123 return element |
1025 return block |
1124 for element in self.Comments: |
1026 comment = self.Comments.get(id, None) |
1125 if element.GetId() == id: |
1027 if comment is not None: |
1126 return element |
1028 return comment |
1127 return None |
1029 return None |
1128 |
1030 |
1129 def SearchElements(self, bbox): |
1031 def SearchElements(self, bbox): |
1130 elements = [] |
1032 elements = [] |
1131 for element in self.GetElements(): |
1033 for element in self.GetElements(): |
1975 def AddNewStep(self, bbox, initial = False): |
1877 def AddNewStep(self, bbox, initial = False): |
1976 dialog = StepContentDialog(self.ParentWindow, self.Controler, initial) |
1878 dialog = StepContentDialog(self.ParentWindow, self.Controler, initial) |
1977 dialog.SetPreviewFont(self.GetFont()) |
1879 dialog.SetPreviewFont(self.GetFont()) |
1978 dialog.SetPouNames(self.Controler.GetProjectPouNames(self.Debug)) |
1880 dialog.SetPouNames(self.Controler.GetProjectPouNames(self.Debug)) |
1979 dialog.SetVariables(self.Controler.GetEditedElementInterfaceVars(self.TagName, self.Debug)) |
1881 dialog.SetVariables(self.Controler.GetEditedElementInterfaceVars(self.TagName, self.Debug)) |
1980 dialog.SetStepNames([block.GetName() for block in self.Blocks if isinstance(block, SFC_Step)]) |
1882 dialog.SetStepNames([block.GetName() for block in self.Blocks.itervalues() if isinstance(block, SFC_Step)]) |
1981 dialog.SetMinStepSize((bbox.width, bbox.height)) |
1883 dialog.SetMinStepSize((bbox.width, bbox.height)) |
1982 if dialog.ShowModal() == wx.ID_OK: |
1884 if dialog.ShowModal() == wx.ID_OK: |
1983 id = self.GetNewId() |
1885 id = self.GetNewId() |
1984 values = dialog.GetValues() |
1886 values = dialog.GetValues() |
1985 step = SFC_Step(self, values["name"], initial, id) |
1887 step = SFC_Step(self, values["name"], initial, id) |
2047 divergence.Refresh() |
1949 divergence.Refresh() |
2048 dialog.Destroy() |
1950 dialog.Destroy() |
2049 |
1951 |
2050 def AddNewJump(self, bbox): |
1952 def AddNewJump(self, bbox): |
2051 choices = [] |
1953 choices = [] |
2052 for block in self.Blocks: |
1954 for block in self.Blocks.itervalues(): |
2053 if isinstance(block, SFC_Step): |
1955 if isinstance(block, SFC_Step): |
2054 choices.append(block.GetName()) |
1956 choices.append(block.GetName()) |
2055 dialog = wx.SingleChoiceDialog(self.ParentWindow, "Add a new jump", "Please choose a target", choices, wx.OK|wx.CANCEL) |
1957 dialog = wx.SingleChoiceDialog(self.ParentWindow, "Add a new jump", "Please choose a target", choices, wx.OK|wx.CANCEL) |
2056 if dialog.ShowModal() == wx.ID_OK: |
1958 if dialog.ShowModal() == wx.ID_OK: |
2057 id = self.GetNewId() |
1959 id = self.GetNewId() |
2285 def EditStepContent(self, step): |
2187 def EditStepContent(self, step): |
2286 dialog = StepContentDialog(self.ParentWindow, self.Controler, step.GetInitial()) |
2188 dialog = StepContentDialog(self.ParentWindow, self.Controler, step.GetInitial()) |
2287 dialog.SetPreviewFont(self.GetFont()) |
2189 dialog.SetPreviewFont(self.GetFont()) |
2288 dialog.SetPouNames(self.Controler.GetProjectPouNames(self.Debug)) |
2190 dialog.SetPouNames(self.Controler.GetProjectPouNames(self.Debug)) |
2289 dialog.SetVariables(self.Controler.GetEditedElementInterfaceVars(self.TagName, self.Debug)) |
2191 dialog.SetVariables(self.Controler.GetEditedElementInterfaceVars(self.TagName, self.Debug)) |
2290 dialog.SetStepNames([block.GetName() for block in self.Blocks if isinstance(block, SFC_Step) and block.GetName() != step.GetName()]) |
2192 dialog.SetStepNames([block.GetName() for block in self.Blocks.itervalues() if isinstance(block, SFC_Step) and block.GetName() != step.GetName()]) |
2291 dialog.SetMinStepSize(step.GetSize()) |
2193 dialog.SetMinStepSize(step.GetSize()) |
2292 values = {"name" : step.GetName()} |
2194 values = {"name" : step.GetName()} |
2293 connectors = step.GetConnectors() |
2195 connectors = step.GetConnectors() |
2294 values["input"] = connectors["input"] != None |
2196 values["input"] = connectors["input"] != None |
2295 values["output"] = connectors["output"] != None |
2197 values["output"] = connectors["output"] != None |
2338 transition.Refresh(rect) |
2240 transition.Refresh(rect) |
2339 dialog.Destroy() |
2241 dialog.Destroy() |
2340 |
2242 |
2341 def EditJumpContent(self, jump): |
2243 def EditJumpContent(self, jump): |
2342 choices = [] |
2244 choices = [] |
2343 for block in self.Blocks: |
2245 for block in self.Blocks.itervalues(): |
2344 if isinstance(block, SFC_Step): |
2246 if isinstance(block, SFC_Step): |
2345 choices.append(block.GetName()) |
2247 choices.append(block.GetName()) |
2346 dialog = wx.SingleChoiceDialog(self.ParentWindow, "Edit jump target", "Please choose a target", choices, wx.OK|wx.CANCEL) |
2248 dialog = wx.SingleChoiceDialog(self.ParentWindow, "Edit jump target", "Please choose a target", choices, wx.OK|wx.CANCEL) |
2347 dialog.SetSelection(choices.index(jump.GetTarget())) |
2249 dialog.SetSelection(choices.index(jump.GetTarget())) |
2348 if dialog.ShowModal() == wx.ID_OK: |
2250 if dialog.ShowModal() == wx.ID_OK: |
2472 infos["name"] = step.GetName() |
2374 infos["name"] = step.GetName() |
2473 infos["initial"] = step.GetInitial() |
2375 infos["initial"] = step.GetInitial() |
2474 infos["x"], infos["y"] = step.GetPosition() |
2376 infos["x"], infos["y"] = step.GetPosition() |
2475 infos["width"], infos["height"] = step.GetSize() |
2377 infos["width"], infos["height"] = step.GetSize() |
2476 infos["connectors"] = step.GetConnectors() |
2378 infos["connectors"] = step.GetConnectors() |
2379 infos["action"] = step.GetActionConnector() |
|
2477 self.Controler.SetEditedElementStepInfos(self.TagName, stepid, infos) |
2380 self.Controler.SetEditedElementStepInfos(self.TagName, stepid, infos) |
2478 |
2381 |
2479 def RefreshTransitionModel(self, transition): |
2382 def RefreshTransitionModel(self, transition): |
2480 transitionid = transition.GetId() |
2383 transitionid = transition.GetId() |
2481 infos = {} |
2384 infos = {} |
2483 infos["priority"] = transition.GetPriority() |
2386 infos["priority"] = transition.GetPriority() |
2484 infos["condition"] = transition.GetCondition() |
2387 infos["condition"] = transition.GetCondition() |
2485 infos["x"], infos["y"] = transition.GetPosition() |
2388 infos["x"], infos["y"] = transition.GetPosition() |
2486 infos["width"], infos["height"] = transition.GetSize() |
2389 infos["width"], infos["height"] = transition.GetSize() |
2487 infos["connectors"] = transition.GetConnectors() |
2390 infos["connectors"] = transition.GetConnectors() |
2391 infos["connection"] = transition.GetConditionConnector() |
|
2488 self.Controler.SetEditedElementTransitionInfos(self.TagName, transitionid, infos) |
2392 self.Controler.SetEditedElementTransitionInfos(self.TagName, transitionid, infos) |
2489 |
2393 |
2490 def RefreshDivergenceModel(self, divergence): |
2394 def RefreshDivergenceModel(self, divergence): |
2491 divergenceid = divergence.GetId() |
2395 divergenceid = divergence.GetId() |
2492 infos = {} |
2396 infos = {} |
2533 wx.CallAfter(self.ParentWindow.RefreshVariablePanel, self.TagName) |
2437 wx.CallAfter(self.ParentWindow.RefreshVariablePanel, self.TagName) |
2534 wx.CallAfter(self.ParentWindow.RefreshInstancesTree) |
2438 wx.CallAfter(self.ParentWindow.RefreshInstancesTree) |
2535 |
2439 |
2536 def DeleteVariable(self, variable): |
2440 def DeleteVariable(self, variable): |
2537 connectors = variable.GetConnectors() |
2441 connectors = variable.GetConnectors() |
2538 if connectors["output"]: |
2442 if len(connectors["outputs"]) > 0: |
2539 elements = connectors["output"].GetConnectedBlocks() |
2443 elements = connectors["outputs"][0].GetConnectedBlocks() |
2540 else: |
2444 else: |
2541 elements = [] |
2445 elements = [] |
2542 variable.Clean() |
2446 variable.Clean() |
2543 self.RemoveBlock(variable) |
2447 self.RemoveBlock(variable) |
2544 self.Controler.RemoveEditedElementInstance(self.TagName, variable.GetId()) |
2448 self.Controler.RemoveEditedElementInstance(self.TagName, variable.GetId()) |
2568 for connector in connected: |
2472 for connector in connected: |
2569 connector.RefreshParentBlock() |
2473 connector.RefreshParentBlock() |
2570 |
2474 |
2571 def DeleteContact(self, contact): |
2475 def DeleteContact(self, contact): |
2572 connectors = contact.GetConnectors() |
2476 connectors = contact.GetConnectors() |
2573 elements = connectors["output"].GetConnectedBlocks() |
2477 elements = connectors["outputs"][0].GetConnectedBlocks() |
2574 contact.Clean() |
2478 contact.Clean() |
2575 self.RemoveBlock(contact) |
2479 self.RemoveBlock(contact) |
2576 self.Controler.RemoveEditedElementInstance(self.TagName, contact.GetId()) |
2480 self.Controler.RemoveEditedElementInstance(self.TagName, contact.GetId()) |
2577 for element in elements: |
2481 for element in elements: |
2578 element.RefreshModel() |
2482 element.RefreshModel() |
2579 |
2483 |
2580 def DeleteCoil(self, coil): |
2484 def DeleteCoil(self, coil): |
2581 connectors = coil.GetConnectors() |
2485 connectors = coil.GetConnectors() |
2582 elements = connectors["output"].GetConnectedBlocks() |
2486 elements = connectors["outputs"][0].GetConnectedBlocks() |
2583 coil.Clean() |
2487 coil.Clean() |
2584 self.RemoveBlock(coil) |
2488 self.RemoveBlock(coil) |
2585 self.Controler.RemoveEditedElementInstance(self.TagName, coil.GetId()) |
2489 self.Controler.RemoveEditedElementInstance(self.TagName, coil.GetId()) |
2586 for element in elements: |
2490 for element in elements: |
2587 element.RefreshModel() |
2491 element.RefreshModel() |
2588 |
2492 |
2589 def DeletePowerRail(self, powerrail): |
2493 def DeletePowerRail(self, powerrail): |
2590 elements = [] |
2494 elements = [] |
2591 if powerrail.GetType() == LEFTRAIL: |
2495 if powerrail.GetType() == LEFTRAIL: |
2592 for connector in powerrail.GetConnectors(): |
2496 connectors = powerrail.GetConnectors() |
2497 for connector in connectors["outputs"]: |
|
2593 for element in connector.GetConnectedBlocks(): |
2498 for element in connector.GetConnectedBlocks(): |
2594 if element not in elements: |
2499 if element not in elements: |
2595 elements.append(element) |
2500 elements.append(element) |
2596 powerrail.Clean() |
2501 powerrail.Clean() |
2597 self.RemoveBlock(powerrail) |
2502 self.RemoveBlock(powerrail) |
2600 element.RefreshModel() |
2505 element.RefreshModel() |
2601 |
2506 |
2602 def DeleteStep(self, step): |
2507 def DeleteStep(self, step): |
2603 elements = [] |
2508 elements = [] |
2604 connectors = step.GetConnectors() |
2509 connectors = step.GetConnectors() |
2605 if connectors["output"]: |
2510 action_connector = step.GetActionConnector() |
2606 for element in connectors["output"].GetConnectedBlocks(): |
2511 if len(connectors["outputs"]) > 0: |
2512 for element in connectors["outputs"][0].GetConnectedBlocks(): |
|
2607 if element not in elements: |
2513 if element not in elements: |
2608 elements.append(element) |
2514 elements.append(element) |
2609 if connectors["action"]: |
2515 if action_connector is not None: |
2610 for element in connectors["action"].GetConnectedBlocks(): |
2516 for element in action_connector.GetConnectedBlocks(): |
2611 if element not in elements: |
2517 if element not in elements: |
2612 elements.append(element) |
2518 elements.append(element) |
2613 step.Clean() |
2519 step.Clean() |
2614 self.RemoveBlock(step) |
2520 self.RemoveBlock(step) |
2615 self.Controler.RemoveEditedElementInstance(self.TagName, step.GetId()) |
2521 self.Controler.RemoveEditedElementInstance(self.TagName, step.GetId()) |
2617 element.RefreshModel() |
2523 element.RefreshModel() |
2618 |
2524 |
2619 def DeleteTransition(self, transition): |
2525 def DeleteTransition(self, transition): |
2620 elements = [] |
2526 elements = [] |
2621 connectors = transition.GetConnectors() |
2527 connectors = transition.GetConnectors() |
2622 if connectors["output"]: |
2528 for element in connectors["outputs"][0].GetConnectedBlocks(): |
2623 for element in connectors["output"].GetConnectedBlocks(): |
2529 if element not in elements: |
2624 if element not in elements: |
2530 elements.append(element) |
2625 elements.append(element) |
|
2626 transition.Clean() |
2531 transition.Clean() |
2627 self.RemoveBlock(transition) |
2532 self.RemoveBlock(transition) |
2628 self.Controler.RemoveEditedElementInstance(self.TagName, transition.GetId()) |
2533 self.Controler.RemoveEditedElementInstance(self.TagName, transition.GetId()) |
2629 for element in elements: |
2534 for element in elements: |
2630 element.RefreshModel() |
2535 element.RefreshModel() |
2895 for y in xrange(self.PageSize[1] - (ystart * SCROLLBAR_UNIT) % self.PageSize[1], int(window_size[1] / self.ViewScale[1]), self.PageSize[1]): |
2800 for y in xrange(self.PageSize[1] - (ystart * SCROLLBAR_UNIT) % self.PageSize[1], int(window_size[1] / self.ViewScale[1]), self.PageSize[1]): |
2896 dc.DrawLine(int(xstart * SCROLLBAR_UNIT / self.ViewScale[0]), ystart * SCROLLBAR_UNIT + y + 1, |
2801 dc.DrawLine(int(xstart * SCROLLBAR_UNIT / self.ViewScale[0]), ystart * SCROLLBAR_UNIT + y + 1, |
2897 int((xstart * SCROLLBAR_UNIT + window_size[0]) / self.ViewScale[1]), ystart * SCROLLBAR_UNIT + y + 1) |
2802 int((xstart * SCROLLBAR_UNIT + window_size[0]) / self.ViewScale[1]), ystart * SCROLLBAR_UNIT + y + 1) |
2898 |
2803 |
2899 # Draw all elements |
2804 # Draw all elements |
2900 for comment in self.Comments: |
2805 for comment in self.Comments.itervalues(): |
2901 if comment != self.SelectedElement and (comment.IsVisible() or printing): |
2806 if comment != self.SelectedElement and (comment.IsVisible() or printing): |
2902 comment.Draw(dc) |
2807 comment.Draw(dc) |
2903 for wire in self.Wires: |
2808 for wire in self.Wires.iterkeys(): |
2904 if wire != self.SelectedElement and (wire.IsVisible() or printing): |
2809 if wire != self.SelectedElement and (wire.IsVisible() or printing): |
2905 if not self.Debug or wire.GetValue() != True: |
2810 if not self.Debug or wire.GetValue() != True: |
2906 wire.Draw(dc) |
2811 wire.Draw(dc) |
2907 if self.Debug: |
2812 if self.Debug: |
2908 for wire in self.Wires: |
2813 for wire in self.Wires.iterkeys(): |
2909 if wire != self.SelectedElement and (wire.IsVisible() or printing) and wire.GetValue() == True: |
2814 if wire != self.SelectedElement and (wire.IsVisible() or printing) and wire.GetValue() == True: |
2910 wire.Draw(dc) |
2815 wire.Draw(dc) |
2911 for block in self.Blocks: |
2816 for block in self.Blocks.itervalues(): |
2912 if block != self.SelectedElement and (block.IsVisible() or printing): |
2817 if block != self.SelectedElement and (block.IsVisible() or printing): |
2913 block.Draw(dc) |
2818 block.Draw(dc) |
2914 |
2819 |
2915 if self.SelectedElement is not None and (self.SelectedElement.IsVisible() or printing): |
2820 if self.SelectedElement is not None and (self.SelectedElement.IsVisible() or printing): |
2916 self.SelectedElement.Draw(dc) |
2821 self.SelectedElement.Draw(dc) |