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)[source]¶

Bases: simvx.core.ui.containers.HBoxContainer

Horizontal bar of debug action buttons.

Initialization

separation¶

‘Property(…)’

size_x¶

‘Property(…)’

size_y¶

‘Property(…)’

set_state(state: str)[source]¶

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

refresh_theme()[source]¶

Re-apply theme colours to all toolbar buttons.

on_draw(renderer)[source]¶
alignment¶

‘Property(…)’

get_minimum_size() → simvx.core.math.types.Vec2¶
on_enter_tree()¶
on_ready()¶
on_exit_tree()¶
add_child(node: simvx.core.node.T) → simvx.core.node.T¶
remove_child(node: simvx.core.node.Node) → None¶
mark_layout_dirty()¶
min_size_x¶

‘Property(…)’

min_size_y¶

‘Property(…)’

anchor_left¶

‘Property(…)’

anchor_top¶

‘Property(…)’

anchor_right¶

‘Property(…)’

anchor_bottom¶

‘Property(…)’

margin_left¶

‘Property(…)’

margin_top¶

‘Property(…)’

margin_right¶

‘Property(…)’

margin_bottom¶

‘Property(…)’

anchor¶

‘Property(…)’

inset¶

‘Property(…)’

dismiss_on_outside_click¶

‘Property(…)’

clip_contents¶

‘Property(…)’

focus_mode¶

‘Property(…)’

tooltip¶

‘Property(…)’

pointer_filter¶

‘Property(…)’

cursor_shape¶

‘Property(…)’

pointer_types: frozenset[simvx.core.input.enums.PointerType] | None¶

None

touch_target: bool¶

False

property wants_text_input: bool¶
size_flags_horizontal¶

‘Property(…)’

size_flags_vertical¶

‘Property(…)’

stretch_ratio¶

‘Property(…)’

max_size¶

‘Property(…)’

property size: simvx.core.math.types.Vec2¶
property min_size: simvx.core.math.types.Vec2¶
content_signature() → object¶
content_uses(chars: str) → bool¶
autosize_to_content() → None¶
accepts_pointers¶

‘Property(…)’

property theme: simvx.core.ui.types.Theme | None¶
property mouse_over: bool¶
property disabled: bool¶
get_theme() → simvx.core.ui.types.Theme¶
property viewport_size: simvx.core.math.types.Vec2¶
property viewport_insets: tuple[float, float, float, float]¶
queue_redraw()¶
size_floor() → tuple[float, float]¶
get_rect() → tuple[float, float, float, float]¶
get_global_rect() → tuple[float, float, float, float]¶
property focus_rect: tuple[float, float, float, float] | None¶
is_point_inside(point) → bool¶
is_hit(event: simvx.core.input.events.PointerEvent) → bool¶
classmethod __init_subclass__(**kwargs)¶
activate() → bool¶
focus_next_control()¶
focus_previous_control()¶
set_drag_preview(control: simvx.core.ui.core.Control)¶
property is_overlay_open: bool¶
show_overlay(modality: str = 'light', *, dim: bool | None = None, dismiss: bool | None = None, inert: bool | None = None, owner: simvx.core.ui.core.Control | None = None, initial_focus: simvx.core.ui.core.Control | None = None) → None¶
close_overlay() → None¶
position¶

‘_SpatialVecProperty(…)’

rotation¶

‘Property(…)’

scale¶

‘_SpatialVecProperty(…)’

top_level¶

‘Property(…)’

z_index¶

‘Property(…)’

z_as_relative¶

‘Property(…)’

render_layer¶

‘Property(…)’

set_render_layer(index: int, enabled: bool = True) → None¶
is_on_render_layer(index: int) → bool¶
property absolute_z_index: int¶
property rotation_degrees: float¶
property world_position: simvx.core.math.types.Vec2¶
property world_rotation: float¶
property world_scale: simvx.core.math.types.Vec2¶
property world_transform: tuple[simvx.core.math.types.Vec2, simvx.core.math.types.Vec2, float]¶
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)¶
to_global(point) → simvx.core.math.types.Vec2¶
to_local(point) → simvx.core.math.types.Vec2¶
transform_points(points: list[simvx.core.math.types.Vec2]) → list[simvx.core.math.types.Vec2]¶
wrap_screen(margin: float = 20)¶
post_processed¶

‘Property(…)’

property transform_render_dirty: bool¶
strict_errors: ClassVar[bool]¶

True

dev_checks: ClassVar[bool]¶

None

dev_warnings: ClassVar[bool]¶

None

freeze_check_interval: ClassVar[float]¶

1.0

dynamic: bool¶

False

visible¶

‘Property(…)’

update_mode¶

‘Property(…)’

drag_threshold¶

‘Property(…)’

focus_entered¶

‘Signal(…)’

focus_exited¶

‘Signal(…)’

__properties__: ClassVar[dict[str, simvx.core.descriptors.Property]]¶

None

property name: str¶
property visible_in_tree: bool¶
property input_player: simvx.core.input.players.InputPlayer¶
property input_context: simvx.core.input.contexts.InputContext | None¶
reset_error() → None¶
reparent(new_parent: simvx.core.node.Node)¶
node_at(path, default=_NO_DEFAULT)¶
find(target, *, direct: bool = False)¶
find_all(target, *, direct: bool = False)¶
expect(target, *, direct: bool = False)¶
ancestor(target)¶
walk(*, include_self: bool = True) → collections.abc.Iterator[simvx.core.node.Node]¶
property path: str¶
property is_scene_root: bool¶
add_to_group(group: str)¶
remove_from_group(group: str)¶
is_in_group(group: str) → bool¶
on_update(dt: float) → None¶
on_fixed_update(dt: float) → None¶
on_draw_3d(gizmos) → None¶
on_picked(event: simvx.core.input.events.PickEvent) → bool | None¶
on_gui_input(event: simvx.core.input.events.GuiInputEvent) → bool | None¶
start_coroutine(gen: simvx.core.descriptors.Coroutine) → simvx.core.descriptors.CoroutineHandle¶
stop_coroutine(gen_or_handle)¶
property focused: bool¶
drag_threshold_for(pointer_type: simvx.core.input.enums.PointerType | str) → float¶
grab_focus() → None¶
release_focus() → None¶
capture_pointer(pointer_id: int | None = None) → None¶
release_pointer(pointer_id: int | None = None) → None¶
property render_dirty: bool¶
clear_children()¶
destroy()¶
property destroying: bool¶
property destroyed: bool¶
call_deferred(method: collections.abc.Callable[..., Any], *args: Any) → None¶
property app¶
property tree: simvx.core.scene_tree.SceneTree¶
property physics¶
property physics_2d¶
__getitem__(key: str)¶
classmethod get_properties() → dict[str, simvx.core.descriptors.Property]¶
__repr__()¶
class simvx.ide.panels.debug_panel.VariablesTab(**kwargs)[source]¶

Bases: simvx.core.ui.core.Control

TreeView showing variable scopes with expandable nested objects.

Initialization

refresh_theme()[source]¶

Re-apply theme colours to the variables tree.

set_session(session: simvx.ide.debug_session.DebugSession)[source]¶
refresh()[source]¶

Rebuild the tree from cached scopes and variables.

on_update(dt: float)[source]¶
on_draw(renderer)[source]¶
size_x¶

‘Property(…)’

size_y¶

‘Property(…)’

min_size_x¶

‘Property(…)’

min_size_y¶

‘Property(…)’

anchor_left¶

‘Property(…)’

anchor_top¶

‘Property(…)’

anchor_right¶

‘Property(…)’

anchor_bottom¶

‘Property(…)’

margin_left¶

‘Property(…)’

margin_top¶

‘Property(…)’

margin_right¶

‘Property(…)’

margin_bottom¶

‘Property(…)’

anchor¶

‘Property(…)’

inset¶

‘Property(…)’

dismiss_on_outside_click¶

‘Property(…)’

clip_contents¶

‘Property(…)’

focus_mode¶

‘Property(…)’

tooltip¶

‘Property(…)’

pointer_filter¶

‘Property(…)’

cursor_shape¶

‘Property(…)’

pointer_types: frozenset[simvx.core.input.enums.PointerType] | None¶

None

touch_target: bool¶

False

property wants_text_input: bool¶
size_flags_horizontal¶

‘Property(…)’

size_flags_vertical¶

‘Property(…)’

stretch_ratio¶

‘Property(…)’

max_size¶

‘Property(…)’

property size: simvx.core.math.types.Vec2¶
property min_size: simvx.core.math.types.Vec2¶
content_signature() → object¶
content_uses(chars: str) → bool¶
autosize_to_content() → None¶
accepts_pointers¶

‘Property(…)’

property theme: simvx.core.ui.types.Theme | None¶
property mouse_over: bool¶
property disabled: bool¶
get_theme() → simvx.core.ui.types.Theme¶
property viewport_size: simvx.core.math.types.Vec2¶
property viewport_insets: tuple[float, float, float, float]¶
queue_redraw()¶
size_floor() → tuple[float, float]¶
get_minimum_size() → simvx.core.math.types.Vec2¶
add_child(node: simvx.core.node.T) → simvx.core.node.T¶
get_rect() → tuple[float, float, float, float]¶
get_global_rect() → tuple[float, float, float, float]¶
property focus_rect: tuple[float, float, float, float] | None¶
is_point_inside(point) → bool¶
is_hit(event: simvx.core.input.events.PointerEvent) → bool¶
classmethod __init_subclass__(**kwargs)¶
activate() → bool¶
focus_next_control()¶
focus_previous_control()¶
set_drag_preview(control: simvx.core.ui.core.Control)¶
property is_overlay_open: bool¶
show_overlay(modality: str = 'light', *, dim: bool | None = None, dismiss: bool | None = None, inert: bool | None = None, owner: simvx.core.ui.core.Control | None = None, initial_focus: simvx.core.ui.core.Control | None = None) → None¶
close_overlay() → None¶
position¶

‘_SpatialVecProperty(…)’

rotation¶

‘Property(…)’

scale¶

‘_SpatialVecProperty(…)’

top_level¶

‘Property(…)’

z_index¶

‘Property(…)’

z_as_relative¶

‘Property(…)’

