diff --git a/file_handler.py b/file_handler.py index 4c50dd3..61c317a 100644 --- a/file_handler.py +++ b/file_handler.py @@ -5,11 +5,12 @@ from enum import Enum class ItemDescriptor(): - def __init__(self, name=None, id=None, type=None, value=None, definition=None, entity_type=None) -> None: + def __init__(self, name=None, id=None, type=None, value=None, definition=None, block_id=None, entity_type=None) -> None: super().__init__() self.name = name self.type = type self.id = id + self.block_id= block_id self.definition = definition self.value = value self.entity_type = entity_type @@ -112,22 +113,23 @@ class FileHandler(metaclass=Singleton): properties.extend(get_properties(fs)) return sections, properties - def _entity_info(self, entities, entity_type): + def _entity_info(self, entities, block_id, entity_type): infos = [] for e in entities: - itd = ItemDescriptor(e.name, e.id, e.type, definition=e.definition, entity_type=entity_type) + itd = ItemDescriptor(e.name, e.id, e.type, definition=e.definition, entity_type=entity_type, block_id=block_id) infos.append(itd) + # TODO set the value to something meaningful for the various entity types return infos def request_blocks(self): - return self._entity_info(self._nix_file.blocks, NodeType.Block) + return self._entity_info(self._nix_file.blocks, None, NodeType.Block) def request_data_arrays(self, block_id): - return self._entity_info(self._nix_file.blocks[block_id].data_arrays,NodeType.DataArray) + return self._entity_info(self._nix_file.blocks[block_id].data_arrays, block_id, NodeType.DataArray) def request_tags(self, block_id): - tags = self._entity_info(self._nix_file.blocks[block_id].tags, NodeType.Tag) - tags.extend(self._entity_info(self._nix_file.blocks[block_id].multi_tags, NodeType.MultiTag)) + tags = self._entity_info(self._nix_file.blocks[block_id].tags, block_id, NodeType.Tag) + tags.extend(self._entity_info(self._nix_file.blocks[block_id].multi_tags, block_id, NodeType.MultiTag)) return tags def request_references(self, block_id, tag_id, is_mtag): @@ -137,7 +139,7 @@ class FileHandler(metaclass=Singleton): t = b.multi_tags[tag_id] else: t = b.tags[tag_id] - return self._entity_info(t.references, NodeType.DataArray) + return self._entity_info(t.references, block_id, NodeType.DataArray) def request_features(self, block_id, tag_id, is_mtag): b = self._nix_file.blocks[block_id] @@ -148,7 +150,7 @@ class FileHandler(metaclass=Singleton): t = b.tags[tag_id] feats = [] for f in t.features: - itd = ItemDescriptor(f.data.name, f.id, f.type, definition=f.data.definition, entity_type=NodeType.Feature) + itd = ItemDescriptor(f.data.name, f.id, f.link_type, definition=f.data.definition, block_id=block_id, entity_type=NodeType.Feature) feats.append(itd) return feats @@ -157,5 +159,5 @@ class FileHandler(metaclass=Singleton): for i, d in enumerate(self._nix_file.blocks[block_id].data_arrays[array_id].dimensions): dim_name = "%i. dim: %s" % (i+1, d.label if hasattr(d, "label") else "") dim_type= "%s %s" % (d.dimension_type, "dimension") - dimensions.append(ItemDescriptor(dim_name, type=dim_type, entity_type=NodeType.Dimension)) - return dimensions \ No newline at end of file + dimensions.append(ItemDescriptor(dim_name, type=dim_type, entity_type=NodeType.Dimension, block_id=block_id)) + return dimensions diff --git a/tree_model.py b/tree_model.py index 1d79da7..3162a8a 100644 --- a/tree_model.py +++ b/tree_model.py @@ -84,6 +84,15 @@ class BlockTreeItem(NixTreeItem): self._child_items.append(TagTreeItem(t, 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): @@ -91,7 +100,8 @@ class DataArrayTreeItem(NixTreeItem): self._is_loaded = False def load_children(self): - dimensions = self._file_handler.request_dimensions(self._parent_item._node_descriptor.id, self._node_descriptor.id) + self._child_items = [] + dimensions = self._file_handler.request_dimensions(self._node_descriptor.block_id, self._node_descriptor.id) for d in dimensions: self._child_items.append(DimensionTreeItem(d, self._file_handler, parent=self)) self._is_loaded = True @@ -129,7 +139,14 @@ class TagTreeItem(NixTreeItem): self._is_loaded = False def load_children(self): + self._child_items = [] + references = self._file_handler.request_references(self._node_descriptor.block_id, self._node_descriptor.id, self._node_descriptor.entity_type == NodeType.MultiTag) + for r in references: + self._child_items.append(DataArrayTreeItem(r, self._file_handler, self)) + features = self._file_handler.request_features(self._node_descriptor.block_id, self._node_descriptor.id, self._node_descriptor.entity_type == NodeType.MultiTag) + for f in features: + self._child_items.append(FeatureTreeItem(f, self._file_handler, self)) self._is_loaded = True class TreeModel(QAbstractItemModel):