diff --git a/src/app/keybindings/keybindings.rs b/src/app/keybindings/keybindings.rs index e9e3f70..dbbcfe1 100644 --- a/src/app/keybindings/keybindings.rs +++ b/src/app/keybindings/keybindings.rs @@ -14,14 +14,14 @@ pub enum Action { #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] pub enum Group { - Quit, Movement, Select, + Quit, } impl Group { pub fn iter() -> impl Iterator { - [Group::Quit, Group::Movement, Group::Select] + [Group::Movement, Group::Select, Group::Quit] .iter() .copied() } diff --git a/src/app/widget.rs b/src/app/widget.rs index 7a2c1ea..dfb5e7a 100644 --- a/src/app/widget.rs +++ b/src/app/widget.rs @@ -1,6 +1,6 @@ use crate::app::{ App, View, - widgets::{keybindings_widget, main_menu_widget}, + widgets::{KeybindingsWidget, main_menu_widget}, }; use ratatui::{ buffer::Buffer, @@ -32,7 +32,7 @@ impl Widget for &App { ) .render(main_area, buf); - keybindings_widget(self.view).render(keybindings_area, buf); + KeybindingsWidget::new(self.view).render(keybindings_area, buf); } } } diff --git a/src/app/widgets/keybindings.rs b/src/app/widgets/keybindings.rs index 51de7d9..7bdca8d 100644 --- a/src/app/widgets/keybindings.rs +++ b/src/app/widgets/keybindings.rs @@ -14,6 +14,43 @@ pub struct KeybindingsWidget { grouped: Vec>, } +impl KeybindingsWidget { + pub fn new(view: View) -> Self { + let (used_groups, keybindings) = binding_for_view(view); + + let mut grouped_keybindings: Vec> = Vec::new(); + for (i, group) in Group::iter().enumerate() { + if !used_groups.contains(&group) { + continue; + } + + let grouped_lines: Vec> = keybindings + .iter() + .filter(|b| b.group == group) + .map(|b| { + Line::from_iter([b.symbol.red().bold(), " - ".into(), b.description.into()]) + }) + .collect(); + + let mut block: Block<'_> = Block::default().padding(Padding::new(1, 1, 0, 0)); + + if i != 0 { + block = block.borders(Borders::LEFT); + } + + grouped_keybindings.push( + Paragraph::new(grouped_lines) + .alignment(Alignment::Center) + .block(block), + ); + } + + Self { + grouped: grouped_keybindings, + } + } +} + impl Widget for KeybindingsWidget { fn render(self, area: Rect, buf: &mut Buffer) { let count: u16 = self.grouped.len() as u16; @@ -41,36 +78,3 @@ impl Widget for KeybindingsWidget { } } } - -pub fn keybindings_widget(view: View) -> KeybindingsWidget { - let (used_groups, keybindings) = binding_for_view(view); - - let mut grouped_keybindings: Vec> = Vec::new(); - for (i, group) in Group::iter().enumerate() { - if !used_groups.contains(&group) { - continue; - } - - let grouped_lines: Vec> = keybindings - .iter() - .filter(|b| b.group == group) - .map(|b| Line::from_iter([b.symbol.red().bold(), " - ".into(), b.description.into()])) - .collect(); - - let mut block: Block<'_> = Block::default().padding(Padding::new(1, 1, 0, 0)); - - if i != 0 { - block = block.borders(Borders::LEFT); - } - - grouped_keybindings.push( - Paragraph::new(grouped_lines) - .alignment(Alignment::Center) - .block(block), - ); - } - - KeybindingsWidget { - grouped: grouped_keybindings, - } -} diff --git a/src/app/widgets/main_menu.rs b/src/app/widgets/main_menu.rs index ac239a4..fd0edf4 100644 --- a/src/app/widgets/main_menu.rs +++ b/src/app/widgets/main_menu.rs @@ -1,4 +1,4 @@ -use crate::app::{App, View, widgets::keybindings_widget}; +use crate::app::{App, View, widgets::KeybindingsWidget}; use clap::ValueEnum; use ratatui::{ buffer::Buffer, @@ -81,5 +81,5 @@ pub fn main_menu_widget(app: &App, area: Rect, buf: &mut Buffer) { .render(options_area, buf); } - keybindings_widget(View::MainMenu).render(keybindings_area, buf); + KeybindingsWidget::new(View::MainMenu).render(keybindings_area, buf); } diff --git a/src/app/widgets/mod.rs b/src/app/widgets/mod.rs index 768f7e6..ef2f046 100644 --- a/src/app/widgets/mod.rs +++ b/src/app/widgets/mod.rs @@ -1,5 +1,5 @@ pub mod keybindings; pub mod main_menu; -pub use keybindings::keybindings_widget; +pub use keybindings::KeybindingsWidget; pub use main_menu::main_menu_widget;