simvx.core.ui.autocomplete

Autocomplete popup widget for code completion suggestions.

Module Contents

Classes

AutocompletePopup

Floating completion popup that shows filtered suggestions near the cursor.

Data

API

simvx.core.ui.autocomplete.log

‘getLogger(…)’

simvx.core.ui.autocomplete.MAX_VISIBLE

10

simvx.core.ui.autocomplete.ITEM_HEIGHT

22.0

simvx.core.ui.autocomplete.POPUP_WIDTH

350.0

simvx.core.ui.autocomplete.KIND_COL_WIDTH

36.0

simvx.core.ui.autocomplete.SCROLLBAR_WIDTH

8.0

simvx.core.ui.autocomplete.TEXT_SCALE

0.55

simvx.core.ui.autocomplete.PADDING_X

6.0

simvx.core.ui.autocomplete.PADDING_Y

2.0

simvx.core.ui.autocomplete.BORDER

1.0

class simvx.core.ui.autocomplete.AutocompletePopup(**kwargs)[source]

Bases: simvx.core.ui.core.Control

Floating completion popup that shows filtered suggestions near the cursor.

Non-modal: the popup is a regular Control that draws on top via top_level=True. Editors keep keyboard focus while the popup is up; consumers forward navigation keys (Up/Down/Tab/Enter/Esc/PageUp/PageDown/ Home/End) to :meth:forward_key while typed characters keep flowing to the editor for live filter updates. Matches every IDE in the wild (VS Code, JetBrains, Sublime, Emacs corfu).

Initialization

property is_visible: bool[source]
show(items: list[simvx.core.ui.completion_types.CompletionItem], x: float, y: float)[source]
hide()[source]
update_filter(text: str)[source]
NAV_KEYS

‘frozenset(…)’

forward_key(event: simvx.core.ui.core.UIInputEvent) bool[source]

Consumer-side hook: forward a navigation key to the popup.

Returns True if the popup consumed the key (caller should suppress its own handling). Mark the event handled by setting event.handled.

Editors call this before processing typed characters in their own _on_gui_input::

def _on_gui_input(self, event):
    if self._autocomplete.is_visible and self._autocomplete.forward_key(event):
        return
    # ... usual editor key handling ...
is_point_inside(point) bool[source]
on_draw(renderer)[source]
size_x

‘Property(…)’

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(…)’

modal

‘Property(…)’

dismiss_on_outside_click

‘Property(…)’

pause_tree_when_modal

‘Property(…)’

top_level

‘Property(…)’

property size: simvx.core.math.types.Vec2
touch_mode: str

‘mouse’

property theme: simvx.core.ui.types.Theme | None
property mouse_over: bool
property focused: bool
property disabled: bool
get_theme() simvx.core.ui.types.Theme
queue_redraw()
get_minimum_size() simvx.core.math.types.Vec2
get_rect() tuple[float, float, float, float]
get_global_rect() tuple[float, float, float, float]
place_bottom_strip(height: float) None
place_top_strip(height: float) None
set_anchor_preset(preset: simvx.core.ui.enums.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)
show_modal()
close_modal()
position

‘_SpatialVecProperty(…)’

rotation

‘Property(…)’

scale

‘_SpatialVecProperty(…)’

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)
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, colour=None)
wrap_screen(margin: float = 20)
strict_errors: ClassVar[bool]

True

script_error_raised

‘Signal(…)’

classmethod __init_subclass__(**kwargs)
property name: str
property process_mode: simvx.core.descriptors.ProcessMode
property visible: bool
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(target: type | str, recursive: bool = True) simvx.core.node.Node | None
find_all(node_type: type, recursive: bool = True) list
walk(*, include_self: bool = True) collections.abc.Iterator[simvx.core.node.Node]
property path: str
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_process(dt: float) None
on_physics_process(dt: float) None
on_picked(event: simvx.core.events.InputEvent) None
on_unhandled_input(event: simvx.core.events.TreeInputEvent) None
start_coroutine(gen: simvx.core.descriptors.Coroutine) simvx.core.descriptors.CoroutineHandle
stop_coroutine(gen_or_handle)
clear_children()
destroy()
property app
property tree: simvx.core.scene_tree.SceneTree
__getitem__(key: str)
classmethod get_properties() dict[str, simvx.core.descriptors.Property]
__repr__()