editors/Viewer.py
changeset 852 1009f956d2ee
parent 832 b2609a8e4cb6
child 856 b64e436f000e
equal deleted inserted replaced
851:666f5bdad301 852:1009f956d2ee
   499              (ID_ADD_COMMENT, wx.ITEM_NORMAL, _(u'Comment'), '', self.GetAddMenuCallBack(self.AddNewComment))])
   499              (ID_ADD_COMMENT, wx.ITEM_NORMAL, _(u'Comment'), '', self.GetAddMenuCallBack(self.AddNewComment))])
   500         
   500         
   501     # Add Default Menu items to the given menu
   501     # Add Default Menu items to the given menu
   502     def AddDefaultMenuItems(self, menu, edit=False, block=False):
   502     def AddDefaultMenuItems(self, menu, edit=False, block=False):
   503         if block:
   503         if block:
   504             [ID_EDIT_BLOCK, ID_DELETE] = [wx.NewId() for i in xrange(2)]
   504             [ID_EDIT_BLOCK, ID_DELETE, ID_ADJUST_BLOCK_SIZE] = [wx.NewId() for i in xrange(3)]
   505         
   505         
   506             # Create menu items
   506             # Create menu items
   507             self.AddMenuItems(menu, [
   507             self.AddMenuItems(menu, [
   508                  (ID_EDIT_BLOCK, wx.ITEM_NORMAL, _(u'Edit Block'), '', self.OnEditBlockMenu),
   508                  (ID_EDIT_BLOCK, wx.ITEM_NORMAL, _(u'Edit Block'), '', self.OnEditBlockMenu),
       
   509                  (ID_ADJUST_BLOCK_SIZE, wx.ITEM_NORMAL, _(u'Adjust Block Size'), '', self.OnAdjustBlockSizeMenu),
   509                  (ID_DELETE, wx.ITEM_NORMAL, _(u'Delete'), '', self.OnDeleteMenu)])
   510                  (ID_DELETE, wx.ITEM_NORMAL, _(u'Delete'), '', self.OnDeleteMenu)])
   510         
   511         
   511             menu.Enable(ID_EDIT_BLOCK, edit)
   512             menu.Enable(ID_EDIT_BLOCK, edit)
   512         
   513         
   513         else:
   514         else:
   788         
   789         
   789     def AddComment(self, comment):
   790     def AddComment(self, comment):
   790         self.Comments[comment.GetId()] = comment
   791         self.Comments[comment.GetId()] = comment
   791 
   792 
   792     def IsBlock(self, block):
   793     def IsBlock(self, block):
   793         return self.Blocks.get(block.GetId(), False)
   794         if block is not None:
       
   795             return self.Blocks.get(block.GetId(), False)
       
   796         return False
   794         
   797         
   795     def IsWire(self, wire):
   798     def IsWire(self, wire):
   796         return self.Wires.get(wire, False)
   799         return self.Wires.get(wire, False)
   797         
   800         
   798     def IsComment(self, comment):
   801     def IsComment(self, comment):
   799         return self.Comments.get(comment.GetId(), False)
   802         if comment is not None:
       
   803             return self.Comments.get(comment.GetId(), False)
       
   804         return False
   800 
   805 
   801     def RemoveBlock(self, block):
   806     def RemoveBlock(self, block):
   802         self.Blocks.pop(block.GetId())
   807         self.Blocks.pop(block.GetId())
   803         
   808         
   804     def RemoveWire(self, wire):
   809     def RemoveWire(self, wire):
  1235             self.AddComment(element)
  1240             self.AddComment(element)
  1236         else:
  1241         else:
  1237             self.AddBlock(element)
  1242             self.AddBlock(element)
  1238             connectors = element.GetConnectors()
  1243             connectors = element.GetConnectors()
  1239         element.SetPosition(instance["x"], instance["y"])
  1244         element.SetPosition(instance["x"], instance["y"])
  1240         if isinstance(element, SFC_Divergence):
  1245         element.SetSize(instance["width"], instance["height"])
  1241             element.SetSize(instance["width"], instance["height"])
       
  1242         for i, output_connector in enumerate(instance["outputs"]):
  1246         for i, output_connector in enumerate(instance["outputs"]):
  1243             if i < len(connectors["outputs"]):
  1247             if i < len(connectors["outputs"]):
  1244                 connector = connectors["outputs"][i]
  1248                 connector = connectors["outputs"][i]
  1245                 if output_connector.get("negated", False):
  1249                 if output_connector.get("negated", False):
  1246                     connector.SetNegated(True)
  1250                     connector.SetNegated(True)
  1254                 if input_connector.get("negated", False):
  1258                 if input_connector.get("negated", False):
  1255                     connector.SetNegated(True)
  1259                     connector.SetNegated(True)
  1256                 if input_connector.get("edge", "none") != "none":
  1260                 if input_connector.get("edge", "none") != "none":
  1257                     connector.SetEdge(input_connector["edge"])
  1261                     connector.SetEdge(input_connector["edge"])
  1258                 self.CreateWires(connector, instance["id"], input_connector["links"], ids, selection)
  1262                 self.CreateWires(connector, instance["id"], input_connector["links"], ids, selection)
  1259         if not isinstance(element, SFC_Divergence):
       
  1260             element.SetSize(instance["width"], instance["height"])
       
  1261         if selection is not None and selection[0].get(instance["id"], False):
  1263         if selection is not None and selection[0].get(instance["id"], False):
  1262             self.SelectInGroup(element)
  1264             self.SelectInGroup(element)
  1263 
  1265 
  1264     def CreateWires(self, start_connector, id, links, ids, selection=None):
  1266     def CreateWires(self, start_connector, id, links, ids, selection=None):
  1265         for link in links:
  1267         for link in links:
  1518             self.RemoveDivergenceBranch(self.SelectedElement)
  1520             self.RemoveDivergenceBranch(self.SelectedElement)
  1519 
  1521 
  1520     def OnEditBlockMenu(self, event):
  1522     def OnEditBlockMenu(self, event):
  1521         if self.SelectedElement is not None:
  1523         if self.SelectedElement is not None:
  1522             self.ParentWindow.EditProjectElement(ITEM_POU, "P::%s"%self.SelectedElement.GetType())
  1524             self.ParentWindow.EditProjectElement(ITEM_POU, "P::%s"%self.SelectedElement.GetType())
       
  1525 
       
  1526     def OnAdjustBlockSizeMenu(self, event):
       
  1527         if self.SelectedElement is not None:
       
  1528             movex, movey = self.SelectedElement.SetBestSize(self.Scaling)
       
  1529             self.SelectedElement.RefreshModel()
       
  1530             self.RefreshBuffer()
       
  1531             if movex != 0 or movey != 0:
       
  1532                 self.RefreshRect(self.GetScrolledRect(self.SelectedElement.GetRedrawRect(movex, movey)), False)
  1523 
  1533 
  1524     def OnDeleteMenu(self, event):
  1534     def OnDeleteMenu(self, event):
  1525         if self.SelectedElement is not None:
  1535         if self.SelectedElement is not None:
  1526             self.SelectedElement.Delete()
  1536             self.SelectedElement.Delete()
  1527             self.SelectedElement = None
  1537             self.SelectedElement = None
  1834                                    self.Controler.IsOfType(var_type, "ANY_BIT", self.Debug):
  1844                                    self.Controler.IsOfType(var_type, "ANY_BIT", self.Debug):
  1835                                     self.ParentWindow.OpenGraphicViewer(iec_path)
  1845                                     self.ParentWindow.OpenGraphicViewer(iec_path)
  1836                         else:
  1846                         else:
  1837                             self.ParentWindow.OpenGraphicViewer(iec_path)
  1847                             self.ParentWindow.OpenGraphicViewer(iec_path)
  1838             elif event.ControlDown() and not event.ShiftDown():
  1848             elif event.ControlDown() and not event.ShiftDown():
  1839                 instance_type = self.SelectedElement.GetType()
  1849                 if not isinstance(self.SelectedElement, Group_Element):
  1840                 if self.IsBlock(self.SelectedElement) and instance_type in self.Controler.GetProjectPouNames(self.Debug):
  1850                     instance_type = self.SelectedElement.GetType()
  1841                     self.ParentWindow.EditProjectElement(ITEM_POU, 
  1851                     if self.IsBlock(self.SelectedElement) and instance_type in self.Controler.GetProjectPouNames(self.Debug):
  1842                         self.Controler.ComputePouName(instance_type))
  1852                         self.ParentWindow.EditProjectElement(ITEM_POU, 
  1843                 else:
  1853                             self.Controler.ComputePouName(instance_type))
  1844                     self.SelectedElement.OnLeftDClick(event, self.GetLogicalDC(), self.Scaling)
  1854                     else:
       
  1855                         self.SelectedElement.OnLeftDClick(event, self.GetLogicalDC(), self.Scaling)
  1845             elif event.ControlDown() and event.ShiftDown():
  1856             elif event.ControlDown() and event.ShiftDown():
  1846                 movex, movey = self.SelectedElement.AdjustToScaling(self.Scaling)
  1857                 movex, movey = self.SelectedElement.SetBestSize(self.Scaling)
  1847                 self.SelectedElement.RefreshModel()
  1858                 self.SelectedElement.RefreshModel()
  1848                 self.RefreshBuffer()
  1859                 self.RefreshBuffer()
  1849                 if movex != 0 or movey != 0:
  1860                 if movex != 0 or movey != 0:
  1850                     self.RefreshRect(self.GetScrolledRect(self.SelectedElement.GetRedrawRect(movex, movey)), False)
  1861                     self.RefreshRect(self.GetScrolledRect(self.SelectedElement.GetRedrawRect(movex, movey)), False)
  1851             else:
  1862             else:
  2466                 self.Controler.AddEditedElementConnection(self.TagName, id, values["type"])
  2477                 self.Controler.AddEditedElementConnection(self.TagName, id, values["type"])
  2467             self.RefreshConnectionModel(connection)
  2478             self.RefreshConnectionModel(connection)
  2468             self.RefreshBuffer()
  2479             self.RefreshBuffer()
  2469             if old_name != values["name"]:
  2480             if old_name != values["name"]:
  2470                 self.Controler.UpdateEditedElementUsedVariable(self.TagName, old_name, values["name"])
  2481                 self.Controler.UpdateEditedElementUsedVariable(self.TagName, old_name, values["name"])
       
  2482                 self.RefreshBuffer()
  2471                 self.RefreshView(selection=({connection.GetId(): True}, {}))
  2483                 self.RefreshView(selection=({connection.GetId(): True}, {}))
  2472             else:
  2484             else:
  2473                 self.RefreshScrollBars()
  2485                 self.RefreshScrollBars()
  2474                 self.RefreshVisibleElements()
  2486                 self.RefreshVisibleElements()
  2475                 connection.Refresh(rect)
  2487                 connection.Refresh(rect)