forked from IPKM/nmreval
Sort option to context menu in data tree added; fixes T226
This commit is contained in:
parent
2c09573d2a
commit
46952e1648
@ -1,4 +1,4 @@
|
||||
from typing import List, Tuple, Union
|
||||
from __future__ import annotations
|
||||
|
||||
from nmreval.lib.colors import available_cycles
|
||||
|
||||
@ -43,7 +43,6 @@ class DataTree(QtWidgets.QTreeWidget):
|
||||
header.setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch)
|
||||
header.setVisible(False)
|
||||
header.moveSection(1, 0)
|
||||
# self.setColumnWidth(1, 16)
|
||||
self.setItemDelegateForColumn(1, HeaderDelegate())
|
||||
|
||||
def add_graph(self, idd: str, name: str):
|
||||
@ -60,7 +59,7 @@ class DataTree(QtWidgets.QTreeWidget):
|
||||
|
||||
self.update_indexes()
|
||||
|
||||
def add_item(self, items: Union[tuple, List[tuple]], gid: str):
|
||||
def add_item(self, items: (tuple | list[tuple]), gid: str):
|
||||
if isinstance(items, tuple):
|
||||
items = [items]
|
||||
|
||||
@ -227,6 +226,27 @@ class DataTree(QtWidgets.QTreeWidget):
|
||||
|
||||
self.blockSignals(False)
|
||||
|
||||
def sort(self, graph_item: QtWidgets.QTreeWidgetItem, mode: str = 'value'):
|
||||
graph_id = graph_item.data(0, QtCore.Qt.UserRole)
|
||||
sets = self.management.get_attributes(graph_id, mode)
|
||||
sets = [el[0] for el in sorted(sets.items(), key=lambda x: x[1])]
|
||||
|
||||
self.management.move_sets(sets, graph_id, graph_id, pos=-1)
|
||||
|
||||
self.blockSignals(True)
|
||||
|
||||
children = graph_item.takeChildren()
|
||||
|
||||
for s in sets:
|
||||
for c in children:
|
||||
if c.data(0, QtCore.Qt.UserRole) == s:
|
||||
graph_item.addChild(c)
|
||||
|
||||
self.update_indexes()
|
||||
|
||||
self.blockSignals(False)
|
||||
|
||||
|
||||
def update_indexes(self):
|
||||
graph_cnt = -1
|
||||
set_cnt = 0
|
||||
@ -358,19 +378,24 @@ class DataTree(QtWidgets.QTreeWidget):
|
||||
|
||||
def ctx_graphs(self, evt, menu):
|
||||
del_action = menu.addAction('Exterminate graph!')
|
||||
|
||||
sort_menu = menu.addMenu('Sort sets')
|
||||
for label in ['By name', 'By value']:
|
||||
sort_menu.addAction(label)
|
||||
|
||||
col_menu = menu.addMenu('Color cycle')
|
||||
for c in available_cycles.keys():
|
||||
col_menu.addAction(c)
|
||||
|
||||
graphs = []
|
||||
|
||||
items = []
|
||||
for i in self.selectedIndexes():
|
||||
if i.column() == 0:
|
||||
continue
|
||||
|
||||
items.append(self.itemFromIndex(i))
|
||||
graphs.append(self.itemFromIndex(i).data(0, QtCore.Qt.UserRole))
|
||||
|
||||
action = menu.exec_(evt.globalPos())
|
||||
action = menu.exec(evt.globalPos())
|
||||
if action == del_action:
|
||||
for gid in graphs:
|
||||
self.management.delete_graph(gid)
|
||||
@ -379,6 +404,10 @@ class DataTree(QtWidgets.QTreeWidget):
|
||||
for gid in graphs:
|
||||
self.management.set_cycle(self.management.graphs[gid].sets, action.text())
|
||||
|
||||
elif action.parent() == sort_menu:
|
||||
for i in items:
|
||||
self.sort(i, mode=action.text().split()[1])
|
||||
|
||||
evt.accept()
|
||||
|
||||
def ctx_sets(self, evt, menu):
|
||||
@ -456,7 +485,7 @@ class DataTree(QtWidgets.QTreeWidget):
|
||||
item.setBackground(0, QtGui.QBrush())
|
||||
iterator += 1
|
||||
|
||||
def uncheck_sets(self, sets: List[str]):
|
||||
def uncheck_sets(self, sets: list[str]):
|
||||
self.blockSignals(True)
|
||||
iterator = QtWidgets.QTreeWidgetItemIterator(self)
|
||||
while iterator.value():
|
||||
@ -537,7 +566,7 @@ class DataWidget(QtWidgets.QWidget, Ui_DataWidget):
|
||||
|
||||
self.propertyChanged.emit(ids, key1, key2, value)
|
||||
|
||||
def uncheck_sets(self, sets: List[str]):
|
||||
def uncheck_sets(self, sets: list[str]):
|
||||
self.tree.uncheck_sets(sets)
|
||||
|
||||
def set_name(self, sid, value):
|
||||
|
@ -144,6 +144,9 @@ class UpperManagement(QtCore.QObject):
|
||||
def active_sets(self):
|
||||
return self.graphs.active(self.current_graph)
|
||||
|
||||
def get_attributes(self, graph_id: str, attr: str) -> dict[str, Any]:
|
||||
return {self.data[i].id: getattr(self.data[i], attr) for i in self.graphs[graph_id].sets}
|
||||
|
||||
def add(self, data, **kwargs):
|
||||
_id = str(uuid.uuid4())
|
||||
self.__setitem__(_id, data, **kwargs)
|
||||
@ -230,7 +233,7 @@ class UpperManagement(QtCore.QObject):
|
||||
self.graphs[self.data[key].graph].remove(key)
|
||||
|
||||
@QtCore.pyqtSlot(list, str, str)
|
||||
def move_sets(self, sets: list, dest: str, src, pos: int = -1):
|
||||
def move_sets(self, sets: list, dest: str, src: (str|list), pos: int = -1):
|
||||
if isinstance(src, str):
|
||||
src = [src]*len(sets)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user