[tree] split data and mdata trees, fix header resizing
This commit is contained in:
parent
fc65542aee
commit
9730c3d329
@ -6,7 +6,7 @@ from PyQt5.QtCore import Qt, QSettings, QSize
|
||||
from file_handler import FileHandler
|
||||
import communicator as comm
|
||||
import constants as cnst
|
||||
from tree_model import TreeModel
|
||||
from tree_model import TreeModel, TreeType
|
||||
|
||||
class CentralWidget(QWidget):
|
||||
|
||||
@ -41,21 +41,49 @@ class FileView(QWidget):
|
||||
grid.addWidget(QLabel("FileView"), 0, 0, 1, 3)
|
||||
self.setLayout(grid)
|
||||
|
||||
self._view = QTreeView()
|
||||
self._view.setAlternatingRowColors(True)
|
||||
self._view.setUniformRowHeights(True) # Allows for scrolling optimizations.
|
||||
self._view.setWindowTitle("Simple Tree Model")
|
||||
self._view.setIconSize(QSize(20,20))
|
||||
header = self._view.header()
|
||||
self._data_tree = QTreeView()
|
||||
self._data_tree.expanded.connect(self.dataTreeResize)
|
||||
self._data_tree.collapsed.connect(self.dataTreeResize)
|
||||
self._data_tree.setAlternatingRowColors(True)
|
||||
self._data_tree.setUniformRowHeights(True) # Allows for scrolling optimizations.
|
||||
self._data_tree.setWindowTitle("Simple Tree Model")
|
||||
self._data_tree.setIconSize(QSize(20,20))
|
||||
header = self._data_tree.header()
|
||||
header.setStretchLastSection(False)
|
||||
header.setSectionResizeMode(1, QHeaderView.ResizeToContents)
|
||||
header.setSectionResizeMode(2, QHeaderView.ResizeToContents)
|
||||
header.setSectionResizeMode(0, QHeaderView.Stretch)
|
||||
grid.addWidget(self._view, 1, 0, 3, 3)
|
||||
grid.addWidget(self._data_tree, 2, 0, 2, 3)
|
||||
|
||||
self._mdata_tree = QTreeView()
|
||||
self._mdata_tree.expanded.connect(self.metadataTreeResize)
|
||||
self._mdata_tree.collapsed.connect(self.metadataTreeResize)
|
||||
|
||||
self._mdata_tree.setAlternatingRowColors(True)
|
||||
self._mdata_tree.setUniformRowHeights(True) # Allows for scrolling optimizations.
|
||||
self._mdata_tree.setWindowTitle("Simple Tree Model")
|
||||
self._mdata_tree.setIconSize(QSize(20,20))
|
||||
|
||||
mheader = self._mdata_tree.header()
|
||||
mheader.setStretchLastSection(False)
|
||||
mheader.setSectionResizeMode(1, QHeaderView.ResizeToContents)
|
||||
mheader.setSectionResizeMode(2, QHeaderView.ResizeToContents)
|
||||
mheader.setSectionResizeMode(0, QHeaderView.Stretch)
|
||||
grid.addWidget(self._mdata_tree, 1, 0, 1, 3)
|
||||
|
||||
def metadataTreeResize(self, index):
|
||||
self._mdata_tree.resizeColumnToContents(index.column())
|
||||
|
||||
def dataTreeResize(self, index):
|
||||
self._data_tree.resizeColumnToContents(index.column())
|
||||
|
||||
def update(self):
|
||||
model = TreeModel(self._file_handler)
|
||||
self._view.setModel(model)
|
||||
data_model = TreeModel(self._file_handler, TreeType.Data)
|
||||
metadata_model = TreeModel(self._file_handler, TreeType.Metadata)
|
||||
self._data_tree.setModel(data_model)
|
||||
self._mdata_tree.setModel(metadata_model)
|
||||
self._data_tree.resizeColumnToContents(0)
|
||||
self._mdata_tree.resizeColumnToContents(0)
|
||||
|
||||
def reset(self):
|
||||
print("FileView ", self._file_handler.is_valid)
|
||||
|
@ -1,12 +1,19 @@
|
||||
from PyQt5.QtCore import QAbstractItemModel, QModelIndex, Qt
|
||||
from PyQt5.QtGui import QIcon
|
||||
from PyQt5.QtWidgets import QTreeWidgetItem
|
||||
from enum import Enum
|
||||
|
||||
from file_handler import ItemDescriptor, NodeType
|
||||
|
||||
column_names = ['Name', 'Type', 'ID', 'Value', 'Description']
|
||||
|
||||
|
||||
class TreeType(Enum):
|
||||
Full = "full"
|
||||
Metadata = "metadata"
|
||||
Data = "data"
|
||||
|
||||
|
||||
class NixTreeItem(QTreeWidgetItem):
|
||||
def __init__(self, node_descriptor, file_handler, parent=None):
|
||||
super().__init__(parent)
|
||||
@ -55,7 +62,6 @@ class NixTreeItem(QTreeWidgetItem):
|
||||
return self._parent_item._child_items.index(self)
|
||||
return 0
|
||||
|
||||
|
||||
class FileTreeItem(NixTreeItem):
|
||||
def __init__(self, node_descriptor, file_handler, parent=None):
|
||||
super().__init__(node_descriptor, file_handler=file_handler, parent=parent)
|
||||
@ -71,6 +77,33 @@ class FileTreeItem(NixTreeItem):
|
||||
self._child_items.append(BlockTreeItem(b, self._file_handler, parent=self))
|
||||
self._is_loaded = True
|
||||
|
||||
|
||||
class DataTreeItem(NixTreeItem):
|
||||
def __init__(self, node_descriptor, file_handler, parent=None):
|
||||
super().__init__(node_descriptor, file_handler=file_handler, parent=parent)
|
||||
self._is_loaded = False
|
||||
|
||||
def load_children(self):
|
||||
self._child_items = []
|
||||
blocks = self._file_handler.request_blocks()
|
||||
for b in blocks:
|
||||
self._child_items.append(BlockTreeItem(b, self._file_handler, parent=self))
|
||||
self._is_loaded = True
|
||||
|
||||
|
||||
class MetadataTreeItem(NixTreeItem):
|
||||
def __init__(self, node_descriptor, file_handler, parent=None):
|
||||
super().__init__(node_descriptor, file_handler=file_handler, parent=parent)
|
||||
self._is_loaded = False
|
||||
|
||||
def load_children(self):
|
||||
self._child_items = []
|
||||
sections, _ = self._file_handler.request_metadata()
|
||||
for s in sections:
|
||||
self._child_items.append(SectionTreeItem(s, self._file_handler, parent=self))
|
||||
self._is_loaded = True
|
||||
|
||||
|
||||
class BlockTreeItem(NixTreeItem):
|
||||
def __init__(self, node_descriptor, file_handler, parent=None):
|
||||
super().__init__(node_descriptor, file_handler, parent=parent)
|
||||
@ -195,10 +228,9 @@ class TagTreeItem(NixTreeItem):
|
||||
|
||||
class TreeModel(QAbstractItemModel):
|
||||
|
||||
def __init__(self, file_handler, parent=None):
|
||||
def __init__(self, file_handler, tree_type=TreeType.Full, parent=None):
|
||||
super(TreeModel, self).__init__(parent)
|
||||
nd = ItemDescriptor(file_handler.filename, type="Root item")
|
||||
self.root_item = FileTreeItem(nd, file_handler, parent=None)
|
||||
self.type_icons = {NodeType.Block: QIcon("./icons/nix_block_1d.png"),
|
||||
NodeType.Source: QIcon("./icons/nix_source.png"),
|
||||
NodeType.DataArray: QIcon("./icons/nix_data_array.png"),
|
||||
@ -210,6 +242,12 @@ class TreeModel(QAbstractItemModel):
|
||||
NodeType.MultiTag: QIcon("./icons/nix_tag.png"),
|
||||
NodeType.Group: QIcon("./icons/nix_group.png"),
|
||||
NodeType.Feature: QIcon("./icons/nix_feature.png")}
|
||||
if tree_type == TreeType.Full:
|
||||
self.root_item = FileTreeItem(nd, file_handler, parent=None)
|
||||
elif tree_type == TreeType.Metadata:
|
||||
self.root_item = MetadataTreeItem(nd, file_handler, parent=None)
|
||||
else:
|
||||
self.root_item = DataTreeItem(nd, file_handler, parent=None)
|
||||
self.root_item.load_children()
|
||||
|
||||
def columnCount(self, parent):
|
||||
|
Loading…
Reference in New Issue
Block a user