diff -r 8c525217ef1f -r a7c706b9492e Viewer.py --- 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: