simvx.ide.panels.debug_panel¶

Debug panel – toolbar, variables, call stack, and breakpoints tabs.

Module Contents¶

Classes¶

DebugToolbar

Horizontal bar of debug action buttons.

VariablesTab

TreeView showing variable scopes with expandable nested objects.

CallStackTab

List of stack frames with click-to-navigate.

WatchTab

Watch expressions tab – evaluate expressions during debug pauses.

BreakpointsTab

List of all breakpoints across files with click-to-navigate.

DebugPanel

Complete debug panel with toolbar and tabbed sub-panels.

API¶

class simvx.ide.panels.debug_panel.DebugToolbar(**kwargs)¶

Bases: simvx.core.ui.containers.HBoxContainer

Horizontal bar of debug action buttons.

Initialization

set_state(state: str)¶

Enable/disable buttons based on debug state (idle|running|stopped).

draw(renderer)¶
alignment¶

‘Property(…)’

separation¶

‘Property(…)’

ready()¶
add_child(node)¶
remove_child(node)¶
mark_layout_dirty()¶
process(dt: float)¶
size_x¶

‘Property(…)’

size_y¶

‘Property(…)’

property size: simvx.core.math.types.Vec2¶
get_theme() simvx.core.ui.core.Theme¶
get_rect() tuple[float, float, float, float]¶
get_global_rect() tuple[float, float, float, float]¶
is_point_inside(point) bool¶
set_anchor_preset(preset: simvx.core.ui.core.AnchorPreset)¶
set_focus()¶
grab_focus()¶
release_focus()¶
has_focus() bool¶
focus_next_control()¶
focus_previous_control()¶
grab_mouse()¶
release_mouse()¶
set_drag_preview(control: simvx.core.ui.core.Control)¶
draw_popup(renderer)¶
is_popup_point_inside(point) bool¶
popup_input(event)¶
dismiss_popup()¶
z_index¶

‘Property(…)’

z_as_relative¶

‘Property(…)’

property absolute_z_index: int¶
property position: simvx.core.math.types.Vec2¶
property rotation: float¶
property rotation_degrees: float¶
property scale: simvx.core.math.types.Vec2¶
property global_position: simvx.core.math.types.Vec2¶
property global_rotation: float¶
property global_scale: simvx.core.math.types.Vec2¶
property forward: simvx.core.math.types.Vec2¶
property right: simvx.core.math.types.Vec2¶
translate(offset: tuple[float, float] | numpy.ndarray)¶
rotate(radians: float)¶
rotate_deg(degrees: float)¶
look_at(target: tuple[float, float] | numpy.ndarray)¶
transform_points(points: list[simvx.core.math.types.Vec2]) list[simvx.core.math.types.Vec2]¶
draw_polygon(renderer, points: list[simvx.core.math.types.Vec2], closed=True, color=None)¶
wrap_screen(margin: float = 20)¶
script_error_raised¶

‘Signal(…)’

classmethod __init_subclass__(**kwargs)¶
property name: str¶
property process_mode: simvx.core.descriptors.ProcessMode¶
reset_error() None¶
reparent(new_parent: simvx.core.node.Node)¶
get_node(path: str) simvx.core.node.Node¶
find_child(name: str, recursive: bool = False) simvx.core.node.Node | None¶
find(node_type: type) simvx.core.node.Node | None¶
find_all(node_type: type, recursive: bool = True) list¶
property path: str¶
add_to_group(group: str)¶
remove_from_group(group: str)¶
is_in_group(group: str) bool¶
enter_tree() None¶
exit_tree() None¶
physics_process(dt: float) None¶
input_event(event: simvx.core.events.InputEvent) None¶
input(event: simvx.core.events.TreeInputEvent) None¶
unhandled_input(event: simvx.core.events.TreeInputEvent) None¶
start_coroutine(gen: simvx.core.descriptors.Coroutine) simvx.core.descriptors.CoroutineHandle¶
stop_coroutine(gen_or_handle)¶
destroy()¶
queue_free¶

