531 def __del__(self): |
531 def __del__(self): |
532 DebugViewer.__del__(self) |
532 DebugViewer.__del__(self) |
533 self.RefreshHighlightsTimer.Stop() |
533 self.RefreshHighlightsTimer.Stop() |
534 |
534 |
535 def SetCurrentCursor(self, cursor): |
535 def SetCurrentCursor(self, cursor): |
536 global CURSORS |
536 if self.Mode != MODE_MOTION: |
537 if self.CurrentCursor != cursor: |
537 global CURSORS |
538 self.CurrentCursor = cursor |
538 if self.CurrentCursor != cursor: |
539 self.SetCursor(CURSORS[cursor]) |
539 self.CurrentCursor = cursor |
|
540 self.SetCursor(CURSORS[cursor]) |
540 |
541 |
541 def GetScrolledRect(self, rect): |
542 def GetScrolledRect(self, rect): |
542 rect.x, rect.y = self.CalcScrolledPosition(int(rect.x * self.ViewScale[0]), |
543 rect.x, rect.y = self.CalcScrolledPosition(int(rect.x * self.ViewScale[0]), |
543 int(rect.y * self.ViewScale[1])) |
544 int(rect.y * self.ViewScale[1])) |
544 rect.width = int(rect.width * self.ViewScale[0]) + 2 |
545 rect.width = int(rect.width * self.ViewScale[0]) + 2 |
727 block.Clean() |
728 block.Clean() |
728 self.ResetView() |
729 self.ResetView() |
729 |
730 |
730 # Changes Viewer mode |
731 # Changes Viewer mode |
731 def SetMode(self, mode): |
732 def SetMode(self, mode): |
732 if self.Mode != mode or mode == MODE_SELECTION: |
733 if self.Mode != mode or mode == MODE_SELECTION: |
|
734 if self.Mode == MODE_MOTION: |
|
735 wx.CallAfter(self.SetCursor, wx.NullCursor) |
733 self.Mode = mode |
736 self.Mode = mode |
734 self.SavedMode = False |
737 self.SavedMode = False |
735 else: |
738 else: |
736 self.SavedMode = True |
739 self.SavedMode = True |
737 # Reset selection |
740 # Reset selection |
738 if self.Mode != MODE_SELECTION and self.SelectedElement: |
741 if self.Mode != MODE_SELECTION and self.SelectedElement: |
739 self.SelectedElement.SetSelected(False) |
742 self.SelectedElement.SetSelected(False) |
740 self.SelectedElement = None |
743 self.SelectedElement = None |
741 |
744 if self.Mode == MODE_MOTION: |
|
745 wx.CallAfter(self.SetCursor, wx.StockCursor(wx.CURSOR_HAND)) |
|
746 self.SavedMode = True |
|
747 |
742 # Return current drawing mode |
748 # Return current drawing mode |
743 def GetDrawingMode(self): |
749 def GetDrawingMode(self): |
744 return self.ParentWindow.GetDrawingMode() |
750 return self.ParentWindow.GetDrawingMode() |
745 |
751 |
746 # Buffer the last model state |
752 # Buffer the last model state |
1391 elif self.Mode in [MODE_BLOCK, MODE_VARIABLE, MODE_CONNECTION, MODE_COMMENT, |
1397 elif self.Mode in [MODE_BLOCK, MODE_VARIABLE, MODE_CONNECTION, MODE_COMMENT, |
1392 MODE_CONTACT, MODE_COIL, MODE_POWERRAIL, MODE_INITIALSTEP, |
1398 MODE_CONTACT, MODE_COIL, MODE_POWERRAIL, MODE_INITIALSTEP, |
1393 MODE_STEP, MODE_TRANSITION, MODE_DIVERGENCE, MODE_JUMP, MODE_ACTION]: |
1399 MODE_STEP, MODE_TRANSITION, MODE_DIVERGENCE, MODE_JUMP, MODE_ACTION]: |
1394 self.rubberBand.Reset() |
1400 self.rubberBand.Reset() |
1395 self.rubberBand.OnLeftDown(event, self.GetLogicalDC(), self.Scaling) |
1401 self.rubberBand.OnLeftDown(event, self.GetLogicalDC(), self.Scaling) |
|
1402 elif self.Mode == MODE_MOTION: |
|
1403 self.StartMousePos = event.GetPosition() |
|
1404 self.StartScreenPos = self.GetScrollPos(wx.HORIZONTAL), self.GetScrollPos(wx.VERTICAL) |
1396 event.Skip() |
1405 event.Skip() |
1397 |
1406 |
1398 def OnViewerLeftUp(self, event): |
1407 def OnViewerLeftUp(self, event): |
1399 self.StartMousePos = None |
1408 self.StartMousePos = None |
1400 if self.rubberBand.IsShown(): |
1409 if self.rubberBand.IsShown(): |
1467 if self.Debug: |
1476 if self.Debug: |
1468 Graphic_Element.OnLeftUp(self.SelectedElement, event, dc, self.Scaling) |
1477 Graphic_Element.OnLeftUp(self.SelectedElement, event, dc, self.Scaling) |
1469 else: |
1478 else: |
1470 self.SelectedElement.OnLeftUp(event, dc, self.Scaling) |
1479 self.SelectedElement.OnLeftUp(event, dc, self.Scaling) |
1471 wx.CallAfter(self.SetCurrentCursor, 0) |
1480 wx.CallAfter(self.SetCurrentCursor, 0) |
|
1481 elif self.Mode == MODE_MOTION: |
|
1482 self.StartMousePos = None |
|
1483 self.StartScreenPos = None |
1472 if self.Mode != MODE_SELECTION and not self.SavedMode: |
1484 if self.Mode != MODE_SELECTION and not self.SavedMode: |
1473 wx.CallAfter(self.ParentWindow.ResetCurrentMode) |
1485 wx.CallAfter(self.ParentWindow.ResetCurrentMode) |
1474 event.Skip() |
1486 event.Skip() |
1475 |
1487 |
1476 def OnViewerMiddleDown(self, event): |
1488 def OnViewerMiddleDown(self, event): |
1539 |
1551 |
1540 def OnViewerMotion(self, event): |
1552 def OnViewerMotion(self, event): |
1541 refresh = False |
1553 refresh = False |
1542 dc = self.GetLogicalDC() |
1554 dc = self.GetLogicalDC() |
1543 pos = GetScaledEventPosition(event, dc, self.Scaling) |
1555 pos = GetScaledEventPosition(event, dc, self.Scaling) |
1544 if event.MiddleIsDown(): |
1556 if event.MiddleIsDown() or self.Mode == MODE_MOTION: |
1545 if self.StartMousePos is not None and self.StartScreenPos is not None: |
1557 if self.StartMousePos is not None and self.StartScreenPos is not None: |
1546 new_pos = event.GetPosition() |
1558 new_pos = event.GetPosition() |
1547 xmax = self.GetScrollRange(wx.HORIZONTAL) - self.GetScrollThumb(wx.HORIZONTAL) |
1559 xmax = self.GetScrollRange(wx.HORIZONTAL) - self.GetScrollThumb(wx.HORIZONTAL) |
1548 ymax = self.GetScrollRange(wx.VERTICAL) - self.GetScrollThumb(wx.VERTICAL) |
1560 ymax = self.GetScrollRange(wx.VERTICAL) - self.GetScrollThumb(wx.VERTICAL) |
1549 scrollx = max(0, self.StartScreenPos[0] - (new_pos[0] - self.StartMousePos[0]) / SCROLLBAR_UNIT) |
1561 scrollx = max(0, self.StartScreenPos[0] - (new_pos[0] - self.StartMousePos[0]) / SCROLLBAR_UNIT) |
1606 dragSource.DoDragDrop() |
1618 dragSource.DoDragDrop() |
1607 self.UpdateScrollPos(event) |
1619 self.UpdateScrollPos(event) |
1608 event.Skip() |
1620 event.Skip() |
1609 |
1621 |
1610 def OnLeaveViewer(self, event): |
1622 def OnLeaveViewer(self, event): |
1611 self.StartMousePos = None |
1623 if self.StartScreenPos is None: |
|
1624 self.StartMousePos = None |
1612 if self.SelectedElement is not None and self.SelectedElement.GetDragging(): |
1625 if self.SelectedElement is not None and self.SelectedElement.GetDragging(): |
1613 event.Skip() |
1626 event.Skip() |
1614 elif self.HighlightedElement is not None: |
1627 elif self.HighlightedElement is not None: |
1615 if isinstance(self.HighlightedElement, Wire): |
1628 if isinstance(self.HighlightedElement, Wire): |
1616 self.HighlightedElement.ClearToolTip() |
1629 self.HighlightedElement.ClearToolTip() |