Source code for jdxi_editor.ui.editors.pattern.helper

from PySide6.QtWidgets import QPushButton, QSpinBox

from jdxi_editor.core.jdxi import JDXi
from jdxi_editor.ui.editors.pattern.models import NoteButtonAttrs
from jdxi_editor.ui.widgets.pattern.measure_widget import PatternMeasureWidget
from jdxi_editor.ui.widgets.pattern.sequencer_button import SequencerButton
from picomidi.ui.widget.button.note import NoteButtonEvent


[docs] def reset_button(button: SequencerButton): """reset the Sequencer button""" button.note_spec = NoteButtonEvent() update_button_state(button, False)
[docs] def reset_measure(measure: PatternMeasureWidget): for r in range(4): for btn in measure.buttons[r]: reset_button(btn)
[docs] def _note_spec_from_button(button) -> NoteButtonEvent: """Build NoteButtonSpec from button NOTE/NOTE_DURATION/NOTE_VELOCITY.""" return NoteButtonEvent( note=getattr(button, NoteButtonAttrs.NOTE, None), duration_ms=int(getattr(button, NoteButtonAttrs.NOTE_DURATION, 120) or 120), velocity=getattr(button, NoteButtonAttrs.NOTE_VELOCITY, 100) or 100, )
[docs] def get_button_note_spec(button) -> NoteButtonEvent: """Return the effective NoteButtonSpec (from attribute or built from attrs).""" spec = getattr(button, "note_spec", None) if spec is not None: return spec return _note_spec_from_button(button)
[docs] def sync_button_note_spec(button) -> None: """Update button.note_spec from NOTE, NOTE_DURATION, NOTE_VELOCITY.""" button.note_spec = _note_spec_from_button(button)
[docs] def update_button_state( button: QPushButton, checked_state: bool | None = None, enabled_state: bool | None = None, ): previous = button.blockSignals(True) if enabled_state is not None: button.setEnabled(enabled_state) if checked_state is not None: button.setChecked(checked_state) button.blockSignals(previous)
[docs] def set_spinbox_value(spinbox: QSpinBox, value: int): """set spinbox value safely""" spinbox.blockSignals(True) spinbox.setValue(value) spinbox.blockSignals(False)
[docs] def set_sequencer_style( btn: SequencerButton, is_current: bool = False, checked: bool = False ): """set sequencer style""" btn.setStyleSheet( JDXi.UI.Style.generate_sequencer_button_style( is_checked=checked, is_current=is_current, is_selected_bar=True ) )