Files
pages-tui/examples/focus_advanced.rs
2026-01-11 23:20:52 +01:00

52 lines
1.2 KiB
Rust

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<FormElement> for FormPage {
fn focus_targets(&self) -> alloc::vec::Vec<FormElement> {
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());
}