Bases: Screen[ModulePass | None]
Screen called when selected pass has arguments requiring user input.
Source code in xdsl/interactive/add_arguments_screen.py
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98 | class AddArguments(Screen[ModulePass | None]):
"""
Screen called when selected pass has arguments requiring user input.
"""
CSS_PATH = "add_arguments_screen.tcss"
selected_pass_type: type[ModulePass]
selected_pass_value = Reactive[ModulePass | None](None)
argument_text_area: TextArea
def __init__(self, selected_pass_type: type[ModulePass]):
self.selected_pass_type = selected_pass_type
self.argument_text_area = TextArea(
" ".join(
f"{n}={t if d is None else d}"
for n, t, d in get_pass_option_infos(selected_pass_type)
),
id="argument_text_area",
)
self.enter_button = Button("Enter", id="enter_button")
super().__init__()
def compose(self) -> ComposeResult:
with ScrollableContainer(id="container"):
yield self.argument_text_area
with Horizontal(id="cancel_enter_buttons"):
yield Button("Clear Text", id="clear_input_screen_button")
yield self.enter_button
yield Button("Cancel", id="quit_screen_button")
def on_mount(self) -> None:
"""Configure widgets in this application before it is first shown."""
self.query_one(
"#argument_text_area"
).border_title = "Provide arguments to apply to selected pass."
# Initialize parsed pass
self.update_selected_pass_value()
# Initialize enter button
self.watch_selected_pass_value()
@on(TextArea.Changed, "#argument_text_area")
def update_selected_pass_value(self) -> None:
concatenated_arg_val = self.argument_text_area.text
try:
parsed_spec = list(
parse_pipeline(
f"{self.selected_pass_type.name}{{{concatenated_arg_val}}}"
)
)[0]
except PassPipelineParseError:
self.selected_pass_value = None
return
missing_fields = self.selected_pass_type.required_fields().difference(
parsed_spec.args.keys()
)
if missing_fields:
self.selected_pass_value = None
return
try:
self.selected_pass_value = self.selected_pass_type.from_pass_spec(
parsed_spec
)
except ValueError:
self.selected_pass_value = None
def watch_selected_pass_value(self):
self.enter_button.disabled = self.selected_pass_value is None
@on(Button.Pressed, "#quit_screen_button")
def exit_screen(self, event: Button.Pressed) -> None:
self.dismiss(None)
@on(Button.Pressed, "#clear_input_screen_button")
def clear_text_area(self, event: Button.Pressed) -> None:
self.argument_text_area.load_text("")
@on(Button.Pressed, "#enter_button")
def enter_arguments(self, event: Button.Pressed) -> None:
assert self.selected_pass_value is not None
self.dismiss(self.selected_pass_value)
|
CSS_PATH = 'add_arguments_screen.tcss'
class-attribute
instance-attribute
selected_pass_value = Reactive[ModulePass | None](None)
class-attribute
instance-attribute
selected_pass_type: type[ModulePass] = selected_pass_type
instance-attribute
argument_text_area: TextArea = TextArea(' '.join(f'{n}={t if d is None else d}' for n, t, d in (get_pass_option_infos(selected_pass_type))), id='argument_text_area')
instance-attribute
__init__(selected_pass_type: type[ModulePass])
Source code in xdsl/interactive/add_arguments_screen.py
24
25
26
27
28
29
30
31
32
33
34
35 | def __init__(self, selected_pass_type: type[ModulePass]):
self.selected_pass_type = selected_pass_type
self.argument_text_area = TextArea(
" ".join(
f"{n}={t if d is None else d}"
for n, t, d in get_pass_option_infos(selected_pass_type)
),
id="argument_text_area",
)
self.enter_button = Button("Enter", id="enter_button")
super().__init__()
|
compose() -> ComposeResult
Source code in xdsl/interactive/add_arguments_screen.py
| def compose(self) -> ComposeResult:
with ScrollableContainer(id="container"):
yield self.argument_text_area
with Horizontal(id="cancel_enter_buttons"):
yield Button("Clear Text", id="clear_input_screen_button")
yield self.enter_button
yield Button("Cancel", id="quit_screen_button")
|
on_mount() -> None
Configure widgets in this application before it is first shown.
Source code in xdsl/interactive/add_arguments_screen.py
45
46
47
48
49
50
51
52
53 | def on_mount(self) -> None:
"""Configure widgets in this application before it is first shown."""
self.query_one(
"#argument_text_area"
).border_title = "Provide arguments to apply to selected pass."
# Initialize parsed pass
self.update_selected_pass_value()
# Initialize enter button
self.watch_selected_pass_value()
|
update_selected_pass_value() -> None
Source code in xdsl/interactive/add_arguments_screen.py
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82 | @on(TextArea.Changed, "#argument_text_area")
def update_selected_pass_value(self) -> None:
concatenated_arg_val = self.argument_text_area.text
try:
parsed_spec = list(
parse_pipeline(
f"{self.selected_pass_type.name}{{{concatenated_arg_val}}}"
)
)[0]
except PassPipelineParseError:
self.selected_pass_value = None
return
missing_fields = self.selected_pass_type.required_fields().difference(
parsed_spec.args.keys()
)
if missing_fields:
self.selected_pass_value = None
return
try:
self.selected_pass_value = self.selected_pass_type.from_pass_spec(
parsed_spec
)
except ValueError:
self.selected_pass_value = None
|
watch_selected_pass_value()
Source code in xdsl/interactive/add_arguments_screen.py
| def watch_selected_pass_value(self):
self.enter_button.disabled = self.selected_pass_value is None
|
exit_screen(event: Button.Pressed) -> None
Source code in xdsl/interactive/add_arguments_screen.py
| @on(Button.Pressed, "#quit_screen_button")
def exit_screen(self, event: Button.Pressed) -> None:
self.dismiss(None)
|
clear_text_area(event: Button.Pressed) -> None
Source code in xdsl/interactive/add_arguments_screen.py
| @on(Button.Pressed, "#clear_input_screen_button")
def clear_text_area(self, event: Button.Pressed) -> None:
self.argument_text_area.load_text("")
|
enter_arguments(event: Button.Pressed) -> None
Source code in xdsl/interactive/add_arguments_screen.py
| @on(Button.Pressed, "#enter_button")
def enter_arguments(self, event: Button.Pressed) -> None:
assert self.selected_pass_value is not None
self.dismiss(self.selected_pass_value)
|