From a2a4baf5e1c31e8a31cfdc44707558396d9f5080 Mon Sep 17 00:00:00 2001 From: Jan Grewe Date: Wed, 6 Jan 2021 23:28:54 +0100 Subject: [PATCH] [treemodel] add derived TreeView class that does the header resizing --- tree_model.py | 42 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 40 insertions(+), 2 deletions(-) diff --git a/tree_model.py b/tree_model.py index 54fbb71..12e3474 100644 --- a/tree_model.py +++ b/tree_model.py @@ -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) \ No newline at end of file