None

property tree: simvx.core.scene_tree.SceneTree¶
get_tree() simvx.core.scene_tree.SceneTree¶
__getitem__(key: str)¶
classmethod get_properties() dict[str, simvx.core.descriptors.Property]¶
get_settings¶

None

__repr__()¶
class simvx.ide.panels.debug_panel.VariablesTab(**kwargs)¶

Bases: simvx.core.ui.core.Control

TreeView showing variable scopes with expandable nested objects.

Initialization

set_manager(manager: simvx.ide.dap.manager.DebugManager)¶
refresh()¶

Rebuild the tree from cached scopes and variables.

process(dt: float)¶
draw(renderer)¶
size_x¶

‘Property(…)’

size_y¶

‘Property(…)’

property size: simvx.core.math.types.Vec2¶
get_theme() simvx.core.ui.core.Theme¶
get_rect() tuple[float, float, float, float]¶
get_global_rect() tuple[float, float, float, float]¶
is_point_inside(point) bool¶
set_anchor_preset(preset: simvx.core.ui.core.AnchorPreset)¶
set_focus()¶
grab_focus()¶
release_focus()¶
has_focus() bool¶
focus_next_control()¶
focus_previous_control()¶
grab_mouse()¶
release_mouse()¶
set_drag_preview(control: simvx.core.ui.core.Control)¶
draw_popup(renderer)¶
is_popup_point_inside(point) bool¶
popup_input(event)¶
dismiss_popup()¶
z_index¶

‘Property(…)’

z_as_relative¶

‘Property(…)’

property absolute_z_index: int¶
property position: simvx.core.math.types.Vec2¶
property rotation: float¶
property rotation_degrees: float¶
property scale: simvx.core.math.types.Vec2¶
property global_position: simvx.core.math.types.Vec2¶
property global_rotation: float¶
property global_scale: simvx.core.math.types.Vec2¶
property forward: simvx.core.math.types.Vec2¶
property right: simvx.core.math.types.Vec2¶
translate(offset: tuple[float, float] | numpy.ndarray)¶
rotate(radians: float)¶
rotate_deg(degrees: float)¶
look_at(target: tuple[float, float] | numpy.ndarray)¶
transform_points(points: list[simvx.core.math.types.Vec2]) list[simvx.core.math.types.Vec2]¶
draw_polygon(renderer, points: list[simvx.core.math.types.Vec2], closed=True, color=None)¶
wrap_screen(margin: float = 20)¶
script_error_raised¶

‘Signal(…)’

classmethod __init_subclass__(**kwargs)¶
property name: str¶
property process_mode: simvx.core.descriptors.ProcessMode¶
reset_error() None¶
add_child(node: simvx.core.node.Node) simvx.core.node.Node¶
remove_child(node: simvx.core.node.Node)¶
reparent(new_parent: simvx.core.node.Node)¶
get_node(path: str) simvx.core.node.Node¶
find_child(name: str, recursive: bool = False) simvx.core.node.Node | None¶
find(node_type: type) simvx.core.node.Node | None¶
find_all(node_type: type, recursive: bool = True) list¶
property path: str¶
add_to_group(group: str)¶
remove_from_group(group: str)¶
is_in_group(group: str) bool¶
ready() None¶
enter_tree() None¶
exit_tree() None¶
physics_process(dt: float) None¶
input_event(event: simvx.core.events.InputEvent) None¶
input(event: simvx.core.events.TreeInputEvent) None¶
unhandled_input(event: simvx.core.events.TreeInputEvent) None¶
start_coroutine(gen: simvx.core.descriptors.Coroutine) simvx.core.descriptors.CoroutineHandle¶
stop_coroutine(gen_or_handle)¶
destroy()¶
queue_free¶

None

