diff --git a/tree_model.py b/tree_model.py index ed42754..1d79da7 100644 --- a/tree_model.py +++ b/tree_model.py @@ -1,8 +1,7 @@ from PyQt5.QtCore import QAbstractItemModel, QFile, QModelIndex, Qt from PyQt5.QtWidgets import QHeaderView, QTreeWidgetItem -from collections import OrderedDict -from enum import Enum +from file_handler import ItemDescriptor, NodeType from IPython import embed column_names = ['Name', 'Type', 'ID', 'Value', 'Description'] @@ -11,13 +10,8 @@ column_names = ['Name', 'Type', 'ID', 'Value', 'Description'] class NixTreeItem(): - def __init__(self, name, item_type, description, file_handler, id=None, node_type=None, value=None, parent=None): - self._name = name - self._item_type = item_type - self._description = description - self._id = id - self._node_type = node_type - self._value = value + def __init__(self, node_descriptor, file_handler, parent=None): + self._node_descriptor = node_descriptor self._file_handler = file_handler self._parent_item = parent @@ -38,15 +32,15 @@ class NixTreeItem(): def data(self, column): if column == 0: - return self._name + return self._node_descriptor.name elif column == 1: - return self._item_type + return self._node_descriptor.type elif column == 2: - return self._id + return self._node_descriptor.id elif column == 3: - return self._value + return self._node_descriptor.value elif column == 4: - return self._description + return self._node_descriptor.definition else: return None @@ -60,79 +54,78 @@ class NixTreeItem(): class FileTreeItem(NixTreeItem): - def __init__(self, name, item_type, description, file_handler, id=None, node_type=NodeType.Root, value=None, parent=None): - super().__init__(name, item_type, description, file_handler=file_handler, id=id, node_type=node_type, value=value, parent=parent) + 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["name"], s["item_type"], s["description"], self._file_handler, id=s["id"], parent=self)) + self._child_items.append(SectionTreeItem(s, self._file_handler, parent=self)) blocks = self._file_handler.request_blocks() for b in blocks: - self._child_items.append(BlockTreeItem(b["name"], b["item_type"], b["description"], self._file_handler, id=b["id"], parent=self)) + self._child_items.append(BlockTreeItem(b, self._file_handler, parent=self)) self._is_loaded = True class BlockTreeItem(NixTreeItem): - def __init__(self, name, item_type, description, file_handler, id=None, node_type=NodeType.Block, value=None, parent=None): - super().__init__(name, item_type, description, file_handler, id=id, node_type=node_type, value=value, parent=parent) + def __init__(self, node_descriptor, file_handler, parent=None): + 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._id) + arrays = self._file_handler.request_data_arrays(self._node_descriptor.id) for a in arrays: - self._child_items.append(DataArrayTreeItem(a["name"], a["item_type"], a["description"], self._file_handler, id=a["id"], parent=self)) + self._child_items.append(DataArrayTreeItem(a, self._file_handler, parent=self)) - for t in self._file_handler.request_tags(self._id): - self._child_items.append(TagTreeItem(t["name"], t["item_type"], t["description"], self._file_handler, id=t["id"], 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)) self._is_loaded = True class DataArrayTreeItem(NixTreeItem): - def __init__(self, name, item_type, description, file_handler, id, node_type=NodeType.DataArray, value=None, parent=None): - super().__init__(name, item_type, description, file_handler, id=id, node_type=node_type, value=value, parent=parent) + def __init__(self, node_descriptor, file_handler, parent=None): + super().__init__(node_descriptor, file_handler, parent=parent) self._is_loaded = False def load_children(self): - dimensions = self._file_handler.request_dimensions(self._parent_item._id, self._id) + dimensions = self._file_handler.request_dimensions(self._parent_item._node_descriptor.id, self._node_descriptor.id) for d in dimensions: - self._child_items.append(DimensionTreeItem(d["name"], d["item_type"], d["description"], self._file_handler, id=d["id"], parent=self)) + self._child_items.append(DimensionTreeItem(d, self._file_handler, parent=self)) self._is_loaded = True class DimensionTreeItem(NixTreeItem): - def __init__(self, name, item_type, description, file_handler, id, node_type=NodeType.Dimension, value=None, parent=None): - super().__init__(name, item_type, description, file_handler, id=id, node_type=node_type, value=value, parent=parent) + 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, name, item_type, description, file_handler, id=None, node_type=NodeType.Section, value=None, parent=None): - super().__init__(name, item_type, description, file_handler=file_handler, id=id, node_type=node_type, value=value, parent=parent) + 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): - print("Load Children", self._name, self._id) self._child_items = [] - sections, properties = self._file_handler.request_metadata(self._id) + sections, properties = self._file_handler.request_metadata(self._node_descriptor.id) for s in sections: - self._child_items.append(SectionTreeItem(s["name"], s["item_type"], s["description"], self._file_handler, id=s["id"], parent=self)) + self._child_items.append(SectionTreeItem(s, self._file_handler, parent=self)) for p in properties: - self._child_items.append(PropertyTreeItem(p["name"], "", p["unit"], self._file_handler, id=p["id"],value="unset", parent=self)) + self._child_items.append(PropertyTreeItem(p, self._file_handler, parent=self)) self._is_loaded = True class PropertyTreeItem(NixTreeItem): - def __init__(self, name, item_type, description, file_handler, id=None, node_type=NodeType.Property, value=None, parent=None): - super().__init__(name, item_type, description, file_handler, id=id, node_type=node_type, value=value, parent=parent) + def __init__(self, node_descriptor, file_handler, parent=None): + super().__init__(node_descriptor, file_handler, parent=parent) self._is_loaded = True def childCount(self): return 0 class TagTreeItem(NixTreeItem): - def __init__(self, name, item_type, description, file_handler, id, node_type=NodeType.Tag, value=None, parent=None): - super().__init__(name, item_type, description, file_handler, id=id, node_type=node_type, value=value, parent=parent) + def __init__(self, node_descriptor, file_handler, parent=None): + super().__init__(node_descriptor, file_handler, parent=parent) self._is_loaded = False def load_children(self): @@ -142,7 +135,8 @@ class TagTreeItem(NixTreeItem): class TreeModel(QAbstractItemModel): def __init__(self, file_handler, parent=None): super(TreeModel, self).__init__(parent) - self.root_item = FileTreeItem(file_handler.filename, "Root Item", "", file_handler, parent=None) + nd = ItemDescriptor(file_handler.filename, type="Root item") + self.root_item = FileTreeItem(nd, file_handler, parent=None) self.root_item.load_children() def columnCount(self, parent):