[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.QtGui import QIcon
from PyQt5.QtWidgets import QTreeWidgetItem from PyQt5.QtWidgets import QTreeView, QTreeWidgetItem, QAbstractItemView, QHeaderView
from enum import Enum from enum import Enum
from file_handler import ItemDescriptor, NodeType from file_handler import ItemDescriptor, NodeType
@ -124,6 +124,7 @@ class MetadataTreeItem(NixTreeItem):
class BlockTreeItem(NixTreeItem): class BlockTreeItem(NixTreeItem):
def __init__(self, node_descriptor, file_handler, parent=None): def __init__(self, node_descriptor, file_handler, parent=None):
super().__init__(node_descriptor, file_handler, parent=parent) super().__init__(node_descriptor, file_handler, parent=parent)
self.setFlags(Qt.ItemIsEnabled | Qt.ItemIsSelectable |Qt.ItemIsEditable)
self._is_loaded = False self._is_loaded = False
def load_children(self): def load_children(self):
@ -144,6 +145,7 @@ class BlockTreeItem(NixTreeItem):
self._child_items.append(SourceTreeItem(s, self._file_handler, parent=self)) self._child_items.append(SourceTreeItem(s, self._file_handler, parent=self))
self._is_loaded = True self._is_loaded = True
class SourceTreeItem(NixTreeItem): class SourceTreeItem(NixTreeItem):
def __init__(self, node_descriptor, file_handler, parent): def __init__(self, node_descriptor, file_handler, parent):
super().__init__(node_descriptor, file_handler, parent=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._child_items.append(SourceTreeItem(s, self._file_handler, parent=self))
self._is_loaded = True self._is_loaded = True
class GroupTreeItem(NixTreeItem): class GroupTreeItem(NixTreeItem):
def __init__(self, node_descriptor, file_handler, parent): def __init__(self, node_descriptor, file_handler, parent):
super().__init__(node_descriptor, file_handler, parent=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._child_items.append(SourceTreeItem(s, self._file_handler, parent=self))
self._is_loaded = True self._is_loaded = True
class DataFrameTreeItem(NixTreeItem): class DataFrameTreeItem(NixTreeItem):
def __init__(self, node_descriptor, file_handler, parent=None): def __init__(self, node_descriptor, file_handler, parent=None):
super().__init__(node_descriptor, file_handler, parent=parent) super().__init__(node_descriptor, file_handler, parent=parent)
self._is_loaded = True self._is_loaded = True
class FeatureTreeItem(NixTreeItem): class FeatureTreeItem(NixTreeItem):
def __init__(self, node_descriptor, file_handler, parent=None): def __init__(self, node_descriptor, file_handler, parent=None):
super().__init__(node_descriptor, file_handler, parent=parent) super().__init__(node_descriptor, file_handler, parent=parent)
self._is_loaded = True self._is_loaded = True
class DataArrayTreeItem(NixTreeItem): class DataArrayTreeItem(NixTreeItem):
def __init__(self, node_descriptor, file_handler, parent=None): def __init__(self, node_descriptor, file_handler, parent=None):
super().__init__(node_descriptor, file_handler, parent=parent) 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._child_items.append(DimensionTreeItem(d, self._file_handler, parent=self))
self._is_loaded = True self._is_loaded = True
class DimensionTreeItem(NixTreeItem): class DimensionTreeItem(NixTreeItem):
def __init__(self, node_descriptor, file_handler, parent=None): def __init__(self, node_descriptor, file_handler, parent=None):
super().__init__(node_descriptor, file_handler, parent=parent) super().__init__(node_descriptor, file_handler, parent=parent)
self._is_loaded = True self._is_loaded = True
class SectionTreeItem(NixTreeItem): class SectionTreeItem(NixTreeItem):
def __init__(self, node_descriptor, file_handler, parent=None): def __init__(self, node_descriptor, file_handler, parent=None):
super().__init__(node_descriptor, file_handler=file_handler, parent=parent) super().__init__(node_descriptor, file_handler=file_handler, parent=parent)
self.setFlags(Qt.ItemIsSelectable)
self._is_loaded = False self._is_loaded = False
def load_children(self): def load_children(self):
@ -219,6 +229,7 @@ class SectionTreeItem(NixTreeItem):
self._child_items.append(PropertyTreeItem(p, self._file_handler, parent=self)) self._child_items.append(PropertyTreeItem(p, self._file_handler, parent=self))
self._is_loaded = True self._is_loaded = True
class PropertyTreeItem(NixTreeItem): class PropertyTreeItem(NixTreeItem):
def __init__(self, node_descriptor, file_handler, parent=None): def __init__(self, node_descriptor, file_handler, parent=None):
super().__init__(node_descriptor, file_handler, parent=parent) super().__init__(node_descriptor, file_handler, parent=parent)
@ -227,6 +238,7 @@ class PropertyTreeItem(NixTreeItem):
def childCount(self): def childCount(self):
return 0 return 0
class TagTreeItem(NixTreeItem): class TagTreeItem(NixTreeItem):
def __init__(self, node_descriptor, file_handler, parent=None): def __init__(self, node_descriptor, file_handler, parent=None):
super().__init__(node_descriptor, file_handler, parent=parent) 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._child_items.append(FeatureTreeItem(f, self._file_handler, self))
self._is_loaded = True self._is_loaded = True
class TreeModel(QAbstractItemModel): class TreeModel(QAbstractItemModel):
def __init__(self, file_handler, tree_type=TreeType.Full, parent=None, root_section_id=None): 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() parentItem = parent_index.internalPointer()
return parentItem.childCount() 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)