diff --git a/crates/tek_sequencer/src/arranger_tui.rs b/crates/tek_sequencer/src/arranger_tui.rs index 62520b81..27f7fa66 100644 --- a/crates/tek_sequencer/src/arranger_tui.rs +++ b/crates/tek_sequencer/src/arranger_tui.rs @@ -3,6 +3,10 @@ use crate::*; impl Content for Arranger { type Engine = Tui; fn content (&self) -> impl Widget { + let focused = self.arrangement.focused; + let border_color = if focused{Color::Rgb(100, 110, 40)}else{Color::Rgb(70, 80, 50)}; + let title_color = if focused{Color::Rgb(150, 160, 90)}else{Color::Rgb(120, 130, 100)}; + let border = Lozenge(Style::default().bg(Color::Rgb(40, 50, 30)).fg(border_color)); Split::down( 1, row!(menu in self.menu.menus.iter() => { @@ -16,7 +20,11 @@ impl Content for Arranger { widget(&self.transport), Split::down( self.arrangement_split, - widget(&self.arrangement), + lay!( + widget(&self.arrangement).grow_y(1).border(border), + widget(&self.arrangement.size), + widget(&"[ ] Arrangement").fg(title_color).push_x(1), + ), Split::right( self.phrases_split, self.phrases.clone(), @@ -121,11 +129,15 @@ impl Content for Arrangement { fn content (&self) -> impl Widget { Layers::new(move |add|{ match self.mode { - ArrangementViewMode::Horizontal => add(&HorizontalArranger(&self)), - ArrangementViewMode::Vertical(factor) => add(&VerticalArranger(&self, factor)), + ArrangementViewMode::Horizontal => { + add(&HorizontalArranger(&self)) + }, + ArrangementViewMode::Vertical(factor) => { + add(&VerticalArranger(&self, factor)) + }, }?; let color = if self.focused{Color::Rgb(150, 160, 90)}else{Color::Rgb(120, 130, 100)}; - add(&TuiStyle::fg("Project", color).push_x(2))?; + //add(&TuiStyle::fg("Project", color).push_x(2))?; add(&self.size) }) } @@ -306,7 +318,7 @@ impl<'a> Content for VerticalArranger<'a, Tui> { else { area.clip_w(scenes_w).clip_h(header_h) }, &CORNERS)? }) })) - }).bg(bg.rgb);//.grow_y(1);//.border(border); + }).bg(bg.rgb); let color = if self.0.focused {Color::Rgb(150, 160, 90)} else {Color::Rgb(120, 130, 100)}; let size = format!("{}x{}", self.0.size.w(), self.0.size.h()); let lower_right = TuiStyle::fg(size, color).pull_x(1).align_se().fill_xy(); diff --git a/crates/tek_sequencer/src/sequencer_tui.rs b/crates/tek_sequencer/src/sequencer_tui.rs index 6c912e7d..609eaf02 100644 --- a/crates/tek_sequencer/src/sequencer_tui.rs +++ b/crates/tek_sequencer/src/sequencer_tui.rs @@ -79,7 +79,7 @@ impl Content for PhrasePool { let border = Lozenge(Style::default().bg(Color::Rgb(40, 50, 30)).fg(border_color)); let content = content.fill_xy().bg(Color::Rgb(28, 35, 25)).border(border); let title_color = if *focused {Color::Rgb(150, 160, 90)} else {Color::Rgb(120, 130, 100)}; - let title = format!("Phrases ({})", phrases.len()); + let title = format!("[ ] Phrases ({})", phrases.len()); let title = TuiStyle::fg(title, title_color).push_x(1); Layers::new(move|add|{ add(&content)?; Ok(add(&title)?) }) } @@ -260,39 +260,43 @@ impl Content for PhraseEditor { Ok(()) } ).push_x(6).align_sw(); - let border_color = if *focused{Color::Rgb(100, 110, 40)}else{Color::Rgb(70, 80, 50)}; - let title_color = if *focused{Color::Rgb(150, 160, 90)}else{Color::Rgb(120, 130, 100)}; - let border = Lozenge(Style::default().bg(Color::Rgb(40, 50, 30)).fg(border_color)); - let note_area = lay!(notes, cursor).fill_x(); - let piano_roll = row!(keys, note_area).fill_x(); - let content = piano_roll.bg(Color::Rgb(40, 50, 30)).border(border); - let content = lay!(content, playhead); - let mut upper_left = String::from("Sequencer"); + let border_color = if *focused{Color::Rgb(100, 110, 40)}else{Color::Rgb(70, 80, 50)}; + let title_color = if *focused{Color::Rgb(150, 160, 90)}else{Color::Rgb(120, 130, 100)}; + let border = Lozenge(Style::default().bg(Color::Rgb(40, 50, 30)).fg(border_color)); + let note_area = lay!(notes, cursor).fill_x(); + let piano_roll = row!(keys, note_area).fill_x(); + let content = piano_roll.bg(Color::Rgb(40, 50, 30)).border(border); + let content = lay!(content, playhead); + let mut upper_left = format!("[ ] Sequencer"); if let Some(phrase) = phrase { upper_left = format!("{upper_left}: {}", phrase.read().unwrap().name); } - let mut upper_right = format!("Zoom: {} (+{}:{}*{}|{})", - pulses_to_name(time_scale), - time_start, time_point.unwrap_or(0), - time_scale, time_clamp.unwrap_or(0), - ); - if *focused && *entered { - upper_right = format!("Note: {} (+{}:{}|{}) {upper_right}", - pulses_to_name(*note_len), - note_start, - note_point.unwrap_or(0), - note_clamp.unwrap_or(0), - ); - } - let lower_right = format!( - "{{{}x{}}}", + let mut lower_right = format!( + "┤{}x{}├", self.width.load(Ordering::Relaxed), self.height.load(Ordering::Relaxed), ); + lower_right = format!("┤Zoom: {}├─{lower_right}", pulses_to_name(time_scale)); + //lower_right = format!("Zoom: {} (+{}:{}*{}|{})", + //pulses_to_name(time_scale), + //time_start, time_point.unwrap_or(0), + //time_scale, time_clamp.unwrap_or(0), + //); + if *focused && *entered { + lower_right = format!("┤Note: {} {}├─{lower_right}", + self.note_axis.read().unwrap().point.unwrap(), + pulses_to_name(*note_len)); + //lower_right = format!("Note: {} (+{}:{}|{}) {upper_right}", + //pulses_to_name(*note_len), + //note_start, + //note_point.unwrap_or(0), + //note_clamp.unwrap_or(0), + //); + } lay!( content, TuiStyle::fg(upper_left.to_string(), title_color).push_x(1).align_nw().fill_xy(), - TuiStyle::fg(upper_right.to_string(), title_color).pull_x(1).align_ne().fill_xy(), + //TuiStyle::fg(upper_right.to_string(), title_color).pull_x(1).align_ne().fill_xy(), TuiStyle::fg(lower_right.to_string(), title_color).pull_x(1).align_se().fill_xy(), ) }