"""
MIDI File group widget - Load and Save buttons.
"""
from __future__ import annotations
from typing import TYPE_CHECKING
from PySide6.QtCore import QMargins
from PySide6.QtWidgets import QGroupBox, QPushButton
from jdxi_editor.core.jdxi import JDXi
from jdxi_editor.midi.playback.state import MidiPlaybackState
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
if TYPE_CHECKING:
from jdxi_editor.ui.editors.midi_player.editor import MidiFilePlayer
[docs]
class MidiFileGroup(JDXiMidiGroup):
"""MIDI File group: Load and Save buttons."""
def __init__(
self,
parent: "MidiFilePlayer",
midi_state: MidiPlaybackState | None = None,
):
super().__init__(parent=parent, midi_state=midi_state)
self.setup_ui()
[docs]
def _build_group(self) -> QGroupBox:
"""Build the MIDI File group with Load and Save buttons."""
load_label_row, self.load_button = create_jdxi_button_with_label_from_spec(
self.specs["buttons"]["load_midi_file"], checkable=False
)
save_label_row, self.save_button = create_jdxi_button_with_label_from_spec(
self.specs["buttons"]["save_midi_file"], checkable=False
)
layout = create_layout_with_items(
items=[
load_label_row,
self.load_button,
save_label_row,
self.save_button,
],
vertical=False,
start_stretch=True,
end_stretch=True,
margins=self.margins,
spacing=self.spacing,
)
group, _ = create_group_with_layout("MIDI File", layout=layout)
return group