simvx.editor.save_dialog

Save Preview Dialog – Modal code preview for CST ambiguity resolution.

When the CST codegen cannot fully automate a scene-to-Python save (e.g., procedural code, complex expressions), this dialog shows the generated source for the user to review, edit, and accept before writing to disk.

Module Contents

Classes

SavePreviewDialog

Modal dialog showing generated Python code before saving.

Data

API

simvx.editor.save_dialog.log

‘getLogger(…)’

simvx.editor.save_dialog.__all__

[‘SavePreviewDialog’]

class simvx.editor.save_dialog.SavePreviewDialog(original_source: str, generated_source: str, **kwargs)[source]

Bases: simvx.core.Panel

Modal dialog showing generated Python code before saving.

Shows a diff-style preview of changes. User can:

  • Accept (save as-is)

  • Edit (modify the code in an inline editor)

  • Cancel (don’t save)

Signals: accepted: emits (final_source: str,) when user accepts the code. cancelled: emitted when user cancels the save.

Initialization

DIALOG_WIDTH

700.0

DIALOG_HEIGHT

500.0

HEADER_HEIGHT

36.0

BUTTON_HEIGHT

32.0

BUTTON_GAP

8.0

MARGIN

16.0

property source: str[source]

Current source text (may have been edited by the user).

property editing: bool[source]

Whether the user is in edit mode.

show(parent_size: simvx.core.Vec2 | None = None)[source]

Show the dialog, centering within parent_size if given.

style

‘ThemeStyleBox(…)’

property bg_colour
property border_colour
property border_width
get_minimum_size() simvx.core.math.types.Vec2
on_draw(renderer)
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_rect() tuple[float, float, float, float]
get_global_rect() tuple[float, float, float, float]
is_point_inside(point) bool
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__()