Source code for jdxi_editor.ui.windows.jdxi.containers.parts

from PySide6.QtCore import Qt
from PySide6.QtWidgets import QButtonGroup, QLabel, QVBoxLayout, QWidget

from jdxi_editor.jdxi.style import JDXiStyle
from jdxi_editor.jdxi.synth.type import JDXiSynth
from jdxi_editor.ui.windows.jdxi.dimensions import JDXiDimensions
from jdxi_editor.ui.windows.jdxi.helpers.button_row import create_button_row


[docs] def create_parts_container( parent_widget, on_open_d1, on_open_d2, on_open_drums, on_open_analog, on_open_arp, on_select_synth, ): """Create the Parts Select container widget""" parts_container = QWidget(parent_widget) parts_container.setGeometry( JDXiDimensions.PARTS_X, JDXiDimensions.PARTS_Y, JDXiDimensions.PARTS_WIDTH, JDXiDimensions.PARTS_HEIGHT, ) parts_layout = QVBoxLayout(parts_container) parts_layout.setSpacing(3) parts_label = QLabel("Parts Select") parts_label.setStyleSheet(JDXiStyle.PARTS_SELECT) parts_label.setAlignment(Qt.AlignmentFlag.AlignCenter) parts_layout.addWidget(parts_label) digital1_row, digital1_button = create_button_row("Digital Synth 1", on_open_d1) digital2_row, digital2_button = create_button_row("Digital Synth 2", on_open_d2) drums_row, drums_button = create_button_row("Drums", on_open_drums) analog_row, analog_button = create_button_row("Analog Synth", on_open_analog) arp_row, arp_button = create_button_row("Arpeggiator", on_open_arp) # Connect buttons to synth selector analog_button.clicked.connect(lambda: on_select_synth(JDXiSynth.ANALOG_SYNTH)) digital1_button.clicked.connect(lambda: on_select_synth(JDXiSynth.DIGITAL_SYNTH_1)) digital2_button.clicked.connect(lambda: on_select_synth(JDXiSynth.DIGITAL_SYNTH_2)) drums_button.clicked.connect(lambda: on_select_synth(JDXiSynth.DRUM_KIT)) # Button group ensures one active selection button_group = QButtonGroup() for b in [digital1_button, digital2_button, analog_button, drums_button]: button_group.addButton(b) button_group.setExclusive(True) for row in [digital1_row, digital2_row, drums_row, analog_row, arp_row]: parts_layout.addLayout(row) parts_container.setStyleSheet(JDXiStyle.TRANSPARENT) return parts_container, { "digital1": digital1_button, "digital2": digital2_button, "analog": analog_button, "drums": drums_button, "arp": arp_button, }