Source code for runtimepy.ui.controls

"""
A module implementing UI controls instances for configuring UI widgets.
"""

# built-in
import math
from typing import Optional

# internal
from runtimepy.channel import Controls

DEFAULT_STEPS = 64.0


[docs] def make_slider( min_val: int | float, max_val: int | float, step: int | float, default: Optional[int | float] = None, ) -> Controls: """Create dictionary data for a slider element.""" result: Controls = { "slider": {"min": min_val, "max": max_val, "step": step} } if default is not None: result["default"] = default return result
CANONICAL: dict[str, Controls] = { "phase": make_slider(-math.pi, math.pi, 90, default=0.0), "amplitude": make_slider(0.0, 2.0, 100.0, default=1.0), "period": make_slider(0.0, 0.05, 100.0, default=0.01), "steps": make_slider( DEFAULT_STEPS / 4, DEFAULT_STEPS * 4, DEFAULT_STEPS * 2, default=DEFAULT_STEPS, ), "steps_1_1000": make_slider(1, 1000, 100, default=1), } Controlslike = Controls | str
[docs] def normalize_controls(data: Controlslike) -> Controls: """Resolve a canonical control name if necessary.""" if isinstance(data, str): data = CANONICAL[data] return data