property tree: simvx.core.scene_tree.SceneTree¶
get_tree() simvx.core.scene_tree.SceneTree¶
__getitem__(key: str)¶
classmethod get_properties() dict[str, simvx.core.descriptors.Property]¶
get_settings¶

None

__repr__()¶
class simvx.ide.panels.debug_panel.CallStackTab(**kwargs)¶

Bases: simvx.core.ui.core.Control

List of stack frames with click-to-navigate.

Initialization

set_refs(state: simvx.ide.state.IDEState, manager: simvx.ide.dap.manager.DebugManager)¶
refresh()¶
draw(renderer)¶
size_x¶

‘Property(…)’

size_y¶

‘Property(…)’

property size: simvx.core.math.types.Vec2¶
get_theme() simvx.core.ui.core.Theme¶
get_rect() tuple[float, float, float, float]¶
get_global_rect() tuple[float, float, float, float]¶
is_point_inside(point) bool¶
set_anchor_preset(preset: simvx.core.ui.core.AnchorPreset)¶
set_focus()¶
grab_focus()¶
release_focus()¶
has_focus() bool¶
focus_next_control()¶
focus_previous_control()¶
grab_mouse()¶
release_mouse()¶
set_drag_preview(control: simvx.core.ui.core.Control)¶
draw_popup(renderer)¶
is_popup_point_inside(point) bool¶
popup_input(event)¶
dismiss_popup()¶
z_index¶

‘Property(…)’

z_as_relative¶

‘Property(…)’

property absolute_z_index: int¶
property position: simvx.core.math.types.Vec2¶
property rotation: float¶
property rotation_degrees: float¶
property scale: simvx.core.math.types.Vec2¶
property global_position: simvx.core.math.types.Vec2¶
property global_rotation: float¶
property global_scale: simvx.core.math.types.Vec2¶
property forward: simvx.core.math.types.Vec2¶
property right: simvx.core.math.types.Vec2¶
translate(offset: tuple[float, float] | numpy.ndarray)¶
rotate(radians: float)¶
rotate_deg(degrees: float)¶
look_at(target: tuple[float, float] | numpy.ndarray)¶
transform_points(points: list[simvx.core.math.types.Vec2]) list[simvx.core.math.types.Vec2]¶
draw_polygon(renderer, points: list[simvx.core.math.types.Vec2], closed=True, color=None)¶
wrap_screen(margin: float = 20)¶
script_error_raised¶

‘Signal(…)’

classmethod __init_subclass__(**kwargs)¶
property name: str¶
property process_mode: simvx.core.descriptors.ProcessMode¶
reset_error() None¶
add_child(node: simvx.core.node.Node) simvx.core.node.Node¶
remove_child(node: simvx.core.node.Node)¶
reparent(new_parent: simvx.core.node.Node)¶
get_node(path: str) simvx.core.node.Node¶
find_child(name: str, recursive: bool = False) simvx.core.node.Node | None¶
find(node_type: type) simvx.core.node.Node | None¶
find_all(node_type: type, recursive: bool = True) list¶
property path: str¶
add_to_group(group: str)¶
remove_from_group(group: str)¶
is_in_group(group: str) bool¶
ready() None¶
enter_tree() None¶
exit_tree() None¶
process(dt: float) None¶
physics_process(dt: float) None¶
input_event(event: simvx.core.events.InputEvent) None¶
input(event: simvx.core.events.TreeInputEvent) None¶
unhandled_input(event: simvx.core.events.TreeInputEvent) None¶
start_coroutine(gen: simvx.core.descriptors.Coroutine) simvx.core.descriptors.CoroutineHandle¶
stop_coroutine(gen_or_handle)¶
destroy()¶
queue_free¶

None

property tree: simvx.core.scene_tree.SceneTree¶
get_tree() simvx.core.scene_tree.SceneTree¶
__getitem__(key: str)¶
classmethod get_properties() dict[str, simvx.core.descriptors.Property]¶
get_settings¶

None

