"""
Pattern File group - Load, Save, Clear buttons and drum selector combo.
"""
from __future__ import annotations
from typing import TYPE_CHECKING
from PySide6.QtCore import QMargins
from PySide6.QtWidgets import QComboBox, QGroupBox, QPushButton
from jdxi_editor.core.jdxi import JDXi
from jdxi_editor.ui.editors.helpers.widgets import (
create_jdxi_button_with_label_from_spec,
)
from jdxi_editor.ui.widgets.editor.helper import create_group_with_layout
from jdxi_editor.ui.widgets.jdxi.midi_group import JDXiMidiGroup
from picoui.helpers import create_layout_with_items
from picoui.specs.widgets import ButtonSpec
from picoui.widget.helper import create_combo_box
if TYPE_CHECKING:
from jdxi_editor.ui.editors.pattern.ui import PatternUI
[docs]
class PatternFileGroup(JDXiMidiGroup):
"""Pattern File group: Load, Save, Clear buttons + drum selector combo."""
def __init__(self, parent: "PatternUI"):
super().__init__(parent=parent, midi_state=None)
[docs]
self.drum_selector: QComboBox | None = None
self.setup_ui()
[docs]
def _build_group(self) -> QGroupBox:
"""Build the Pattern File group with Load, Save, Clear buttons and drum combo."""
load_label_row, self.load_button = create_jdxi_button_with_label_from_spec(
self.specs["buttons"]["load"], checkable=False
)
save_label_row, self.save_button = create_jdxi_button_with_label_from_spec(
self.specs["buttons"]["save"], checkable=False
)
clear_label_row, self.clear_learn_button = (
create_jdxi_button_with_label_from_spec(
self.specs["buttons"]["clear_learn"], checkable=False
)
)
self.drum_selector = create_combo_box(spec=self.specs["combos"]["drum"])
self.drum_selector.currentIndexChanged.connect(
self.parent.update_drum_rows
)
layout = create_layout_with_items(
items=[
self.load_button,
load_label_row,
self.save_button,
save_label_row,
self.clear_learn_button,
clear_label_row,
self.drum_selector,
],
vertical=False,
start_stretch=False,
end_stretch=False,
margins=self.margins,
spacing=self.spacing
)
group, _ = create_group_with_layout("Pattern", layout=layout)
return group
[docs]
def _build_specs(self):
"""Override to include combos from parent."""
base = super()._build_specs()
base["combos"] = self.parent.specs["combos"]
return base