sequencer sidebar

This commit is contained in:
🪞👃🪞 2024-08-18 23:06:11 +03:00
parent 52e9613d52
commit 72afc45f5e
6 changed files with 38 additions and 25 deletions

View file

@ -11,9 +11,9 @@ pub struct ArrangerCli {
/// Whether to include a transport toolbar (default: true) /// Whether to include a transport toolbar (default: true)
#[arg(short, long)] transport: Option<bool>, #[arg(short, long)] transport: Option<bool>,
/// Number of tracks /// Number of tracks
#[arg(short = 'x', long, default_value_t = 1)] tracks: usize, #[arg(short = 'x', long, default_value_t = 8)] tracks: usize,
/// Number of scenes /// Number of scenes
#[arg(short, long, default_value_t = 1)] scenes: usize, #[arg(short, long, default_value_t = 8)] scenes: usize,
} }
impl Arranger { impl Arranger {

View file

@ -41,7 +41,7 @@ pub fn track_name_max_len (tracks: &[Sequencer]) -> usize {
pub fn track_clip_name_lengths (tracks: &[Sequencer]) -> Vec<(usize, usize)> { pub fn track_clip_name_lengths (tracks: &[Sequencer]) -> Vec<(usize, usize)> {
let mut total = 0; let mut total = 0;
let mut lengths: Vec<(usize, usize)> = tracks.iter().map(|track|{ let mut lengths: Vec<(usize, usize)> = tracks.iter().map(|track|{
let len = 2 + track.phrases let len = 4 + track.phrases
.iter() .iter()
.fold(track.name.len(), |len, phrase|{ .fold(track.name.len(), |len, phrase|{
len.max(phrase.read().unwrap().name.len()) len.max(phrase.read().unwrap().name.len())

View file

@ -44,6 +44,14 @@ render!(Arranger |self, buf, area| {
} else { } else {
Rect::default() Rect::default()
}; };
match self.focus_sequencer {
true => {
"[Arrows] Move, [A]dd, [D]elete, [R]ecord, [P]lay".blit(buf, area.x + 1, area.height - 1, None)?;
},
false => {
"[Arrows] Move, [P]lay, [R]ecord, [N]ame, [E]dit, [C-T]rack add, [C-A]dd scene".blit(buf, area.x + 1, area.y + arrangement.height, None)?;
},
}
Corners(Style::default().green().not_dim()).draw(buf, match self.focus_sequencer { Corners(Style::default().green().not_dim()).draw(buf, match self.focus_sequencer {
true => sequencer, true => sequencer,
false => arrangement, false => arrangement,

View file

@ -212,7 +212,7 @@ fn scene_row (
) { ) {
if let Some(phrase) = track.phrases.get(*clip) { if let Some(phrase) = track.phrases.get(*clip) {
let phrase = phrase.read().unwrap(); let phrase = phrase.read().unwrap();
phrase.name.blit(buf, x, y, style)?; phrase.name.blit(buf, x + 1, y, style)?;
if track.sequence == Some(*clip) { if track.sequence == Some(*clip) {
fill_bg(buf, Rect { fill_bg(buf, Rect {
x: x - 1, x: x - 1,

View file

@ -57,26 +57,19 @@ impl Sequencer {
reset: true, reset: true,
notes_in: [false;128], notes_in: [false;128],
notes_out: [false;128], notes_out: [false;128],
buffer: Default::default(), buffer: Default::default(),
keys: keys_vert(), keys: keys_vert(),
entered: false, entered: false,
focused: false, focused: false,
mode: false, mode: false,
keys_in: [false;128], keys_in: [false;128],
keys_out: [false;128], keys_out: [false;128],
phrase: None, phrase: None,
now: 0, now: 0,
ppq: 96, ppq: 96,
transport: None, transport: None,
note_axis: FixedAxis { note_axis: FixedAxis { start: 12, point: Some(36) },
start: 12, time_axis: ScaledAxis { start: 0, scale: 24, point: Some(0) },
point: Some(36)
},
time_axis: ScaledAxis {
start: 0,
scale: 24,
point: Some(0)
},
} }
} }
pub fn toggle_monitor (&mut self) { pub fn toggle_monitor (&mut self) {

View file

@ -57,7 +57,19 @@ impl Sequencer {
const H_KEYS_OFFSET: usize = 5; const H_KEYS_OFFSET: usize = 5;
fn horizontal_draw (&self, buf: &mut Buffer, area: Rect) -> Usually<()> { fn horizontal_draw (&self, buf: &mut Buffer, mut area: Rect) -> Usually<()> {
"Start 1.1.1".blit(buf, area.x + 1, area.y + 2, None)?;
"End 2.1.1".blit(buf, area.x + 1, area.y + 3, None)?;
"[ Loop off ] ".blit(buf, area.x + 1, area.y + 5, None)?;
"Loop 1.1.1".blit(buf, area.x + 1, area.y + 6, None)?;
"Length 1.0.0".blit(buf, area.x + 1, area.y + 7, None)?;
"Notes -------".blit(buf, area.x + 1, area.y + 9, None)?;
"[ /2 ] [ x2 ]".blit(buf, area.x + 1, area.y + 10, None)?;
"[ Reverse ]".blit(buf, area.x + 1, area.y + 11, None)?;
"[ Invert ]".blit(buf, area.x + 1, area.y + 12, None)?;
"[ Duplicate ]".blit(buf, area.x + 1, area.y + 13, None)?;
area.x = area.x + 16;
area.width = area.width.saturating_sub(12);
self.horizontal_keys(buf, area)?; self.horizontal_keys(buf, area)?;
if let Some(ref phrase) = self.phrase { if let Some(ref phrase) = self.phrase {
self.horizontal_timer(buf, area, phrase)?; self.horizontal_timer(buf, area, phrase)?;