render_layer¶

‘Property(…)’

set_render_layer(index: int, enabled: bool = True) → None¶
is_on_render_layer(index: int) → bool¶
property absolute_z_index: int¶
property rotation_degrees: float¶
property world_position: simvx.core.math.types.Vec2¶
property world_rotation: float¶
property world_scale: simvx.core.math.types.Vec2¶
property world_transform: tuple[simvx.core.math.types.Vec2, simvx.core.math.types.Vec2, float]¶
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)¶
to_global(point) → simvx.core.math.types.Vec2¶
to_local(point) → simvx.core.math.types.Vec2¶
transform_points(points: list[simvx.core.math.types.Vec2]) → list[simvx.core.math.types.Vec2]¶
wrap_screen(margin: float = 20)¶
post_processed¶

‘Property(…)’

property transform_render_dirty: bool¶
strict_errors: ClassVar[bool]¶

True

dev_checks: ClassVar[bool]¶

None

dev_warnings: ClassVar[bool]¶

None

freeze_check_interval: ClassVar[float]¶

1.0

dynamic: bool¶

False

visible¶

‘Property(…)’

update_mode¶

‘Property(…)’

drag_threshold¶

‘Property(…)’

focus_entered¶

‘Signal(…)’

focus_exited¶

‘Signal(…)’

__properties__: ClassVar[dict[str, simvx.core.descriptors.Property]]¶

None

property name: str¶
property visible_in_tree: bool¶
property input_player: simvx.core.input.players.InputPlayer¶
property input_context: simvx.core.input.contexts.InputContext | None¶
reset_error() → None¶
remove_child(node: simvx.core.node.Node) → None¶
reparent(new_parent: simvx.core.node.Node)¶
node_at(path, default=_NO_DEFAULT)¶
find(target, *, direct: bool = False)¶
find_all(target, *, direct: bool = False)¶
expect(target, *, direct: bool = False)¶
ancestor(target)¶
walk(*, include_self: bool = True) → collections.abc.Iterator[simvx.core.node.Node]¶
property path: str¶
property is_scene_root: bool¶
add_to_group(group: str)¶
remove_from_group(group: str)¶
is_in_group(group: str) → bool¶
on_ready() → None¶
on_enter_tree() → None¶
on_exit_tree() → None¶
on_fixed_update(dt: float) → None¶
on_draw_3d(gizmos) → None¶
on_picked(event: simvx.core.input.events.PickEvent) → bool | None¶
on_gui_input(event: simvx.core.input.events.GuiInputEvent) → bool | None¶
start_coroutine(gen: simvx.core.descriptors.Coroutine) → simvx.core.descriptors.CoroutineHandle¶
stop_coroutine(gen_or_handle)¶
property focused: bool¶
drag_threshold_for(pointer_type: simvx.core.input.enums.PointerType | str) → float¶
grab_focus() → None¶
release_focus() → None¶
capture_pointer(pointer_id: int | None = None) → None¶
release_pointer(pointer_id: int | None = None) → None¶
property render_dirty: bool¶
clear_children()¶
destroy()¶
property destroying: bool¶
property destroyed: bool¶
call_deferred(method: collections.abc.Callable[..., Any], *args: Any) → None¶
property app¶
property tree: simvx.core.scene_tree.SceneTree¶
property physics¶
property physics_2d¶
__getitem__(key: str)¶
classmethod get_properties() → dict[str, simvx.core.descriptors.Property]¶
__repr__()¶
class simvx.ide.panels.debug_panel.CallStackTab(**kwargs)[source]¶

Bases: simvx.core.ui.core.Control

List of stack frames with click-to-navigate.

Initialization

pointer_filter¶

‘Property(…)’

set_refs(state: simvx.ide.state.State, session: simvx.ide.debug_session.DebugSession)[source]¶
refresh()[source]¶
on_gui_input(event)[source]¶
on_draw(renderer)[source]¶
size_x¶

‘Property(…)’

size_y¶

‘Property(…)’

min_size_x¶

‘Property(…)’

min_size_y¶

‘Property(…)’

anchor_left¶

‘Property(…)’

anchor_top¶

‘Property(…)’

anchor_right¶

‘Property(…)’

anchor_bottom¶

‘Property(…)’

margin_left¶

‘Property(…)’

margin_top¶

‘Property(…)’

margin_right¶

‘Property(…)’

margin_bottom¶

‘Property(…)’

anchor¶

‘Property(…)’

inset¶

‘Property(…)’

dismiss_on_outside_click¶

‘Property(…)’

clip_contents¶

‘Property(…)’

focus_mode¶

‘Property(…)’

tooltip¶

‘Property(…)’

cursor_shape¶

‘Property(…)’

pointer_types: frozenset[simvx.core.input.enums.PointerType] | None¶

None

touch_target: bool¶

False

property wants_text_input: bool¶
size_flags_horizontal¶

‘Property(…)’

size_flags_vertical¶

‘Property(…)’

stretch_ratio¶

‘Property(…)’

max_size¶

‘Property(…)’

property size: simvx.core.math.types.Vec2¶
property min_size: simvx.core.math.types.Vec2¶
content_signature() → object¶
content_uses(chars: str) → bool¶
autosize_to_content() → None¶
accepts_pointers¶

