more_bugs (#51)
closes #46, #47, #7 Co-authored-by: Dominik Demuth <dominik.demuth@physik.tu-darmstadt.de> Reviewed-on: #51
This commit is contained in:
@ -2,7 +2,6 @@ from __future__ import annotations
|
||||
|
||||
import datetime
|
||||
import os
|
||||
import pathlib
|
||||
import re
|
||||
from pathlib import Path
|
||||
|
||||
@ -115,7 +114,10 @@ class NMRMainWindow(QtWidgets.QMainWindow, Ui_BaseWindow):
|
||||
|
||||
self.mousepos = QtWidgets.QLabel('')
|
||||
self.status = QtWidgets.QLabel('')
|
||||
|
||||
# noinspection PyUnresolvedReferences
|
||||
self.statusBar.addWidget(self.status)
|
||||
# noinspection PyUnresolvedReferences
|
||||
self.statusBar.addWidget(self.mousepos)
|
||||
|
||||
self.fitregion = RegionItem()
|
||||
@ -151,8 +153,6 @@ class NMRMainWindow(QtWidgets.QMainWindow, Ui_BaseWindow):
|
||||
self.actionUndo.setIcon(icon)
|
||||
self.menuData.insertAction(self.actionRedo, self.actionUndo)
|
||||
|
||||
# self.actionSave.triggered.connect(lambda: self.management.save('/autohome/dominik/nmreval/testdata/test.nmr', ''))
|
||||
# self.actionSave.triggered.connect(self.save)
|
||||
self.action_save_fit_parameter.triggered.connect(self.save_fit_parameter)
|
||||
self.ac_group2.triggered.connect(self.change_fit_limits)
|
||||
|
||||
@ -165,6 +165,12 @@ class NMRMainWindow(QtWidgets.QMainWindow, Ui_BaseWindow):
|
||||
|
||||
self.action_new_set.triggered.connect(self.management.create_empty)
|
||||
|
||||
self.actionDelete_window.triggered.connect(self.management.delete_sets)
|
||||
self.actionCascade_windows.triggered.connect(self.area.cascadeSubWindows)
|
||||
self.actionTile.triggered.connect(self.area.tileSubWindows)
|
||||
self.actionTileHorizontal.triggered.connect(self.area.tileSubWindowsHorizontally)
|
||||
self.actionTileVertical.triggered.connect(self.area.tileSubWindowsVertically)
|
||||
|
||||
self.datawidget.keyChanged.connect(self.management.change_keys)
|
||||
self.datawidget.tree.deleteItem.connect(self.management.delete_sets)
|
||||
self.datawidget.tree.moveItem.connect(self.management.move_sets)
|
||||
@ -178,7 +184,8 @@ class NMRMainWindow(QtWidgets.QMainWindow, Ui_BaseWindow):
|
||||
self.datawidget.tree.saveFits.connect(self.save_fit_parameter)
|
||||
self.datawidget.tree.extendFits.connect(self.extend_fit)
|
||||
|
||||
self.management.newData.connect(self.show_new_data)
|
||||
self.management.newData[list, str].connect(self.show_new_data)
|
||||
self.management.newData[list, str, bool].connect(self.show_new_data)
|
||||
self.management.newGraph.connect(self.new_graph)
|
||||
self.management.dataChanged.connect(self.update_data)
|
||||
self.management.deleteData.connect(self.delete_data)
|
||||
@ -191,13 +198,14 @@ class NMRMainWindow(QtWidgets.QMainWindow, Ui_BaseWindow):
|
||||
self.fit_dialog._management = self.management
|
||||
self.fit_dialog.preview_emit.connect(self.show_fit_preview)
|
||||
self.fit_dialog.fitStartSig.connect(self.start_fit)
|
||||
self.fit_dialog.abortFit.connect(lambda : self.management.stopFit.emit())
|
||||
self.fit_dialog.abortFit.connect(lambda: self.management.stopFit.emit())
|
||||
|
||||
self.movedialog.moveData.connect(self.move_sets)
|
||||
self.movedialog.copyData.connect(self.management.copy_sets)
|
||||
|
||||
self.ptsselectwidget.points_selected.connect(self.management.extract_points)
|
||||
|
||||
self.t1tauwidget.newData.connect(self.management.add_new_data)
|
||||
self.t1tauwidget.newData.connect(self.management.add_new_data)
|
||||
|
||||
self.editsignalwidget.do_something.connect(self.management.apply)
|
||||
@ -279,7 +287,7 @@ class NMRMainWindow(QtWidgets.QMainWindow, Ui_BaseWindow):
|
||||
use_underscore = save_dialog.checkBox.isChecked()
|
||||
self.management.save(savefile, selected_filter, strip_spaces=use_underscore)
|
||||
|
||||
param_outfile = re.sub('[_\s-]?<label>[_\s-]?', '', savefile.stem)
|
||||
param_outfile = re.sub(r'[_\s-]?<label>[_\s-]?', '', savefile.stem)
|
||||
|
||||
bad_character = r'/*<>\|:"'
|
||||
for c in bad_character:
|
||||
@ -321,10 +329,15 @@ class NMRMainWindow(QtWidgets.QMainWindow, Ui_BaseWindow):
|
||||
return w.id
|
||||
|
||||
@QtCore.pyqtSlot(list, str)
|
||||
def show_new_data(self, sets: list, graph: str):
|
||||
@QtCore.pyqtSlot(list, str, bool)
|
||||
def show_new_data(self, sets: list, graph: str, skip_change: bool = False):
|
||||
if len(sets) == 0:
|
||||
return
|
||||
|
||||
prev_graph = ''
|
||||
if skip_change:
|
||||
prev_graph = self.management.current_graph
|
||||
|
||||
if graph == '':
|
||||
graph = self.new_graph()
|
||||
|
||||
@ -336,16 +349,14 @@ class NMRMainWindow(QtWidgets.QMainWindow, Ui_BaseWindow):
|
||||
self.datawidget.add_item(new_item.id, new_item.name, graph)
|
||||
self.datawidget.blockSignals(False)
|
||||
|
||||
if graph == self.fit_dialog.connected_figure:
|
||||
self.fit_dialog.load(self.management.graphs.active(graph))
|
||||
# if graph == self.fit_dialog.connected_figure:
|
||||
# self.fit_dialog.load(self.management.graphs.active(graph))
|
||||
if skip_change:
|
||||
self.area.setActiveSubWidget(prev_graph)
|
||||
|
||||
if self.valuewidget.isVisible():
|
||||
self.valuewidget(self.management.graphs.tree())
|
||||
|
||||
@QtCore.pyqtSlot(name='on_actionDelete_window_triggered')
|
||||
def delete_windows(self):
|
||||
self.management.delete_sets()
|
||||
|
||||
@QtCore.pyqtSlot(str)
|
||||
def remove_graph(self, gid: str):
|
||||
self.datawidget.remove_item([gid])
|
||||
@ -389,7 +400,6 @@ class NMRMainWindow(QtWidgets.QMainWindow, Ui_BaseWindow):
|
||||
|
||||
break
|
||||
|
||||
|
||||
if w is not None:
|
||||
self.area.removeSubWindow(w)
|
||||
w.close()
|
||||
@ -419,7 +429,7 @@ class NMRMainWindow(QtWidgets.QMainWindow, Ui_BaseWindow):
|
||||
self.datawidget.blockSignals(False)
|
||||
|
||||
w.mousePositionChanged.connect(self.mousemoved)
|
||||
w.aboutToClose.connect(self.delete_windows)
|
||||
w.aboutToClose.connect(self.management.delete_sets)
|
||||
w.positionClicked.connect(self.point_selected)
|
||||
w.show()
|
||||
|
||||
@ -430,42 +440,36 @@ class NMRMainWindow(QtWidgets.QMainWindow, Ui_BaseWindow):
|
||||
@QtCore.pyqtSlot(QtWidgets.QMdiSubWindow, name='on_area_subWindowActivated')
|
||||
def change_window(self, wd):
|
||||
""" Called every time focus moves from or to a subwindow. Returns None if current focus is not on a subwindow"""
|
||||
if wd is not None:
|
||||
if self.current_graph_widget is not None:
|
||||
self.current_graph_widget.closable = True
|
||||
if wd is None:
|
||||
return
|
||||
|
||||
if self.ptsselectwidget.isVisible():
|
||||
self._select_ptswidget(False, False, False)
|
||||
if self.current_graph_widget is not None:
|
||||
self.current_graph_widget.closable = True
|
||||
|
||||
if self.fit_dialog.isVisible():
|
||||
self._select_fitwidget(False, False)
|
||||
|
||||
self.current_graph_widget = wd.widget()
|
||||
self.management.current_graph = wd.widget().id
|
||||
self.current_plotitem = self.current_graph_widget.graphic
|
||||
|
||||
self.change_mouse_mode(self.actionMouse_behaviour.isChecked())
|
||||
|
||||
pick = False
|
||||
block = False
|
||||
if self.ptsselectwidget.isVisible():
|
||||
pick, block = self._select_ptswidget(True, pick, block)
|
||||
self._select_ptswidget(False, False, False)
|
||||
|
||||
if self.fit_dialog.isVisible():
|
||||
block = self._select_fitwidget(True, block)
|
||||
self._select_fitwidget(False, False)
|
||||
|
||||
self._set_pick_block(pick, block)
|
||||
self.current_graph_widget = wd.widget()
|
||||
self.management.current_graph = wd.widget().id
|
||||
self.current_plotitem = self.current_graph_widget.graphic
|
||||
|
||||
self.datawidget.tree.blockSignals(True)
|
||||
self.datawidget.tree.highlight(self.management.current_graph)
|
||||
self.datawidget.tree.blockSignals(False)
|
||||
self.change_mouse_mode(self.actionMouse_behaviour.isChecked())
|
||||
|
||||
@QtCore.pyqtSlot(name='on_actionCascade_windows_triggered')
|
||||
@QtCore.pyqtSlot(name='on_actionTile_triggered')
|
||||
def change_window_size(self):
|
||||
if self.sender() == self.actionCascade_windows:
|
||||
self.area.cascadeSubWindows()
|
||||
elif self.sender() == self.actionTile:
|
||||
self.area.tileSubWindows()
|
||||
pick = False
|
||||
block = False
|
||||
if self.ptsselectwidget.isVisible():
|
||||
pick, block = self._select_ptswidget(True, pick, block)
|
||||
if self.fit_dialog.isVisible():
|
||||
block = self._select_fitwidget(True, block)
|
||||
|
||||
self._set_pick_block(pick, block)
|
||||
|
||||
self.datawidget.tree.blockSignals(True)
|
||||
self.datawidget.tree.highlight(self.management.current_graph)
|
||||
self.datawidget.tree.blockSignals(False)
|
||||
|
||||
@QtCore.pyqtSlot(name='on_actionChange_datatypes_triggered')
|
||||
def type_change_dialog(self):
|
||||
@ -558,8 +562,9 @@ class NMRMainWindow(QtWidgets.QMainWindow, Ui_BaseWindow):
|
||||
self.management.graphs[current_graph].add_external(self.valuewidget.selection_imag)
|
||||
else:
|
||||
if self.valuewidget.connected_figure is not None:
|
||||
self.management.graphs[self.valuewidget.connected_figure].remove_external(self.valuewidget.selection_real)
|
||||
self.management.graphs[self.valuewidget.connected_figure].remove_external(self.valuewidget.selection_imag)
|
||||
conn_fig = self.valuewidget.connected_figure
|
||||
self.management.graphs[conn_fig].remove_external(self.valuewidget.selection_real)
|
||||
self.management.graphs[conn_fig].remove_external(self.valuewidget.selection_imag)
|
||||
|
||||
def _select_integralwidget(self, onoff: bool, pick_required: bool, block_window: bool) -> tuple[bool, bool]:
|
||||
if self.current_graph_widget is None:
|
||||
@ -623,7 +628,8 @@ class NMRMainWindow(QtWidgets.QMainWindow, Ui_BaseWindow):
|
||||
|
||||
@QtCore.pyqtSlot(str)
|
||||
def get_data(self, key: str):
|
||||
self.sender().set_data(self.management[key])
|
||||
if hasattr(self.sender(), 'set_data'):
|
||||
self.sender().set_data(self.management[key])
|
||||
|
||||
@QtCore.pyqtSlot(name='on_actionCalculateT1_triggered')
|
||||
def show_t1calc_dialog(self):
|
||||
@ -832,6 +838,7 @@ class NMRMainWindow(QtWidgets.QMainWindow, Ui_BaseWindow):
|
||||
except KeyError:
|
||||
ret_val = None
|
||||
|
||||
# noinspection PyUnresolvedReferences
|
||||
self.sender().receive_data(ret_val)
|
||||
|
||||
return ret_val
|
||||
@ -847,7 +854,7 @@ class NMRMainWindow(QtWidgets.QMainWindow, Ui_BaseWindow):
|
||||
self.t1tauwidget.t1min_picked(pos)
|
||||
|
||||
elif w == self.integralwidget:
|
||||
region, integral_plot = self.integralwidget.add(pos)
|
||||
region, integral_plot = self.integralwidget.add(pos)
|
||||
self.current_graph_widget.add_external(region)
|
||||
self.current_graph_widget.add_external(integral_plot)
|
||||
|
||||
@ -928,7 +935,8 @@ class NMRMainWindow(QtWidgets.QMainWindow, Ui_BaseWindow):
|
||||
res_dialog.show()
|
||||
|
||||
@QtCore.pyqtSlot(dict, list, str, bool, bool, list)
|
||||
def accepts_fit(self, res: dict, opts: list, param_graph: str, show_fit: bool, parts: bool, extrapolate: list) -> None:
|
||||
def accepts_fit(self, res: dict, opts: list, param_graph: str,
|
||||
show_fit: bool, parts: bool, extrapolate: list) -> None:
|
||||
self.fit_dialog.set_parameter(res)
|
||||
self.management.make_fits(res, opts, param_graph, show_fit, parts, extrapolate)
|
||||
|
||||
|
@ -74,7 +74,7 @@ class UpperManagement(QtCore.QObject):
|
||||
newGraph = QtCore.pyqtSignal()
|
||||
restoreGraph = QtCore.pyqtSignal(str)
|
||||
deleteGraph = QtCore.pyqtSignal(str)
|
||||
newData = QtCore.pyqtSignal(list, str)
|
||||
newData = QtCore.pyqtSignal([list, str], [list, str, bool])
|
||||
deleteData = QtCore.pyqtSignal(list)
|
||||
dataChanged = QtCore.pyqtSignal(str)
|
||||
fitFinished = QtCore.pyqtSignal(list)
|
||||
@ -287,6 +287,7 @@ class UpperManagement(QtCore.QObject):
|
||||
|
||||
@QtCore.pyqtSlot(list)
|
||||
@QtCore.pyqtSlot(str)
|
||||
@QtCore.pyqtSlot()
|
||||
def delete_sets(self, rm_sets: list = None):
|
||||
rm_graphs = []
|
||||
|
||||
@ -624,8 +625,7 @@ class UpperManagement(QtCore.QObject):
|
||||
if not graph_id:
|
||||
graph_id = ''
|
||||
|
||||
# TODO add flag that new window will not get focus, because it messes up the data_table in fitwindow
|
||||
self.newData.emit(p_id_list, graph_id)
|
||||
self.newData[list, str, bool].emit(p_id_list, graph_id, True)
|
||||
|
||||
def save_fit_parameter(self, fname: str | pathlib.Path, fit_sets: list[str] = None):
|
||||
if fit_sets is None:
|
||||
|
Reference in New Issue
Block a user