class HdfNameSpace(CanvasTreeview):
"""
HDF Namespace object
"""
def __init__(self, root: tk.Misc, width: int | None = None, height: int | None = None):
columns = [
('#0', 'Name', 100, False, None),
('path', 'Path', 300, False, None),
('value', 'Value', 200, False, None),
]
super().__init__(root, *columns, width=width, height=height)
def populate(self, hdf_obj: h5py.File, hdf_map: hdfmap.NexusMap,
all: bool = True, group: bool = False, combined: bool = False, values: bool = False,
arrays: bool = False, scannables: bool = False, metadata: bool = False, image_data: bool = False):
"""Load HDF file, populate ttk.treeview object"""
data = {
name: hdf_map.get_string(hdf_obj, name)
for name, path in hdf_map.combined.items()
}
if all or group:
datasets = self.tree.insert("", tk.END, text='Groups', values=('', ''))
for name, path_list in hdf_map.classes.items():
# path_list = list(set(path_list)) # remove duplicates
if len(path_list) == 1:
self.tree.insert(datasets, tk.END, text=name, values=(path_list[0], ''))
else:
grp = self.tree.insert(datasets, tk.END, text=name, values=('', ''))
for path in path_list:
self.tree.insert(grp, tk.END, text=name, values=(path, ''))
if all or combined:
datasets = self.tree.insert("", tk.END, text='Combined', values=('', ''))
for name, path in hdf_map.combined.items():
value = data.get(name, 'NOT IN MAP')
self.tree.insert(datasets, tk.END, text=name, values=(path, value))
if all or values:
datasets = self.tree.insert("", tk.END, text='Values', values=('', ''))
for name, path in hdf_map.values.items():
value = data.get(name, 'NOT IN MAP')
self.tree.insert(datasets, tk.END, text=name, values=(path, value))
if all or arrays:
datasets = self.tree.insert("", tk.END, text='Arrays', values=('', ''))
for name, path in hdf_map.arrays.items():
value = data.get(name, 'NOT IN MAP')
self.tree.insert(datasets, tk.END, text=name, values=(path, value))
if all or scannables:
datasets = self.tree.insert("", tk.END, text='Scannables', values=('', ''))
for name, path in hdf_map.scannables.items():
value = data.get(name, 'NOT IN MAP')
self.tree.insert(datasets, tk.END, text=name, values=(path, value))
if all or metadata:
datasets = self.tree.insert("", tk.END, text='Metadata', values=('', ''))
for name, path in hdf_map.metadata.items():
value = data.get(name, 'NOT IN MAP')
self.tree.insert(datasets, tk.END, text=name, values=(path, value))
if all or image_data:
datasets = self.tree.insert("", tk.END, text='Image Data', values=('', ''))
for name, path in hdf_map.image_data.items():
value = data.get(name, 'NOT IN MAP')
self.tree.insert(datasets, tk.END, text=name, values=(path, value))