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

from PySide6.QtCore import QRect, Qt
from PySide6.QtWidgets import (
    QGridLayout,
    QHBoxLayout,
    QLabel,
    QPushButton,
    QVBoxLayout,
    QWidget,
)

from jdxi_editor.jdxi.style import JDXiStyle
from jdxi_editor.jdxi.style.factory import (
    generate_sequencer_button_style,
    toggle_button_style,
)
from jdxi_editor.ui.widgets.button.sequencer import SequencerSquare
from jdxi_editor.ui.windows.jdxi.dimensions import JDXiDimensions


[docs] def create_sequencer_buttons_row(midi_helper, on_context_menu, on_save_favorite): """Create sequencer button row layout with interactive buttons""" row_layout = QHBoxLayout() sequencer_buttons = [] grid = QGridLayout() grid.setAlignment(Qt.AlignmentFlag.AlignLeft) grid.setGeometry( QRect( 1, 1, JDXiDimensions.SEQUENCER_GRID_WIDTH, JDXiDimensions.SEQUENCER_GRID_HEIGHT, ) ) grid.setHorizontalSpacing(3) for i in range(16): button = SequencerSquare(i, midi_helper) button.setFixedSize( JDXiDimensions.SEQUENCER_SQUARE_SIZE, JDXiDimensions.SEQUENCER_SQUARE_SIZE ) button.setCheckable(True) button.setChecked(False) button.setStyleSheet(generate_sequencer_button_style(button.isChecked())) button.customContextMenuRequested.connect( lambda pos, b=button: on_context_menu(pos, b) ) button.setToolTip(f"Save Favorite {i}") # initial tooltip button.toggled.connect( lambda checked, btn=button: toggle_button_style(btn, checked) ) button.clicked.connect( lambda _, index=i, but=button: on_save_favorite(but, index) ) grid.addWidget(button, 0, i) sequencer_buttons.append(button) row_layout.setAlignment(Qt.AlignmentFlag.AlignLeft) row_layout.addLayout(grid) return row_layout, sequencer_buttons
[docs] def add_sequencer_container( central_widget, # create_favorite_button_row, midi_helper, on_context_menu, on_save_favorite, ): # Beginning of sequencer section sequencer_container = QWidget(central_widget) sequencer_container.setGeometry( JDXiDimensions.SEQUENCER_CONTAINER_X, JDXiDimensions.SEQUENCER_CONTAINER_Y, JDXiDimensions.SEQUENCER_CONTAINER_WIDTH, JDXiDimensions.SEQUENCER_CONTAINER_HEIGHT, ) sequencer_container_layout = QHBoxLayout(sequencer_container) sequencer_label = QLabel("Sequencer") sequencer_label.setAlignment(Qt.AlignmentFlag.AlignCenter) sequencer_label.setStyleSheet(JDXiStyle.TRANSPARENT) sequencer_layout = QHBoxLayout() # favorites_button_row, favorite_button = create_favorite_button_row() sequencer, sequencer_buttons = create_sequencer_buttons_row( midi_helper=midi_helper, on_context_menu=on_context_menu, on_save_favorite=on_save_favorite, ) sequencer_layout.addLayout(sequencer) sequencer_layout.setAlignment(Qt.AlignmentFlag.AlignLeft) sequencer_container_layout.addLayout(sequencer_layout) return sequencer_buttons # favorite_button
[docs] def add_favorite_button_container(central_widget): """Create a circular button to set and unset favorites""" favourites_button_container = QWidget(central_widget) favourites_button_container.setGeometry( JDXiDimensions.SEQUENCER_CONTAINER_X - 50, JDXiDimensions.SEQUENCER_CONTAINER_Y, 100, 200, ) text = "Fav." row = QHBoxLayout() row.setSpacing(1) favourite_button_column = QVBoxLayout() favourite_button_column.setSpacing(1) """ button.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu) button.customContextMenuRequested.connect( lambda pos, b=button: self._show_favorite_context_menu(pos, b) ) """ # Add label with color based on text favourite_button_label = QLabel(text) # Add spacer to push button to right row.addStretch() # Add button favorite_button = QPushButton() favorite_button.setFixedSize(30, 30) favorite_button.setCheckable(True) # Style the button with brighter hover/border_pressed/selected states favorite_button.setStyleSheet(JDXiStyle.BUTTON_ROUND) row.addLayout(favourite_button_column) favourite_button_column.addWidget(favourite_button_label) favourite_button_column.addWidget(favorite_button) favourites_button_container.setLayout(row) return favorite_button