[treemodel] add derived TreeView class that does the header resizing

This commit is contained in:
Jan Grewe 2021-01-06 23:28:54 +01:00
parent c7cf98d67e
commit a2a4baf5e1

View File

@ -1,6 +1,6 @@
from PyQt5.QtCore import QAbstractItemModel, QModelIndex, Qt
from PyQt5.QtCore import QAbstractItemModel, QModelIndex, Qt, QSize
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QTreeWidgetItem
from PyQt5.QtWidgets import QTreeView, QTreeWidgetItem, QAbstractItemView, QHeaderView
from enum import Enum
from file_handler import ItemDescriptor, NodeType
@ -124,6 +124,7 @@ class MetadataTreeItem(NixTreeItem):
class BlockTreeItem(NixTreeItem):
def __init__(self, node_descriptor, file_handler, parent=None):
super().__init__(node_descriptor, file_handler, parent=parent)
self.setFlags(Qt.ItemIsEnabled | Qt.ItemIsSelectable |Qt.ItemIsEditable)
self._is_loaded = False
def load_children(self):
@ -144,6 +145,7 @@ class BlockTreeItem(NixTreeItem):
self._child_items.append(SourceTreeItem(s, self._file_handler, parent=self))
self._is_loaded = True
class SourceTreeItem(NixTreeItem):
def __init__(self, node_descriptor, file_handler, parent):
super().__init__(node_descriptor, file_handler, parent=parent)
@ -155,6 +157,7 @@ class SourceTreeItem(NixTreeItem):
self._child_items.append(SourceTreeItem(s, self._file_handler, parent=self))
self._is_loaded = True
class GroupTreeItem(NixTreeItem):
def __init__(self, node_descriptor, file_handler, parent):
super().__init__(node_descriptor, file_handler, parent=parent)
@ -178,16 +181,19 @@ class GroupTreeItem(NixTreeItem):
self._child_items.append(SourceTreeItem(s, self._file_handler, parent=self))
self._is_loaded = True
class DataFrameTreeItem(NixTreeItem):
def __init__(self, node_descriptor, file_handler, parent=None):
super().__init__(node_descriptor, file_handler, parent=parent)
self._is_loaded = True
class FeatureTreeItem(NixTreeItem):
def __init__(self, node_descriptor, file_handler, parent=None):
super().__init__(node_descriptor, file_handler, parent=parent)
self._is_loaded = True
class DataArrayTreeItem(NixTreeItem):
def __init__(self, node_descriptor, file_handler, parent=None):
super().__init__(node_descriptor, file_handler, parent=parent)
@ -200,14 +206,18 @@ class DataArrayTreeItem(NixTreeItem):
self._child_items.append(DimensionTreeItem(d, self._file_handler, parent=self))
self._is_loaded = True
class DimensionTreeItem(NixTreeItem):
def __init__(self, node_descriptor, file_handler, parent=None):
super().__init__(node_descriptor, file_handler, parent=parent)
self._is_loaded = True
class SectionTreeItem(NixTreeItem):
def __init__(self, node_descriptor, file_handler, parent=None):
super().__init__(node_descriptor, file_handler=file_handler, parent=parent)
self.setFlags(Qt.ItemIsSelectable)
self._is_loaded = False
def load_children(self):
@ -219,6 +229,7 @@ class SectionTreeItem(NixTreeItem):
self._child_items.append(PropertyTreeItem(p, self._file_handler, parent=self))
self._is_loaded = True
class PropertyTreeItem(NixTreeItem):
def __init__(self, node_descriptor, file_handler, parent=None):
super().__init__(node_descriptor, file_handler, parent=parent)
@ -227,6 +238,7 @@ class PropertyTreeItem(NixTreeItem):
def childCount(self):
return 0
class TagTreeItem(NixTreeItem):
def __init__(self, node_descriptor, file_handler, parent=None):
super().__init__(node_descriptor, file_handler, parent=parent)
@ -243,6 +255,7 @@ class TagTreeItem(NixTreeItem):
self._child_items.append(FeatureTreeItem(f, self._file_handler, self))
self._is_loaded = True
class TreeModel(QAbstractItemModel):
def __init__(self, file_handler, tree_type=TreeType.Full, parent=None, root_section_id=None):
@ -345,3 +358,28 @@ class TreeModel(QAbstractItemModel):
parentItem = parent_index.internalPointer()
return parentItem.childCount()
class NixTreeView(QTreeView):
icon_size = QSize(30, 30)
def __init__(self, parent=None) -> None:
super().__init__(parent=parent)
self.expanded.connect(self.columnResize)
self.collapsed.connect(self.columnResize)
self.setAlternatingRowColors(True)
self.setUniformRowHeights(True) # Allows for scrolling optimizations.
self.setWindowTitle("Data Tree")
self.setIconSize(self.icon_size)
self.setSelectionBehavior(QAbstractItemView.SelectItems)
self.setSelectionMode(QAbstractItemView.SingleSelection)
header = self.header()
header.setStretchLastSection(False)
header.setSectionResizeMode(1, QHeaderView.ResizeToContents)
header.setSectionResizeMode(2, QHeaderView.ResizeToContents)
header.setSectionResizeMode(0, QHeaderView.Stretch)
def columnResize(self, index):
for i in range(len(column_names)):
self.resizeColumnToContents(i)