92 lines
3.3 KiB
Python
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()
|