focus: allow entering phrase list

This commit is contained in:
🪞👃🪞 2024-11-09 14:39:12 +01:00
parent ac8e8b2bf0
commit 89cb8d7bbe
3 changed files with 15 additions and 7 deletions

View file

@ -283,7 +283,7 @@ impl<E: Engine> FocusGrid for Arranger<E> {
//transport.write().unwrap().entered = focused == Transport //transport.write().unwrap().entered = focused == Transport
} }
self.arrangement.entered = focused == Arrangement; self.arrangement.entered = focused == Arrangement;
//self.phrases.write().unwrap().entered = focused == PhrasePool; self.phrases.write().unwrap().entered = focused == PhrasePool;
self.editor.entered = focused == PhraseEditor; self.editor.entered = focused == PhraseEditor;
} }
} }
@ -292,6 +292,7 @@ impl<E: Engine> FocusGrid for Arranger<E> {
self.entered = false; self.entered = false;
self.arrangement.entered = false; self.arrangement.entered = false;
self.editor.entered = false; self.editor.entered = false;
self.phrases.write().unwrap().entered = false;
} }
} }
fn entered (&self) -> Option<ArrangerFocus> { fn entered (&self) -> Option<ArrangerFocus> {

View file

@ -49,10 +49,12 @@ pub struct PhrasePool<E: Engine> {
pub phrase: usize, pub phrase: usize,
/// Phrases in the pool /// Phrases in the pool
pub phrases: Vec<Arc<RwLock<Phrase>>>, pub phrases: Vec<Arc<RwLock<Phrase>>>,
/// Whether this widget is focused
pub focused: bool,
/// Mode switch /// Mode switch
pub mode: Option<PhrasePoolMode>, pub mode: Option<PhrasePoolMode>,
/// Whether this widget is focused
pub focused: bool,
/// Whether this widget is entered
pub entered: bool,
} }
/// Modes for phrase pool /// Modes for phrase pool
pub enum PhrasePoolMode { pub enum PhrasePoolMode {
@ -195,8 +197,9 @@ impl<E: Engine> PhrasePool<E> {
scroll: 0, scroll: 0,
phrase: 0, phrase: 0,
phrases: vec![Arc::new(RwLock::new(Phrase::default()))], phrases: vec![Arc::new(RwLock::new(Phrase::default()))],
focused: false,
mode: None, mode: None,
focused: false,
entered: false,
} }
} }
pub fn len (&self) -> usize { self.phrases.len() } pub fn len (&self) -> usize { self.phrases.len() }

View file

@ -89,9 +89,13 @@ impl Content for PhrasePool<Tui> {
let border = Lozenge(Style::default().bg(Color::Rgb(40, 50, 30)).fg(border_color)); 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 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_color = if *focused {Color::Rgb(150, 160, 90)} else {Color::Rgb(120, 130, 100)};
let title = format!("[{}] Phrases ({})", phrases.len(), " "); let upper_left = format!("[{}] Phrases", if self.entered {""} else {" "});
let title = TuiStyle::fg(title, title_color).push_x(1); let upper_right = format!("({})", phrases.len());
Layers::new(move|add|{ add(&content)?; Ok(add(&title)?) }) 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<Tui> for PhrasePool<Tui> { impl Handle<Tui> for PhrasePool<Tui> {