Viewer.py
changeset 633 3536f4469cde
parent 625 b7062a7018ec
child 634 cc3335911c01
equal deleted inserted replaced
632:3ea55a5db68e 633:3536f4469cde
   537         self.Editor.Bind(wx.EVT_CHAR, self.OnChar)
   537         self.Editor.Bind(wx.EVT_CHAR, self.OnChar)
   538         self.Editor.Bind(wx.EVT_SCROLLWIN, self.OnScrollWindow)
   538         self.Editor.Bind(wx.EVT_SCROLLWIN, self.OnScrollWindow)
   539         self.Editor.Bind(wx.EVT_SCROLLWIN_THUMBRELEASE, self.OnScrollStop)
   539         self.Editor.Bind(wx.EVT_SCROLLWIN_THUMBRELEASE, self.OnScrollStop)
   540         self.Editor.Bind(wx.EVT_MOUSEWHEEL, self.OnMouseWheelWindow)
   540         self.Editor.Bind(wx.EVT_MOUSEWHEEL, self.OnMouseWheelWindow)
   541         self.Editor.Bind(wx.EVT_SIZE, self.OnMoveWindow)
   541         self.Editor.Bind(wx.EVT_SIZE, self.OnMoveWindow)
       
   542         self.Editor.Bind(wx.EVT_MOUSE_EVENTS, self.OnViewerMouseEvent)
   542     
   543     
   543     def __del__(self):
   544     def __del__(self):
   544         DebugViewer.__del__(self)
   545         DebugViewer.__del__(self)
   545         self.RefreshHighlightsTimer.Stop()
   546         self.RefreshHighlightsTimer.Stop()
   546     
   547     
   618                 self.RefreshScaling(refresh)
   619                 self.RefreshScaling(refresh)
   619                 self.Editor.Thaw()
   620                 self.Editor.Thaw()
   620     
   621     
   621     def GetScale(self):
   622     def GetScale(self):
   622         return self.CurrentScale
   623         return self.CurrentScale
       
   624 
       
   625     def GetViewScale(self):
       
   626         return self.ViewScale
   623 
   627 
   624     def GetLogicalDC(self, buffered=False):
   628     def GetLogicalDC(self, buffered=False):
   625         if buffered:
   629         if buffered:
   626             bitmap = wx.EmptyBitmap(*self.Editor.GetClientSize())
   630             bitmap = wx.EmptyBitmap(*self.Editor.GetClientSize())
   627             dc = wx.MemoryDC(bitmap)
   631             dc = wx.MemoryDC(bitmap)
   779         self.Wires = {}
   783         self.Wires = {}
   780         self.Comments = {}
   784         self.Comments = {}
   781         self.Subscribed = {}
   785         self.Subscribed = {}
   782         self.SelectedElement = None
   786         self.SelectedElement = None
   783         self.HighlightedElement = None
   787         self.HighlightedElement = None
       
   788         self.ToolTipElement = None
   784     
   789     
   785     def Flush(self):
   790     def Flush(self):
   786         self.DeleteDataConsumers()
   791         self.DeleteDataConsumers()
   787         for block in self.Blocks.itervalues():
   792         for block in self.Blocks.itervalues():
   788             block.Flush()
   793             block.Flush()
  1128         for wire in self.Wires:
  1133         for wire in self.Wires:
  1129             if wire.HitTest(pos) or wire.TestHandle(event) != (0, 0):
  1134             if wire.HitTest(pos) or wire.TestHandle(event) != (0, 0):
  1130                 return wire
  1135                 return wire
  1131         return None
  1136         return None
  1132     
  1137     
  1133     def FindElement(self, event, exclude_group = False):
  1138     def FindElement(self, event, exclude_group = False, connectors = True):
  1134         dc = self.GetLogicalDC()
  1139         dc = self.GetLogicalDC()
  1135         pos = event.GetLogicalPosition(dc)
  1140         pos = event.GetLogicalPosition(dc)
  1136         if self.SelectedElement and not (exclude_group and isinstance(self.SelectedElement, Graphic_Group)):
  1141         if self.SelectedElement and not (exclude_group and isinstance(self.SelectedElement, Graphic_Group)):
  1137             if self.SelectedElement.HitTest(pos) or self.SelectedElement.TestHandle(event) != (0, 0):
  1142             if self.SelectedElement.HitTest(pos, connectors) or self.SelectedElement.TestHandle(event) != (0, 0):
  1138                 return self.SelectedElement
  1143                 return self.SelectedElement
  1139         for element in self.GetElements():
  1144         for element in self.GetElements():
  1140             if element.HitTest(pos) or element.TestHandle(event) != (0, 0):
  1145             if element.HitTest(pos, connectors) or element.TestHandle(event) != (0, 0):
  1141                 return element
  1146                 return element
  1142         return None
  1147         return None
  1143     
  1148     
  1144     def FindBlockConnector(self, pos, direction = None, exclude = None):
  1149     def FindBlockConnector(self, pos, direction = None, exclude = None):
  1145         for block in self.Blocks.itervalues():
  1150         for block in self.Blocks.itervalues():
  1397         self.RefreshView()
  1402         self.RefreshView()
  1398 
  1403 
  1399 #-------------------------------------------------------------------------------
  1404 #-------------------------------------------------------------------------------
  1400 #                          Mouse event functions
  1405 #                          Mouse event functions
  1401 #-------------------------------------------------------------------------------
  1406 #-------------------------------------------------------------------------------
       
  1407 
       
  1408     def OnViewerMouseEvent(self, event):
       
  1409         if not event.Entering():
       
  1410             element = None
       
  1411             if not event.Leaving():
       
  1412                 element = self.FindElement(event, True, False)
       
  1413             if self.ToolTipElement is not None:
       
  1414                 self.ToolTipElement.ClearToolTip()
       
  1415             self.ToolTipElement = element
       
  1416             if self.ToolTipElement is not None:
       
  1417                 tooltip_pos = self.Editor.ClientToScreen(event.GetPosition())
       
  1418                 tooltip_pos.x += 10
       
  1419                 tooltip_pos.y += 10
       
  1420                 self.ToolTipElement.CreateToolTip(tooltip_pos)
       
  1421         event.Skip()
  1402 
  1422 
  1403     def OnViewerLeftDown(self, event):
  1423     def OnViewerLeftDown(self, event):
  1404         if self.Mode == MODE_SELECTION:
  1424         if self.Mode == MODE_SELECTION:
  1405             dc = self.GetLogicalDC()
  1425             dc = self.GetLogicalDC()
  1406             pos = event.GetLogicalPosition(dc)
  1426             pos = event.GetLogicalPosition(dc)
  1464                     wire.Handle = (HANDLE_POINT, 1)
  1484                     wire.Handle = (HANDLE_POINT, 1)
  1465                     self.AddWire(wire)
  1485                     self.AddWire(wire)
  1466                     if self.SelectedElement is not None:
  1486                     if self.SelectedElement is not None:
  1467                         self.SelectedElement.SetSelected(False)
  1487                         self.SelectedElement.SetSelected(False)
  1468                     self.SelectedElement = wire
  1488                     self.SelectedElement = wire
       
  1489                     if self.HighlightedElement is not None:
       
  1490                         self.HighlightedElement.SetHighlighted(False)
       
  1491                     self.HighlightedElement = wire
  1469                     self.RefreshVisibleElements()
  1492                     self.RefreshVisibleElements()
  1470                     self.SelectedElement.Refresh()
  1493                     self.SelectedElement.SetHighlighted(True)
  1471                 else:
  1494                 else:
  1472                     if self.SelectedElement is not None and self.SelectedElement != element:
  1495                     if self.SelectedElement is not None and self.SelectedElement != element:
  1473                         self.SelectedElement.SetSelected(False)
  1496                         self.SelectedElement.SetSelected(False)
  1474                         self.SelectedElement = None
  1497                         self.SelectedElement = None
  1475                     if element is not None:
  1498                     if element is not None:
  1554                     self.SelectedElement.EndConnected.HighlightParentBlock(False)
  1577                     self.SelectedElement.EndConnected.HighlightParentBlock(False)
  1555                     self.SelectedElement.ResetPoints()
  1578                     self.SelectedElement.ResetPoints()
  1556                     self.SelectedElement.OnMotion(event, dc, self.Scaling)
  1579                     self.SelectedElement.OnMotion(event, dc, self.Scaling)
  1557                     self.SelectedElement.GeneratePoints()
  1580                     self.SelectedElement.GeneratePoints()
  1558                     self.SelectedElement.RefreshModel()
  1581                     self.SelectedElement.RefreshModel()
  1559                     if self.HighlightedElement is not None:
       
  1560                         self.HighlightedElement.SetHighlighted(False)
       
  1561                         self.HighlightedElement = None
       
  1562                     self.SelectedElement.SetHighlighted(True)
       
  1563                     self.HighlightedElement = self.SelectedElement
       
  1564                     self.SelectedElement.SetSelected(True)
  1582                     self.SelectedElement.SetSelected(True)
       
  1583                     self.SelectedElement.HighlightPoint(pos)
  1565                     self.RefreshBuffer()
  1584                     self.RefreshBuffer()
  1566                 elif connector is None or self.SelectedElement.GetDragging():
  1585                 elif connector is None or self.SelectedElement.GetDragging():
  1567                     self.DrawingWire = False
  1586                     self.DrawingWire = False
  1568                     rect = self.SelectedElement.GetRedrawRect()
  1587                     rect = self.SelectedElement.GetRedrawRect()
  1569                     self.SelectedElement.Delete()
  1588                     self.SelectedElement.Delete()
  1664                     self.Scroll(scrollx, scrolly)
  1683                     self.Scroll(scrollx, scrolly)
  1665                     self.RefreshScrollBars()
  1684                     self.RefreshScrollBars()
  1666                 self.RefreshVisibleElements()
  1685                 self.RefreshVisibleElements()
  1667         else:
  1686         else:
  1668             if not event.Dragging():
  1687             if not event.Dragging():
  1669                 highlighted = self.FindElement(event) 
  1688                 highlighted = self.FindElement(event, connectors=False) 
  1670                 if self.HighlightedElement is not None and self.HighlightedElement != highlighted:
  1689                 if self.HighlightedElement is not None and self.HighlightedElement != highlighted:
  1671                     self.HighlightedElement.ClearToolTip()
       
  1672                     self.HighlightedElement.SetHighlighted(False)
  1690                     self.HighlightedElement.SetHighlighted(False)
  1673                     self.HighlightedElement = None
  1691                     self.HighlightedElement = None
  1674                 if highlighted is not None:
  1692                 if highlighted is not None:
  1675                     tooltip_pos = self.Editor.ClientToScreen(event.GetPosition())
  1693                     if isinstance(highlighted, (Wire, Graphic_Group)):
  1676                     tooltip_pos.x += 10
  1694                         highlighted.HighlightPoint(pos)
  1677                     tooltip_pos.y += 10
       
  1678                     if self.HighlightedElement != highlighted:
  1695                     if self.HighlightedElement != highlighted:
  1679                         highlighted.CreateToolTip(tooltip_pos)
       
  1680                         highlighted.SetHighlighted(True)
  1696                         highlighted.SetHighlighted(True)
  1681                     else:
       
  1682                         highlighted.MoveToolTip(tooltip_pos)
       
  1683                 self.HighlightedElement = highlighted
  1697                 self.HighlightedElement = highlighted
  1684             if self.rubberBand.IsShown():
  1698             if self.rubberBand.IsShown():
  1685                 self.rubberBand.OnMotion(event, dc, self.Scaling)
  1699                 self.rubberBand.OnMotion(event, dc, self.Scaling)
  1686             elif not self.Debug and self.Mode == MODE_SELECTION and self.SelectedElement is not None:
  1700             elif not self.Debug and self.Mode == MODE_SELECTION and self.SelectedElement is not None:
  1687                 if self.DrawingWire:
  1701                 if self.DrawingWire:
  1690                         self.SelectedElement.ResetPoints()
  1704                         self.SelectedElement.ResetPoints()
  1691                         movex, movey = self.SelectedElement.OnMotion(event, dc, self.Scaling)
  1705                         movex, movey = self.SelectedElement.OnMotion(event, dc, self.Scaling)
  1692                         self.SelectedElement.GeneratePoints()
  1706                         self.SelectedElement.GeneratePoints()
  1693                         if movex != 0 or movey != 0:
  1707                         if movex != 0 or movey != 0:
  1694                             self.RefreshRect(self.GetScrolledRect(self.SelectedElement.GetRedrawRect(movex, movey)), False)
  1708                             self.RefreshRect(self.GetScrolledRect(self.SelectedElement.GetRedrawRect(movex, movey)), False)
       
  1709                     else:
       
  1710                         self.SelectedElement.HighlightPoint(pos)
  1695                 else:
  1711                 else:
  1696                     movex, movey = self.SelectedElement.OnMotion(event, dc, self.Scaling)
  1712                     movex, movey = self.SelectedElement.OnMotion(event, dc, self.Scaling)
  1697                     if movex != 0 or movey != 0:
  1713                     if movex != 0 or movey != 0:
  1698                         self.RefreshRect(self.GetScrolledRect(self.SelectedElement.GetRedrawRect(movex, movey)), False)
  1714                         self.RefreshRect(self.GetScrolledRect(self.SelectedElement.GetRedrawRect(movex, movey)), False)
  1699             elif self.Debug and self.StartMousePos is not None and event.Dragging():
  1715             elif self.Debug and self.StartMousePos is not None and event.Dragging():
  1701                 if abs(self.StartMousePos.x - pos.x) > 5 or abs(self.StartMousePos.y - pos.y) > 5:
  1717                 if abs(self.StartMousePos.x - pos.x) > 5 or abs(self.StartMousePos.y - pos.y) > 5:
  1702                     iec_path = self.GetElementIECPath(self.SelectedElement)
  1718                     iec_path = self.GetElementIECPath(self.SelectedElement)
  1703                     if iec_path is not None:
  1719                     if iec_path is not None:
  1704                         self.StartMousePos = None
  1720                         self.StartMousePos = None
  1705                         if self.HighlightedElement is not None:
  1721                         if self.HighlightedElement is not None:
  1706                             if isinstance(self.HighlightedElement, Wire):
       
  1707                                 self.HighlightedElement.ClearToolTip()
       
  1708                             self.HighlightedElement.SetHighlighted(False)
  1722                             self.HighlightedElement.SetHighlighted(False)
  1709                             self.HighlightedElement = None
  1723                             self.HighlightedElement = None
  1710                         data = wx.TextDataObject(str((iec_path, "debug")))
  1724                         data = wx.TextDataObject(str((iec_path, "debug")))
  1711                         dragSource = wx.DropSource(self.Editor)
  1725                         dragSource = wx.DropSource(self.Editor)
  1712                         dragSource.SetData(data)
  1726                         dragSource.SetData(data)
  1718         if self.StartScreenPos is None:
  1732         if self.StartScreenPos is None:
  1719             self.StartMousePos = None
  1733             self.StartMousePos = None
  1720         if self.SelectedElement is not None and self.SelectedElement.GetDragging():
  1734         if self.SelectedElement is not None and self.SelectedElement.GetDragging():
  1721             event.Skip()
  1735             event.Skip()
  1722         elif self.HighlightedElement is not None:
  1736         elif self.HighlightedElement is not None:
  1723             self.HighlightedElement.ClearToolTip()
       
  1724             self.HighlightedElement.SetHighlighted(False)
  1737             self.HighlightedElement.SetHighlighted(False)
  1725             self.HighlightedElement = None
  1738             self.HighlightedElement = None
  1726         event.Skip()
  1739         event.Skip()
  1727 
  1740 
  1728     def UpdateScrollPos(self, event):
  1741     def UpdateScrollPos(self, event):