From 556c6a869fdd6eb4133af06fab4fd3576f75488d Mon Sep 17 00:00:00 2001 From: Niko Abeler Date: Sat, 31 Dec 2022 12:14:48 +0100 Subject: [PATCH] controls --- src/app.rs | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/src/app.rs b/src/app.rs index d7eca64..d4933a1 100644 --- a/src/app.rs +++ b/src/app.rs @@ -1,7 +1,7 @@ use std::rc::Rc; use crossterm::event::{read, Event, KeyCode}; -use tui::{Terminal, backend::Backend, Frame}; +use tui::{Terminal, backend::Backend, Frame, layout::Layout}; use crate::{state::{self, GameState}, person::Person}; @@ -115,13 +115,43 @@ impl<'a> App<'a> { pub fn draw_initial(&mut self, f: &mut Frame) {} pub fn draw_guest_selection(&mut self, f: &mut Frame) { + let chunks = Layout::default() + .direction(tui::layout::Direction::Vertical) + .constraints( + [ + tui::layout::Constraint::Min(3), + tui::layout::Constraint::Length(2) + ] + .as_ref(), + ) + .split(f.size()); + let main_window = tui::widgets::List::new(self.guest_list.clone()) .block(tui::widgets::Block::default().title("Guests").borders(tui::widgets::Borders::ALL)) .style(tui::style::Style::default().fg(tui::style::Color::White)) .highlight_style(tui::style::Style::default().add_modifier(tui::style::Modifier::ITALIC)) .highlight_symbol(">>"); - f.render_stateful_widget(main_window, f.size(), &mut self.guest_state); + let key_style = tui::style::Style::default() + .add_modifier(tui::style::Modifier::BOLD) + .fg(tui::style::Color::Green) + .bg(tui::style::Color::Black); + let control_text = tui::text::Spans::from(vec![ + tui::text::Span::styled("↑↓", key_style), + tui::text::Span::raw(" select guest"), + tui::text::Span::raw(" "), + tui::text::Span::styled("⏎", key_style), + tui::text::Span::raw(" talk to guest"), + tui::text::Span::raw(" "), + tui::text::Span::styled("Esc", key_style), + tui::text::Span::raw(" quit"), + + ]); + let controls = tui::widgets::Paragraph::new(control_text) + .style(tui::style::Style::default().fg(tui::style::Color::White)); + + f.render_stateful_widget(main_window, chunks[0], &mut self.guest_state); + f.render_widget(controls, chunks[1]); } fn draw_talk_to_guest(&self, f: &mut Frame, guest: Rc) {