generated from GarandPLG/rust-flake-template
Add group filtering and layout for keybindings UI
Return the set of used groups from `binding_for_view` and adjust `keybindings_widget` to render only those groups. Introduce a vertical layout in the main widget to display a placeholder paragraph above the keybindings area, and update imports and border logic accordingly.
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
use crate::app::View;
|
||||
use ratatui::crossterm::event::{KeyCode, KeyEvent, KeyEventKind, KeyModifiers};
|
||||
use std::collections::HashSet;
|
||||
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
|
||||
pub enum Action {
|
||||
@@ -24,10 +25,6 @@ impl Group {
|
||||
.iter()
|
||||
.copied()
|
||||
}
|
||||
|
||||
pub fn len() -> usize {
|
||||
Self::iter().count()
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
|
||||
@@ -109,19 +106,33 @@ pub fn event_to_action(event: &KeyEvent) -> Option<Action> {
|
||||
.map(|b| b.action)
|
||||
}
|
||||
|
||||
pub fn binding_for_view(view: View) -> Vec<&'static KeyBinding> {
|
||||
fn used_groups_in_view(keybindings: &Vec<&'static KeyBinding>) -> HashSet<Group> {
|
||||
keybindings.iter().map(|b| b.group).collect()
|
||||
}
|
||||
|
||||
pub fn binding_for_view(view: View) -> (HashSet<Group>, Vec<&'static KeyBinding>) {
|
||||
let main_menu_keybindings: Vec<&'static KeyBinding> = vec![
|
||||
binding_for(Action::Up).unwrap(),
|
||||
binding_for(Action::Down).unwrap(),
|
||||
binding_for(Action::Space).unwrap(),
|
||||
binding_for(Action::Quit).unwrap(),
|
||||
binding_for(Action::Quit2).unwrap(),
|
||||
];
|
||||
|
||||
let default_keybindings: Vec<&'static KeyBinding> = vec![
|
||||
binding_for(Action::Quit).unwrap(),
|
||||
binding_for(Action::Quit2).unwrap(),
|
||||
binding_for(Action::Esc).unwrap(),
|
||||
];
|
||||
|
||||
match view {
|
||||
View::MainMenu => vec![
|
||||
binding_for(Action::Up).unwrap(),
|
||||
binding_for(Action::Down).unwrap(),
|
||||
binding_for(Action::Space).unwrap(),
|
||||
binding_for(Action::Quit).unwrap(),
|
||||
binding_for(Action::Quit2).unwrap(),
|
||||
],
|
||||
_ => vec![
|
||||
binding_for(Action::Quit).unwrap(),
|
||||
binding_for(Action::Quit2).unwrap(),
|
||||
binding_for(Action::Esc).unwrap(),
|
||||
],
|
||||
View::MainMenu => (
|
||||
used_groups_in_view(&main_menu_keybindings),
|
||||
main_menu_keybindings,
|
||||
),
|
||||
_ => (
|
||||
used_groups_in_view(&default_keybindings),
|
||||
default_keybindings,
|
||||
),
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user