‘Property(…)’

property theme: simvx.core.ui.types.Theme | None¶
property mouse_over: bool¶
property disabled: bool¶
get_theme() → simvx.core.ui.types.Theme¶
property viewport_size: simvx.core.math.types.Vec2¶
property viewport_insets: tuple[float, float, float, float]¶
queue_redraw()¶
size_floor() → tuple[float, float]¶
get_minimum_size() → simvx.core.math.types.Vec2¶
add_child(node: simvx.core.node.T) → simvx.core.node.T¶
get_rect() → tuple[float, float, float, float]¶
get_global_rect() → tuple[float, float, float, float]¶
property focus_rect: tuple[float, float, float, float] | None¶
is_point_inside(point) → bool¶
is_hit(event: simvx.core.input.events.PointerEvent) → bool¶
classmethod __init_subclass__(**kwargs)¶
activate() → bool¶
focus_next_control()¶
focus_previous_control()¶
set_drag_preview(control: simvx.core.ui.core.Control)¶
property is_overlay_open: bool¶
show_overlay(modality: str = 'light', *, dim: bool | None = None, dismiss: bool | None = None, inert: bool | None = None, owner: simvx.core.ui.core.Control | None = None, initial_focus: simvx.core.ui.core.Control | None = None) → None¶
close_overlay() → None¶
position¶

‘_SpatialVecProperty(…)’

rotation¶

‘Property(…)’

scale¶

‘_SpatialVecProperty(…)’

top_level¶

‘Property(…)’

z_index¶

‘Property(…)’

z_as_relative¶

‘Property(…)’

render_layer¶

‘Property(…)’

set_render_layer(index: int, enabled: bool = True) → None¶
is_on_render_layer(index: int) → bool¶
property absolute_z_index: int¶
property rotation_degrees: float¶
property world_position: simvx.core.math.types.Vec2¶
property world_rotation: float¶
property world_scale: simvx.core.math.types.Vec2¶
property world_transform: tuple[simvx.core.math.types.Vec2, simvx.core.math.types.Vec2, float]¶
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)¶
to_global(point) → simvx.core.math.types.Vec2¶
to_local(point) → simvx.core.math.types.Vec2¶
transform_points(points: list[simvx.core.math.types.Vec2]) → list[simvx.core.math.types.Vec2]¶
wrap_screen(margin: float = 20)¶
post_processed¶

‘Property(…)’

property transform_render_dirty: bool¶
strict_errors: ClassVar[bool]¶

True

dev_checks: ClassVar[bool]¶

None

dev_warnings: ClassVar[bool]¶

None

freeze_check_interval: ClassVar[float]¶

1.0

dynamic: bool¶

False

visible¶

‘Property(…)’

update_mode¶

‘Property(…)’

drag_threshold¶

‘Property(…)’

focus_entered¶

‘Signal(…)’

focus_exited¶

‘Signal(…)’

__properties__: ClassVar[dict[str, simvx.core.descriptors.Property]]¶

None

property name: str¶
property visible_in_tree: bool¶
property input_player: simvx.core.input.players.InputPlayer¶
property input_context: simvx.core.input.contexts.InputContext | None¶
reset_error() → None¶
remove_child(node: simvx.core.node.Node) → None¶
reparent(new_parent: simvx.core.node.Node)¶
node_at(path, default=_NO_DEFAULT)¶
find(target, *, direct: bool = False)¶
find_all(target, *, direct: bool = False)¶
expect(target, *, direct: bool = False)¶
ancestor(target)¶
walk(*, include_self: bool = True) → collections.abc.Iterator[simvx.core.node.Node]¶
property path: str¶
property is_scene_root: bool¶
add_to_group(group: str)¶
remove_from_group(group: str)¶
is_in_group(group: str) → bool¶
on_ready() → None¶
on_enter_tree() → None¶
on_exit_tree() → None¶
on_update(dt: float) → None¶
on_fixed_update(dt: float) → None¶
on_draw_3d(gizmos) → None¶
on_picked(event: simvx.core.input.events.PickEvent) → bool | None¶
start_coroutine(gen: simvx.core.descriptors.Coroutine) → simvx.core.descriptors.CoroutineHandle¶
stop_coroutine(gen_or_handle)¶
property focused: bool¶
drag_threshold_for(pointer_type: simvx.core.input.enums.PointerType | str) → float¶
grab_focus() → None¶
release_focus() → None¶
capture_pointer(pointer_id: int | None = None) → None¶
release_pointer(pointer_id: int | None = None) → None¶
property render_dirty: bool¶
clear_children()¶
destroy()¶
property destroying: bool¶
property destroyed: bool¶
call_deferred(method: collections.abc.Callable[..., Any], *args: Any) → None¶
property app¶
property tree: simvx.core.scene_tree.SceneTree¶
property physics¶
property physics_2d¶
__getitem__(key: str)¶
classmethod get_properties() → dict[str, simvx.core.descriptors.Property]¶
__repr__()¶
class simvx.ide.panels.debug_panel.WatchTab(state: simvx.ide.state.State, session: simvx.ide.debug_session.DebugSession | None, **kwargs)[source]¶

