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,
ArrangementClip,
PhrasePool,
PhraseEditor,
PhraseView,
PhraseEdit,
}
/// Represents the tracks and scenes of the composition.
pub struct Arrangement<E: Engine> {
@ -161,15 +162,18 @@ impl<E: Engine> Arranger<E> {
/// Update status bar
pub fn update_status (&mut self) {
self.status = match self.focused() {
ArrangerFocus::Transport => ArrangerStatusBar::Transport,
ArrangerFocus::Arrangement => match self.arrangement.selected {
ArrangementFocus::Mix => ArrangerStatusBar::ArrangementMix,
ArrangementFocus::Track(_) => ArrangerStatusBar::ArrangementTrack,
ArrangementFocus::Scene(_) => ArrangerStatusBar::ArrangementScene,
ArrangerFocus::Transport => ArrangerStatusBar::Transport,
ArrangerFocus::Arrangement => match self.arrangement.selected {
ArrangementFocus::Mix => ArrangerStatusBar::ArrangementMix,
ArrangementFocus::Track(_) => ArrangerStatusBar::ArrangementTrack,
ArrangementFocus::Scene(_) => ArrangerStatusBar::ArrangementScene,
ArrangementFocus::Clip(_, _) => ArrangerStatusBar::ArrangementClip,
},
ArrangerFocus::PhrasePool => ArrangerStatusBar::PhrasePool,
ArrangerFocus::PhraseEditor => ArrangerStatusBar::PhraseEditor,
ArrangerFocus::PhrasePool => ArrangerStatusBar::PhrasePool,
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;
fn content (&self) -> impl Widget<Engine = Tui> {
let label = match self {
Self::Transport => "TRANSPORT",
Self::ArrangementMix => "COMPOSITION",
Self::ArrangementTrack => "TRACK",
Self::ArrangementScene => "SCENE",
Self::ArrangementClip => "CLIP",
Self::PhrasePool => "PHRASES",
Self::PhraseEditor => "SEQUENCER",
Self::Transport => "TRANSPORT",
Self::ArrangementMix => "PROJECT",
Self::ArrangementTrack => "TRACK",
Self::ArrangementScene => "SCENE",
Self::ArrangementClip => "CLIP",
Self::PhrasePool => "SEQ LIST",
Self::PhraseView => "SEQ VIEW",
Self::PhraseEdit => "SEQ EDIT",
};
let label = TuiStyle::bg(format!(" {label} "), Color::Rgb(150, 160, 90))
.fg(Color::Rgb(0, 0, 0))
.bold(true);
row!(label, " ", match self {
Self::ArrangementMix =>
"[<>]Resize arranger",
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 =>
"[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
let scene_name = |scene, playing: bool, height|row!(
if playing { " " } else { " " },
if playing { " " } else { " " },
(scene as &Scene).name.read().unwrap().as_str(),
).fixed_xy(offset.saturating_sub(1), height);