Viewer.py
changeset 80 c798a68c5560
parent 71 0578bc212c20
child 90 2245e8776086
equal deleted inserted replaced
79:b22f661cbcfb 80:c798a68c5560
   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)
  1708 #-------------------------------------------------------------------------------
  1725 #-------------------------------------------------------------------------------
  1709 #                            Drawing functions
  1726 #                            Drawing functions
  1710 #-------------------------------------------------------------------------------
  1727 #-------------------------------------------------------------------------------
  1711 
  1728 
  1712     def OnMoveWindow(self, event):
  1729     def OnMoveWindow(self, event):
       
  1730         self.GetBestSize()
  1713         self.RefreshScrollBars()
  1731         self.RefreshScrollBars()
  1714         event.Skip()
  1732         event.Skip()
  1715 
  1733 
  1716     def OnPaint(self, event):
  1734     def OnPaint(self, event):
  1717         dc = self.GetLogicalDC()
  1735         dc = self.GetLogicalDC()