1
0
forked from IPKM/nmreval

improve performance for show/hide graphs

This commit is contained in:
Dominik Demuth
2023-09-19 16:32:54 +02:00
parent c5706084bf
commit ea62a05bd3
4 changed files with 38 additions and 25 deletions

View File

@ -84,7 +84,7 @@ class DataTree(QtWidgets.QTreeWidget):
self.update_indexes()
@QtCore.pyqtSlot(QtWidgets.QTreeWidgetItem)
def data_change(self, item: QtWidgets.QTreeWidgetItem) -> tuple[set, set]:
def data_change(self, item: QtWidgets.QTreeWidgetItem, emit: bool = True) -> tuple[set, set]:
idd = item.data(0, QtCore.Qt.UserRole)
is_selected = item.checkState(0) == QtCore.Qt.Checked
to_be_hidden = set()
@ -142,9 +142,10 @@ class DataTree(QtWidgets.QTreeWidget):
pass
else:
self.keyChanged.emit(idd, item.text(0))
if emit:
self.keyChanged.emit(idd, item.text(0))
if to_be_shown or to_be_hidden:
if (to_be_shown or to_be_hidden) and emit:
self.stateChanged.emit(list(to_be_shown), list(to_be_hidden))
return to_be_shown, to_be_hidden
@ -316,26 +317,24 @@ class DataTree(QtWidgets.QTreeWidget):
if idx.column() != 0:
continue
item = self.itemFromIndex(idx)
if item.parent() is None:
is_selected = item.checkState(0)
self.blockSignals(True)
for i in range(item.childCount()):
child = item.child(i)
from_parent.append(child)
self.blockSignals(False)
if is_selected == QtCore.Qt.Checked:
item.setCheckState(0, QtCore.Qt.Unchecked)
else:
item.setCheckState(0, QtCore.Qt.Checked)
else:
sets.append(item)
sets.append(item)
to_be_hidden = set()
to_be_shown = set()
self.blockSignals(True)
for it in sets:
if it in from_parent:
continue
it.setCheckState(0, QtCore.Qt.Unchecked if it.checkState(0) == QtCore.Qt.Checked else QtCore.Qt.Checked)
s1, s2 = self.data_change(it, emit=False)
to_be_hidden |= s2
to_be_shown |= s1
self.blockSignals(False)
self.stateChanged.emit(list(to_be_shown), list(to_be_hidden))
else:
super().keyPressEvent(evt)