__repr__()¶
class simvx.ide.panels.debug_panel.WatchTab(state: simvx.ide.state.IDEState, manager: simvx.ide.dap.manager.DebugManager | None, **kwargs)¶

Bases: simvx.core.ui.core.Control

Watch expressions tab – evaluate expressions during debug pauses.

Initialization

add_watch(expression: str)¶

Add a watch expression.

remove_watch(index: int)¶

Remove a watch expression by index.

draw(renderer)¶
size_x¶

‘Property(…)’

size_y¶

‘Property(…)’

property size: simvx.core.math.types.Vec2¶
get_theme() simvx.core.ui.core.Theme¶
get_rect() tuple[float, float, float, float]¶
get_global_rect() tuple[float, float, float, float]¶
is_point_inside(point) bool¶
set_anchor_preset(preset: simvx.core.ui.core.AnchorPreset)¶
set_focus()¶
grab_focus()¶
release_focus()¶
has_focus() bool¶
focus_next_control()¶
focus_previous_control()¶
grab_mouse()¶
release_mouse()¶
set_drag_preview(control: simvx.core.ui.core.Control)¶
draw_popup(renderer)¶
is_popup_point_inside(point) bool¶
popup_input(event)¶
dismiss_popup()¶
z_index¶

‘Property(…)’

z_as_relative¶

‘Property(…)’

property absolute_z_index: int¶
property position: simvx.core.math.types.Vec2¶
property rotation: float¶
property rotation_degrees: float¶
property scale: simvx.core.math.types.Vec2¶
property global_position: simvx.core.math.types.Vec2¶
property global_rotation: float¶
property global_scale: simvx.core.math.types.Vec2¶
property forward: simvx.core.math.types.Vec2¶
property right: simvx.core.math.types.Vec2¶
translate(offset: tuple[float, float] | numpy.ndarray)¶
rotate(radians: float)¶
rotate_deg(degrees: float)¶
look_at(target: tuple[float, float] | numpy.ndarray)¶
transform_points(points: list[simvx.core.math.types.Vec2]) list[simvx.core.math.types.Vec2]¶
draw_polygon(renderer, points: list[simvx.core.math.types.Vec2], closed=True, color=None)¶
wrap_screen(margin: float = 20)¶
script_error_raised¶

‘Signal(…)’

classmethod __init_subclass__(**kwargs)¶
property name: str¶
property process_mode: simvx.core.descriptors.ProcessMode¶
reset_error() None¶
add_child(node: simvx.core.node.Node) simvx.core.node.Node¶
remove_child(node: simvx.core.node.Node)¶
reparent(new_parent: simvx.core.node.Node)¶
get_node(path: str) simvx.core.node.Node¶
find_child(name: str, recursive: bool = False) simvx.core.node.Node | None¶
find(node_type: type) simvx.core.node.Node | None¶
find_all(node_type: type, recursive: bool = True) list¶
property path: str¶
add_to_group(group: str)¶
remove_from_group(group: str)¶
is_in_group(group: str) bool¶
ready() None¶
enter_tree() None¶
exit_tree() None¶
process(dt: float) None¶
physics_process(dt: float) None¶
input_event(event: simvx.core.events.InputEvent) None¶
input(event: simvx.core.events.TreeInputEvent) None¶
unhandled_input(event: simvx.core.events.TreeInputEvent) None¶
start_coroutine(gen: simvx.core.descriptors.Coroutine) simvx.core.descriptors.CoroutineHandle¶
stop_coroutine(gen_or_handle)¶
destroy()¶
queue_free¶

None

property tree: simvx.core.scene_tree.SceneTree¶
get_tree() simvx.core.scene_tree.SceneTree¶
__getitem__(key: str)¶
classmethod get_properties() dict[str, simvx.core.descriptors.Property]¶
get_settings¶

None

__repr__()¶
class simvx.ide.panels.debug_panel.BreakpointsTab(**kwargs)¶

