diff --git a/central_widget.py b/central_widget.py index 92038f5..db061bc 100644 --- a/central_widget.py +++ b/central_widget.py @@ -1,7 +1,7 @@ import os from PyQt5.QtWidgets import QFrame, QLabel, QListWidget, QListWidgetItem, QStackedLayout, QVBoxLayout, QWidget, QGridLayout, QSpacerItem, QSizePolicy, QTreeView, QHeaderView from PyQt5.QtGui import QPixmap -from PyQt5.QtCore import Qt, QSettings +from PyQt5.QtCore import Qt, QSettings, QSize from file_handler import FileHandler import communicator as comm @@ -45,6 +45,7 @@ class FileView(QWidget): 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() header.setStretchLastSection(False) header.setSectionResizeMode(1, QHeaderView.ResizeToContents) diff --git a/tree_model.py b/tree_model.py index 9e70eb1..f2818b8 100644 --- a/tree_model.py +++ b/tree_model.py @@ -1,4 +1,5 @@ -from PyQt5.QtCore import QAbstractItemModel, QFile, QModelIndex, Qt +from PyQt5.QtCore import QAbstractItemModel, QFile, QModelIndex, QSize, Qt +from PyQt5.QtGui import QIcon from PyQt5.QtWidgets import QHeaderView, QTreeWidgetItem from file_handler import ItemDescriptor, NodeType @@ -7,10 +8,9 @@ from IPython import embed column_names = ['Name', 'Type', 'ID', 'Value', 'Description'] - - -class NixTreeItem(): +class NixTreeItem(QTreeWidgetItem): def __init__(self, node_descriptor, file_handler, parent=None): + super().__init__(parent) self._node_descriptor = node_descriptor self._file_handler = file_handler @@ -85,6 +85,48 @@ class BlockTreeItem(NixTreeItem): for t in self._file_handler.request_tags(self._node_descriptor.id): self._child_items.append(TagTreeItem(t, self._file_handler, parent=self)) + + data_frames = self._file_handler.request_data_frames(self._node_descriptor.id) + for df in data_frames: + self._child_items.append(DataFrameTreeItem(df, self._file_handler, parent=self)) + + sources = self._file_handler.request_sources(self._node_descriptor.id) + for s in sources: + 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) + self._is_loaded = False + + def load_children(self): + sources = self._file_handler.request_sources(self._node_descriptor.block_id, self._node_descriptor.id) + for s in sources: + 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) + self._is_loaded = False + + def load_children(self): + self._child_items = [] + arrays = self._file_handler.request_data_arrays(self._node_descriptor.id) + for a in arrays: + self._child_items.append(DataArrayTreeItem(a, self._file_handler, parent=self)) + + for t in self._file_handler.request_tags(self._node_descriptor.id): + self._child_items.append(TagTreeItem(t, self._file_handler, parent=self)) + + data_frames = self._file_handler.request_data_frames(self._node_descriptor.id) + for df in data_frames: + self._child_items.append(DataFrameTreeItem(df, self._file_handler, parent=self)) + + sources = self._file_handler.request_sources(self._node_descriptor.id) + for s in sources: + self._child_items.append(SourceTreeItem(s, self._file_handler, parent=self)) self._is_loaded = True class DataFrameTreeItem(NixTreeItem): @@ -177,9 +219,8 @@ class TreeModel(QAbstractItemModel): def data(self, index, role): if not index.isValid(): return None - item = index.internalPointer() - + if role == Qt.DisplayRole: return item.data(index.column()) elif role == Qt.DecorationRole and index.column() == 0: