[treemodel] add derived TreeView class that does the header resizing
This commit is contained in:
parent
c7cf98d67e
commit
a2a4baf5e1
@ -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)
|
Loading…
Reference in New Issue
Block a user