nmreval/nmreval/gui_qt/math/interpol.py
2022-03-24 20:24:28 +01:00

92 lines
3.3 KiB
Python

from ..Qt import QtCore, QtWidgets, QtGui
from .._py.interpol_dialog import Ui_Dialog
class InterpolDialog(QtWidgets.QDialog, Ui_Dialog):
new_data = QtCore.pyqtSignal(list, str, bool, bool, tuple, str)
def __init__(self, parent=None):
super().__init__(parent=parent)
self.setupUi(self)
self.src_widget.hide()
validator = QtGui.QDoubleValidator()
self.start_lineEdit.setValidator(validator)
self.stop_lineEdit.setValidator(validator)
self.step_lineEdit.setValidator(QtGui.QIntValidator())
self._data = {}
@QtCore.pyqtSlot(int, name='on_xaxis_comboBox_currentIndexChanged')
def change_x_source(self, idx: int):
self.src_widget.setVisible(idx == 1)
self.sampling_widget.setVisible(idx != 1)
def set_data(self, data, current_gid):
self.graph_combobox.blockSignals(True)
self._data = {}
for (gid, graph_name), sets in data.items():
self.graph_combobox.addItem(graph_name, userData=gid)
self.dest_combobox.addItem(graph_name, userData=gid)
if gid == current_gid:
self.make_list(sets)
self._data[gid] = sets
self.graph_combobox.blockSignals(False)
self.change_graph(0)
def make_list(self, current_sets):
for sid, set_name in current_sets:
item = QtWidgets.QListWidgetItem(set_name)
item.setData(QtCore.Qt.UserRole, sid)
item.setCheckState(QtCore.Qt.Checked)
self.listWidget.addItem(item)
@QtCore.pyqtSlot(int, name='on_graph_combobox_currentIndexChanged')
def change_graph(self, idx: int):
self.set_combobox.clear()
gid = self.graph_combobox.itemData(idx, QtCore.Qt.UserRole)
if gid is not None:
for set_key, set_name in self._data[gid]:
self.set_combobox.addItem(set_name, userData=set_key)
def collect_parameter(self):
xlog = self.xlog_checkBox.isChecked()
ylog = self.ylog_checkBox.isChecked()
mode = self.interp_comboBox.currentText().lower()
if self.xaxis_comboBox.currentIndex() == 0:
try:
start = float(self.start_lineEdit.text())
stop = float(self.stop_lineEdit.text())
step = int(self.step_lineEdit.text())
except ValueError:
QtWidgets.QMessageBox.warning(self, 'Invalid axis', 'Values for axis are invalid or missing.')
return False
loggy = self.logspace_checkBox.isChecked()
if loggy and ((start <= 0) or (stop <= 0)):
QtWidgets.QMessageBox.warning(self, 'Invalid axis', 'Logarithmic axis cannot contain negative values.')
return False
x_src = (start, stop, step, loggy)
else:
x_src = (self.set_combobox.currentData(QtCore.Qt.UserRole),)
dest_graph = self.dest_combobox.currentData(QtCore.Qt.UserRole)
use_data = []
for i in range(self.listWidget.count()):
item = self.listWidget.item(i)
if item.checkState() == QtCore.Qt.Checked:
use_data.append(item.data(QtCore.Qt.UserRole))
self.new_data.emit(use_data, mode, xlog, ylog, x_src, dest_graph)
return True
def accept(self):
success = self.collect_parameter()
if success:
super().accept()