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
|
from nmreval.lib.colors import available_cycles
|
||||||
|
|
||||||
@ -43,7 +43,6 @@ class DataTree(QtWidgets.QTreeWidget):
|
|||||||
header.setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch)
|
header.setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch)
|
||||||
header.setVisible(False)
|
header.setVisible(False)
|
||||||
header.moveSection(1, 0)
|
header.moveSection(1, 0)
|
||||||
# self.setColumnWidth(1, 16)
|
|
||||||
self.setItemDelegateForColumn(1, HeaderDelegate())
|
self.setItemDelegateForColumn(1, HeaderDelegate())
|
||||||
|
|
||||||
def add_graph(self, idd: str, name: str):
|
def add_graph(self, idd: str, name: str):
|
||||||
@ -60,7 +59,7 @@ class DataTree(QtWidgets.QTreeWidget):
|
|||||||
|
|
||||||
self.update_indexes()
|
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):
|
if isinstance(items, tuple):
|
||||||
items = [items]
|
items = [items]
|
||||||
|
|
||||||
@ -227,6 +226,27 @@ class DataTree(QtWidgets.QTreeWidget):
|
|||||||
|
|
||||||
self.blockSignals(False)
|
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):
|
def update_indexes(self):
|
||||||
graph_cnt = -1
|
graph_cnt = -1
|
||||||
set_cnt = 0
|
set_cnt = 0
|
||||||
@ -358,19 +378,24 @@ class DataTree(QtWidgets.QTreeWidget):
|
|||||||
|
|
||||||
def ctx_graphs(self, evt, menu):
|
def ctx_graphs(self, evt, menu):
|
||||||
del_action = menu.addAction('Exterminate graph!')
|
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')
|
col_menu = menu.addMenu('Color cycle')
|
||||||
for c in available_cycles.keys():
|
for c in available_cycles.keys():
|
||||||
col_menu.addAction(c)
|
col_menu.addAction(c)
|
||||||
|
|
||||||
graphs = []
|
graphs = []
|
||||||
|
items = []
|
||||||
for i in self.selectedIndexes():
|
for i in self.selectedIndexes():
|
||||||
if i.column() == 0:
|
if i.column() == 0:
|
||||||
continue
|
continue
|
||||||
|
items.append(self.itemFromIndex(i))
|
||||||
graphs.append(self.itemFromIndex(i).data(0, QtCore.Qt.UserRole))
|
graphs.append(self.itemFromIndex(i).data(0, QtCore.Qt.UserRole))
|
||||||
|
|
||||||
action = menu.exec_(evt.globalPos())
|
action = menu.exec(evt.globalPos())
|
||||||
if action == del_action:
|
if action == del_action:
|
||||||
for gid in graphs:
|
for gid in graphs:
|
||||||
self.management.delete_graph(gid)
|
self.management.delete_graph(gid)
|
||||||
@ -379,6 +404,10 @@ class DataTree(QtWidgets.QTreeWidget):
|
|||||||
for gid in graphs:
|
for gid in graphs:
|
||||||
self.management.set_cycle(self.management.graphs[gid].sets, action.text())
|
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()
|
evt.accept()
|
||||||
|
|
||||||
def ctx_sets(self, evt, menu):
|
def ctx_sets(self, evt, menu):
|
||||||
@ -456,7 +485,7 @@ class DataTree(QtWidgets.QTreeWidget):
|
|||||||
item.setBackground(0, QtGui.QBrush())
|
item.setBackground(0, QtGui.QBrush())
|
||||||
iterator += 1
|
iterator += 1
|
||||||
|
|
||||||
def uncheck_sets(self, sets: List[str]):
|
def uncheck_sets(self, sets: list[str]):
|
||||||
self.blockSignals(True)
|
self.blockSignals(True)
|
||||||
iterator = QtWidgets.QTreeWidgetItemIterator(self)
|
iterator = QtWidgets.QTreeWidgetItemIterator(self)
|
||||||
while iterator.value():
|
while iterator.value():
|
||||||
@ -537,7 +566,7 @@ class DataWidget(QtWidgets.QWidget, Ui_DataWidget):
|
|||||||
|
|
||||||
self.propertyChanged.emit(ids, key1, key2, value)
|
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)
|
self.tree.uncheck_sets(sets)
|
||||||
|
|
||||||
def set_name(self, sid, value):
|
def set_name(self, sid, value):
|
||||||
|
@ -144,6 +144,9 @@ class UpperManagement(QtCore.QObject):
|
|||||||
def active_sets(self):
|
def active_sets(self):
|
||||||
return self.graphs.active(self.current_graph)
|
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):
|
def add(self, data, **kwargs):
|
||||||
_id = str(uuid.uuid4())
|
_id = str(uuid.uuid4())
|
||||||
self.__setitem__(_id, data, **kwargs)
|
self.__setitem__(_id, data, **kwargs)
|
||||||
@ -230,7 +233,7 @@ class UpperManagement(QtCore.QObject):
|
|||||||
self.graphs[self.data[key].graph].remove(key)
|
self.graphs[self.data[key].graph].remove(key)
|
||||||
|
|
||||||
@QtCore.pyqtSlot(list, str, str)
|
@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):
|
if isinstance(src, str):
|
||||||
src = [src]*len(sets)
|
src = [src]*len(sets)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user