From 526d8bbecf01ee3af907bf252768649c471d5683 Mon Sep 17 00:00:00 2001 From: qwopp Date: Thu, 24 Apr 2025 12:37:55 -0400 Subject: [PATCH] Add search heap by object ID functionality --- thonny/plugins/heap.py | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/thonny/plugins/heap.py b/thonny/plugins/heap.py index 7f138012c..a4fb3d3c6 100644 --- a/thonny/plugins/heap.py +++ b/thonny/plugins/heap.py @@ -21,11 +21,20 @@ def __init__(self, master): self.tree.heading("id", text=tr("ID"), anchor=tk.W) self.tree.heading("value", text=tr("Value"), anchor=tk.W) - get_workbench().bind("get_heap_response", self._handle_heap_event, True) + self.search_var = tk.StringVar() + self.search_frame = ttk.Frame(self) + self.search_frame.grid(row=2, column=0, sticky="ew", columnspan=2) + self.search_label = ttk.Label(self.search_frame, text=tr("Search ID:")) + self.search_label.pack(side="left", padx=(5, 2)) + self.search_entry = ttk.Entry(self.search_frame, textvariable=self.search_var) + self.search_entry.pack(side="left", fill="x", expand=True, padx=(0, 5)) + self.search_entry.bind("", lambda event: self._search_heap()) + self.search_button = ttk.Button(self.search_frame, text=tr("Find"), command=self._search_heap) + self.search_button.pack(side="left") + get_workbench().bind("get_heap_response", self._handle_heap_event, True) get_workbench().bind("DebuggerResponse", self._request_heap_data, True) get_workbench().bind("ToplevelResponse", self._request_heap_data, True) - # Showing new globals may introduce new interesting objects get_workbench().bind("get_globals_response", self._request_heap_data, True) self.bind("", self._on_map, True) @@ -41,6 +50,18 @@ def __init__(self, master): padding=(3, 0), ) + def _search_heap(self): + search_id = self.search_var.get() + found = False + for child in self.tree.get_children(): + if self.tree.set(child, "id").startswith(search_id): + self.tree.selection_set(child) + self.tree.see(child) + found = True + break + if not found: + tk.messagebox.showinfo(tr("Search"), tr(f"No ID starting with '{search_id}' found in the heap.")) + def _update_data(self, data): self._clear_tree() for value_id in sorted(data.keys()):