Viewer.py
changeset 575 a7c706b9492e
parent 566 6014ef82a98a
child 585 bd8c7a033b17
--- a/Viewer.py	Tue Oct 11 12:08:55 2011 +0200
+++ b/Viewer.py	Wed Oct 12 15:08:47 2011 +0200
@@ -533,10 +533,11 @@
         self.RefreshHighlightsTimer.Stop()
     
     def SetCurrentCursor(self, cursor):
-        global CURSORS
-        if self.CurrentCursor != cursor:
-            self.CurrentCursor = cursor
-            self.SetCursor(CURSORS[cursor])
+        if self.Mode != MODE_MOTION:
+            global CURSORS
+            if self.CurrentCursor != cursor:
+                self.CurrentCursor = cursor
+                self.SetCursor(CURSORS[cursor])
     
     def GetScrolledRect(self, rect):
         rect.x, rect.y = self.CalcScrolledPosition(int(rect.x * self.ViewScale[0]), 
@@ -729,7 +730,9 @@
     
     # Changes Viewer mode
     def SetMode(self, mode):
-        if self.Mode != mode or mode == MODE_SELECTION:
+        if self.Mode != mode or mode == MODE_SELECTION:    
+            if self.Mode == MODE_MOTION:
+                wx.CallAfter(self.SetCursor, wx.NullCursor)
             self.Mode = mode
             self.SavedMode = False
         else:
@@ -738,7 +741,10 @@
         if self.Mode != MODE_SELECTION and self.SelectedElement:
             self.SelectedElement.SetSelected(False)
             self.SelectedElement = None
-    
+        if self.Mode == MODE_MOTION:
+            wx.CallAfter(self.SetCursor, wx.StockCursor(wx.CURSOR_HAND))
+            self.SavedMode = True
+        
     # Return current drawing mode
     def GetDrawingMode(self):
         return self.ParentWindow.GetDrawingMode()
@@ -1393,6 +1399,9 @@
                            MODE_STEP, MODE_TRANSITION, MODE_DIVERGENCE, MODE_JUMP, MODE_ACTION]:
             self.rubberBand.Reset()
             self.rubberBand.OnLeftDown(event, self.GetLogicalDC(), self.Scaling)
+        elif self.Mode == MODE_MOTION:
+            self.StartMousePos = event.GetPosition()
+            self.StartScreenPos = self.GetScrollPos(wx.HORIZONTAL), self.GetScrollPos(wx.VERTICAL)
         event.Skip()
 
     def OnViewerLeftUp(self, event):
@@ -1469,6 +1478,9 @@
                 else:
                     self.SelectedElement.OnLeftUp(event, dc, self.Scaling)
                 wx.CallAfter(self.SetCurrentCursor, 0)
+        elif self.Mode == MODE_MOTION:
+            self.StartMousePos = None
+            self.StartScreenPos = None
         if self.Mode != MODE_SELECTION and not self.SavedMode:
             wx.CallAfter(self.ParentWindow.ResetCurrentMode)
         event.Skip()
@@ -1541,7 +1553,7 @@
         refresh = False
         dc = self.GetLogicalDC()
         pos = GetScaledEventPosition(event, dc, self.Scaling)
-        if event.MiddleIsDown():
+        if event.MiddleIsDown() or self.Mode == MODE_MOTION:
             if self.StartMousePos is not None and self.StartScreenPos is not None:
                 new_pos = event.GetPosition()
                 xmax = self.GetScrollRange(wx.HORIZONTAL) - self.GetScrollThumb(wx.HORIZONTAL)
@@ -1608,7 +1620,8 @@
         event.Skip()
 
     def OnLeaveViewer(self, event):
-        self.StartMousePos = None
+        if self.StartScreenPos is None:
+            self.StartMousePos = None
         if self.SelectedElement is not None and self.SelectedElement.GetDragging():
             event.Skip()
         elif self.HighlightedElement is not None: