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

from typing import Callable

from PySide6.QtCore import Qt
from PySide6.QtWidgets import QGridLayout, QLabel, QWidget

from jdxi_editor.core.jdxi import JDXi
from jdxi_editor.ui.widgets.editor.helper import create_button_with_tooltip


[docs] def _add_header(grid: QGridLayout, text: str, row: int, col: int, span: int): """add a header""" label = QLabel(text) label.setStyleSheet(JDXi.UI.Style.LABEL) label.setAlignment(Qt.AlignCenter) grid.addWidget(label, row, col, 1, span)
[docs] def _add_label(grid: QGridLayout, text: str, row: int, col: int): """add a label""" label = QLabel(text) label.setStyleSheet(JDXi.UI.Style.LABEL_SUB) label.setAlignment(Qt.AlignCenter) grid.addWidget(label, row, col)
[docs] def add_octave_and_arp_buttons(container: QWidget, send_octave: Callable): """Add octave and arpeggiator controls on a single aligned grid.""" root = QWidget(container) root.setGeometry( JDXi.UI.Dimensions.OCTAVE.X, JDXi.UI.Dimensions.OCTAVE.Y, JDXi.UI.Dimensions.OCTAVE.WIDTH + JDXi.UI.Dimensions.ARPEGGIATOR.WIDTH, max(JDXi.UI.Dimensions.OCTAVE.HEIGHT, JDXi.UI.Dimensions.ARPEGGIATOR.HEIGHT), ) root.setStyleSheet("background: transparent;") grid = QGridLayout(root) grid.setHorizontalSpacing(20) grid.setVerticalSpacing(6) # Column layout: # 0 = Octave Down # 1 = Octave Up # 2 = Arp On # 3 = Key Hold # Headers _add_header(grid, "OCTAVE", row=0, col=0, span=2) _add_header(grid, "ARPEGGIO", row=0, col=2, span=2) # Sub-labels _add_label(grid, "Down", row=1, col=0) _add_label(grid, "Up", row=1, col=1) _add_label(grid, "On", row=1, col=2) _add_label(grid, "Key Hold", row=1, col=3) # Buttons octave_down_button = create_button_with_tooltip( "Octave Down: Lower the keyboard pitch by one octave" ) octave_down_button.clicked.connect(lambda: send_octave(-1)) octave_up_button = create_button_with_tooltip( "Octave Up: Raise the keyboard pitch by one octave" ) octave_up_button.clicked.connect(lambda: send_octave(1)) arpeggiator_button = create_button_with_tooltip( "Arpeggiator On/Off: Enable or disable the arpeggiator" ) key_hold_button = create_button_with_tooltip( "Key Hold: Hold arpeggiator notes when enabled" ) grid.addWidget(octave_down_button, 2, 0, Qt.AlignCenter) grid.addWidget(octave_up_button, 2, 1, Qt.AlignCenter) grid.addWidget(arpeggiator_button, 2, 2, Qt.AlignCenter) grid.addWidget(key_hold_button, 2, 3, Qt.AlignCenter) return ( octave_down_button, octave_up_button, arpeggiator_button, key_hold_button, )