extern crate alloc; use tui_orchestrator::focus::{FocusId, FocusManager, Focusable}; #[derive(Debug, Clone, PartialEq, Eq, Hash)] enum FormElement { Username, Password, RememberMe, Submit, } impl FocusId for FormElement {} struct FormPage { username: alloc::string::String, password: alloc::string::String, remember: bool, } impl Focusable for FormPage { fn focus_targets(&self) -> alloc::vec::Vec { alloc::vec![ FormElement::Username, FormElement::Password, FormElement::RememberMe, FormElement::Submit, ] } } fn main() { let form = FormPage { username: alloc::string::String::new(), password: alloc::string::String::new(), remember: false, }; let mut focus_manager = FocusManager::new(); focus_manager.set_targets(form.focus_targets()); println!("Current focus: {:?}", focus_manager.current()); focus_manager.next(); println!("After next: {:?}", focus_manager.current()); focus_manager.last(); println!("After last: {:?}", focus_manager.current()); println!("Is first: {}", focus_manager.is_first()); println!("Is last: {}", focus_manager.is_last()); }