From 07d44ba86ebef265a338232fd7108517f4fce503 Mon Sep 17 00:00:00 2001
From: Alexander Minges <alexander.minges@gmail.com>
Date: Wed, 8 Jul 2015 01:04:05 +0200
Subject: [PATCH] Custom Navigation; Fix mouse events causing lag

---
 ui/mplwidget.py | 49 ++++++++++++++++++++++++++++++++++++-------------
 1 file changed, 36 insertions(+), 13 deletions(-)

diff --git a/ui/mplwidget.py b/ui/mplwidget.py
index d2a37ae..cb7d842 100644
--- a/ui/mplwidget.py
+++ b/ui/mplwidget.py
@@ -1,27 +1,50 @@
-from PyQt5 import QtWidgets, QtGui, QtCore
-from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
-from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar
+from PyQt5 import QtWidgets
+from matplotlib.backends.backend_qt5agg import (FigureCanvasQTAgg as
+                                                FigureCanvas)
+from matplotlib.backends.backend_qt5agg import (NavigationToolbar2QT as
+                                                NavigationToolbar)
 from matplotlib.figure import Figure
 
+
 class MplCanvas(FigureCanvas):
-    def __init__(self):
-        self.fig = Figure()
+    def __init__(self, parent=None, width=4, height=5, dpi=100):
+        self.fig = Figure(figsize=(width, height), dpi=dpi)
         self.ax = self.fig.add_subplot(111)
         FigureCanvas.__init__(self, self.fig)
-        FigureCanvas.setSizePolicy(self, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
+        self.setParent(parent)
+        FigureCanvas.setSizePolicy(self, QtWidgets.QSizePolicy.Expanding,
+                                   QtWidgets.QSizePolicy.Expanding)
         FigureCanvas.updateGeometry(self)
-        self.setFocusPolicy(QtCore.Qt.StrongFocus)
+
+    # override mouseMoveEvent with non-functional dummy
+    # this will prevent the gui thread to hang while moving the mouse
+    # while a large number of plots is shown simultaniously
+    def mouseMoveEvent(self, event):
+        pass
 
     def clear(self):
         self.ax.clear()
         self.fig.clear()
 
-class MplWidget(QtWidgets.QWidget):
-    def __init__(self, parent = None):
-        QtWidgets.QWidget.__init__(self, parent)
+
+class CustomNavigationToolbar(NavigationToolbar):
+    toolitems = (
+        ('Save', 'Save the figure', 'filesave', 'save_figure'),
+        ('Subplots', 'Configure subplots', 'subplots', 'configure_subplots'),
+        (None, None, None, None), )
+
+    def __init__(self, canvas, parent, coordinates=True):
+        NavigationToolbar.__init__(self, canvas, parent,
+                                   coordinates=coordinates)
+
+
+class MplWidget(QtWidgets.QGraphicsView):
+    def __init__(self, parent=None):
+        QtWidgets.QGraphicsView.__init__(self, parent)
         self.canvas = MplCanvas()
-        self.ntb = NavigationToolbar(self.canvas, self)
+        self.ntb = CustomNavigationToolbar(self.canvas, self,
+                                           coordinates=False)
         self.vbl = QtWidgets.QVBoxLayout()
-        self.vbl.addWidget(self.canvas)
         self.vbl.addWidget(self.ntb)
-        self.setLayout(self.vbl)
\ No newline at end of file
+        self.vbl.addWidget(self.canvas)
+        self.setLayout(self.vbl)