967 self.Canvas.DismissContextualButtons() |
967 self.Canvas.DismissContextualButtons() |
968 xw, yw = self.GetPosition() |
968 xw, yw = self.GetPosition() |
969 self.ParentWindow.StartDragNDrop(self, |
969 self.ParentWindow.StartDragNDrop(self, |
970 self.Items[item_idx], x + xw, y + yw, x + xw, y + yw) |
970 self.Items[item_idx], x + xw, y + yw, x + xw, y + yw) |
971 elif event.button == 1 and event.inaxes == self.Axes: |
971 elif event.button == 1 and event.inaxes == self.Axes: |
|
972 self.StartCursorTick = self.CursorTick |
972 self.HandleCursorMove(event) |
973 self.HandleCursorMove(event) |
973 elif event.button == 2 and self.GraphType == GRAPH_PARALLEL: |
974 elif event.button == 2 and self.GraphType == GRAPH_PARALLEL: |
974 width, height = self.Canvas.GetSize() |
975 width, height = self.Canvas.GetSize() |
975 start_tick, end_tick = self.ParentWindow.GetRange() |
976 start_tick, end_tick = self.ParentWindow.GetRange() |
976 self.MouseStartPos = wx.Point(x, y) |
977 self.MouseStartPos = wx.Point(x, y) |
1002 if event.inaxes == self.Axes: |
1003 if event.inaxes == self.Axes: |
1003 if self.MouseStartPos is not None: |
1004 if self.MouseStartPos is not None: |
1004 self.HandleCursorMove(event) |
1005 self.HandleCursorMove(event) |
1005 elif self.MouseStartPos is not None and len(self.Items) == 1: |
1006 elif self.MouseStartPos is not None and len(self.Items) == 1: |
1006 xw, yw = self.GetPosition() |
1007 xw, yw = self.GetPosition() |
|
1008 self.ParentWindow.SetCursorTick(self.StartCursorTick) |
1007 self.ParentWindow.StartDragNDrop(self, |
1009 self.ParentWindow.StartDragNDrop(self, |
1008 self.Items[0], |
1010 self.Items[0], |
1009 event.x + xw, height - event.y + yw, |
1011 event.x + xw, height - event.y + yw, |
1010 self.MouseStartPos.x + xw, self.MouseStartPos.y + yw) |
1012 self.MouseStartPos.x + xw, self.MouseStartPos.y + yw) |
1011 elif event.button == 2 and self.GraphType == GRAPH_PARALLEL: |
1013 elif event.button == 2 and self.GraphType == GRAPH_PARALLEL: |
1084 data = self.Items[0].GetData(start_tick, end_tick) |
1086 data = self.Items[0].GetData(start_tick, end_tick) |
1085 if len(data) > 0: |
1087 if len(data) > 0: |
1086 cursor_tick = data[numpy.argmin(numpy.abs(data[:,0] - event.xdata)), 0] |
1088 cursor_tick = data[numpy.argmin(numpy.abs(data[:,0] - event.xdata)), 0] |
1087 if cursor_tick is not None: |
1089 if cursor_tick is not None: |
1088 self.ParentWindow.SetCursorTick(cursor_tick) |
1090 self.ParentWindow.SetCursorTick(cursor_tick) |
1089 |
|
1090 def DoDragDrop(self, item_idx): |
|
1091 self.Canvas.ShowButtons(False) |
|
1092 self.Canvas.DismissContextualButtons() |
|
1093 data = wx.TextDataObject(str((self.Items[item_idx].GetVariable(), "debug", "move"))) |
|
1094 dragSource = wx.DropSource(self.Canvas) |
|
1095 dragSource.SetData(data) |
|
1096 dragSource.DoDragDrop() |
|
1097 |
1091 |
1098 def OnAxesMotion(self, event): |
1092 def OnAxesMotion(self, event): |
1099 if self.Is3DCanvas(): |
1093 if self.Is3DCanvas(): |
1100 current_time = gettime() |
1094 current_time = gettime() |
1101 if current_time - self.LastMotionTime > REFRESH_PERIOD: |
1095 if current_time - self.LastMotionTime > REFRESH_PERIOD: |
1814 self.PopupMenu(menu) |
1808 self.PopupMenu(menu) |
1815 |
1809 |
1816 menu.Destroy() |
1810 menu.Destroy() |
1817 event.Skip() |
1811 event.Skip() |
1818 |
1812 |
1819 def ChangeRange(self, dir, tick): |
1813 def ChangeRange(self, dir, tick=None): |
1820 current_range = self.CurrentRange |
1814 current_range = self.CurrentRange |
1821 current_range_idx = self.CanvasRange.GetSelection() |
1815 current_range_idx = self.CanvasRange.GetSelection() |
1822 new_range_idx = max(0, min(current_range_idx + dir, len(self.RangeValues) - 1)) |
1816 new_range_idx = max(0, min(current_range_idx + dir, len(self.RangeValues) - 1)) |
1823 if new_range_idx != current_range_idx: |
1817 if new_range_idx != current_range_idx: |
1824 self.CanvasRange.SetSelection(new_range_idx) |
1818 self.CanvasRange.SetSelection(new_range_idx) |
1825 if self.Ticktime == 0: |
1819 if self.Ticktime == 0: |
1826 self.CurrentRange = self.RangeValues[new_range_idx][1] |
1820 self.CurrentRange = self.RangeValues[new_range_idx][1] |
1827 else: |
1821 else: |
1828 self.CurrentRange = self.RangeValues[new_range_idx][1] / self.Ticktime |
1822 self.CurrentRange = self.RangeValues[new_range_idx][1] / self.Ticktime |
1829 if len(self.Ticks) > 0: |
1823 if len(self.Ticks) > 0: |
|
1824 if tick is None: |
|
1825 tick = self.StartTick + self.CurrentRange / 2. |
1830 new_start_tick = tick - (tick - self.StartTick) * self.CurrentRange / current_range |
1826 new_start_tick = tick - (tick - self.StartTick) * self.CurrentRange / current_range |
1831 self.StartTick = self.Ticks[numpy.argmin(numpy.abs(self.Ticks - new_start_tick))] |
1827 self.StartTick = self.Ticks[numpy.argmin(numpy.abs(self.Ticks - new_start_tick))] |
1832 self.Fixed = self.StartTick < self.Ticks[-1] - self.CurrentRange |
1828 self.Fixed = self.StartTick < self.Ticks[-1] - self.CurrentRange |
1833 self.ForceRefresh() |
1829 self.ForceRefresh() |
1834 |
1830 |