BUGFIX: VFT;
change to src layout
This commit is contained in:
152
src/gui_qt/data/conversion.py
Normal file
152
src/gui_qt/data/conversion.py
Normal file
@ -0,0 +1,152 @@
|
||||
from ..Qt import QtWidgets, QtCore, QtGui
|
||||
from .._py.typeconversion import Ui_Dialog
|
||||
|
||||
|
||||
class ConversionDialog(QtWidgets.QDialog, Ui_Dialog):
|
||||
convertSets = QtCore.pyqtSignal(list)
|
||||
|
||||
def __init__(self, parent=None):
|
||||
super().__init__(parent=parent)
|
||||
self.setupUi(self)
|
||||
|
||||
self.simple_table.installEventFilter(self)
|
||||
self.merge_table.installEventFilter(self)
|
||||
|
||||
self._simple_table_dropevent = self.simple_table.dropEvent
|
||||
self.simple_table.dropEvent = self._drop_on_simple_table
|
||||
|
||||
self._merge_table_dropevent = self.merge_table.dropEvent
|
||||
self.merge_table.dropEvent = self._drop_on_simple_table
|
||||
|
||||
self.buttonGroup.buttonClicked.connect(self.change_table)
|
||||
|
||||
def set_graphs(self, graphs: dict):
|
||||
self.set_list.clear()
|
||||
self.simple_table.clear()
|
||||
self.simple_table.setHorizontalHeaderLabels(['Simple', 'Type'])
|
||||
self.merge_table.clear()
|
||||
self.merge_table.setHorizontalHeaderLabels(['Real', 'Imag', 'Type'])
|
||||
|
||||
for graph, datasets in graphs.items():
|
||||
for set_id, set_name in datasets:
|
||||
item_name = set_name + ' (' + graph[1] + ')'
|
||||
|
||||
item1 = QtWidgets.QListWidgetItem(item_name)
|
||||
item1.setData(QtCore.Qt.UserRole, set_id)
|
||||
item1.setData(QtCore.Qt.UserRole+1, graph[0])
|
||||
self.set_list.addItem(item1)
|
||||
|
||||
def eventFilter(self, src: QtCore.QObject, evt: QtCore.QEvent):
|
||||
if evt.type() in [QtCore.QEvent.DragEnter, QtCore.QEvent.DragMove]:
|
||||
evt.accept()
|
||||
return True
|
||||
|
||||
if evt.type() == QtCore.QEvent.KeyPress and evt.key() == QtCore.Qt.Key_Delete:
|
||||
if src == self.simple_table:
|
||||
type_idx = 1
|
||||
else:
|
||||
type_idx = 2
|
||||
|
||||
if len(src.selectedIndexes()) > 0:
|
||||
idx = src.selectedIndexes()[0]
|
||||
row, col = idx.row(), idx.column()
|
||||
|
||||
if col != type_idx:
|
||||
src.takeItem(row, col)
|
||||
is_empty = all(src.item(row, i) is None for i in range(type_idx))
|
||||
if is_empty:
|
||||
src.removeRow(row)
|
||||
|
||||
return True
|
||||
|
||||
return super().eventFilter(src, evt)
|
||||
|
||||
def _drop_on_simple_table(self, evt: QtGui.QDropEvent):
|
||||
"""
|
||||
event filter does not receive dropevents?
|
||||
"""
|
||||
if self.stackedWidget.currentIndex() == 0:
|
||||
table = self.simple_table
|
||||
type_column = 1
|
||||
default_drop = self._simple_table_dropevent
|
||||
type_name = ['Points', 'FID', 'Spectrum', 'BDS']
|
||||
else:
|
||||
table = self.merge_table
|
||||
type_column = 2
|
||||
default_drop = self._merge_table_dropevent
|
||||
type_name = ['FID', 'Spectrum', 'BDS']
|
||||
|
||||
pos = evt.pos()
|
||||
drop_col = table.columnAt(pos.x())
|
||||
if drop_col == type_column:
|
||||
evt.ignore()
|
||||
else:
|
||||
drop_row = table.rowAt(pos.y())
|
||||
default_drop(evt)
|
||||
|
||||
if drop_row == -1:
|
||||
w = QtWidgets.QComboBox()
|
||||
w.addItems(type_name)
|
||||
item = QtWidgets.QTableWidgetItem('')
|
||||
drop_row = table.rowAt(pos.y())
|
||||
table.setItem(drop_row, type_column, item)
|
||||
table.setCellWidget(drop_row, type_column, w)
|
||||
|
||||
item = table.item(drop_row, drop_col)
|
||||
idx = table.indexFromItem(item)
|
||||
|
||||
if idx.row() == -1 and idx.column() == -1:
|
||||
item = table.takeItem(drop_row, 0)
|
||||
table.setItem(drop_row, drop_col, item)
|
||||
|
||||
if item is not None:
|
||||
item.setToolTip(item.text())
|
||||
|
||||
table.resizeColumnsToContents()
|
||||
|
||||
@QtCore.pyqtSlot(QtWidgets.QAbstractButton)
|
||||
def change_table(self, button: QtWidgets.QAbstractButton):
|
||||
idx = [self.simple_button, self.merge_button].index(button)
|
||||
self.stackedWidget.setCurrentIndex(idx)
|
||||
|
||||
def collect_args(self) -> list:
|
||||
src_sets = []
|
||||
for row in range(self.simple_table.rowCount()):
|
||||
item = self.simple_table.item(row, 0)
|
||||
set_id = item.data(QtCore.Qt.UserRole)
|
||||
graph_id = item.data(QtCore.Qt.UserRole+1)
|
||||
type_idx = self.simple_table.cellWidget(row, 1).currentIndex()
|
||||
|
||||
src_sets.append((set_id, graph_id, type_idx))
|
||||
|
||||
for row in range(self.merge_table.rowCount()):
|
||||
item = self.merge_table.item(row, 0)
|
||||
graph_id = ''
|
||||
if item is not None:
|
||||
set_id_real = item.data(QtCore.Qt.UserRole)
|
||||
graph_id = item.data(QtCore.Qt.UserRole+1)
|
||||
else:
|
||||
set_id_real = ''
|
||||
|
||||
item = self.merge_table.item(row, 1)
|
||||
if item is not None:
|
||||
set_id_imag = item.data(QtCore.Qt.UserRole)
|
||||
graph_id = item.data(QtCore.Qt.UserRole+1) if graph_id == '' else graph_id
|
||||
else:
|
||||
set_id_imag = ''
|
||||
type_idx = self.merge_table.cellWidget(row, 2).currentIndex() + 1
|
||||
|
||||
src_sets.append((set_id_real, set_id_imag, graph_id, type_idx))
|
||||
|
||||
self.convertSets.emit(src_sets)
|
||||
|
||||
return src_sets
|
||||
|
||||
@QtCore.pyqtSlot(QtWidgets.QAbstractButton, name='on_buttonBox_clicked')
|
||||
def button_clicked(self, button):
|
||||
role = self.buttonBox.buttonRole(button)
|
||||
if role == self.buttonBox.RejectRole:
|
||||
self.close()
|
||||
else:
|
||||
self.collect_args()
|
||||
self.accept()
|
Reference in New Issue
Block a user