diff --git a/crates/tek_sequencer/src/arranger.rs b/crates/tek_sequencer/src/arranger.rs index 993f077f..a697fd59 100644 --- a/crates/tek_sequencer/src/arranger.rs +++ b/crates/tek_sequencer/src/arranger.rs @@ -283,7 +283,7 @@ impl FocusGrid for Arranger { //transport.write().unwrap().entered = focused == Transport } self.arrangement.entered = focused == Arrangement; - //self.phrases.write().unwrap().entered = focused == PhrasePool; + self.phrases.write().unwrap().entered = focused == PhrasePool; self.editor.entered = focused == PhraseEditor; } } @@ -292,6 +292,7 @@ impl FocusGrid for Arranger { self.entered = false; self.arrangement.entered = false; self.editor.entered = false; + self.phrases.write().unwrap().entered = false; } } fn entered (&self) -> Option { diff --git a/crates/tek_sequencer/src/sequencer.rs b/crates/tek_sequencer/src/sequencer.rs index d5187eae..97166ed3 100644 --- a/crates/tek_sequencer/src/sequencer.rs +++ b/crates/tek_sequencer/src/sequencer.rs @@ -49,10 +49,12 @@ pub struct PhrasePool { pub phrase: usize, /// Phrases in the pool pub phrases: Vec>>, - /// Whether this widget is focused - pub focused: bool, /// Mode switch pub mode: Option, + /// Whether this widget is focused + pub focused: bool, + /// Whether this widget is entered + pub entered: bool, } /// Modes for phrase pool pub enum PhrasePoolMode { @@ -195,8 +197,9 @@ impl PhrasePool { scroll: 0, phrase: 0, phrases: vec![Arc::new(RwLock::new(Phrase::default()))], - focused: false, mode: None, + focused: false, + entered: false, } } pub fn len (&self) -> usize { self.phrases.len() } diff --git a/crates/tek_sequencer/src/sequencer_tui.rs b/crates/tek_sequencer/src/sequencer_tui.rs index cfd8c11e..5e7dc6fd 100644 --- a/crates/tek_sequencer/src/sequencer_tui.rs +++ b/crates/tek_sequencer/src/sequencer_tui.rs @@ -89,9 +89,13 @@ 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 = TuiStyle::fg(title, title_color).push_x(1); - Layers::new(move|add|{ add(&content)?; Ok(add(&title)?) }) + let upper_left = format!("[{}] Phrases", if self.entered {"■"} else {" "}); + let upper_right = format!("({})", phrases.len()); + 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(), + ) } } impl Handle for PhrasePool {