diff --git a/graphs/gui/canvasPanel.py b/graphs/gui/canvasPanel.py index 3a98dcb3e..3aa56c931 100644 --- a/graphs/gui/canvasPanel.py +++ b/graphs/gui/canvasPanel.py @@ -83,12 +83,17 @@ class GraphCanvasPanel(wx.Panel): self.figure.set_edgecolor(clr) self.canvas = Canvas(self, -1, self.figure) self.canvas.SetBackgroundColour(wx.Colour(*rgbtuple)) + self.canvas.mpl_connect('button_press_event', self.OnMplCanvasClick) self.subplot = self.figure.add_subplot(111) self.subplot.grid(True) mainSizer.Add(self.canvas, 1, wx.EXPAND | wx.ALL, 0) self.SetSizer(mainSizer) + self.xMark = None + self.mplOnDragHandler = None + self.mplOnReleaseHandler = None + def draw(self): self.subplot.clear() self.subplot.grid(True) @@ -201,3 +206,41 @@ class GraphCanvasPanel(wx.Panel): self.canvas.draw() self.Refresh() + + def markXApproximate(self, x): + if x is not None: + self.xMark = x + self.draw() + + def markXAccurate(self, x): + if x is not None: + self.xMark = x + self.draw() + + def unmarkX(self): + self.xMark = None + self.draw() + + # Matplotlib event handlers + def OnMplCanvasClick(self, event): + if event.button == 1: + if not self.mplOnDragHandler: + self.mplOnDragHandler = self.canvas.mpl_connect('motion_notify_event', self.OnMplCanvasDrag) + if not self.mplOnReleaseHandler: + self.mplOnReleaseHandler = self.canvas.mpl_connect('button_release_event', self.OnMplCanvasRelease) + self.markXApproximate(event.xdata) + elif event.button == 3: + self.unmarkX() + + def OnMplCanvasDrag(self, event): + self.markXApproximate(event.xdata) + + def OnMplCanvasRelease(self, event): + if event.button == 1: + if self.mplOnDragHandler: + self.canvas.mpl_disconnect(self.mplOnDragHandler) + self.mplOnDragHandler = None + if self.mplOnReleaseHandler: + self.canvas.mpl_disconnect(self.mplOnReleaseHandler) + self.mplOnReleaseHandler = None + self.markXAccurate(event.xdata)