diff options
| author | sam-anthony <samanthony6@protonmail.com> | 2022-02-09 17:54:34 -0330 |
|---|---|---|
| committer | sam-anthony <samanthony6@protonmail.com> | 2022-02-09 17:54:34 -0330 |
| commit | d0c7b0a39ed6703940da4896d2caa79ad36590e0 (patch) | |
| tree | 60b4c711ffd3f62f29972b00958f22f1ba7b3c94 /src/main.rs | |
| parent | ffffee2ac77c88ea0219b1b0e39e3988ed918319 (diff) | |
| download | volute-d0c7b0a39ed6703940da4896d2caa79ad36590e0.zip | |
small tweaks
Diffstat (limited to 'src/main.rs')
| -rw-r--r-- | src/main.rs | 117 |
1 files changed, 42 insertions, 75 deletions
diff --git a/src/main.rs b/src/main.rs index f4163a8..207dde7 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,18 +3,17 @@ use crossterm::{ execute, terminal::{disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen}, }; -use std::{error::Error, io, ptr}; +use std::{error::Error, io}; use tui::{ backend::{Backend, CrosstermBackend}, layout::{Constraint, Direction, Layout}, - style::{Color, Modifier, Style}, - text::Spans, - widgets::{self, Block, Borders, Cell, Paragraph, Table, Tabs, Widget}, + widgets::Paragraph, Frame, Terminal, }; use volute::{ - app::{App, CONFIG_TAB_INDEX, INPUT_TAB_INDEX}, + app::{App, Tab}, input::InputMode, + ui, }; fn main() -> Result<(), Box<dyn Error>> { @@ -51,8 +50,16 @@ fn run_app<B: Backend>(terminal: &mut Terminal<B>, mut app: App) -> io::Result<( terminal.draw(|f| ui(f, &app))?; if let Event::Key(key) = event::read()? { - match app.tab_index { - INPUT_TAB_INDEX => match app.input_mode { + match app.tab { + Tab::Const => match key.code { + KeyCode::Char('q') => { + return Ok(()); + } + KeyCode::Char('L') => app.next_tab(), + KeyCode::Char('H') => app.previous_tab(), + _ => {} + }, + Tab::Input => match app.input_mode { InputMode::Normal => match key.code { KeyCode::Char('q') => { return Ok(()); @@ -74,12 +81,16 @@ fn run_app<B: Backend>(terminal: &mut Terminal<B>, mut app: App) -> io::Result<( KeyCode::Esc | KeyCode::Enter => { app.input_mode = InputMode::Normal; } - KeyCode::Char(c) => app.selected_input_param_mut().push(c), + KeyCode::Char(c) => { + if ('0'..'a').contains(&c) { + app.selected_input_param_mut().push(c); + } + } KeyCode::Backspace => app.selected_input_param_mut().pop(), _ => {} }, }, - CONFIG_TAB_INDEX => match key.code { + Tab::Config => match key.code { KeyCode::Char('q') => { return Ok(()); } @@ -87,87 +98,43 @@ fn run_app<B: Backend>(terminal: &mut Terminal<B>, mut app: App) -> io::Result<( KeyCode::Char('H') => app.previous_tab(), _ => {} }, - _ => unreachable!(), } } } } fn ui<B: Backend>(f: &mut Frame<B>, app: &App) { - let titles = app.tab_titles().iter().map(|t| Spans::from(*t)).collect(); - let tabs = Tabs::new(titles) - .block(Block::default().borders(Borders::ALL).title("Tabs")) - .select(app.tab_index) - .highlight_style( - Style::default() - .fg(Color::Yellow) - .add_modifier(Modifier::BOLD), - ); - - match app.tab_index { - INPUT_TAB_INDEX => { + match app.tab { + Tab::Const => { let layout = Layout::default() .direction(Direction::Vertical) - .constraints( - [ - Constraint::Length(3), // Tabs - Constraint::Length(app.rows().len() as u16 + 3), // Input table - Constraint::Max(100), // Spacer - Constraint::Length(1), // Footer - ] - .as_ref(), - ) + .constraints(ui::constraints(app).as_ref()) .split(f.size()); - f.render_widget(tabs, layout[0]); - f.render_widget(input_table(app), layout[1]); - f.render_widget(footer(app), layout[3]); + f.render_widget(ui::tabs(app), layout[0]); + f.render_widget(Paragraph::new("Const Tab"), layout[1]); } - CONFIG_TAB_INDEX => { + Tab::Input => { let layout = Layout::default() .direction(Direction::Vertical) - .constraints([Constraint::Length(3), Constraint::Min(3)].as_ref()) + .constraints(ui::constraints(app).as_ref()) .split(f.size()); - f.render_widget(tabs, layout[0]); - f.render_widget(Paragraph::new("Config tab"), layout[1]); - } - _ => unreachable!(), - } -} - -fn input_table(app: &App) -> impl Widget { - let rows = app.rows().iter().map(|row| { - let cells = row.iter().map(|item| { - if ptr::eq(item, app.selected_input_param()) { - Cell::from(item.string()).style(match app.input_mode { - InputMode::Normal => Style::default().fg(Color::Yellow), - InputMode::Insert => Style::default() - .fg(Color::Blue) - .add_modifier(Modifier::ITALIC), - }) - } else { - Cell::from(item.string()) - } - }); - widgets::Row::new(cells) - }); - - Table::new(rows) - .header(widgets::Row::new(vec!["rpm", "ve", "map"])) - .block(Block::default().borders(Borders::ALL).title("inputs")) - .widths(&[ - Constraint::Length(5), // rpm - Constraint::Length(3), // ve - Constraint::Length(3), // map - ]) -} + f.render_widget(ui::tabs(app), layout[0]); + f.render_widget(ui::footer(app), layout[3]); -fn footer(app: &App) -> impl Widget { - match app.input_mode { - InputMode::Normal => { - Paragraph::new("Normal").style(Style::default().fg(Color::Black).bg(Color::Yellow)) + let table_layout = Layout::default() + .direction(Direction::Horizontal) + .constraints([Constraint::Percentage(50), Constraint::Percentage(50)].as_ref()) + .split(layout[1]); + f.render_widget(ui::input_table(app), table_layout[0]); + f.render_widget(ui::output_table(app), table_layout[1]); } - InputMode::Insert => { - Paragraph::new("Insert").style(Style::default().fg(Color::Black).bg(Color::Blue)) + Tab::Config => { + let layout = Layout::default() + .direction(Direction::Vertical) + .constraints(ui::constraints(app).as_ref()) + .split(f.size()); + f.render_widget(ui::tabs(app), layout[0]); + f.render_widget(Paragraph::new("Config tab"), layout[1]); } } } |