Bases: simvx.core.ui.core.Control

Watch expressions tab – evaluate expressions during debug pauses.

Initialization

pointer_filter¶

‘Property(…)’

focus_mode¶

‘Property(…)’

add_watch(expression: str)[source]¶

Add a watch expression.

remove_watch(index: int)[source]¶

Remove a watch expression by index.

on_gui_input(event)[source]¶
on_draw(renderer)[source]¶
size_x¶

‘Property(…)’

size_y¶

‘Property(…)’

min_size_x¶

‘Property(…)’

min_size_y¶

‘Property(…)’

anchor_left¶

‘Property(…)’

anchor_top¶

‘Property(…)’

anchor_right¶

‘Property(…)’

anchor_bottom¶

‘Property(…)’

margin_left¶

‘Property(…)’

margin_top¶

‘Property(…)’

margin_right¶

‘Property(…)’

margin_bottom¶

‘Property(…)’

anchor¶

‘Property(…)’

inset¶

‘Property(…)’

dismiss_on_outside_click¶

‘Property(…)’

clip_contents¶

‘Property(…)’

tooltip¶

‘Property(…)’

cursor_shape¶

‘Property(…)’

pointer_types: frozenset[simvx.core.input.enums.PointerType] | None¶

None

touch_target: bool¶

False

property wants_text_input: bool¶
size_flags_horizontal¶

‘Property(…)’

size_flags_vertical¶

‘Property(…)’

stretch_ratio¶

‘Property(…)’

max_size¶

‘Property(…)’

property size: simvx.core.math.types.Vec2¶
property min_size: simvx.core.math.types.Vec2¶
content_signature() → object¶
content_uses(chars: str) → bool¶
autosize_to_content() → None¶
accepts_pointers¶

‘Property(…)’

property theme: simvx.core.ui.types.Theme | None¶
property mouse_over: bool¶
property disabled: bool¶
get_theme() → simvx.core.ui.types.Theme¶
property viewport_size: simvx.core.math.types.Vec2¶
property viewport_insets: tuple[float, float, float, float]¶
queue_redraw()¶
size_floor() → tuple[float, float]¶
get_minimum_size() → simvx.core.math.types.Vec2¶
add_child(node: simvx.core.node.T) → simvx.core.node.T¶
get_rect() → tuple[float, float, float, float]¶
get_global_rect() → tuple[float, float, float, float]¶
property focus_rect: tuple[float, float, float, float] | None¶
is_point_inside(point) → bool¶
is_hit(event: simvx.core.input.events.PointerEvent) → bool¶
classmethod __init_subclass__(**kwargs)¶
activate() → bool¶
focus_next_control()¶
focus_previous_control()¶
set_drag_preview(control: simvx.core.ui.core.Control)¶
property is_overlay_open: bool¶
show_overlay(modality: str = 'light', *, dim: bool | None = None, dismiss: bool | None = None, inert: bool | None = None, owner: simvx.core.ui.core.Control | None = None, initial_focus: simvx.core.ui.core.Control | None = None) → None¶
close_overlay() → None¶
position¶

‘_SpatialVecProperty(…)’

rotation¶

‘Property(…)’

scale¶

‘_SpatialVecProperty(…)’

top_level¶

‘Property(…)’

z_index¶

‘Property(…)’

z_as_relative¶

‘Property(…)’

render_layer¶

‘Property(…)’

set_render_layer(index: int, enabled: bool = True) → None¶
is_on_render_layer(index: int) → bool¶
property absolute_z_index: int¶
property rotation_degrees: float¶
property world_position: simvx.core.math.types.Vec2¶
property world_rotation: float¶
property world_scale: simvx.core.math.types.Vec2¶
property world_transform: tuple[simvx.core.math.types.Vec2, simvx.core.math.types.Vec2, float]¶
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)¶
to_global(point) → simvx.core.math.types.Vec2¶
to_local(point) → simvx.core.math.types.Vec2¶
transform_points(points: list[simvx.core.math.types.Vec2]) → list[simvx.core.math.types.Vec2]¶
wrap_screen(margin: float = 20)¶
post_processed¶

‘Property(…)’

property transform_render_dirty: bool¶
strict_errors: ClassVar[bool]¶

True

dev_checks: ClassVar[bool]¶

None

dev_warnings: ClassVar[bool]¶

None

freeze_check_interval: ClassVar[float]¶

1.0

dynamic: bool¶

False

visible¶

‘Property(…)’

update_mode¶

‘Property(…)’

drag_threshold¶

‘Property(…)’

focus_entered¶

‘Signal(…)’

focus_exited¶

‘Signal(…)’

__properties__: ClassVar[dict[str, simvx.core.descriptors.Property]]¶

None

