more status bar

This commit is contained in:
🪞👃🪞 2024-10-19 01:20:16 +03:00
parent 3010c9ef5d
commit 9abd0b7c50
2 changed files with 31 additions and 18 deletions

View file

@ -39,7 +39,8 @@ pub enum ArrangerStatusBar {
ArrangementScene, ArrangementScene,
ArrangementClip, ArrangementClip,
PhrasePool, PhrasePool,
PhraseEditor, PhraseView,
PhraseEdit,
} }
/// Represents the tracks and scenes of the composition. /// Represents the tracks and scenes of the composition.
pub struct Arrangement<E: Engine> { pub struct Arrangement<E: Engine> {
@ -161,15 +162,18 @@ impl<E: Engine> Arranger<E> {
/// Update status bar /// Update status bar
pub fn update_status (&mut self) { pub fn update_status (&mut self) {
self.status = match self.focused() { self.status = match self.focused() {
ArrangerFocus::Transport => ArrangerStatusBar::Transport, ArrangerFocus::Transport => ArrangerStatusBar::Transport,
ArrangerFocus::Arrangement => match self.arrangement.selected { ArrangerFocus::Arrangement => match self.arrangement.selected {
ArrangementFocus::Mix => ArrangerStatusBar::ArrangementMix, ArrangementFocus::Mix => ArrangerStatusBar::ArrangementMix,
ArrangementFocus::Track(_) => ArrangerStatusBar::ArrangementTrack, ArrangementFocus::Track(_) => ArrangerStatusBar::ArrangementTrack,
ArrangementFocus::Scene(_) => ArrangerStatusBar::ArrangementScene, ArrangementFocus::Scene(_) => ArrangerStatusBar::ArrangementScene,
ArrangementFocus::Clip(_, _) => ArrangerStatusBar::ArrangementClip, ArrangementFocus::Clip(_, _) => ArrangerStatusBar::ArrangementClip,
}, },
ArrangerFocus::PhrasePool => ArrangerStatusBar::PhrasePool, ArrangerFocus::PhrasePool => ArrangerStatusBar::PhrasePool,
ArrangerFocus::PhraseEditor => ArrangerStatusBar::PhraseEditor, ArrangerFocus::PhraseEditor => match self.editor.entered {
true => ArrangerStatusBar::PhraseEdit,
false => ArrangerStatusBar::PhraseView,
},
} }
} }
} }

View file

@ -26,22 +26,31 @@ impl Content for ArrangerStatusBar {
type Engine = Tui; type Engine = Tui;
fn content (&self) -> impl Widget<Engine = Tui> { fn content (&self) -> impl Widget<Engine = Tui> {
let label = match self { let label = match self {
Self::Transport => "TRANSPORT", Self::Transport => "TRANSPORT",
Self::ArrangementMix => "COMPOSITION", Self::ArrangementMix => "PROJECT",
Self::ArrangementTrack => "TRACK", Self::ArrangementTrack => "TRACK",
Self::ArrangementScene => "SCENE", Self::ArrangementScene => "SCENE",
Self::ArrangementClip => "CLIP", Self::ArrangementClip => "CLIP",
Self::PhrasePool => "PHRASES", Self::PhrasePool => "SEQ LIST",
Self::PhraseEditor => "SEQUENCER", Self::PhraseView => "SEQ VIEW",
Self::PhraseEdit => "SEQ EDIT",
}; };
let label = TuiStyle::bg(format!(" {label} "), Color::Rgb(150, 160, 90)) let label = TuiStyle::bg(format!(" {label} "), Color::Rgb(150, 160, 90))
.fg(Color::Rgb(0, 0, 0)) .fg(Color::Rgb(0, 0, 0))
.bold(true); .bold(true);
row!(label, " ", match self { row!(label, " ", match self {
Self::ArrangementMix =>
"[<>]Resize arranger",
Self::ArrangementClip => Self::ArrangementClip =>
"[G]et [S]et [A]dd [I]nsert [D]uplicate [E]dit [C]olor [,.]Choose", "[G]et [S]et [A]dd [I]nsert [D]uplicate [E]dit [C]olor re[N]ame [,.]Choose",
Self::ArrangementTrack =>
"[,.]Resize [<>]Move",
Self::PhrasePool => Self::PhrasePool =>
"[A]ppend [I]nsert [D]uplicate [C]olor re[N]ame leng[T]h [,.]Move [<>]Resize", "[A]ppend [I]nsert [D]uplicate [C]olor re[N]ame leng[T]h [,.]Move [<>]Resize list",
Self::PhraseView =>
"[Enter]Edit notes [Arrows/PgUp/PgDn]Scroll",
Self::PhraseEdit =>
"[Esc]Exit edit mode [A]ppend [S]et",
_ => "" _ => ""
}) })
} }
@ -132,7 +141,7 @@ impl<'a> Content for VerticalArranger<'a, Tui> {
// scene titles // scene titles
let scene_name = |scene, playing: bool, height|row!( let scene_name = |scene, playing: bool, height|row!(
if playing { " " } else { " " }, if playing { " " } else { " " },
(scene as &Scene).name.read().unwrap().as_str(), (scene as &Scene).name.read().unwrap().as_str(),
).fixed_xy(offset.saturating_sub(1), height); ).fixed_xy(offset.saturating_sub(1), height);