|
5 | 5 | import os |
6 | 6 | import h5py |
7 | 7 | import tkinter as tk |
8 | | -from tkinter import ttk |
9 | 8 |
|
10 | 9 | import hdfmap |
11 | 10 | from hdfmap.eval_functions import generate_identifier |
12 | 11 |
|
13 | | -from ..misc.functions import post_right_click_menu |
| 12 | +from .treeview import CanvasTreeview |
14 | 13 | from ..misc.logging import create_logger |
15 | 14 |
|
16 | 15 | logger = create_logger(__file__) |
17 | 16 |
|
18 | | -#TODO: merge this with misc.functions.folder_treeview |
19 | | -class _Treeview: |
20 | | - """ |
21 | | - Treeview widget for NeXus file viewer |
22 | 17 |
|
23 | | - params |
24 | | - root: tk frame |
25 | | - """ |
26 | | - def __init__(self, root: tk.Misc, *columns: str): |
27 | | - frm = ttk.Frame(root) |
28 | | - frm.pack(side=tk.LEFT, expand=tk.YES, fill=tk.BOTH) |
29 | | - |
30 | | - tree = ttk.Treeview(frm, columns=columns, selectmode='browse') |
31 | | - tree.pack(side=tk.LEFT, expand=tk.YES, fill=tk.BOTH) |
32 | | - |
33 | | - var = ttk.Scrollbar(frm, orient="vertical", command=tree.yview) |
34 | | - var.pack(side=tk.LEFT, fill=tk.Y) |
35 | | - tree.configure(yscrollcommand=var.set) |
36 | | - |
37 | | - self.columns = columns |
38 | | - self._tree_frame = frm |
39 | | - self.tree = tree |
40 | | - # tree.bind("<<TreeviewSelect>>", self.tree_select) |
41 | | - # tree.bind("<Double-1>", self.on_double_click) |
42 | | - tree.bind("<Button-3>", self.right_click_menu()) |
43 | | - |
44 | | - def populate(self, **kwargs): |
45 | | - pass |
46 | | - |
47 | | - def delete(self): |
48 | | - self.tree.delete(*self.tree.get_children()) |
49 | | - |
50 | | - def bind_select(self, function): |
51 | | - self.tree.bind('<<TreeviewSelect>>', function) |
52 | | - |
53 | | - def right_click_menu(self): |
54 | | - """ |
55 | | - Create right-click context menu for hdf_tree objects |
56 | | - :return: menu_popup function |
57 | | - """ |
58 | | - |
59 | | - def copy_fun(tree_getter): |
60 | | - def fun(): |
61 | | - for iid in self.tree.selection(): |
62 | | - self._tree_frame.master.clipboard_clear() |
63 | | - self._tree_frame.master.clipboard_append(tree_getter(iid)) |
64 | | - return fun |
65 | | - |
66 | | - m = tk.Menu(self._tree_frame, tearoff=0) |
67 | | - header_name = self.tree.heading('#0', 'text') |
68 | | - header_getter = lambda iid: self.tree.item(iid)['text'] |
69 | | - m.add_command(label="Copy " + header_name, command=copy_fun(header_getter)) |
70 | | - for column in self.columns: |
71 | | - getter = lambda iid: self.tree.set(iid, column) |
72 | | - m.add_command(label="Copy " + column, command=copy_fun(getter)) |
73 | | - |
74 | | - def menu_popup(event): |
75 | | - # select item |
76 | | - iid = self.tree.identify_row(event.y) |
77 | | - if iid: |
78 | | - self.tree.selection_set(iid) |
79 | | - post_right_click_menu(m, event.x_root, event.y_root) |
80 | | - |
81 | | - return menu_popup |
82 | | - |
83 | | - |
84 | | -class HdfTreeview(_Treeview): |
| 18 | +class HdfTreeview(CanvasTreeview): |
85 | 19 | """ |
86 | 20 | HDF Treeview object |
87 | 21 | """ |
88 | | - def __init__(self, root: tk.Misc): |
89 | | - super().__init__(root, 'type', 'name', 'value') |
90 | | - # Populate tree |
91 | | - self.tree.heading("#0", text="HDF Address") |
92 | | - self.tree.column("#0", minwidth=50, width=400) |
93 | | - self.tree.column("type", width=100, anchor='c') |
94 | | - self.tree.column("name", width=100, anchor='c') |
95 | | - self.tree.column("value", width=200, anchor='c') |
96 | | - self.tree.heading("type", text="Type") |
97 | | - self.tree.heading("name", text="Name") |
98 | | - self.tree.heading("value", text="Value") |
| 22 | + def __init__(self, root: tk.Misc, width: int | None = None, height: int | None = None): |
| 23 | + columns = [ |
| 24 | + ('#0', 'HDF Address', 400, False, None), |
| 25 | + ('type', 'Type', 100, False, None), |
| 26 | + ('name', 'Name', 100, False, None), |
| 27 | + ('value', 'Value', 200, False, None), |
| 28 | + ] |
| 29 | + super().__init__(root, *columns, width=width, height=height) |
| 30 | + |
99 | 31 |
|
100 | 32 | def populate(self, hdf_obj: h5py.File, openstate=True): |
101 | 33 | """Load HDF file, populate ttk.treeview object""" |
@@ -144,21 +76,18 @@ def recur_func(hdf_group, tree_group="", top_address='/'): |
144 | 76 | recur_func(hdf_obj, "") |
145 | 77 |
|
146 | 78 |
|
147 | | -class HdfNameSpace(_Treeview): |
| 79 | +class HdfNameSpace(CanvasTreeview): |
148 | 80 | """ |
149 | 81 | HDF Namespace object |
150 | 82 | """ |
151 | 83 |
|
152 | | - def __init__(self, root: tk.Misc): |
153 | | - super().__init__(root, 'path', 'value') |
154 | | - |
155 | | - # Populate tree |
156 | | - self.tree.heading("#0", text="Name") |
157 | | - self.tree.column("#0", minwidth=50, width=100) |
158 | | - self.tree.column("path", width=300, anchor='c') |
159 | | - self.tree.column("value", width=200, anchor='c') |
160 | | - self.tree.heading("path", text="Path") |
161 | | - self.tree.heading("value", text="Value") |
| 84 | + def __init__(self, root: tk.Misc, width: int | None = None, height: int | None = None): |
| 85 | + columns = [ |
| 86 | + ('#0', 'Name', 100, False, None), |
| 87 | + ('path', 'Path', 300, False, None), |
| 88 | + ('value', 'Value', 200, False, None), |
| 89 | + ] |
| 90 | + super().__init__(root, *columns, width=width, height=height) |
162 | 91 |
|
163 | 92 | def populate(self, hdf_obj: h5py.File, hdf_map: hdfmap.NexusMap, |
164 | 93 | all: bool = True, group: bool = False, combined: bool = False, values: bool = False, |
|
0 commit comments