[tree model] use ItemDescriptor for building tree
This commit is contained in:
parent
47e0d5c589
commit
62dec00295
@ -1,8 +1,7 @@
|
|||||||
from PyQt5.QtCore import QAbstractItemModel, QFile, QModelIndex, Qt
|
from PyQt5.QtCore import QAbstractItemModel, QFile, QModelIndex, Qt
|
||||||
from PyQt5.QtWidgets import QHeaderView, QTreeWidgetItem
|
from PyQt5.QtWidgets import QHeaderView, QTreeWidgetItem
|
||||||
from collections import OrderedDict
|
|
||||||
from enum import Enum
|
|
||||||
|
|
||||||
|
from file_handler import ItemDescriptor, NodeType
|
||||||
from IPython import embed
|
from IPython import embed
|
||||||
|
|
||||||
column_names = ['Name', 'Type', 'ID', 'Value', 'Description']
|
column_names = ['Name', 'Type', 'ID', 'Value', 'Description']
|
||||||
@ -11,13 +10,8 @@ column_names = ['Name', 'Type', 'ID', 'Value', 'Description']
|
|||||||
|
|
||||||
|
|
||||||
class NixTreeItem():
|
class NixTreeItem():
|
||||||
def __init__(self, name, item_type, description, file_handler, id=None, node_type=None, value=None, parent=None):
|
def __init__(self, node_descriptor, file_handler, parent=None):
|
||||||
self._name = name
|
self._node_descriptor = node_descriptor
|
||||||
self._item_type = item_type
|
|
||||||
self._description = description
|
|
||||||
self._id = id
|
|
||||||
self._node_type = node_type
|
|
||||||
self._value = value
|
|
||||||
self._file_handler = file_handler
|
self._file_handler = file_handler
|
||||||
|
|
||||||
self._parent_item = parent
|
self._parent_item = parent
|
||||||
@ -38,15 +32,15 @@ class NixTreeItem():
|
|||||||
|
|
||||||
def data(self, column):
|
def data(self, column):
|
||||||
if column == 0:
|
if column == 0:
|
||||||
return self._name
|
return self._node_descriptor.name
|
||||||
elif column == 1:
|
elif column == 1:
|
||||||
return self._item_type
|
return self._node_descriptor.type
|
||||||
elif column == 2:
|
elif column == 2:
|
||||||
return self._id
|
return self._node_descriptor.id
|
||||||
elif column == 3:
|
elif column == 3:
|
||||||
return self._value
|
return self._node_descriptor.value
|
||||||
elif column == 4:
|
elif column == 4:
|
||||||
return self._description
|
return self._node_descriptor.definition
|
||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
@ -60,79 +54,78 @@ class NixTreeItem():
|
|||||||
|
|
||||||
|
|
||||||
class FileTreeItem(NixTreeItem):
|
class FileTreeItem(NixTreeItem):
|
||||||
def __init__(self, name, item_type, description, file_handler, id=None, node_type=NodeType.Root, value=None, parent=None):
|
def __init__(self, node_descriptor, file_handler, parent=None):
|
||||||
super().__init__(name, item_type, description, file_handler=file_handler, id=id, node_type=node_type, value=value, parent=parent)
|
super().__init__(node_descriptor, file_handler=file_handler, parent=parent)
|
||||||
self._is_loaded = False
|
self._is_loaded = False
|
||||||
|
|
||||||
def load_children(self):
|
def load_children(self):
|
||||||
self._child_items = []
|
self._child_items = []
|
||||||
sections, _ = self._file_handler.request_metadata()
|
sections, _ = self._file_handler.request_metadata()
|
||||||
for s in sections:
|
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()
|
blocks = self._file_handler.request_blocks()
|
||||||
for b in 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
|
self._is_loaded = True
|
||||||
|
|
||||||
|
|
||||||
class BlockTreeItem(NixTreeItem):
|
class BlockTreeItem(NixTreeItem):
|
||||||
def __init__(self, name, item_type, description, file_handler, id=None, node_type=NodeType.Block, value=None, parent=None):
|
def __init__(self, node_descriptor, file_handler, parent=None):
|
||||||
super().__init__(name, item_type, description, file_handler, id=id, node_type=node_type, value=value, parent=parent)
|
super().__init__(node_descriptor, file_handler, parent=parent)
|
||||||
self._is_loaded = False
|
self._is_loaded = False
|
||||||
|
|
||||||
def load_children(self):
|
def load_children(self):
|
||||||
self._child_items = []
|
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:
|
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):
|
for t in self._file_handler.request_tags(self._node_descriptor.id):
|
||||||
self._child_items.append(TagTreeItem(t["name"], t["item_type"], t["description"], self._file_handler, id=t["id"], parent=self))
|
self._child_items.append(TagTreeItem(t, self._file_handler, parent=self))
|
||||||
self._is_loaded = True
|
self._is_loaded = True
|
||||||
|
|
||||||
|
|
||||||
class DataArrayTreeItem(NixTreeItem):
|
class DataArrayTreeItem(NixTreeItem):
|
||||||
def __init__(self, name, item_type, description, file_handler, id, node_type=NodeType.DataArray, value=None, parent=None):
|
def __init__(self, node_descriptor, file_handler, parent=None):
|
||||||
super().__init__(name, item_type, description, file_handler, id=id, node_type=node_type, value=value, parent=parent)
|
super().__init__(node_descriptor, file_handler, parent=parent)
|
||||||
self._is_loaded = False
|
self._is_loaded = False
|
||||||
|
|
||||||
def load_children(self):
|
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:
|
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
|
self._is_loaded = True
|
||||||
|
|
||||||
class DimensionTreeItem(NixTreeItem):
|
class DimensionTreeItem(NixTreeItem):
|
||||||
def __init__(self, name, item_type, description, file_handler, id, node_type=NodeType.Dimension, value=None, parent=None):
|
def __init__(self, node_descriptor, file_handler, parent=None):
|
||||||
super().__init__(name, item_type, description, file_handler, id=id, node_type=node_type, value=value, parent=parent)
|
super().__init__(node_descriptor, file_handler, parent=parent)
|
||||||
self._is_loaded = True
|
self._is_loaded = True
|
||||||
|
|
||||||
class SectionTreeItem(NixTreeItem):
|
class SectionTreeItem(NixTreeItem):
|
||||||
def __init__(self, name, item_type, description, file_handler, id=None, node_type=NodeType.Section, value=None, parent=None):
|
def __init__(self, node_descriptor, file_handler, parent=None):
|
||||||
super().__init__(name, item_type, description, file_handler=file_handler, id=id, node_type=node_type, value=value, parent=parent)
|
super().__init__(node_descriptor, file_handler=file_handler, parent=parent)
|
||||||
self._is_loaded = False
|
self._is_loaded = False
|
||||||
|
|
||||||
def load_children(self):
|
def load_children(self):
|
||||||
print("Load Children", self._name, self._id)
|
|
||||||
self._child_items = []
|
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:
|
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:
|
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
|
self._is_loaded = True
|
||||||
|
|
||||||
class PropertyTreeItem(NixTreeItem):
|
class PropertyTreeItem(NixTreeItem):
|
||||||
def __init__(self, name, item_type, description, file_handler, id=None, node_type=NodeType.Property, value=None, parent=None):
|
def __init__(self, node_descriptor, file_handler, parent=None):
|
||||||
super().__init__(name, item_type, description, file_handler, id=id, node_type=node_type, value=value, parent=parent)
|
super().__init__(node_descriptor, file_handler, parent=parent)
|
||||||
self._is_loaded = True
|
self._is_loaded = True
|
||||||
|
|
||||||
def childCount(self):
|
def childCount(self):
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
class TagTreeItem(NixTreeItem):
|
class TagTreeItem(NixTreeItem):
|
||||||
def __init__(self, name, item_type, description, file_handler, id, node_type=NodeType.Tag, value=None, parent=None):
|
def __init__(self, node_descriptor, file_handler, parent=None):
|
||||||
super().__init__(name, item_type, description, file_handler, id=id, node_type=node_type, value=value, parent=parent)
|
super().__init__(node_descriptor, file_handler, parent=parent)
|
||||||
self._is_loaded = False
|
self._is_loaded = False
|
||||||
|
|
||||||
def load_children(self):
|
def load_children(self):
|
||||||
@ -142,7 +135,8 @@ class TagTreeItem(NixTreeItem):
|
|||||||
class TreeModel(QAbstractItemModel):
|
class TreeModel(QAbstractItemModel):
|
||||||
def __init__(self, file_handler, parent=None):
|
def __init__(self, file_handler, parent=None):
|
||||||
super(TreeModel, self).__init__(parent)
|
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()
|
self.root_item.load_children()
|
||||||
|
|
||||||
def columnCount(self, parent):
|
def columnCount(self, parent):
|
||||||
|
Loading…
Reference in New Issue
Block a user