property name: str¶
property visible_in_tree: bool¶
property input_player: simvx.core.input.players.InputPlayer¶
property input_context: simvx.core.input.contexts.InputContext | None¶
reset_error() → None¶
remove_child(node: simvx.core.node.Node) → None¶
reparent(new_parent: simvx.core.node.Node)¶
node_at(path, default=_NO_DEFAULT)¶
find(target, *, direct: bool = False)¶
find_all(target, *, direct: bool = False)¶
expect(target, *, direct: bool = False)¶
ancestor(target)¶
walk(*, include_self: bool = True) → collections.abc.Iterator[simvx.core.node.Node]¶
property path: str¶
property is_scene_root: bool¶
add_to_group(group: str)¶
remove_from_group(group: str)¶
is_in_group(group: str) → bool¶
on_ready() → None¶
on_enter_tree() → None¶
on_exit_tree() → None¶
on_update(dt: float) → None¶
on_fixed_update(dt: float) → None¶
on_draw_3d(gizmos) → None¶
on_picked(event: simvx.core.input.events.PickEvent) → bool | None¶
start_coroutine(gen: simvx.core.descriptors.Coroutine) → simvx.core.descriptors.CoroutineHandle¶
stop_coroutine(gen_or_handle)¶
property focused: bool¶
drag_threshold_for(pointer_type: simvx.core.input.enums.PointerType | str) → float¶
grab_focus() → None¶
release_focus() → None¶
capture_pointer(pointer_id: int | None = None) → None¶
release_pointer(pointer_id: int | None = None) → None¶
property render_dirty: bool¶
clear_children()¶
destroy()¶
property destroying: bool¶
property destroyed: bool¶
call_deferred(method: collections.abc.Callable[..., Any], *args: Any) → None¶
property app¶
property tree: simvx.core.scene_tree.SceneTree¶
property physics¶
property physics_2d¶
__getitem__(key: str)¶
classmethod get_properties() → dict[str, simvx.core.descriptors.Property]¶
__repr__()¶
class simvx.ide.panels.debug_panel.BreakpointsTab(**kwargs)[source]¶

Bases: simvx.core.ui.core.Control

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

A middle click on a breakpoint opens its condition under the row. Enter or moving focus away commits the condition; Escape abandons it.

Initialization

pointer_filter¶

‘Property(…)’

set_state(state: simvx.ide.state.State)[source]¶
set_session(session: simvx.ide.debug_session.DebugSession)[source]¶
set_condition(path: str, line: int, condition: str)[source]¶

Set or clear a condition on a breakpoint (delegates to DebugSession).

get_condition(path: str, line: int) → str[source]¶

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

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

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

refresh()[source]¶
on_update(dt: float)[source]¶
on_gui_input(event)[source]¶
on_draw(renderer)[source]¶
size_x¶

‘Property(…)’

size_y¶

‘Property(…)’

min_size_x¶

‘Property(…)’

min_size_y¶

‘Property(…)’

anchor_left¶

‘Property(…)’

anchor_top¶

‘Property(…)’

anchor_right¶

‘Property(…)’

anchor_bottom¶

‘Property(…)’

margin_left¶

‘Property(…)’

margin_top¶

‘Property(…)’

margin_right¶

‘Property(…)’

margin_bottom¶

‘Property(…)’

anchor¶

‘Property(…)’

inset¶

‘Property(…)’

dismiss_on_outside_click¶

‘Property(…)’

clip_contents¶

‘Property(…)’

focus_mode¶

‘Property(…)’

tooltip¶

‘Property(…)’

cursor_shape¶

‘Property(…)’

pointer_types: frozenset[simvx.core.input.enums.PointerType] | None¶

None

touch_target: bool¶

False

property wants_text_input: bool¶
size_flags_horizontal¶

‘Property(…)’

size_flags_vertical¶

‘Property(…)’

stretch_ratio¶

‘Property(…)’

max_size¶

‘Property(…)’

property size: simvx.core.math.types.Vec2¶
property min_size: simvx.core.math.types.Vec2¶
content_signature() → object¶
content_uses(chars: str) → bool¶
autosize_to_content() → None¶
accepts_pointers¶

‘Property(…)’

property theme: simvx.core.ui.types.Theme | None¶
property mouse_over: bool¶
property disabled: bool¶
get_theme() → simvx.core.ui.types.Theme¶
property viewport_size: simvx.core.math.types.Vec2¶
property viewport_insets: tuple[float, float, float, float]¶
queue_redraw()¶
size_floor() → tuple[float, float]¶
get_minimum_size() → simvx.core.math.types.Vec2¶
add_child(node: simvx.core.node.T) → simvx.core.node.T¶
get_rect() → tuple[float, float, float, float]¶
get_global_rect() → tuple[float, float, float, float]¶
property focus_rect: tuple[float, float, float, float] | None¶
is_point_inside(point) → bool¶
is_hit(event: simvx.core.input.events.PointerEvent) → bool¶
classmethod __init_subclass__(**kwargs)¶
activate() → bool¶
focus_next_control()¶
focus_previous_control()¶
set_drag_preview(control: simvx.core.ui.core.Control)¶
property is_overlay_open: bool¶
show_overlay(modality: str = 'light', *, dim: bool | None = None, dismiss: bool | None = None, inert: bool | None = None, owner: simvx.core.ui.core.Control | None = None, initial_focus: simvx.core.ui.core.Control | None = None) → None¶
close_overlay() → None¶
position¶

‘_SpatialVecProperty(…)’

rotation¶

‘Property(…)’

scale¶

‘_SpatialVecProperty(…)’

