Source code for jdxi_editor.ui.widgets.button.waveform.waveform
"""
Waveform Button
"""
from PySide6.QtCore import Signal
from PySide6.QtWidgets import QPushButton, QWidget
from jdxi_editor.midi.wave.form import Waveform
[docs]
class WaveformButton(QPushButton):
"""Button for selecting oscillator waveform"""
def __init__(
self, waveform: Waveform, style: str = "digital", parent: QWidget = None
):
"""Initialize waveform button
Args:
waveform: Waveform enum value
parent: Parent widget
"""
super().__init__(parent)
self.setText(waveform.display_name)
self.setCheckable(True)
self.clicked.connect(self._on_clicked)
# Style
self.setMinimumWidth(60)
[docs]
def _on_clicked(self) -> None:
"""Handle button click"""
if self.isChecked():
self.waveform_selected.emit(self.waveform)
[docs]
def setValue(self, value: int) -> None:
"""Set the button's checked state based on a MIDI value."""
try:
selected_waveform = Waveform.from_midi_value(value)
self.setChecked(selected_waveform == self.waveform)
except ValueError:
self.setChecked(False)