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) |
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): |