Refactoring

This commit is contained in:
2026-01-20 02:48:09 +01:00
parent ce0014020f
commit a81716cbd5
18 changed files with 1197 additions and 53253 deletions

View File

@@ -4,16 +4,18 @@ use ratatui::text::{Line, Span};
use ratatui::widgets::{Block, Borders, Paragraph};
use ratatui::Frame;
use crate::app::{App, PatternsViewLevel};
use crate::app::App;
use crate::sequencer::SequencerSnapshot;
use crate::state::PatternsViewLevel;
pub fn render(frame: &mut Frame, app: &App, area: Rect) {
pub fn render(frame: &mut Frame, app: &App, snapshot: &SequencerSnapshot, area: Rect) {
match app.patterns_view_level {
PatternsViewLevel::Banks => render_banks(frame, app, area),
PatternsViewLevel::Patterns { bank } => render_patterns(frame, app, area, bank),
PatternsViewLevel::Banks => render_banks(frame, app, snapshot, area),
PatternsViewLevel::Patterns { bank } => render_patterns(frame, app, snapshot, area, bank),
}
}
fn render_banks(frame: &mut Frame, app: &App, area: Rect) {
fn render_banks(frame: &mut Frame, app: &App, snapshot: &SequencerSnapshot, area: Rect) {
let block = Block::default()
.borders(Borders::ALL)
.border_style(Style::new().fg(Color::Rgb(100, 160, 180)))
@@ -30,7 +32,7 @@ fn render_banks(frame: &mut Frame, app: &App, area: Rect) {
return;
}
let banks_with_playback: Vec<usize> = app
let banks_with_playback: Vec<usize> = snapshot
.slot_data
.iter()
.filter(|s| s.active)
@@ -44,10 +46,23 @@ fn render_banks(frame: &mut Frame, app: &App, area: Rect) {
.map(|b| b.name.as_deref())
.collect();
render_grid(frame, inner, app.patterns_cursor, app.editor_ctx.bank, &banks_with_playback, &bank_names);
render_grid(
frame,
inner,
app.patterns_cursor,
app.editor_ctx.bank,
&banks_with_playback,
&bank_names,
);
}
fn render_patterns(frame: &mut Frame, app: &App, area: Rect, bank: usize) {
fn render_patterns(
frame: &mut Frame,
app: &App,
snapshot: &SequencerSnapshot,
area: Rect,
bank: usize,
) {
let bank_name = app.project.banks[bank].name.as_deref();
let title_text = match bank_name {
Some(name) => format!("{name} Patterns"),
@@ -74,7 +89,7 @@ fn render_patterns(frame: &mut Frame, app: &App, area: Rect, bank: usize) {
return;
}
let playing_patterns: Vec<usize> = app
let playing_patterns: Vec<usize> = snapshot
.slot_data
.iter()
.filter(|s| s.active && s.bank == bank)
@@ -93,7 +108,17 @@ fn render_patterns(frame: &mut Frame, app: &App, area: Rect, bank: usize) {
.map(|p| p.name.as_deref())
.collect();
render_pattern_grid(frame, app, inner, bank, app.patterns_cursor, edit_pattern, &playing_patterns, &pattern_names);
render_pattern_grid(
frame,
app,
snapshot,
inner,
bank,
app.patterns_cursor,
edit_pattern,
&playing_patterns,
&pattern_names,
);
}
fn render_grid(
@@ -169,6 +194,7 @@ fn render_grid(
fn render_pattern_grid(
frame: &mut Frame,
app: &App,
snapshot: &SequencerSnapshot,
area: Rect,
bank: usize,
cursor: usize,
@@ -191,7 +217,7 @@ fn render_pattern_grid(
let is_cursor = idx == cursor;
let is_edit = idx == edit_pos;
let is_playing = playing_positions.contains(&idx);
let queued = app.is_pattern_queued(bank, idx);
let queued = app.is_pattern_queued(bank, idx, snapshot);
let (bg, fg, prefix) = match (is_cursor, is_playing, queued) {
(true, _, _) => (Color::Cyan, Color::Black, ""),