top_level¶

‘Property(…)’

z_index¶

‘Property(…)’

z_as_relative¶

‘Property(…)’

render_layer¶

‘Property(…)’

set_render_layer(index: int, enabled: bool = True) → None¶
is_on_render_layer(index: int) → bool¶
property absolute_z_index: int¶
property rotation_degrees: float¶
property world_position: simvx.core.math.types.Vec2¶
property world_rotation: float¶
property world_scale: simvx.core.math.types.Vec2¶
property world_transform: tuple[simvx.core.math.types.Vec2, simvx.core.math.types.Vec2, float]¶
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)¶
to_global(point) → simvx.core.math.types.Vec2¶
to_local(point) → simvx.core.math.types.Vec2¶
transform_points(points: list[simvx.core.math.types.Vec2]) → list[simvx.core.math.types.Vec2]¶
wrap_screen(margin: float = 20)¶
post_processed¶

‘Property(…)’

property transform_render_dirty: bool¶
strict_errors: ClassVar[bool]¶

True

dev_checks: ClassVar[bool]¶

None

dev_warnings: ClassVar[bool]¶

None

freeze_check_interval: ClassVar[float]¶

1.0

dynamic: bool¶

False

visible¶

‘Property(…)’

update_mode¶

‘Property(…)’

drag_threshold¶

‘Property(…)’

focus_entered¶

‘Signal(…)’

focus_exited¶

‘Signal(…)’

__properties__: ClassVar[dict[str, simvx.core.descriptors.Property]]¶

None

property name: str¶
property visible_in_tree: bool¶
property input_player: simvx.core.input.players.InputPlayer¶
property input_context: simvx.core.input.contexts.InputContext | None¶
reset_error() → None¶
remove_child(node: simvx.core.node.Node) → None¶
reparent(new_parent: simvx.core.node.Node)¶
node_at(path, default=_NO_DEFAULT)¶
find(target, *, direct: bool = False)¶
find_all(target, *, direct: bool = False)¶
expect(target, *, direct: bool = False)¶
ancestor(target)¶
walk(*, include_self: bool = True) → collections.abc.Iterator[simvx.core.node.Node]¶
property path: str¶
property is_scene_root: bool¶
add_to_group(group: str)¶
remove_from_group(group: str)¶
is_in_group(group: str) → bool¶
on_ready() → None¶
on_enter_tree() → None¶
on_exit_tree() → None¶
on_fixed_update(dt: float) → None¶
on_draw_3d(gizmos) → None¶
on_picked(event: simvx.core.input.events.PickEvent) → bool | None¶
start_coroutine(gen: simvx.core.descriptors.Coroutine) → simvx.core.descriptors.CoroutineHandle¶
stop_coroutine(gen_or_handle)¶
property focused: bool¶
drag_threshold_for(pointer_type: simvx.core.input.enums.PointerType | str) → float¶
grab_focus() → None¶
release_focus() → None¶
capture_pointer(pointer_id: int | None = None) → None¶
release_pointer(pointer_id: int | None = None) → None¶
property render_dirty: bool¶
clear_children()¶
destroy()¶
property destroying: bool¶
property destroyed: bool¶
call_deferred(method: collections.abc.Callable[..., Any], *args: Any) → None¶
property app¶
property tree: simvx.core.scene_tree.SceneTree¶
property physics¶
property physics_2d¶
__getitem__(key: str)¶
classmethod get_properties() → dict[str, simvx.core.descriptors.Property]¶
__repr__()¶
class simvx.ide.panels.debug_panel.DebugPanel(state: simvx.ide.state.State, debug_session: simvx.ide.debug_session.DebugSession, **kwargs)[source]¶

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

refresh_theme()[source]¶

Re-apply theme colours after a theme change.

on_update(dt: float)[source]¶
on_draw(renderer)[source]¶
style¶

‘ThemeStyleBox(…)’

property bg_colour¶
property border_colour¶
property border_width¶
get_minimum_size() → simvx.core.math.types.Vec2¶
size_x¶

‘Property(…)’

size_y¶

‘Property(…)’

min_size_x¶

‘Property(…)’

min_size_y¶

‘Property(…)’

anchor_left¶

‘Property(…)’

anchor_top¶

‘Property(…)’

anchor_right¶

‘Property(…)’

anchor_bottom¶

‘Property(…)’

margin_left¶

‘Property(…)’

margin_top¶

‘Property(…)’

margin_right¶

‘Property(…)’

margin_bottom¶

‘Property(…)’

anchor¶

‘Property(…)’

inset¶

‘Property(…)’

dismiss_on_outside_click¶

‘Property(…)’

clip_contents¶

‘Property(…)’

focus_mode¶

‘Property(…)’

tooltip¶

‘Property(…)’

pointer_filter¶

‘Property(…)’

cursor_shape¶

‘Property(…)’

pointer_types: frozenset[simvx.core.input.enums.PointerType] | None¶

None

touch_target: bool¶

False

property wants_text_input: bool¶
size_flags_horizontal¶

‘Property(…)’

size_flags_vertical¶

‘Property(…)’

stretch_ratio¶

‘Property(…)’

max_size¶

‘Property(…)’

