Skip to content

Commit 06f68c9

Browse files
committed
fixup! fixup! Alternative design 2
1 parent a2438ef commit 06f68c9

File tree

3 files changed

+539
-600
lines changed

3 files changed

+539
-600
lines changed

src/memray/reporters/tree.py

+43-28
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,16 @@
1111
from typing import Optional
1212
from typing import Tuple
1313

14-
from textual import events
1514
from textual.app import App
16-
from textual import log
1715
from textual.app import ComposeResult
1816
from textual.binding import Binding
19-
from textual.containers import Grid, Container
17+
from textual.containers import Container
18+
from textual.containers import Grid
19+
from textual.containers import Horizontal
20+
from textual.containers import Vertical
2021
from textual.dom import DOMNode
21-
from textual.screen import ModalScreen
22+
from textual.reactive import reactive
23+
from textual.widget import Widget
2224
from textual.widgets import Footer
2325
from textual.widgets import Label
2426
from textual.widgets import ListItem
@@ -27,10 +29,6 @@
2729
from textual.widgets import Tree
2830
from textual.widgets._text_area import Edit
2931
from textual.widgets.tree import TreeNode
30-
from textual.containers import Horizontal, Vertical
31-
from textual.reactive import reactive
32-
from textual.widget import Widget
33-
3432

3533
from memray import AllocationRecord
3634
from memray._memray import size_fmt
@@ -66,15 +64,19 @@ def __init__(self, *args: Any, **kwargs: Any) -> None:
6664
super().__init__(*args, **kwargs)
6765
self.cursor_blink = False
6866

67+
def edit(self, edit: Edit) -> Any:
68+
return
69+
70+
6971
class FrameDetailScreen(Widget):
7072
"""A screen that displays information about a frame"""
7173

72-
frame = reactive(None)
74+
frame = reactive(Frame(location=ROOT_NODE, value=0))
7375

7476
def __init__(self, *args: Any, **kwargs: Any) -> None:
7577
super().__init__(*args, **kwargs)
7678
self.is_mounted = False
77-
79+
7880
def on_mount(self) -> None:
7981
self.is_mounted = True
8082

@@ -86,14 +88,20 @@ def watch_frame(self) -> None:
8688
text = self.query_one("#textarea", FrozenTextArea)
8789
delta = text.size.height // 2
8890
lines = linecache.getlines(file)[line - delta : line + delta]
89-
91+
9092
self.query_one("#function", Label).update(f":compass: Function: {function}")
9193
self.query_one("#location", Label).update(f":compass: Location: {file}:{line}")
92-
self.query_one("#allocs", Label).update(f":floppy_disk: Allocations: {self.frame.n_allocations}")
93-
self.query_one("#size", Label).update(f":package: Size: {size_fmt(self.frame.value)}")
94-
self.query_one("#thread", Label).update(f":thread: Thread: {self.frame.thread_id}")
94+
self.query_one("#allocs", Label).update(
95+
f":floppy_disk: Allocations: {self.frame.n_allocations}"
96+
)
97+
self.query_one("#size", Label).update(
98+
f":package: Size: {size_fmt(self.frame.value)}"
99+
)
100+
self.query_one("#thread", Label).update(
101+
f":thread: Thread: {self.frame.thread_id}"
102+
)
95103
text.text = "\n".join(tuple(line.rstrip() for line in lines))
96-
text.select_line((delta-1))
104+
text.select_line((delta - 1))
97105
text.show_line_numbers = False
98106

99107
def compose(self) -> ComposeResult:
@@ -113,21 +121,31 @@ def compose(self) -> ComposeResult:
113121
ListItem(Label(f":compass: Function: {function}", id="function")),
114122
ListItem(Label(f":compass: Location: {file}:{line}", id="location")),
115123
ListItem(
116-
Label(f":floppy_disk: Allocations: {self.frame.n_allocations}", id="allocs")
124+
Label(
125+
f":floppy_disk: Allocations: {self.frame.n_allocations}",
126+
id="allocs",
127+
)
128+
),
129+
ListItem(
130+
Label(f":package: Size: {size_fmt(self.frame.value)}", id="size")
131+
),
132+
ListItem(
133+
Label(f":thread: Thread: {self.frame.thread_id}", id="thread")
117134
),
118-
ListItem(Label(f":package: Size: {size_fmt(self.frame.value)}", id="size")),
119-
ListItem(Label(f":thread: Thread: {self.frame.thread_id}", id="thread")),
120135
),
121136
id="node",
122137
)
123138

139+
124140
class FrameTree(Tree[Frame]):
125-
def on_tree_node_selected(self, node: Tree.NodeSelected) -> None:
126-
self.app.query_one(FrameDetailScreen).frame = node.node.data
127-
128-
def on_tree_node_highlighted(self, node: Tree.NodeHighlighted) -> None:
129-
self.app.query_one(FrameDetailScreen).frame = node.node.data
130-
141+
def on_tree_node_selected(self, node: Tree.NodeSelected[Frame]) -> None:
142+
if node.node.data is not None:
143+
self.app.query_one(FrameDetailScreen).frame = node.node.data
144+
145+
def on_tree_node_highlighted(self, node: Tree.NodeHighlighted[Frame]) -> None:
146+
if node.node.data is not None:
147+
self.app.query_one(FrameDetailScreen).frame = node.node.data
148+
131149

132150
class TreeApp(App[None]):
133151
BINDINGS = [
@@ -174,9 +192,7 @@ def compose(self) -> ComposeResult:
174192
Vertical(
175193
Container(tree, id="treec"),
176194
),
177-
Vertical(
178-
FrameDetailScreen()
179-
),
195+
Vertical(FrameDetailScreen()),
180196
)
181197
yield Footer()
182198

@@ -190,7 +206,6 @@ def action_expand_linear_group(self) -> None:
190206
break
191207
current_node = current_node.children[0]
192208

193-
194209
def create_tree(
195210
self,
196211
node: Frame,

0 commit comments

Comments
 (0)