1
0
forked from IPKM/nmreval
nmreval/nmreval/gui_qt/io/gracereader.py
2022-03-24 20:24:28 +01:00

101 lines
3.9 KiB
Python

from ...lib.lines import LineStyle
from ...lib.symbols import SymbolStyle
from ...data.points import Points
from ...io.graceeditor import GraceEditor
from ..Qt import QtCore, QtWidgets, QtGui
from .._py.gracereader import Ui_Dialog
class QGraceReader(QtWidgets.QDialog, Ui_Dialog):
data_read = QtCore.pyqtSignal(list)
file_ext = ['.agr']
def __init__(self, parent=None):
super().__init__(parent=parent)
self.setupUi(self)
self._reader = GraceEditor()
self.treeWidget.itemClicked.connect(self.show_property)
self.treeWidget.installEventFilter(self)
def __call__(self, fname, *args, **kwargs):
self.read(fname)
return self
def eventFilter(self, src: QtCore.QObject, evt: QtCore.QEvent):
if evt.type() == QtCore.QEvent.KeyPress:
if evt.key() == QtCore.Qt.Key_Space:
iterator = QtWidgets.QTreeWidgetItemIterator(self.treeWidget)
while iterator.value():
item = iterator.value()
if item.parent() is not None and item.isSelected():
item.setCheckState(0,
QtCore.Qt.Checked if item.checkState(0) == QtCore.Qt.Unchecked else
QtCore.Qt.Unchecked)
iterator += 1
return True
return super().eventFilter(src, evt)
def read(self, fname):
self._reader.parse(fname)
for graphs in self._reader.graphs:
item = QtWidgets.QTreeWidgetItem([f'Graph {graphs.idx} (Title "{graphs.get_property("title")}")'])
for gset in graphs.set:
item_2 = QtWidgets.QTreeWidgetItem([f'Set {gset.idx} (Label: {gset.get_property("legend")}, '
f'shape: {self._reader.dataset(graphs.idx, gset.idx).shape})'])
item_2.setCheckState(0, QtCore.Qt.Checked)
item_2.setData(0, QtCore.Qt.UserRole, (graphs.idx, gset.idx))
item.addChild(item_2)
self.treeWidget.addTopLevelItem(item)
self.treeWidget.expandAll()
@QtCore.pyqtSlot(QtWidgets.QTreeWidgetItem, int)
def show_property(self, item: QtWidgets.QTreeWidgetItem, col: int):
keys = item.data(col, QtCore.Qt.UserRole)
if keys is not None:
cols = self._reader.colors
self.tableWidget.item(0, 1).setText(SymbolStyle(self._reader.get_property(*keys, 'symbol')).name)
sym_col = cols[self._reader.get_property(*keys, 'symbol fill color')][1]
self.tableWidget.item(1, 1).setBackground(QtGui.QBrush(QtGui.QColor(*sym_col)))
self.tableWidget.item(2, 1).setText(LineStyle(self._reader.get_property(*keys, 'line linestyle')).name)
line_col = cols[self._reader.get_property(*keys, 'line color')][1]
self.tableWidget.item(3, 1).setBackground(QtGui.QBrush(QtGui.QColor(*line_col)))
def accept(self):
data = []
iterator = QtWidgets.QTreeWidgetItemIterator(self.treeWidget,
QtWidgets.QTreeWidgetItemIterator.NoChildren |
QtWidgets.QTreeWidgetItemIterator.Checked)
while iterator.value():
item = iterator.value()
key = (item.data(0, QtCore.Qt.UserRole))
s = self._reader.dataset(*key)
label = self._reader.get_property(*key, 'legend').replace('"', '')
# label = self._reader.graphs[key[0]].sets[key[1]]['legend'].replace('"', '')
sd = s.data
if s.type == 'xydy':
data.append(Points(x=sd[:, 0], y=sd[:, 1], y_err=sd[:, 2], name=label))
else:
data.append(Points(x=sd[:, 0], y=sd[:, 1], name=label))
iterator += 1
self.data_read.emit(data)
self.close()
def close(self):
self._reader.clear()
super().close()