diff --git a/client/src/game.rs b/client/src/game.rs new file mode 100644 index 0000000..6b5bf5e --- /dev/null +++ b/client/src/game.rs @@ -0,0 +1,13 @@ +use ratatui::{ + buffer::Buffer, + layout::Rect, + widgets::{Block, Borders, Padding, Paragraph, Widget}, +}; + +pub fn render(area: Rect, buf: &mut Buffer) { + let block = Block::new() + .padding(Padding::symmetric(2, 1)) + .borders(Borders::ALL); + + Paragraph::new("").block(block).render(area, buf); +} diff --git a/client/src/main.rs b/client/src/main.rs index 03dba34..e38e7a3 100644 --- a/client/src/main.rs +++ b/client/src/main.rs @@ -1,7 +1,8 @@ use color_eyre::Result; -mod tui; +mod game; mod menu; +mod tui; mod util; fn main() -> Result<()> { diff --git a/client/src/menu.rs b/client/src/menu.rs index 0b0f563..ef67f00 100644 --- a/client/src/menu.rs +++ b/client/src/menu.rs @@ -2,12 +2,12 @@ use ratatui::{ buffer::Buffer, crossterm::event::{self, KeyCode, KeyEvent}, - layout::Rect, - text::{Line, Span}, + layout::{Constraint, Layout, Rect}, style::{Modifier, Style, Stylize, palette::tailwind::*}, + text::{Line, Span}, widgets::{ - Block, Borders, HighlightSpacing, List, - ListState, Padding, StatefulWidget, Paragraph, Widget + Block, Borders, HighlightSpacing, List, ListState, Padding, Paragraph, StatefulWidget, + Widget, }, }; @@ -113,6 +113,12 @@ impl OptionList { tui::Mode::MainMenu(self) } } + KeyCode::Enter => match self.items.get(self.state.selected().unwrap_or_default()) { + Some(&"Blitz") => tui::Mode::Blitz, + Some(&"40L") => tui::Mode::FortyL, + Some(&"txLadder") => tui::Mode::TxLadder, + _ => tui::Mode::Exit, + }, _ => tui::Mode::MainMenu(self), } } @@ -142,3 +148,12 @@ impl OptionList { StatefulWidget::render(list, area, buf, &mut self.state); } } + +pub fn render_menu(area: Rect, menu_list: &mut OptionList, buf: &mut Buffer) { + let [profile_area, list_outer_area] = + Layout::vertical([Constraint::Percentage(50), Constraint::Percentage(50)]).areas(area); + + render_profile(profile_area, buf); + + menu_list.render(list_outer_area, buf); +} diff --git a/client/src/tui.rs b/client/src/tui.rs index 982e7e6..3205e88 100644 --- a/client/src/tui.rs +++ b/client/src/tui.rs @@ -7,6 +7,7 @@ use ratatui::{ widgets::Widget, }; +use crate::game; use crate::menu; use crate::util::*; @@ -22,7 +23,9 @@ pub enum Mode { impl Default for Mode { fn default() -> Self { - Mode::MainMenu(menu::OptionList::from_iter(["40L", "Blitz", "txLadder", "Config"])) + Mode::MainMenu(menu::OptionList::from_iter([ + "40L", "Blitz", "txLadder", "Config", + ])) } } @@ -30,9 +33,7 @@ impl Mode { pub fn run(mut self, mut terminal: DefaultTerminal) -> Result<()> { loop { match self { - Mode::Exit => { - break - } + Mode::Exit => break, _ => { terminal.draw(|frame| frame.render_widget(&mut self, frame.area()))?; if let Event::Key(key) = event::read()? { @@ -46,7 +47,7 @@ impl Mode { fn handle_key(self, key: KeyEvent) -> Mode { if key.kind != KeyEventKind::Press { - return self + return self; } match self { @@ -71,18 +72,15 @@ impl Widget for &mut Mode { Constraint::Percentage(60), ); - let [profile_area, list_outer_area] = - Layout::vertical([Constraint::Percentage(50), Constraint::Percentage(50)]) - .areas(center_area); - menu::render_header(header_area, buf); match self { Mode::MainMenu(menu_list) => { - menu::render_profile(profile_area, buf); - menu_list.render(list_outer_area, buf); + menu::render_menu(center_area, menu_list, buf); + } + _ => { + game::render(center_area, buf); } - _ => {}, } menu::render_footer(footer_area, buf); } diff --git a/client/src/util.rs b/client/src/util.rs index 52357de..d9deb6c 100644 --- a/client/src/util.rs +++ b/client/src/util.rs @@ -1,4 +1,4 @@ -use ratatui::layout::{Layout, Flex, Constraint, Rect}; +use ratatui::layout::{Constraint, Flex, Layout, Rect}; pub fn center(area: Rect, horizontal: Constraint, vertical: Constraint) -> Rect { let [area] = Layout::horizontal([horizontal])