jdxi_editor.ui.editors.base.lfo

Submodules

Classes

LFOBehavior

Base class for protocol classes.

LFOGroup

LFO Groups

LFOSliderGroup

Slider Group

LFOSwitchGroup

LFO Switch Group

BaseLFOSection

Abstract base class for LFO sections. All LFOs (Analog, Digital, Mod) use _create_shape_row() for exclusive wave shape selection.

Package Contents

class jdxi_editor.ui.editors.base.lfo.LFOBehavior[source]

Bases: Protocol

Base class for protocol classes.

Protocol classes are defined as:

class Proto(Protocol):
    def meth(self) -> int:
        ...

Such classes are primarily used with static type checkers that recognize structural subtyping (static duck-typing), for example:

class C:
    def meth(self) -> int:
        return 0

def func(x: Proto) -> int:
    return x.meth()

func(C())  # Passes static type check

See PEP 544 for details. Protocol classes decorated with @typing.runtime_checkable act as simple-minded runtime protocols that check only the presence of given attributes, ignoring their type signatures. Protocol classes can be generic, they are defined as:

class GenProto(Protocol[T]):
    def meth(self) -> T:
        ...
build_widgets() None[source]
setup_ui() None[source]
class jdxi_editor.ui.editors.base.lfo.LFOGroup[source]

LFO Groups

label: str = 'LFO'
slider: LFOSliderGroup
switch: LFOSwitchGroup
combo: None
class jdxi_editor.ui.editors.base.lfo.LFOSliderGroup[source]

Slider Group

DEPTH: str = 'depth'
RATE_FADE: str = 'rate_fade'
class jdxi_editor.ui.editors.base.lfo.LFOSwitchGroup[source]

LFO Switch Group

SWITCH_ROW: str = 'switch_row_widgets'
class jdxi_editor.ui.editors.base.lfo.BaseLFOSection(icons_row_type: str = IconType.ADSR, analog: bool = False, send_midi_parameter: Callable = None, address: jdxi_editor.midi.data.address.address.JDXiSysExAddress = None, midi_helper: jdxi_editor.midi.io.helper.MidiIOHelper = None)[source]

Bases: jdxi_editor.ui.widgets.editor.section_base.SectionBaseWidget

Abstract base class for LFO sections. All LFOs (Analog, Digital, Mod) use _create_shape_row() for exclusive wave shape selection.

SKIP_BASE_SETUP_UI = True
SYNTH_SPEC: jdxi_editor.midi.data.parameter.digital.spec.JDXiMidiDigital | jdxi_editor.midi.data.parameter.analog.spec.JDXiMidiAnalog = None
rate_tab_label: str = 'Rate'
depths_tab_label: str = 'Depths'
widgets: jdxi_editor.ui.editors.base.lfo.widgets.LFOWidgets | None = None
wave_shape_param: list | None = None
send_midi_parameter: Callable | None = None

Send MIDI parameter with error handling

Parameters:
  • address – RolandSysExAddress

  • param – AddressParameter the parameter to send

  • value – int value to send

Returns:

bool True on success, False otherwise

wave_shapes
lfo_shape_buttons: dict[int, PySide6.QtWidgets.QPushButton]
generate_mode_button_specs() list[source]

generate_mode_button_specs, was generate_wave_shapes

_setup_ui()[source]

Main construction pipeline

build_widgets()[source]

Build LFO widgets (switches, depth, rate). Shape row is created in _setup_ui() via _create_shape_row(), not _create_waveform_buttons().

_build_widgets() jdxi_editor.ui.editors.base.lfo.widgets.LFOWidgets[source]

Create widgets from SLIDER_GROUPS[‘controls’] (sliders, switches, combos).

_build_analog_layout(layout)[source]
_build_digital_layout(layout)[source]
_build_layout_spec()[source]

Build layout spec