Viewer.py
changeset 575 a7c706b9492e
parent 566 6014ef82a98a
child 585 bd8c7a033b17
equal deleted inserted replaced
574:8c525217ef1f 575:a7c706b9492e
   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()