140 |
140 |
141 self._init_coll_ContextualMenu_Items(self.ContextualMenu) |
141 self._init_coll_ContextualMenu_Items(self.ContextualMenu) |
142 |
142 |
143 # Create a new Viewer |
143 # Create a new Viewer |
144 def __init__(self, parent, window, controler): |
144 def __init__(self, parent, window, controler): |
145 wx.ScrolledWindow.__init__(self, parent, style=wx.SUNKEN_BORDER | wx.HSCROLL | wx.VSCROLL) |
145 wx.ScrolledWindow.__init__(self, parent, pos=wx.Point(0, 0), size=wx.Size(0, 0), |
|
146 style=wx.SUNKEN_BORDER | wx.HSCROLL | wx.VSCROLL) |
146 self._init_menus() |
147 self._init_menus() |
147 # Adding a rubberband to Viewer |
148 # Adding a rubberband to Viewer |
148 self.rubberBand = RubberBand(drawingSurface=self) |
149 self.rubberBand = RubberBand(drawingSurface=self) |
149 self.SetBackgroundColour(wx.Colour(255,255,255)) |
150 self.SetBackgroundColour(wx.Colour(255,255,255)) |
150 self.ResetView() |
151 self.ResetView() |
382 comment.SetSize(instance["width"], instance["height"]) |
383 comment.SetSize(instance["width"], instance["height"]) |
383 self.AddComment(comment) |
384 self.AddComment(comment) |
384 elif instance["type"] == "leftPowerRail": |
385 elif instance["type"] == "leftPowerRail": |
385 leftpowerrail = LD_PowerRail(self, LEFTRAIL, instance["id"], [True for i in range(len(instance["connectors"]))]) |
386 leftpowerrail = LD_PowerRail(self, LEFTRAIL, instance["id"], [True for i in range(len(instance["connectors"]))]) |
386 leftpowerrail.SetPosition(instance["x"], instance["y"]) |
387 leftpowerrail.SetPosition(instance["x"], instance["y"]) |
|
388 leftpowerrail.SetSize(instance["width"], instance["height"]) |
387 self.AddBlock(leftpowerrail) |
389 self.AddBlock(leftpowerrail) |
388 connectors = leftpowerrail.GetConnectors() |
390 connectors = leftpowerrail.GetConnectors() |
389 for i, connector in enumerate(instance["connectors"]): |
391 for i, connector in enumerate(instance["connectors"]): |
390 connectors[i].SetPosition(wx.Point(*connector["position"])) |
392 connectors[i].SetPosition(wx.Point(*connector["position"])) |
391 elif instance["type"] == "rightPowerRail": |
393 elif instance["type"] == "rightPowerRail": |
392 rightpowerrail = LD_PowerRail(self, RIGHTRAIL, instance["id"], [True for i in range(len(instance["connectors"]))]) |
394 rightpowerrail = LD_PowerRail(self, RIGHTRAIL, instance["id"], [True for i in range(len(instance["connectors"]))]) |
393 rightpowerrail.SetPosition(instance["x"], instance["y"]) |
395 rightpowerrail.SetPosition(instance["x"], instance["y"]) |
|
396 rightpowerrail.SetSize(instance["width"], instance["height"]) |
394 self.AddBlock(rightpowerrail) |
397 self.AddBlock(rightpowerrail) |
395 connectors = rightpowerrail.GetConnectors() |
398 connectors = rightpowerrail.GetConnectors() |
396 for i, connector in enumerate(instance["connectors"]): |
399 for i, connector in enumerate(instance["connectors"]): |
397 connectors[i].SetPosition(wx.Point(*connector["position"])) |
400 connectors[i].SetPosition(wx.Point(*connector["position"])) |
398 self.CreateWires(connectors[i], connector["links"], ids) |
401 self.CreateWires(connectors[i], connector["links"], ids) |
464 if connectors["output"]: |
467 if connectors["output"]: |
465 connectors["output"].SetPosition(wx.Point(*instance["connectors"]["output"]["position"])) |
468 connectors["output"].SetPosition(wx.Point(*instance["connectors"]["output"]["position"])) |
466 if connectors["action"]: |
469 if connectors["action"]: |
467 connectors["action"].SetPosition(wx.Point(*instance["connectors"]["action"]["position"])) |
470 connectors["action"].SetPosition(wx.Point(*instance["connectors"]["action"]["position"])) |
468 elif instance["type"] == "transition": |
471 elif instance["type"] == "transition": |
469 transition = SFC_Transition(self, instance["condition_type"], instance["condition"], instance["id"]) |
472 transition = SFC_Transition(self, instance["condition_type"], instance["condition"], instance["priority"], instance["id"]) |
470 transition.SetPosition(instance["x"], instance["y"]) |
473 transition.SetPosition(instance["x"], instance["y"]) |
471 self.AddBlock(transition) |
474 self.AddBlock(transition) |
472 connectors = transition.GetConnectors() |
475 connectors = transition.GetConnectors() |
473 connectors["input"].SetPosition(wx.Point(*instance["connectors"]["input"]["position"])) |
476 connectors["input"].SetPosition(wx.Point(*instance["connectors"]["input"]["position"])) |
474 self.CreateWires(connectors["input"], instance["connectors"]["input"]["links"], ids) |
477 self.CreateWires(connectors["input"], instance["connectors"]["input"]["links"], ids) |
698 #------------------------------------------------------------------------------- |
701 #------------------------------------------------------------------------------- |
699 |
702 |
700 def OnNoModifierMenu(self, event): |
703 def OnNoModifierMenu(self, event): |
701 if self.SelectedElement and self.IsBlock(self.SelectedElement): |
704 if self.SelectedElement and self.IsBlock(self.SelectedElement): |
702 self.SelectedElement.SetConnectorNegated(False) |
705 self.SelectedElement.SetConnectorNegated(False) |
|
706 self.RefreshBuffer() |
703 event.Skip() |
707 event.Skip() |
704 |
708 |
705 def OnNegatedMenu(self, event): |
709 def OnNegatedMenu(self, event): |
706 if self.SelectedElement and self.IsBlock(self.SelectedElement): |
710 if self.SelectedElement and self.IsBlock(self.SelectedElement): |
707 self.SelectedElement.SetConnectorNegated(True) |
711 self.SelectedElement.SetConnectorNegated(True) |
|
712 self.RefreshBuffer() |
708 event.Skip() |
713 event.Skip() |
709 |
714 |
710 def OnRisingEdgeMenu(self, event): |
715 def OnRisingEdgeMenu(self, event): |
711 if self.SelectedElement and self.IsBlock(self.SelectedElement): |
716 if self.SelectedElement and self.IsBlock(self.SelectedElement): |
712 self.SelectedElement.SetConnectorEdge("rising") |
717 self.SelectedElement.SetConnectorEdge("rising") |
|
718 self.RefreshBuffer() |
713 event.Skip() |
719 event.Skip() |
714 |
720 |
715 def OnFallingEdgeMenu(self, event): |
721 def OnFallingEdgeMenu(self, event): |
716 if self.SelectedElement and self.IsBlock(self.SelectedElement): |
722 if self.SelectedElement and self.IsBlock(self.SelectedElement): |
717 self.SelectedElement.SetConnectorEdge("falling") |
723 self.SelectedElement.SetConnectorEdge("falling") |
|
724 self.RefreshBuffer() |
718 event.Skip() |
725 event.Skip() |
719 |
726 |
720 def OnAddSegmentMenu(self, event): |
727 def OnAddSegmentMenu(self, event): |
721 if self.SelectedElement and self.IsBlock(self.SelectedElement): |
728 if self.SelectedElement and self.IsWire(self.SelectedElement): |
722 self.SelectedElement.AddSegment() |
729 self.SelectedElement.AddSegment() |
723 event.Skip() |
730 event.Skip() |
724 |
731 |
725 def OnDeleteSegmentMenu(self, event): |
732 def OnDeleteSegmentMenu(self, event): |
726 if self.SelectedElement and self.IsBlock(self.SelectedElement): |
733 if self.SelectedElement and self.IsWire(self.SelectedElement): |
727 self.SelectedElement.DeleteSegment() |
734 self.SelectedElement.DeleteSegment() |
728 event.Skip() |
735 event.Skip() |
729 |
736 |
730 def OnAddBranchMenu(self, event): |
737 def OnAddBranchMenu(self, event): |
731 if self.SelectedElement and self.IsBlock(self.SelectedElement): |
738 if self.SelectedElement and self.IsBlock(self.SelectedElement): |
732 self.AddDivergenceBranch(self.SelectedElement) |
739 self.AddDivergenceBranch(self.SelectedElement) |
|
740 self.RefreshBuffer() |
733 event.Skip() |
741 event.Skip() |
734 |
742 |
735 def OnDeleteBranchMenu(self, event): |
743 def OnDeleteBranchMenu(self, event): |
736 if self.SelectedElement and self.IsBlock(self.SelectedElement): |
744 if self.SelectedElement and self.IsBlock(self.SelectedElement): |
737 self.RemoveDivergenceBranch(self.SelectedElement) |
745 self.RemoveDivergenceBranch(self.SelectedElement) |
|
746 self.RefreshBuffer() |
738 event.Skip() |
747 event.Skip() |
739 |
748 |
740 def OnDeleteMenu(self, event): |
749 def OnDeleteMenu(self, event): |
741 if self.SelectedElement: |
750 if self.SelectedElement: |
742 self.SelectedElement.Delete() |
751 self.SelectedElement.Delete() |
743 self.SelectedElement = None |
752 self.SelectedElement = None |
|
753 self.RefreshBuffer() |
744 event.Skip() |
754 event.Skip() |
745 |
755 |
746 #------------------------------------------------------------------------------- |
756 #------------------------------------------------------------------------------- |
747 # Mouse event functions |
757 # Mouse event functions |
748 #------------------------------------------------------------------------------- |
758 #------------------------------------------------------------------------------- |
811 def OnViewerLeftUp(self, event): |
821 def OnViewerLeftUp(self, event): |
812 if self.rubberBand.IsShown(): |
822 if self.rubberBand.IsShown(): |
813 if self.Mode == MODE_SELECTION: |
823 if self.Mode == MODE_SELECTION: |
814 elements = self.SearchElements(self.rubberBand.GetCurrentExtent()) |
824 elements = self.SearchElements(self.rubberBand.GetCurrentExtent()) |
815 self.rubberBand.OnLeftUp(event, self.GetLogicalDC(), self.Scaling) |
825 self.rubberBand.OnLeftUp(event, self.GetLogicalDC(), self.Scaling) |
816 if len(elements) > 0: |
826 if len(elements) == 1: |
|
827 self.SelectedElement = elements[0] |
|
828 self.SelectedElement.SetSelected(True) |
|
829 self.Refresh() |
|
830 elif len(elements) > 1: |
817 self.SelectedElement = Graphic_Group(self) |
831 self.SelectedElement = Graphic_Group(self) |
818 self.SelectedElement.SetElements(elements) |
832 self.SelectedElement.SetElements(elements) |
819 self.SelectedElement.SetSelected(True) |
833 self.SelectedElement.SetSelected(True) |
820 self.Refresh() |
834 self.Refresh() |
821 else: |
835 else: |
867 if not self.SavedMode: |
881 if not self.SavedMode: |
868 wx.CallAfter(self.Parent.ResetCurrentMode) |
882 wx.CallAfter(self.Parent.ResetCurrentMode) |
869 event.Skip() |
883 event.Skip() |
870 |
884 |
871 def OnViewerRightUp(self, event): |
885 def OnViewerRightUp(self, event): |
872 pos = event.GetPosition() |
886 dc = self.GetLogicalDC() |
|
887 pos = event.GetLogicalPosition(dc) |
873 element = self.FindElement(pos) |
888 element = self.FindElement(pos) |
874 if element: |
889 if element: |
875 if self.SelectedElement and self.SelectedElement != element: |
890 if self.SelectedElement and self.SelectedElement != element: |
876 self.SelectedElement.SetSelected(False) |
891 self.SelectedElement.SetSelected(False) |
877 self.SelectedElement = element |
892 self.SelectedElement = element |
1184 dialog = TransitionContentDialog(self.Parent, self.GetDrawingMode() == FREEDRAWING_MODE) |
1199 dialog = TransitionContentDialog(self.Parent, self.GetDrawingMode() == FREEDRAWING_MODE) |
1185 dialog.SetTransitions(self.Controler.GetCurrentElementEditingTransitions()) |
1200 dialog.SetTransitions(self.Controler.GetCurrentElementEditingTransitions()) |
1186 if dialog.ShowModal() == wx.ID_OK: |
1201 if dialog.ShowModal() == wx.ID_OK: |
1187 id = self.GetNewId() |
1202 id = self.GetNewId() |
1188 values = dialog.GetValues() |
1203 values = dialog.GetValues() |
1189 transition = SFC_Transition(self, values["type"], values["value"], id) |
1204 transition = SFC_Transition(self, values["type"], values["value"], values["priority"], id) |
1190 transition.SetPosition(bbox.x, bbox.y) |
1205 transition.SetPosition(bbox.x, bbox.y) |
1191 min_width, min_height = transition.GetMinSize() |
1206 min_width, min_height = transition.GetMinSize() |
1192 transition.SetSize(max(bbox.width, min_width), max(bbox.height, min_height)) |
1207 transition.SetSize(max(bbox.width, min_width), max(bbox.height, min_height)) |
1193 self.AddBlock(transition) |
1208 self.AddBlock(transition) |
1194 self.Controler.AddCurrentElementEditingTransition(id) |
1209 self.Controler.AddCurrentElementEditingTransition(id) |
1395 self.Refresh() |
1410 self.Refresh() |
1396 |
1411 |
1397 def EditTransitionContent(self, transition): |
1412 def EditTransitionContent(self, transition): |
1398 dialog = TransitionContentDialog(self.Parent, self.GetDrawingMode() == FREEDRAWING_MODE) |
1413 dialog = TransitionContentDialog(self.Parent, self.GetDrawingMode() == FREEDRAWING_MODE) |
1399 dialog.SetTransitions(self.Controler.GetCurrentElementEditingTransitions()) |
1414 dialog.SetTransitions(self.Controler.GetCurrentElementEditingTransitions()) |
1400 dialog.SetValues({"type":transition.GetType(),"value":transition.GetCondition()}) |
1415 dialog.SetValues({"type":transition.GetType(),"value":transition.GetCondition(), "priority":transition.GetPriority()}) |
1401 dialog.SetElementSize(transition.GetSize()) |
1416 dialog.SetElementSize(transition.GetSize()) |
1402 if dialog.ShowModal() == wx.ID_OK: |
1417 if dialog.ShowModal() == wx.ID_OK: |
1403 values = dialog.GetValues() |
1418 values = dialog.GetValues() |
1404 transition.SetType(values["type"],values["value"]) |
1419 transition.SetType(values["type"],values["value"]) |
|
1420 transition.SetPriority(values["priority"]) |
1405 transition.RefreshModel() |
1421 transition.RefreshModel() |
1406 self.RefreshBuffer() |
1422 self.RefreshBuffer() |
1407 self.RefreshScrollBars() |
1423 self.RefreshScrollBars() |
1408 self.Refresh() |
1424 self.Refresh() |
1409 dialog.Destroy() |
1425 dialog.Destroy() |
1519 |
1535 |
1520 def RefreshTransitionModel(self, transition): |
1536 def RefreshTransitionModel(self, transition): |
1521 transitionid = transition.GetId() |
1537 transitionid = transition.GetId() |
1522 infos = {} |
1538 infos = {} |
1523 infos["type"] = transition.GetType() |
1539 infos["type"] = transition.GetType() |
|
1540 infos["priority"] = transition.GetPriority() |
1524 infos["condition"] = transition.GetCondition() |
1541 infos["condition"] = transition.GetCondition() |
1525 infos["x"], infos["y"] = transition.GetPosition() |
1542 infos["x"], infos["y"] = transition.GetPosition() |
1526 infos["width"], infos["height"] = transition.GetSize() |
1543 infos["width"], infos["height"] = transition.GetSize() |
1527 infos["connectors"] = transition.GetConnectors() |
1544 infos["connectors"] = transition.GetConnectors() |
1528 self.Controler.SetCurrentElementEditingTransitionInfos(transitionid, infos) |
1545 self.Controler.SetCurrentElementEditingTransitionInfos(transitionid, infos) |