"""
Panel for loading/saving presets
"""
from PySide6.QtCore import Signal
from PySide6.QtWidgets import (
QComboBox,
QHBoxLayout,
QPushButton,
QWidget,
)
from jdxi_editor.jdxi.synth.type import JDXiSynth
from jdxi_editor.midi.io.helper import MidiIOHelper
from jdxi_editor.ui.editors.io.preset import PresetEditor
[docs]
class PresetPanel(QWidget):
"""Panel for loading/saving presets"""
# Define signals
[docs]
load_clicked = Signal(int) # Emits preset number when load clicked
[docs]
save_clicked = Signal(int) # Emits preset number when save clicked
def __init__(self, midi_helper: MidiIOHelper, parent=None):
super().__init__(parent)
layout = QHBoxLayout(self)
# Preset selector
[docs]
self.preset_combo = QComboBox()
layout.addWidget(self.preset_combo)
# Load button
load_btn = QPushButton("Load")
load_btn.clicked.connect(self._on_load)
layout.addWidget(load_btn)
# Save button
save_btn = QPushButton("Save")
save_btn.clicked.connect(self._on_save)
layout.addWidget(save_btn)
# Create preset editors for each preset_type
[docs]
self.analog_editor = PresetEditor(midi_helper, self, JDXiSynth.ANALOG_SYNTH)
[docs]
self.digital_1_editor = PresetEditor(
midi_helper, self, JDXiSynth.DIGITAL_SYNTH_1
)
[docs]
self.digital_2_editor = PresetEditor(
midi_helper, self, JDXiSynth.DIGITAL_SYNTH_2
)
[docs]
self.drums_editor = PresetEditor(midi_helper, self, JDXiSynth.DRUM_KIT)
[docs]
def _on_load(self):
"""Handle load button click"""
preset_num = self.preset_combo.currentIndex()
self.load_clicked.emit(preset_num) # convert from 0-based index
[docs]
def _on_save(self):
"""Handle save button click"""
preset_num = self.preset_combo.currentIndex()
self.save_clicked.emit(preset_num)