From 969a4008207e765f0a1fabeb10d12b51a23f431b Mon Sep 17 00:00:00 2001 From: Dominik Demuth Date: Tue, 26 Dec 2023 17:01:47 +0100 Subject: [PATCH] barely functioning drag and drop over graphs --- src/gui_qt/graphs/graphwindow.py | 32 ++++++++++++++++++++++++++++++++ src/gui_qt/main/mainwindow.py | 1 + src/nmreval/utils/__init__.py | 1 - 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/gui_qt/graphs/graphwindow.py b/src/gui_qt/graphs/graphwindow.py index a13d87b..6179aeb 100644 --- a/src/gui_qt/graphs/graphwindow.py +++ b/src/gui_qt/graphs/graphwindow.py @@ -27,6 +27,7 @@ class QGraphWindow(QtWidgets.QGraphicsView, Ui_GraphWindow): mouseDoubleClicked = QtCore.pyqtSignal() positionClicked = QtCore.pyqtSignal(tuple, bool) aboutToClose = QtCore.pyqtSignal(list) + newData = QtCore.pyqtSignal(list, str) counter = itertools.count() @@ -87,6 +88,9 @@ class QGraphWindow(QtWidgets.QGraphicsView, Ui_GraphWindow): self.bwbutton.toggled.connect(self.change_background) + self.setAcceptDrops(True) + self.graphic.installEventFilter(self) + def _init_gui(self): self.setWindowTitle('Graph ' + str(next(QGraphWindow.counter))) @@ -119,6 +123,34 @@ class QGraphWindow(QtWidgets.QGraphicsView, Ui_GraphWindow): for lineedit in [self.xmin_lineedit, self.xmax_lineedit, self.ymin_lineedit, self.ymax_lineedit]: lineedit.setValidator(QtGui.QDoubleValidator()) + def eventFilter(self, obj: QtCore.QObject, evt: QtCore.QEvent): + """ + Catch drag and Drop to prevent anything inside self.graphic to accept the events. + Without event filter, we cannot process it here and start file reading + """ + if evt.type() == QtCore.QEvent.Type.DragEnter: + evt.accept() + return True + + elif evt.type() == QtCore.QEvent.Type.Drop: + return self._handle_drop(evt) + + else: + return False + + def dropEvent(self, evt: QtGui.QDropEvent): + return self._handle_drop(evt) + + def _handle_drop(self, evt: QtGui.QDropEvent): + if evt.mimeData().hasUrls(): + files = [str(url.toLocalFile()) for url in evt.mimeData().urls()] + self.newData.emit(files, self.id) + + evt.accept() + return True + + return False + def __contains__(self, item: str): return item in self.sets diff --git a/src/gui_qt/main/mainwindow.py b/src/gui_qt/main/mainwindow.py index a8ffa40..87d6e2c 100644 --- a/src/gui_qt/main/mainwindow.py +++ b/src/gui_qt/main/mainwindow.py @@ -471,6 +471,7 @@ class NMRMainWindow(QtWidgets.QMainWindow, Ui_BaseWindow): w.mousePositionChanged.connect(self.mousemoved) w.aboutToClose.connect(self.management.delete_sets) w.positionClicked.connect(self.point_selected) + w.newData.connect(lambda x, y: self.management.load_files(x, new_plot=y)) w.show() graph_list = self.management.graphs.list() diff --git a/src/nmreval/utils/__init__.py b/src/nmreval/utils/__init__.py index 64ec28c..8098c79 100755 --- a/src/nmreval/utils/__init__.py +++ b/src/nmreval/utils/__init__.py @@ -8,7 +8,6 @@ UNSIGNED_NUMBER_RE = re.compile(r'[-+]?\d*[+p.]?\d+([eE][-+]?\d+)?', re.MULTILIN def numbers_from_string(any_string: str) -> list[float]: - print(any_string) matches = [] for m in NUMBER_RE.finditer(any_string): matches.append(float(m.group().replace('p', '.')))