//impl Bar for ArrangerStatus { //type State = (ArrangerFocus, ArrangerSelection, bool); //fn hotkey_fg () -> Color where Self: Sized { //TuiTheme::HOTKEY_FG //} //fn update (&mut self, (focused, selected, entered): &Self::State) { //*self = match focused { ////ArrangerFocus::Menu => { todo!() }, //ArrangerFocus::Transport(_) => ArrangerStatus::Transport, //ArrangerFocus::Arranger => match selected { //ArrangerSelection::Mix => ArrangerStatus::ArrangerMix, //ArrangerSelection::Track(_) => ArrangerStatus::ArrangerTrack, //ArrangerSelection::Scene(_) => ArrangerStatus::ArrangerScene, //ArrangerSelection::Clip(_, _) => ArrangerStatus::ArrangerClip, //}, //ArrangerFocus::Phrases => ArrangerStatus::PhrasePool, //ArrangerFocus::PhraseEditor => match entered { //true => ArrangerStatus::PhraseEdit, //false => ArrangerStatus::PhraseView, //}, //} //} //} //render!(|self: ArrangerStatus|{ //let label = match self { //Self::Transport => "TRANSPORT", //Self::ArrangerMix => "PROJECT", //Self::ArrangerTrack => "TRACK", //Self::ArrangerScene => "SCENE", //Self::ArrangerClip => "CLIP", //Self::PhrasePool => "SEQ LIST", //Self::PhraseView => "VIEW SEQ", //Self::PhraseEdit => "EDIT SEQ", //}; //let status_bar_bg = TuiTheme::status_bar_bg(); //let mode_bg = TuiTheme::mode_bg(); //let mode_fg = TuiTheme::mode_fg(); //let mode = Tui::fg(mode_fg, Tui::bg(mode_bg, Tui::bold(true, format!(" {label} ")))); //let commands = match self { //Self::ArrangerMix => Self::command(&[ //["", "c", "olor"], //["", "<>", "resize"], //["", "+-", "zoom"], //["", "n", "ame/number"], //["", "Enter", " stop all"], //]), //Self::ArrangerClip => Self::command(&[ //["", "g", "et"], //["", "s", "et"], //["", "a", "dd"], //["", "i", "ns"], //["", "d", "up"], //["", "e", "dit"], //["", "c", "olor"], //["re", "n", "ame"], //["", ",.", "select"], //["", "Enter", " launch"], //]), //Self::ArrangerTrack => Self::command(&[ //["re", "n", "ame"], //["", ",.", "resize"], //["", "<>", "move"], //["", "i", "nput"], //["", "o", "utput"], //["", "m", "ute"], //["", "s", "olo"], //["", "Del", "ete"], //["", "Enter", " stop"], //]), //Self::ArrangerScene => Self::command(&[ //["re", "n", "ame"], //["", "Del", "ete"], //["", "Enter", " launch"], //]), //Self::PhrasePool => Self::command(&[ //["", "a", "ppend"], //["", "i", "nsert"], //["", "d", "uplicate"], //["", "Del", "ete"], //["", "c", "olor"], //["re", "n", "ame"], //["leng", "t", "h"], //["", ",.", "move"], //["", "+-", "resize view"], //]), //Self::PhraseView => Self::command(&[ //["", "enter", " edit"], //["", "arrows/pgup/pgdn", " scroll"], //["", "+=", "zoom"], //]), //Self::PhraseEdit => Self::command(&[ //["", "esc", " exit"], //["", "a", "ppend"], //["", "s", "et"], //["", "][", "length"], //["", "+-", "zoom"], //]), //_ => Self::command(&[]) //}; ////let commands = commands.iter().reduce(String::new(), |s, (a, b, c)| format!("{s} {a}{b}{c}")); //Tui::bg(status_bar_bg, Fill::w(row!([mode, commands]))) //}); ///// Status bar for arranger app //#[derive(Copy, Clone, Debug)] //pub enum ArrangerStatus { //Transport, //ArrangerMix, //ArrangerTrack, //ArrangerScene, //ArrangerClip, //PhrasePool, //PhraseView, //PhraseEdit, //}