Bases: simvx.core.ui.core.Control

List of all breakpoints across files with click-to-navigate.

Initialization

set_state(state: simvx.ide.state.IDEState)¶
set_condition(path: str, line: int, condition: str)¶

Set or clear a condition on a breakpoint.

get_condition(path: str, line: int) str¶

Get the condition for a breakpoint, or empty string if none.

get_conditions_for_file(path: str) dict[int, str]¶

Get all conditions for a file as {line: condition}.

refresh()¶
draw(renderer)¶
size_x¶

‘Property(…)’

size_y¶

‘Property(…)’

property size: simvx.core.math.types.Vec2¶
get_theme() simvx.core.ui.core.Theme¶
get_rect() tuple[float, float, float, float]¶
get_global_rect() tuple[float, float, float, float]¶
is_point_inside(point) bool¶
set_anchor_preset(preset: simvx.core.ui.core.AnchorPreset)¶
set_focus()¶
grab_focus()¶
release_focus()¶
has_focus() bool¶
focus_next_control()¶
focus_previous_control()¶
grab_mouse()¶
release_mouse()¶
set_drag_preview(control: simvx.core.ui.core.Control)¶
draw_popup(renderer)¶
is_popup_point_inside(point) bool¶
popup_input(event)¶
dismiss_popup()¶
z_index¶

‘Property(…)’

z_as_relative¶

‘Property(…)’

property absolute_z_index: int¶
property position: simvx.core.math.types.Vec2¶
property rotation: float¶
property rotation_degrees: float¶
property scale: simvx.core.math.types.Vec2¶
property global_position: simvx.core.math.types.Vec2¶
property global_rotation: float¶
property global_scale: simvx.core.math.types.Vec2¶
property forward: simvx.core.math.types.Vec2¶
property right: simvx.core.math.types.Vec2¶
translate(offset: tuple[float, float] | numpy.ndarray)¶
rotate(radians: float)¶
rotate_deg(degrees: float)¶
look_at(target: tuple[float, float] | numpy.ndarray)¶
transform_points(points: list[simvx.core.math.types.Vec2]) list[simvx.core.math.types.Vec2]¶
draw_polygon(renderer, points: list[simvx.core.math.types.Vec2], closed=True, color=None)¶
wrap_screen(margin: float = 20)¶
script_error_raised¶

‘Signal(…)’

classmethod __init_subclass__(**kwargs)¶
property name: str¶
property process_mode: simvx.core.descriptors.ProcessMode¶
reset_error() None¶
add_child(node: simvx.core.node.Node) simvx.core.node.Node¶
remove_child(node: simvx.core.node.Node)¶
reparent(new_parent: simvx.core.node.Node)¶
get_node(path: str) simvx.core.node.Node¶
find_child(name: str, recursive: bool = False) simvx.core.node.Node | None¶
find(node_type: type) simvx.core.node.Node | None¶
find_all(node_type: type, recursive: bool = True) list¶
property path: str¶
add_to_group(group: str)¶
remove_from_group(group: str)¶
is_in_group(group: str) bool¶
ready() None¶
enter_tree() None¶
exit_tree() None¶
process(dt: float) None¶
physics_process(dt: float) None¶
input_event(event: simvx.core.events.InputEvent) None¶
input(event: simvx.core.events.TreeInputEvent) None¶
unhandled_input(event: simvx.core.events.TreeInputEvent) None¶
start_coroutine(gen: simvx.core.descriptors.Coroutine) simvx.core.descriptors.CoroutineHandle¶
stop_coroutine(gen_or_handle)¶
destroy()¶
queue_free¶

None

property tree: simvx.core.scene_tree.SceneTree¶
get_tree() simvx.core.scene_tree.SceneTree¶
__getitem__(key: str)¶
classmethod get_properties() dict[str, simvx.core.descriptors.Property]¶
get_settings¶

None