property size: simvx.core.math.types.Vec2¶
property min_size: simvx.core.math.types.Vec2¶
content_signature() → object¶
content_uses(chars: str) → bool¶
autosize_to_content() → None¶
accepts_pointers¶

‘Property(…)’

property theme: simvx.core.ui.types.Theme | None¶
property mouse_over: bool¶
property disabled: bool¶
get_theme() → simvx.core.ui.types.Theme¶
property viewport_size: simvx.core.math.types.Vec2¶
property viewport_insets: tuple[float, float, float, float]¶
queue_redraw()¶
size_floor() → tuple[float, float]¶
add_child(node: simvx.core.node.T) → simvx.core.node.T¶
get_rect() → tuple[float, float, float, float]¶
get_global_rect() → tuple[float, float, float, float]¶
property focus_rect: tuple[float, float, float, float] | None¶
is_point_inside(point) → bool¶
is_hit(event: simvx.core.input.events.PointerEvent) → bool¶
classmethod __init_subclass__(**kwargs)¶
activate() → bool¶
focus_next_control()¶
focus_previous_control()¶
set_drag_preview(control: simvx.core.ui.core.Control)¶
property is_overlay_open: bool¶
show_overlay(modality: str = 'light', *, dim: bool | None = None, dismiss: bool | None = None, inert: bool | None = None, owner: simvx.core.ui.core.Control | None = None, initial_focus: simvx.core.ui.core.Control | None = None) → None¶
close_overlay() → None¶
position¶

‘_SpatialVecProperty(…)’

rotation¶

‘Property(…)’

scale¶

‘_SpatialVecProperty(…)’

top_level¶

‘Property(…)’

z_index¶

‘Property(…)’

z_as_relative¶

‘Property(…)’

render_layer¶

‘Property(…)’

set_render_layer(index: int, enabled: bool = True) → None¶
is_on_render_layer(index: int) → bool¶
property absolute_z_index: int¶
property rotation_degrees: float¶
property world_position: simvx.core.math.types.Vec2¶
property world_rotation: float¶
property world_scale: simvx.core.math.types.Vec2¶
property world_transform: tuple[simvx.core.math.types.Vec2, simvx.core.math.types.Vec2, float]¶
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)¶
to_global(point) → simvx.core.math.types.Vec2¶
to_local(point) → simvx.core.math.types.Vec2¶
transform_points(points: list[simvx.core.math.types.Vec2]) → list[simvx.core.math.types.Vec2]¶
wrap_screen(margin: float = 20)¶
post_processed¶

‘Property(…)’

property transform_render_dirty: bool¶
strict_errors: ClassVar[bool]¶

True

dev_checks: ClassVar[bool]¶

None

dev_warnings: ClassVar[bool]¶

None

freeze_check_interval: ClassVar[float]¶

1.0

dynamic: bool¶

False

visible¶

‘Property(…)’

update_mode¶

‘Property(…)’

drag_threshold¶

‘Property(…)’

focus_entered¶

‘Signal(…)’

focus_exited¶

‘Signal(…)’

__properties__: ClassVar[dict[str, simvx.core.descriptors.Property]]¶

None

property name: str¶
property visible_in_tree: bool¶
property input_player: simvx.core.input.players.InputPlayer¶
property input_context: simvx.core.input.contexts.InputContext | None¶
reset_error() → None¶
remove_child(node: simvx.core.node.Node) → None¶
reparent(new_parent: simvx.core.node.Node)¶
node_at(path, default=_NO_DEFAULT)¶
find(target, *, direct: bool = False)¶
find_all(target, *, direct: bool = False)¶
expect(target, *, direct: bool = False)¶
ancestor(target)¶
walk(*, include_self: bool = True) → collections.abc.Iterator[simvx.core.node.Node]¶
property path: str¶
property is_scene_root: bool¶
add_to_group(group: str)¶
remove_from_group(group: str)¶
is_in_group(group: str) → bool¶
on_ready() → None¶
on_enter_tree() → None¶
on_exit_tree() → None¶
on_fixed_update(dt: float) → None¶
on_draw_3d(gizmos) → None¶
on_picked(event: simvx.core.input.events.PickEvent) → bool | None¶
on_gui_input(event: simvx.core.input.events.GuiInputEvent) → bool | None¶
start_coroutine(gen: simvx.core.descriptors.Coroutine) → simvx.core.descriptors.CoroutineHandle¶
stop_coroutine(gen_or_handle)¶
property focused: bool¶
drag_threshold_for(pointer_type: simvx.core.input.enums.PointerType | str) → float¶
grab_focus() → None¶
release_focus() → None¶
capture_pointer(pointer_id: int | None = None) → None¶
release_pointer(pointer_id: int | None = None) → None¶
property render_dirty: bool¶
clear_children()¶
destroy()¶
property destroying: bool¶
property destroyed: bool¶
call_deferred(method: collections.abc.Callable[..., Any], *args: Any) → None¶
property app¶
property tree: simvx.core.scene_tree.SceneTree¶
property physics¶
property physics_2d¶
__getitem__(key: str)¶
classmethod get_properties() → dict[str, simvx.core.descriptors.Property]¶
__repr__()¶