jdxi_editor.ui.widgets.pattern.widget
Pattern Widget Module
Manages a collection of PatternMeasureWidgets and their underlying PatternMeasure data models. Acts as the main container for the pattern sequencer grid.
Classes
Configuration for PatternWidget |
|
Main pattern widget containing multiple measures. |
Module Contents
- class jdxi_editor.ui.widgets.pattern.widget.PatternWidget(config: PatternConfig = None, parent: PySide6.QtWidgets.QWidget | None = None)[source]
Bases:
PySide6.QtWidgets.QWidgetMain pattern widget containing multiple measures.
Manages: - Collection of PatternMeasureWidget (UI) and PatternMeasure (data model) - Synchronization between UI and data model - Measure selection and navigation - Pattern-wide operations (copy, paste, clear, etc.)
- measure_widgets: List[jdxi_editor.ui.widgets.pattern.measure_widget.PatternMeasureWidget] = [][source]
- _button_click_handler: Callable[[jdxi_editor.ui.widgets.pattern.sequencer_button.SequencerButton, bool], None] | None = None[source]
- set_header_widget(widget: PySide6.QtWidgets.QWidget) None[source]
Insert a header widget above the sequencer (e.g. row headers, presets).
- _initialize_measures(count: int) None[source]
Initialize pattern with specified number of measures.
- add_measure(copy_previous: bool = False) int[source]
Add a new measure to the pattern.
- Parameters:
copy_previous – If True, copy the previous measure’s data
- Returns:
Index of the newly added measure
- remove_measure(index: int) bool[source]
Remove a measure at the specified index.
- Parameters:
index – Measure index
- Returns:
True if successful, False otherwise
- select_measure(index: int) bool[source]
Select a measure by index.
- Parameters:
index – Measure index (0-based)
- Returns:
True if successful
- get_current_measure() picomidi.pattern.measure.PatternMeasure | None[source]
Get the current selected measure data model.
- get_current_measure_widget() jdxi_editor.ui.widgets.pattern.measure_widget.PatternMeasureWidget | None[source]
Get the current selected measure widget.
- for_each_button(callback: Callable[[int, int, jdxi_editor.ui.widgets.pattern.sequencer_button.SequencerButton], None]) None[source]
Apply callback(row, step, button) to each button in the current measure.
- highlight_step(row: int, step: int, is_checked: bool, is_current: bool) None[source]
Apply sequencer style to the button at (row, step).
- clear_buttons(reset_fn: Callable[[jdxi_editor.ui.widgets.pattern.sequencer_button.SequencerButton], None], style_fn: Callable[[jdxi_editor.ui.widgets.pattern.sequencer_button.SequencerButton], None]) None[source]
Reset and restyle each button in the current measure.
- sync_ui_to_measure(measure_index: int) None[source]
Synchronize UI buttons with measure data.
- Parameters:
measure_index – Index of measure to sync to
- sync_measure_to_ui(measure_index: int) None[source]
Synchronize measure data with UI button state.
- Parameters:
measure_index – Index of measure to sync from
- copy_measure(from_index: int, to_index: int) bool[source]
Copy measure data from one index to another.
- Parameters:
from_index – Source measure index
to_index – Destination measure index
- Returns:
True if successful
- copy_measure_section(measure_index: int, start_step: int, end_step: int) dict | None[source]
Copy a section of steps from a measure. Reads from buttons (source of truth).
Returns clipboard dict compatible with ClipboardData format: start_step, end_step, source_bar, notes_data. Also includes “rows” for backward compatibility.
- paste_measure_section(measure_index: int, start_step: int, clipboard: dict | None = None) bool[source]
Paste a section of steps into a measure. Accepts ClipboardData format (notes_data) or PatternWidget format (rows). Handles checked/active, duration/duration_ms for cross-component compatibility.
- clear_measure(measure_index: int) bool[source]
Clear all steps in a measure.
- Parameters:
measure_index – Measure index
- Returns:
True if successful
- get_measure_widgets() List[jdxi_editor.ui.widgets.pattern.measure_widget.PatternMeasureWidget][source]
Return all measure widgets (for playback, save, etc.).
- clear_and_reset(initial_count: int = 1) None[source]
Clear all measures and list; optionally add initial_count empty measures.
- _show_current_measure() None[source]
Remove previous content and show current measure widget in sequencer_display.
- _apply_sequencer_style(widget: jdxi_editor.ui.widgets.pattern.measure_widget.PatternMeasureWidget) None[source]
Apply sequencer button styling to all buttons in the measure widget.
- _wire_button_clicks(widget: jdxi_editor.ui.widgets.pattern.measure_widget.PatternMeasureWidget) None[source]
Wire button clicks to handler if set.
- set_button_click_handler(handler: Callable[[jdxi_editor.ui.widgets.pattern.sequencer_button.SequencerButton, bool], None] | None) None[source]
Set handler for button clicks; wires all current and future measure widgets.
- _copy_measure_data(source_measure: picomidi.pattern.measure.PatternMeasure, dest_measure: picomidi.pattern.measure.PatternMeasure, source_widget: jdxi_editor.ui.widgets.pattern.measure_widget.PatternMeasureWidget, dest_widget: jdxi_editor.ui.widgets.pattern.measure_widget.PatternMeasureWidget) None[source]
Internal helper to copy measure data and UI state.