__repr__()¶
class simvx.ide.panels.debug_panel.DebugPanel(state: simvx.ide.state.IDEState, debug_manager: simvx.ide.dap.manager.DebugManager, **kwargs)¶

Bases: simvx.core.ui.widgets.Panel

Complete debug panel with toolbar and tabbed sub-panels.

Layout: [Toolbar: Continue | Pause | Step Over | Step Into | Step Out | Restart | Stop] [TabContainer: Variables | Call Stack | Breakpoints]

Initialization

process(dt: float)¶
draw(renderer)¶
bg_color¶

‘ThemeColour(…)’

border_color¶

‘ThemeColour(…)’

size_x¶

‘Property(…)’

size_y¶

‘Property(…)’

property size: simvx.core.math.types.Vec2¶
get_theme() simvx.core.ui.core.Theme¶
get_rect() tuple[float, float, float, float]¶
get_global_rect() tuple[float, float, float, float]¶
is_point_inside(point) bool¶
set_anchor_preset(preset: simvx.core.ui.core.AnchorPreset)¶
set_focus()¶
grab_focus()¶
release_focus()¶
has_focus() bool¶
focus_next_control()¶
focus_previous_control()¶
grab_mouse()¶
release_mouse()¶
set_drag_preview(control: simvx.core.ui.core.Control)¶
draw_popup(renderer)¶
is_popup_point_inside(point) bool¶
popup_input(event)¶
dismiss_popup()¶
z_index¶

‘Property(…)’

z_as_relative¶

‘Property(…)’

property absolute_z_index: int¶
property position: simvx.core.math.types.Vec2¶
property rotation: float¶
property rotation_degrees: float¶
property scale: simvx.core.math.types.Vec2¶
property global_position: simvx.core.math.types.Vec2¶
property global_rotation: float¶
property global_scale: simvx.core.math.types.Vec2¶
property forward: simvx.core.math.types.Vec2¶
property right: simvx.core.math.types.Vec2¶
translate(offset: tuple[float, float] | numpy.ndarray)¶
rotate(radians: float)¶
rotate_deg(degrees: float)¶
look_at(target: tuple[float, float] | numpy.ndarray)¶
transform_points(points: list[simvx.core.math.types.Vec2]) list[simvx.core.math.types.Vec2]¶
draw_polygon(renderer, points: list[simvx.core.math.types.Vec2], closed=True, color=None)¶
wrap_screen(margin: float = 20)¶
script_error_raised¶

‘Signal(…)’

classmethod __init_subclass__(**kwargs)¶
property name: str¶
property process_mode: simvx.core.descriptors.ProcessMode¶
reset_error() None¶
add_child(node: simvx.core.node.Node) simvx.core.node.Node¶
remove_child(node: simvx.core.node.Node)¶
reparent(new_parent: simvx.core.node.Node)¶
get_node(path: str) simvx.core.node.Node¶
find_child(name: str, recursive: bool = False) simvx.core.node.Node | None¶
find(node_type: type) simvx.core.node.Node | None¶
find_all(node_type: type, recursive: bool = True) list¶
property path: str¶
add_to_group(group: str)¶
remove_from_group(group: str)¶
is_in_group(group: str) bool¶
ready() None¶
enter_tree() None¶
exit_tree() None¶
physics_process(dt: float) None¶
input_event(event: simvx.core.events.InputEvent) None¶
input(event: simvx.core.events.TreeInputEvent) None¶
unhandled_input(event: simvx.core.events.TreeInputEvent) None¶
start_coroutine(gen: simvx.core.descriptors.Coroutine) simvx.core.descriptors.CoroutineHandle¶
stop_coroutine(gen_or_handle)¶
destroy()¶
queue_free¶

None

property tree: simvx.core.scene_tree.SceneTree¶
get_tree() simvx.core.scene_tree.SceneTree¶
__getitem__(key: str)¶
classmethod get_properties() dict[str, simvx.core.descriptors.Property]¶
get_settings¶

None

__repr__()¶