Refactoring
This commit is contained in:
@@ -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, ""),
|
||||
|
||||
Reference in New Issue
Block a user